diff --git a/externals/figlet/.gitignore b/externals/figlet/.gitignore
new file mode 100644
--- /dev/null
+++ b/externals/figlet/.gitignore
@@ -0,0 +1,8 @@
+chkfont
+figlet
+tags
+*.o
+core
+*~
+tests.log
+*.tar.gz
diff --git a/externals/figlet/CHANGES b/externals/figlet/CHANGES
new file mode 100644
--- /dev/null
+++ b/externals/figlet/CHANGES
@@ -0,0 +1,205 @@
+Changes in FIGlet 2.2.5
+-----------------------
+
+FIGlet 2.2.5 is a revision of FIGlet 2.2.4 containing updated andproperly
+licensed ISO8859 map files.  The full list of changes is:
+
+o	Add regression tests for uskata and jis0201 control files
+
+o	Properly escape minus signs in figlist(6) man page (Jonathan
+	McCrohan)
+
+o	Fix chkfont coredump on invalid input (Kenneth Davies and
+	Jonathan McCrohan)
+
+o	Update ISO8859 map files to fix licensing issue raised in Debian
+	bugs 673096 and 674844
+
+o	Re-add missing figmagic and getopt.c files which were left out
+	of releases 2.2.3 and 2.2.4
+
+o	Fix output of test script in MacOS X
+
+These changes were made by Claudio Matsuoka <cmatsuoka@gmail.com>
+31 May 2012
+
+Changes in FIGlet 2.2.4
+-----------------------
+
+FIGlet 2.2.4 is a revision of FIGlet 2.2.3 featuring bugfixes and support
+to tlf2 fonts.  The full list of changes is:
+
+o	Add support to Sam Hocevar's TOIlet TLF fonts containing UTF-8
+	encoded Unicode characters.
+
+o	Add infocode 5 to list supported font formats
+
+o	Fix rendering error caused by the previous attempt to fix invalid
+	memory accesses when smushing at start of line
+
+o	New environment variable FIGLET_FONTDIR can be used to specify
+	the path to search for fonts
+
+o	Add regression tests
+
+These changes were made by Claudio Matsuoka <cmatsuoka@gmail.com>
+26 January 2011
+
+Changes in FIGlet 2.2.3
+-----------------------
+
+FIGlet 2.2.3 is a revision of FIGlet 2.2.2 featuring minor bugfixes and
+important licensing changes in the zipio files.  The full list of
+changes is:
+
+o	License changed from "Academic Free License" to "New BSD License"
+	(3-clause) as agreed by FIGlet authors
+
+o	New JIS X 0201 control file (Micah Cowan)
+
+o	Fix behavior of JIS0201 SHIFT-OUT and SHIFT-IN that were previouly
+	inverted (Micah Cowan)
+
+o	Fix memory violation when smushing at line start
+
+o	Fix handling of memory allocation errors
+
+o	Relicense Ed Hamrick zipio under the MIT license. This should
+	eliminate any concerns about redistribution of FIGlet as libre
+	software.
+
+o	Update Makefile to meet modern standards in variable naming, using
+	BINDIR as the pathname for binary files and reservind DESTDIR
+	as the extra prefix commonly used in package building.
+
+o	Add a Turbo C makefile, just because I had the compiler. (this
+	also tests portability to old compilers and foreign platforms)
+
+o	Add Jonathon Abbott's man pages for figlist, showfigfonts and
+	chkfont originally contributed to the Debian Project
+
+These changes were made by Claudio Matsuoka <cmatsuoka@gmail.com>
+12 January 2011
+
+Changes in FIGlet 2.2.2
+-----------------------
+
+License changed from "Artistic License" to "Academic Free 
+License" as agreed by FIGlet authors. 05 July 2005 
+
+Changes in FIGlet 2.2.1
+-----------------------
+
+FIGlet 2.2.1 is a minor revision of FIGlet 2.2.  The files
+README, Makefile, figfont.txt, figlet.c and figlet.6 have been 
+changed to reflect changes in documentation, official contact 
+details etc. FTP-NOTE merged into README. FAQ and CHANGES 
+added to the distribution.
+
+All other files are identical with the 2.2 release.
+
+These changes were made by Christiaan Keet <keet@plig.net>
+
+Changes in FIGlet 2.2
+---------------------
+
+FIGlet 2.2 is a moderate revision of FIGlet 2.1.2.  The new features are:
+
+o	font files and control files can be compressed using ``zip'', and
+	will be automatically decompressed
+
+o	new commands in controlfiles provide support for
+	single-byte (default), double-byte, HZ, Shift-JIS, and Unicode
+	UTF-8 encodings of the input
+
+o	ISO 2022 escape sequences are decoded and interpreted
+
+o	control files can now have the format of Unicode Consortium
+	mapping tables (two columns of numbers representing
+	input character and output character, no ranges, # comments)
+
+o	new options -s (smush, same as -m-2), -k (kern, same as -m0),
+	-S (forced smushing), and -W (full width, same as -m-1) make
+	-m option unnecessary except for font designers.  The -S option
+	works even if the font's smushmode is 0 or -1, in which case
+	the smushmode is read from a new parameter in the
+	font's first line, or does universal overlapping if no such parameter
+	exists
+
+o	universal smushing (-o option to force it, but -S will use it
+	if no smush rules are available) makes FIGcharacters overlap by
+	one place independent of how they are constructed
+	more fonts smushable.
+
+o	file "figmagic" can be appended to your system magic number
+	file to make the "file" command recognize FIGlet files
+
+o	file "figfont.txt" is an implementation-independent specification
+	for FIGlet fonts and control files
+
+o	integrated support for extended characters (extended Latin in
+	"standard", Greek in "big", katakana in "banner", Hebrew in new
+	"ivrit" fonts) with appropriate controlfiles
+
+o	smushing rule 16 has changed slightly: "/\" now smushes
+	into "|" and "\/" smushes into "Y"; "><" still smushes
+	into "X" and "<>" is still not smushed at all.
+
+o	-A option introduced in FIGlet 2.1.2 is now optional;
+	if any words appear on the command line after the options,
+	they are formatted, and the standard input is not read.
+
+These changes were made by John Cowan <cowan@ccil.org>.
+
+Changes in FIGlet 2.1.2
+------------------------
+
+FIGlet 2.1.2 is a minor revision of FIGlet 2.1.1.  The files
+README, FTP-NOTE, figlet.c and figlet.6 have been changed.  All other
+files are identical with the 2.1.1 release.
+
+o	The only new option is -A, which causes FIGlet to read input
+	from the command line.
+
+These changes were made by Gilbert Healton <ghealton@nmia.com> as Glenn
+Chappell is now busy as a new professor of Mathematics.
+
+Changes in FIGlet 2.1
+----------------------
+
+A number of minor bugs and major incompatibility problems have been
+fixed.  FIGlet 2.1 should compile correctly on many operating systems for
+which FIGlet 2.0 did not.
+
+o	The "-F" command line option, which used to list all the available
+	fonts, has been removed, since it made FIGlet incompatible with some
+	operating systems.  It has been replaced by the "figlist" script.  The
+	"showfigfonts" script has been updated so that it no longer requires
+	the "-F" option to be available.
+
+o	The FIGlet font file format has been extended to allow an arbitrarily
+	large number of characters.  The ISO Latin-1 character set, which
+	includes many accented letters and special symbols, has been added to
+	most standard fonts.
+
+o	FIGlet can now print right-to-left.  This can be specified on the
+	command line ("-R") or in the font file.  Thus, for example, Hebrew and
+	Arabic fonts can be handled more easily.
+
+o	FIGlet can now right justify its output.  This is the default when
+	right-to-left printing is selected.  It can also be specified on the
+	command line ("-r").
+
+o	FIGlet now supports "control files".  These can be used to change which
+	character FIGlet will print when it sees a certain input character --
+	sort of an expanded version of the "-D" option.  For example, a control
+	file could convert lower-case letters to upper-case or map certain
+	ASCII characters to accented letters.  Control file names end with the
+	suffix ".flc".  Select a control file by using "-C controlfile" on the
+	command line.  Several controlfiles can be used at once by giving
+	muliple "-C" options.
+
+o	There is now a way for programs that use FIGlet to get various
+	information from FIGlet, for example, what version of FIGlet is being
+	used or the name of the default font directory.  This information is
+	gotten through the "-I" option.  See the man page for details.
diff --git a/externals/figlet/FAQ b/externals/figlet/FAQ
new file mode 100644
--- /dev/null
+++ b/externals/figlet/FAQ
@@ -0,0 +1,63 @@
+ _____ _____ _____ __      __       _____ _____ _____  
+|   __|     |   __|  |____|  |_    |   __|  _  |     | This FIGlet FAQ is 
+|   __|-   -|  |  |  | - _|   _|   |   __|     |  |  | posted once a month
+|__|  |_____|_____|__|____|__|     |__|  |__|__|__  _| on figlet@figlet.org
+  info@figlet.org        http://www.figlet.org/   |__|   [FIGlet FAQ v0.91]
+
+===========================================================================
+The latest version of FIGlet is 2.2.5 and can be downloaded from
+ftp://ftp.figlet.org/pub/figlet/program
+===========================================================================
+
+1  What is FIGlet? 
+2  Where can I get FIGlet from?
+3  Where can I get more fonts for FIGlet?
+4  Where can I hear about regular FIGlet program and font updates?
+5  How can I contribute?
+6  Why am I getting this mail and can you make it stop?
+7  Where does the name FIGlet come from?
+
+===========================================================================
+
+1.  What is FIGlet? 
+   FIGlet is a program for making large letters out of ordinary text
+                     _ _ _          _   _     _
+                    | (_) | _____  | |_| |__ (_)___
+                    | | | |/ / _ \ | __| '_ \| / __|
+                    | | |   <  __/ | |_| | | | \__ \
+                    |_|_|_|\_\___|  \__|_| |_|_|___/
+
+2.  Where can I get FIGlet from?
+    From the official FIGlet website at http://www.figlet.org/
+    or from the FIGlet FTP site at ftp://ftp.figlet.org/pub/figlet/
+                    
+3.  Where can I get more fonts for FIGlet?
+    From the FTP site at ftp://ftp.figlet.org/pub/figlet/fonts/
+    There are currently over 400 fonts available for download
+                    
+4   Where can I hear about regular FIGlet program and font updates?
+    There is a mailing list for FIGlet for general discussions about 
+    FIGlet and a place where you can ask questions or share ideas 
+    with other FIGlet users. It is also the place where we will publish 
+    news about new fonts, new software updates etc.
+ 
+    To subscribe or unsubscribe from the FIGlet mailing list,
+    please send email to figlet-subscribe@figlet.org or visit the 
+    following web page: http://www.figlet.org/mailman/listinfo/figlet
+
+5.  How can I contribute?
+    To contribute new fonts, software or information, please contact 
+    us at info@figlet.org
+
+6.  Why am I getting this mail and can you make it stop?
+    If you received this email it is probably because you are subscribed 
+    to the FIGlet mailing list. Please see Question 4 of this FAQ on how 
+    to unsubscribe from the FIGlet list.
+
+7. Where does the name FIGlet come from?
+   "Frank, Ian and Glen's letters"
+
+
+= FAQ Maintainer ==========================================================
+Christiaan Keet                keet@plig.net                      July 2005 
+===========================================================================
diff --git a/externals/figlet/LICENSE b/externals/figlet/LICENSE
new file mode 100644
--- /dev/null
+++ b/externals/figlet/LICENSE
@@ -0,0 +1,30 @@
+Copyright (C) 1991, 1993, 1994 Glenn Chappell and Ian Chai
+Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 John Cowan
+Copyright (C) 2002 Christiaan Keet
+Copyright (C) 2011 Claudio Matsuoka
+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. Neither the name of the copyright holders nor the names of their
+   contributors may 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 OR 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.
diff --git a/externals/figlet/Makefile b/externals/figlet/Makefile
new file mode 100644
--- /dev/null
+++ b/externals/figlet/Makefile
@@ -0,0 +1,122 @@
+# Makefile for figlet version 2.2.4 (26 Jan 2011)
+# adapted from Makefile for figlet version 2.2.2 (05 July 2005)
+# adapted from Makefile for figlet version 2.2 (15 Oct 1996)
+# Copyright 1993, 1994,1995 Glenn Chappell and Ian Chai
+# Copyright 1996, 1997, 1998, 1999, 2000, 2001 John Cowan
+# Copyright 2002 Christiaan Keet
+# Copyright 2011 Claudio Matsuoka
+
+# Please notice that to follow modern standards and ease third-party
+# package creation, binaries are now installed under BINDIR, and DESTDIR
+# is reserved for the installation pathname prefix.
+#
+# Please make sure BINDIR, MANDIR, DEFAULTFONTDIR and
+#   DEFAULTFONTFILE are defined to reflect the situation
+#   on your computer.  See README for details.
+
+# Don't change this even if your shell is different. The only reason
+# for changing this is if sh is not in the same place.
+SHELL = /bin/sh
+
+# The C compiler and linker to use
+CC	= gcc
+CFLAGS	= -g -O2 -Wall -Wno-unused-value
+LD	= gcc
+LDFLAGS =
+
+# Feature flags:
+#   define TLF_FONTS to use TOIlet TLF fonts
+XCFLAGS	= -DTLF_FONTS
+
+# Where to install files
+prefix	= /usr/local
+
+# Where the executables should be put
+BINDIR	= $(prefix)/bin
+
+# Where the man page should be put
+MANDIR	= $(prefix)/man
+
+# Where figlet will search first for fonts (the ".flf" files).
+DEFAULTFONTDIR = $(prefix)/share/figlet
+# Use this definition if you can't put things in $(prefix)/share/figlet
+#DEFAULTFONTDIR = fonts
+
+# The filename of the font to be used if no other is specified,
+#   without suffix.(standard is recommended, but any other can be
+#   used). This font file should reside in the directory specified
+#   by DEFAULTFONTDIR.
+DEFAULTFONTFILE = standard
+
+##
+##  END OF CONFIGURATION SECTION
+##
+
+VERSION	= 2.2.5
+DIST	= figlet-$(VERSION)
+OBJS	= figlet.o zipio.o crc.o inflate.o utf8.o
+BINS	= figlet chkfont figlist showfigfonts
+MANUAL	= figlet.6 chkfont.6 figlist.6 showfigfonts.6
+DFILES	= Makefile Makefile.tc $(MANUAL) $(OBJS:.o=.c) chkfont.c getopt.c \
+	  figlist showfigfonts CHANGES FAQ README LICENSE figfont.txt \
+	  crc.h inflate.h zipio.h utf8.h run-tests.sh figmagic
+
+.c.o:
+	$(CC) -c $(CFLAGS) $(XCFLAGS) -DDEFAULTFONTDIR=\"$(DEFAULTFONTDIR)\" \
+		-DDEFAULTFONTFILE=\"$(DEFAULTFONTFILE)\" -o $*.o $<
+
+all: $(BINS)
+
+figlet: $(OBJS)
+	$(LD) $(LDFLAGS) -o $@ $(OBJS)
+
+chkfont: chkfont.o
+	$(LD) $(LDFLAGS) -o $@ chkfont.o
+
+clean:
+	rm -f *.o *~ core figlet chkfont
+
+install: all
+	mkdir -p $(DESTDIR)$(BINDIR)
+	mkdir -p $(DESTDIR)$(MANDIR)/man6
+	mkdir -p $(DESTDIR)$(DEFAULTFONTDIR)
+	cp $(BINS) $(DESTDIR)$(BINDIR)
+	cp $(MANUAL) $(DESTDIR)$(MANDIR)/man6
+	cp fonts/*.flf $(DESTDIR)$(DEFAULTFONTDIR)
+	cp fonts/*.flc $(DESTDIR)$(DEFAULTFONTDIR)
+
+dist:
+	rm -Rf $(DIST) $(DIST).tar.gz
+	mkdir $(DIST)/
+	cp $(DFILES) $(DIST)/
+	mkdir $(DIST)/fonts
+	cp fonts/*.fl[fc] $(DIST)/fonts
+	mkdir $(DIST)/tests
+	cp tests/*txt tests/emboss.tlf $(DIST)/tests
+	tar cvf - $(DIST) | gzip -9c > $(DIST).tar.gz
+	rm -Rf $(DIST)
+	tar xf $(DIST).tar.gz
+	(cd $(DIST); make all check vercheck)
+	@rm -Rf $(DIST)
+	@echo
+	@ls -l $(DIST).tar.gz
+
+check:
+	@echo "Run tests in `pwd`"
+	@./run-tests.sh fonts
+	@echo
+
+vercheck:
+	@printf "Infocode: "; ./figlet -I1
+	@./figlet -v|sed -n '/Version/s/.*\(Version\)/\1/p'
+	@printf "README: "; head -1 < README|sed 's/.*) //'
+	@printf "FAQ: "; grep latest FAQ|sed 's/ and can.*//'
+	@grep -h "^\.TH" *.6
+
+$(OBJS) chkfont.o getopt.o: Makefile
+chkfont.o: chkfont.c
+crc.o: crc.c crc.h
+figlet.o: figlet.c zipio.h
+getopt.o: getopt.c
+inflate.o: inflate.c inflate.h
+zipio.o: zipio.c zipio.h inflate.h crc.h
diff --git a/externals/figlet/Makefile.tc b/externals/figlet/Makefile.tc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/Makefile.tc
@@ -0,0 +1,42 @@
+# Turbo C makefile for figlet
+# adapted from Makefile for figlet version 2.3.0 (11 Jan 2011) 
+# adapted from Makefile for figlet version 2.2.2 (05 July 2005) 
+# adapted from Makefile for figlet version 2.2 (15 Oct 1996)
+# Copyright 1993, 1994,1995 Glenn Chappell and Ian Chai
+# Copyright 1996, 1997, 1998, 1999, 2000, 2001 John Cowan
+# Copyright 2002 Christiaan Keet
+# Copyright 2011 Claudio Matsuoka
+
+# The C compiler and linker to use
+CC	= tcc
+CFLAGS	= -mc -I\tc\include
+LD	= tcc
+LDFLAGS = -mc -L\tc\lib
+
+# Use this definition if you can't put things in /usr/local/share/figlet
+DEFAULTFONTDIR = fonts
+
+# The filename of the font to be used if no other is specified
+#   (standard.flf is recommended, but any other can be used).
+#   This font file should reside in the directory specified by
+#   DEFAULTFONTDIR.
+DEFAULTFONTFILE = standard.flf
+
+##
+##  END OF CONFIGURATION SECTION
+##
+
+OBJS	= figlet.obj zipio.obj crc.obj inflate.obj getopt.obj
+BINS	= figlet.exe chkfont.exe
+
+.c.obj:
+	$(CC) -c $(CFLAGS) -DDEFAULTFONTDIR="$(DEFAULTFONTDIR)" \
+		-DDEFAULTFONTFILE="$(DEFAULTFONTFILE)" -o$*.obj $<
+
+all: $(BINS)
+
+figlet.exe: $(OBJS)
+	$(LD) $(LDFLAGS) -o$@ $(OBJS)
+
+chkfont.exe: chkfont.obj
+	$(LD) $(LDFLAGS) -o$@ chkfont.obj
diff --git a/externals/figlet/README b/externals/figlet/README
new file mode 100644
--- /dev/null
+++ b/externals/figlet/README
@@ -0,0 +1,242 @@
+About FIGlet (Frank, Ian & Glenn's Letters) release 2.2.5, 31 May 2012
+--------------------------------------------------------------------------
+FIGlet is a program that creates large characters out of ordinary
+screen characters
+ _ _ _          _   _     _       
+| (_) | _____  | |_| |__ (_)___   
+| | | |/ / _ \ | __| '_ \| / __|  
+| | |   <  __/ | |_| | | | \__ \_ 
+|_|_|_|\_\___|  \__|_| |_|_|___(_)
+                                  
+(This is meant to be viewed in a monospaced font.)  FIGlet can create
+characters in many different styles and can kern and "smush" these
+characters together in various ways.  FIGlet output is generally
+reminiscent of the sort of "signatures" many people like to put at the
+end of e-mail and UseNet messages.
+
+If you like FIGlet (hey, even if you *hate* FIGlet), please send an
+e-mail message to <info@figlet.org>
+
+The official FIGlet web page: http://www.figlet.org/
+
+Files -- Unix version
+---------------------
+
+README       -- This file.
+figlet.c     -- The FIGlet source code.
+zipio.h,     -- A package for reading ZIP archives
+zipio.c,
+inflate.c,
+crc.c
+utf8.h,      -- A package to convert strings between UTF-8 and UCS-4.
+utf8.c
+getopt.c     -- Source for the standard "getopt" routine, in case you
+                don't have it in your C library.  Not used by default.
+Makefile     -- The FIGlet makefile.  Used by the make command. 
+figlet.6     -- The FIGlet man(ual) page. 
+figlist      -- Script that lists available fonts and control files.
+showfigfonts -- Script that gives a sample of each available font.
+chkfont.c    -- Source code for chkfont: a program that checks FIGlet
+                fonts for formatting errors.  You can ignore this file
+                unless you intend to design or edit fonts.
+figfont.txt  -- Text file that explains the format of FIGlet fonts.
+                You can ignore this file unless you intend to design
+                or edit fonts.
+fonts        -- Directory containing fonts and control files.
+<xxx>.flf    -- All files ending in ".flf" are FIGlet font files.
+<xxx>.flc    -- All files ending in ".flc" are FIGlet control files.
+
+Files -- DOS version
+--------------------
+
+README       -- This file
+figlet.exe   -- The FIGlet program.
+figlet.man   -- The FIGlet man(ual) page. 
+showall.bat  -- Batch file that lists available fonts and samples of each.
+chkfont.exe  -- A program that checks FIGlet fonts for formatting errors.
+                You can ignore this file unless you intend to design
+                or edit fonts.
+figfont.txt  -- Text file that explains the format of FIGlet fonts.
+                You can ignore this file unless you intend to design
+                or edit fonts.
+fonts        -- Directory containing fonts and control files.
+<xxx>.flf    -- All files ending in ".flf" are FIGlet font files.
+<xxx>.flc    -- All files ending in ".flc" are FIGlet control files.
+
+
+Installing FIGlet --- Unix version
+----------------------------------
+
+First decide in which directories FIGlet and the FIGlet font files
+(the ".flf" files) will be stored (we recommend "/usr/games" and
+"/usr/games/lib/figlet.dir", respectively) and which will be the
+default font (we recommend "standard.flf").
+
+Edit "Makefile", and set the variables DEFAULTFONTDIR and
+DEFAULTFONTFILE to the appropriate values.  Set DEFAULTFONTDIR to be
+the full pathname of the directory in which you will keep the FIGlet
+font files.  Set DEFAULTFONTFILE to be the filename of the default
+font.
+
+At this point, you have two choices:
+
+(1) Just compile FIGlet.  To go this, go into the directory containing
+the FIGlet source, and type "make figlet".  Then copy the various files
+to the proper locations.  The executable (figlet), along with figlist
+and showfigfonts, goes wherever you keep your executables.  The fonts
+(<xxx>.flf) and control files (<xxx>.flc) go in the default font
+directory.  The man page (figlet.6) goes in section 6 (usually
+/usr/man/man6).  If you cannot, or do not want to, install the man page,
+you can probably still read it using
+
+        nroff -man figlet.6 | more
+
+(2) Do a complete installation.  To do the this, set the variables
+BINDIR and MANDIR in Makefile to the appropriate values.  BINDIR
+should be the full pathname of the directory in which the executable
+files should be put (we recommend "/usr/games");  MANDIR should be the
+full pathname of the directory in which the figlet man page should be
+put, generally "/usr/man/man6".  Once DEFAULTFONTDIR, DEFAULTFONTFILE,
+BINDIR and MANDIR have been set, in the directory containing the FIGlet
+source, type "make install".
+
+If space is a problem, the only files you absolutely must have to run
+figlet are "figlet" (the executable) and at least one font (preferably
+the one you chose to be the default font).
+
+Installing FIGlet -- DOS version
+--------------------------------
+
+Unpack the ZIPfile using PKUNZIP, Info-Zip UNZIP, WinUnzip, or any other
+ZIP-compatible program.  Be sure to use the -d option with PKUNZIP
+in order to preserve the directory structure.  We recommend that you
+unpack the archive into C:\FIGLET, but any directory will do.
+
+If you unpack the archive on top of an older version of FIGlet, be
+sure to delete the file FIGLET.COM.  The executable program in this
+release is named FIGLET.EXE.  You can keep your old fonts by putting
+them in a FONTS subdirectory before unpacking.  (There are upgraded
+versions of the standard fonts in the archive.)
+
+Using FIGlet
+------------
+
+(Note: FIGlet needs a good thorough tutorial.  Currently I don't have
+the time to write one, but if anyone wants to do so, go right ahead.
+I'd be glad to help out a little.  Write us at <ianchai@usa.net> if
+you're interested.  -GGC-)
+
+At the shell prompt, type "figlet".  Then type, say, "Hello, world!"
+and press return.  "Hello, world!" in nice, big, designer characters
+should appear on your screen.  If you chose standard.flf to be the
+default font, you should see
+ _   _      _ _                             _     _ _ 
+| | | | ___| | | ___    __      _____  _ __| | __| | |
+| |_| |/ _ \ | |/ _ \   \ \ /\ / / _ \| '__| |/ _` | |
+|  _  |  __/ | | (_) |   \ V  V / (_) | |  | | (_| |_|
+|_| |_|\___|_|_|\___( )   \_/\_/ \___/|_|  |_|\__,_(_)
+                    |/                                
+Then type something else, or type an EOF (typically control-D) to quit
+FIGlet.
+
+Now you can send the output of figlet to a file (e.g., "figlet > file")
+and e-mail it to your friends (who will probably say, "Wow!  It must
+have taken you hours to put that together!")
+
+To use other fonts, use the "-f" command line option.  For example, if
+you had said "figlet -f smslant" above, you would have seen
+   __ __    ____                         __   ____
+  / // /__ / / /__      _    _____  ____/ /__/ / /
+ / _  / -_) / / _ \_   | |/|/ / _ \/ __/ / _  /_/ 
+/_//_/\__/_/_/\___( )  |__,__/\___/_/ /_/\_,_(_)  
+                  |/                              
+
+Here are some other useful command line options:
+
+-c   center -- centers the output of FIGlet.
+-k   tells FIGlet to kern characters without smushing them together.
+-t   terminal -- FIGlet asks your terminal how wide it is, and uses
+     this to determine when to break lines.  Normally, FIGlet assumes
+     80 columns so that people with wide terminals won't annoy the
+     people they e-mail FIGlet output to.
+-p   paragraph mode -- eliminates some spurious line breaks when piping
+     a multi-line file through FIGlet.
+-v   version -- prints information about your copy of FIGlet.
+
+For in-depth explanations of these and other options, see the man page.
+DOS users, see figlet.man.
+
+
+Other Fonts & Mailing List
+--------------------------
+
+A good number of FIGlet fonts have been developed, most of which are
+not included in the standard FIGlet package.  Many of these can be
+obtained from http://www.figlet.org/   Some non-Roman fonts are 
+available at this site.  As of this writing, we have Hebrew, Cyrillic
+(Russian) and Greek.
+
+There are 3 mailing lists available for FIGlet:
+	 figlet@figlet.org           General discussion of FIGlet
+	 figletfonts@figlet.org      Announcements about fonts 
+	 figletsoftware@figlet.org   Announcements about software 
+	 (The last two lists are moderated)
+
+To subscribe or unsubscribe from the FIGlet mailing lists, please visit 
+the corresponding URL:
+	 http://www.figlet.org/mailman/listinfo/figlet 
+	 http://www.figlet.org/mailman/listinfo/figletfonts 
+	 http://www.figlet.org/mailman/listinfo/figletsoftware 
+
+Also, for those who maintain archives of figlet fonts, please note that
+all of the standard fonts have been changed, as of release 2.1, to
+include non-ASCII characters.  These fonts are the following:
+
+big.flf (also contains Greek)
+banner.flf (also contains Cyrillic and Japanese katakana)
+block.flf
+bubble.flf
+digital.flf
+ivrit.flf (right-to-left, also contains Hebrew)
+lean.flf
+mini.flf
+script.flf
+shadow.flf
+slant.flf
+small.flf
+smscript.flf
+smshadow.flf
+smslant.dld
+standard.flf
+term.flf
+
+The new versions of these fonts can be identified by the words "figlet
+release 2.1" somewhere in the first few lines.  
+
+
+Other Stuff
+-----------
+
+FIGlet is available for operating systems other than Unix.  
+Please see ftp://ftp.figlet.org/program/
+
+Although you don't have to design your own fonts to use FIGlet, we'd
+certainly like it if lots of people did make up new FIGlet fonts.  If
+you feel like giving it a try, see the "FONT FILE FORMAT" section of
+the man page.  If you do design a font, please let us know by mailing us
+at <info@figlet.org>
+
+See "Other Things to Try" in the EXAMPLES section of the man page
+for... well... other things to try.
+
+
+Authors
+-------
+
+FIGlet was written mostly by Glenn Chappell <c486scm@semovm.semo.edu>.  The
+author not being an e-mail fanatic, most correspondence (bug reports, rave
+reviews, etc.) used to be handled to his secretary (who is definitely
+an e-mail fanatic), Ian Chai <ianchai@usa.net> and has since moved on to 
+another FIGlet enthusiast, Christiaan Keet <info@figlet.org>. Current
+maintenance is conducted by Claudio Matsuoka <cmatsuoka@gmail.com>.
+
diff --git a/externals/figlet/chkfont.6 b/externals/figlet/chkfont.6
new file mode 100644
--- /dev/null
+++ b/externals/figlet/chkfont.6
@@ -0,0 +1,52 @@
+.\" chkfont
+.\" By Glenn Chappell <ggc@uiuc.edu>
+.\"
+.\" This program checks figlet 2.0/2.1 font files for format errors.
+.\" It also looks for signs of common problems and gives warnings.
+.\" chkfont does not modify font files.
+.\"
+.\" Usage: chkfont fontfile ...
+.\"
+.\" Note: This is very much a spare-time project. It's probably
+.\" full o' bugs.
+.\"
+.\" Manual page by Jonathon Abbott, for the Debian Project
+.\" slightly modified by Francesco Tapparo, for the Debian Project
+.TH CHKFONT 6 "31 May 2012" "v2.2.5"
+
+.SH NAME
+chkfont \- checks figlet 2.0 and up font files for format errors
+
+.SH SYNOPSIS
+.B chkfont
+[
+.I fontfile
+]
+
+.SH DESCRIPTION
+This program checks figlet 2.0 and up font files for format errors.
+It also looks for signs of common problems and gives warnings.
+chkfont does not modify font files.
+
+.SH EXAMPLES
+To use
+.B chkfont
+on the "big" font
+.RS
+
+.B example% chkfont /usr/share/figlet/big.flf
+
+.RE
+
+.SH BUGS
+Doesn't work on compressed font files.
+
+.SH AUTHORS
+chkfont was written by Glenn Chappell <ggc@uiuc.edu>
+
+This manual page was written by Jonathon Abbott for the Debian Project.
+
+.SH "SEE ALSO"
+.BR figlet (6),
+.BR showfigfonts (6),
+.BR figlist (6)
diff --git a/externals/figlet/chkfont.c b/externals/figlet/chkfont.c
new file mode 100644
--- /dev/null
+++ b/externals/figlet/chkfont.c
@@ -0,0 +1,476 @@
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#ifdef __STDC__
+#include <stdlib.h>
+#endif
+
+#define DATE "20 Feb 1996"
+#define VERSION "2.2"
+
+/*
+   chkfont
+   By Glenn Chappell <ggc@uiuc.edu>
+
+   This program checks figlet 2.0/2.1 font files for format errors.
+   It also looks for signs of common problems and gives warnings.
+   chkfont does not modify font files.
+
+   Usage: chkfont fontfile ...
+
+   Note: This is very much a spare-time project. It's probably
+   full o' bugs ....
+*/
+
+/* #define CHECKBLANKS */
+#define FONTFILESUFFIX ".flf"
+#define FONTFILEMAGICNUMBER "flf2"
+char posshardblanks[9] = { '!', '@', '#', '$', '%', '&', '*', 0x7f, 0 };
+
+char *myname,*fontfilename;
+FILE *fontfile;
+char hardblank;
+int charheight,upheight,maxlen=0,old_layout;
+int spectagcnt;
+char *fileline;
+int maxlinelength=0,currline;
+int ec,wc;
+
+int incon_endmarkwarn,endmark_countwarn,nonincrwarn;
+int bigcodetagwarn,deutschcodetagwarn,asciicodetagwarn;
+int codetagcnt;
+int gone;
+
+void weregone(really)
+int really;
+{
+if (!really && 2*ec+wc<=40) {
+  return;
+  }
+if (ec+wc>0) printf("*******************************************************************************\n");
+if (!really) {
+  printf("%s: Too many errors/warnings.\n",fontfilename);
+  }
+printf("%s: Errors: %d, Warnings: %d\n",fontfilename,ec,wc);
+if (currline>1 && maxlen!=maxlinelength) {
+  printf("%s: maxlen: %d, actual max line length: %d\n",
+    fontfilename,maxlen,maxlinelength);
+  if (codetagcnt>0 && spectagcnt==-1) {
+    printf("%s: Code-tagged characters: %d\n",fontfilename,codetagcnt);
+    }
+  }
+printf("-------------------------------------------------------------------------------\n");
+gone=1;
+}
+
+char *my_alloc(size)
+int size;
+{
+char *ptr;
+
+ptr=(char *)malloc(size);
+if (ptr==NULL) {
+  fprintf(stderr,"%s: Out of memory\n",myname);
+  exit(1);
+  }
+return(ptr);
+}
+
+int badsuffix(path,suffix)
+char *path;
+char *suffix;
+{
+  char ucsuffix[10];
+  char *s;
+
+  strcpy(ucsuffix,suffix);
+  for (s = ucsuffix; *s; s++) {
+    *s = toupper(*s);
+    }
+
+  if (strlen(path)<strlen(suffix)) return 1;
+  s = path + strlen(path) - strlen(suffix);
+  if (strcmp(s,suffix) == 0) return 0;
+  if (strcmp(s,ucsuffix) == 0) return 0;
+  return 1;
+}
+
+void usageerr()
+{
+fprintf(stderr,"chkfont by Glenn Chappell <ggc@uiuc.edu>\n");
+fprintf(stderr,"Version: %s, date: %s\n",VERSION,DATE);
+fprintf(stderr,"Checks figlet 2.0/2.1 font files for format errors.\n");
+fprintf(stderr,"(Does not modify font files.)\n");
+fprintf(stderr,"Usage: %s fontfile ...\n",myname);
+exit(1);
+}
+
+void readchar()
+{
+int i,expected_width,k,len,newlen,diff,l;
+char endmark,expected_endmark;
+int leadblanks,minleadblanks,trailblanks,mintrailblanks;
+char *ret;
+
+expected_width = expected_endmark = 0;	/* prevent compiler warning */
+for (i=0;i<charheight;i++) {
+  ret = fgets(fileline,maxlen+1000,fontfile);
+  if (ret == NULL) {
+    printf("%s: ERROR (fatal)- Unexpected read error after line %d.\n",
+      fontfilename,currline);
+    ec++;
+    weregone(1); if (gone) return;
+    }
+  if (feof(fontfile)) {
+    printf("%s: ERROR (fatal)- Unexpected end of file after line %d.\n",
+      fontfilename,currline);
+    ec++;
+    weregone(1); if (gone) return;
+    }
+  currline++;
+  len=strlen(fileline)-1;
+  if (len>maxlinelength) {
+    maxlinelength=len;
+    }
+  if (len>maxlen) {
+    printf("%s: ERROR- Line length > maxlen in line %d.\n",
+      fontfilename,currline);
+    ec++;
+    weregone(0); if (gone) return;
+    }
+  k=len;
+  endmark=k<0?'\0':(k==0||fileline[k]!='\n')?fileline[k]:fileline[k-1];
+  for(;k>=0?(fileline[k]=='\n' || fileline[k]==endmark):0;k--) {
+    fileline[k]='\0';
+    }
+  newlen=strlen(fileline);
+  for (l=0;l<newlen ? fileline[l]==' ' : 0;l++) ;
+  leadblanks = l;
+  for (l=newlen-1;l>=0 ? fileline[l]==' ' : 0;l--) ;
+  trailblanks = newlen-1-l;
+  if (i==0) {
+    expected_endmark = endmark;
+    expected_width = newlen;
+    minleadblanks = leadblanks;
+    mintrailblanks = trailblanks;
+    if (endmark==' ') {
+      printf("%s: Warning- Blank endmark in line %d.\n",
+        fontfilename,currline);
+      wc++;
+      weregone(0); if (gone) return;
+      }
+    }
+  else {
+    if (leadblanks<minleadblanks) minleadblanks = leadblanks;
+    if (trailblanks<mintrailblanks) mintrailblanks = trailblanks;
+    if (endmark!=expected_endmark && !incon_endmarkwarn) {
+      printf("%s: Warning- Inconsistent endmark in line %d.\n",
+        fontfilename,currline);
+      printf("%s:          (Above warning will only be printed once.)\n",
+        fontfilename);
+      incon_endmarkwarn = 1;
+      wc++;
+      weregone(0); if (gone) return;
+      }
+    if (newlen!=expected_width) {
+      printf("%s: ERROR- Inconsistent character width in line %d.\n",
+        fontfilename,currline);
+      ec++;
+      weregone(0); if (gone) return;
+      }
+    }
+  diff=len-newlen;
+  if (diff>2) {
+    printf("%s: ERROR- Too many endmarks in line %d.\n",
+      fontfilename,currline);
+    ec++;
+    weregone(0); if (gone) return;
+    }
+  else if (charheight>1 && (diff!=(i==charheight-1)+1)) {
+    if (!endmark_countwarn) {
+      printf("%s: Warning- Endchar count convention violated in line %d.\n",
+        fontfilename,currline);
+      printf("%s:          (Above warning will only be printed once.)\n",
+        fontfilename);
+      endmark_countwarn = 1;
+      wc++;
+      weregone(0); if (gone) return;
+      }
+    }
+  }
+#ifdef CHECKBLANKS
+if (minleadblanks+mintrailblanks>0 && old_layout>=0) {
+  printf("%s: Warning- Leading/trailing blanks in char. ending at line %d.\n",
+    fontfilename,currline);
+  printf("%s:          (Above warning only given when old_layout > -1.)\n",
+    fontfilename);
+  wc++;
+  weregone(0); if (gone) return;
+  }
+#endif /* #ifdef CHECKBLANKS */
+}
+
+
+void checkit()
+{
+int i,k,cmtcount,numsread,ffrighttoleft,have_layout,layout;
+char magicnum[5],cha;
+long oldord,theord;
+int tmpcnt,len;
+
+ec=0;wc=0;
+incon_endmarkwarn=0; endmark_countwarn=0; nonincrwarn=0;
+bigcodetagwarn=0; deutschcodetagwarn=0;
+asciicodetagwarn=0;
+codetagcnt=0;
+gone=0;
+if (!strcmp(fontfilename,"-")) {
+  fontfilename="(stdin)";
+  fontfile=stdin;
+  }
+else {
+  fontfile=fopen(fontfilename,"r");
+  if (fontfile == NULL) {
+    fprintf(stderr,"%s: Could not open file '%s'\n",myname,fontfilename);
+    exit(1);
+    }
+  }
+
+if (fontfile!=stdin) {
+  if (badsuffix(fontfilename,FONTFILESUFFIX)) {
+    printf("%s: ERROR- Filename does not end with '%s'.\n",
+      fontfilename,FONTFILESUFFIX);
+    ec++;
+    weregone(0); if (gone) return;
+    }
+  }
+numsread=fscanf(fontfile,"%4s",magicnum);
+if (numsread == EOF) {
+  printf("%s: ERROR- can't read magic number.\n",fontfilename);
+  ec++;
+  weregone(0); if (gone) return;
+  }
+if (strcmp(magicnum,FONTFILEMAGICNUMBER)) {
+  printf("%s: ERROR- Incorrect magic number.\n",fontfilename);
+  ec++;
+  weregone(0); if (gone) return;
+  }
+cha=getc(fontfile);
+if (cha!='a') {
+  printf("%s: Warning- Sub-version character is not 'a'.\n",fontfilename);
+  wc++;
+  weregone(0); if (gone) return;
+  }
+fileline=(char*)my_alloc(sizeof(char)*(1001));
+if (fgets(fileline,1001,fontfile)==NULL) {
+  fileline[0] = '\0';
+  }
+if (strlen(fileline)>0 ? fileline[strlen(fileline)-1]!='\n' : 0) {
+  while(k=getc(fontfile),k!='\n'&&k!=EOF) ; /* Advance to end of line */
+  }
+numsread=sscanf(fileline,"%c %d %d %d %d %d %d %d %d",
+  &hardblank,&charheight,&upheight,&maxlen,&old_layout,&cmtcount,
+  &ffrighttoleft,&layout,&spectagcnt);
+free(fileline);
+fileline = NULL;
+if (numsread<7) {
+  ffrighttoleft=0;
+  }
+if (numsread<9) {
+  spectagcnt=-1;
+  }
+have_layout = (numsread>=8);
+if (6>numsread) {
+  printf("%s: ERROR (fatal)- First line improperly formatted.\n",fontfilename);
+  ec++;
+  weregone(1); if (gone) return;
+  }
+if (!strchr(posshardblanks,hardblank)) {
+  printf("%s: Warning- Unusual hardblank.\n",fontfilename);
+  wc++;
+  weregone(0); if (gone) return;
+  }
+if (charheight<1) {
+  printf("%s: ERROR (fatal)- charheight not positive.\n",fontfilename);
+  ec++;
+  weregone(1); if (gone) return;
+  }
+if (upheight>charheight || upheight<1) {
+  printf("%s: ERROR- up_height out of bounds.\n",fontfilename);
+  ec++;
+  weregone(0); if (gone) return;
+  }
+if (maxlen<1) {
+  printf("%s: ERROR (fatal)- maxlen not positive.\n",fontfilename);
+  ec++;
+  weregone(1); if (gone) return;
+  }
+if (old_layout<-1) {
+  printf("%s: ERROR- old_layout < -1.\n",fontfilename);
+  ec++;
+  weregone(0); if (gone) return;
+  }
+if (old_layout>63) {
+  printf("%s: ERROR- old_layout > 63.\n",fontfilename);
+  ec++;
+  weregone(0); if (gone) return;
+  }
+if (have_layout && layout<0) {
+  printf("%s: ERROR- layout < 0.\n", fontfilename);
+  ec++;
+  weregone(0); if (gone) return;
+  }
+if (have_layout &&layout>32767) {
+  printf("%s: ERROR- layout > 32767.\n", fontfilename);
+  ec++;
+  weregone(0); if (gone) return;
+  }
+if (have_layout && old_layout == -1 && (layout & 192)) {
+  printf("%s: ERROR- layout %d is inconsistent with old_layout -1.\n",
+    fontfilename,layout);
+  ec++;
+  weregone(0); if (gone) return;
+  }
+if (have_layout && old_layout == 0 && (layout & 192) != 64 &&
+                                   (layout & 255) != 128) {
+  printf("%s: ERROR- layout %d is inconsistent with old_layout 0.\n",
+    fontfilename,layout);
+  ec++;
+  weregone(0); if (gone) return;
+  }
+if (have_layout && old_layout > 0 &&
+      (!(layout & 128) || old_layout != (layout & 63))) {
+  printf("%s: ERROR- layout %d is inconsistent with old_layout %d.\n",
+    fontfilename,layout,old_layout);
+  ec++;
+  weregone(0); if (gone) return;
+  }
+if (cmtcount<0) {
+  printf("%s: ERROR- cmt_count is negative.\n",fontfilename);
+  ec++;
+  weregone(0); if (gone) return;
+  }
+if (ffrighttoleft<0 || ffrighttoleft>1) {
+  printf("%s: ERROR- rtol out of bounds.\n",fontfilename);
+  ec++;
+  weregone(0); if (gone) return;
+  }
+
+for (i=1;i<=cmtcount;i++) {
+  while(k=getc(fontfile),k!='\n'&&k!=EOF) ; /* Advance to end of line */
+  }
+
+maxlinelength = 0;
+currline=cmtcount+1;
+fileline=(char*)my_alloc(sizeof(char)*(maxlen+1001));
+for (i=0;i<102;i++) {
+  readchar();
+  if (gone) return;
+  }
+
+oldord=0;
+while(fgets(fileline,maxlen+1000,fontfile)!=NULL) {
+  currline++;
+  len=strlen(fileline)-1;
+  if (len-100>maxlinelength) {
+    maxlinelength=len-100;
+    }
+  if (len>maxlen+100) {
+    printf("%s: ERROR- Code tag line way too long in line %d.\n",
+      fontfilename,currline);
+    ec++;
+    weregone(0); if (gone) return;
+    }
+  tmpcnt=sscanf(fileline,"%li",&theord);
+  if (tmpcnt<1) {
+    printf("%s: Warning- Extra chars after font in line %d.\n",
+      fontfilename,currline);
+    wc++;
+    weregone(0); if (gone) return;
+    break;
+    }
+  codetagcnt++;
+  if (theord>65535 && !bigcodetagwarn) {
+    printf("%s: Warning- Code tag > 65535 in line %d.\n",
+      fontfilename,currline);
+    printf("%s:          (Above warning will only be printed once.)\n",
+      fontfilename);
+    bigcodetagwarn = 1;
+    wc++;
+    weregone(0); if (gone) return;
+    }
+  if (theord==-1) {
+    printf("%s: ERROR- Code tag -1 (unusable) in line %d.\n",
+      fontfilename,currline);
+    ec++;
+    weregone(0); if (gone) return;
+    break;
+    }
+  if (theord>=-255 && theord<=-249 &&!deutschcodetagwarn) {
+    printf("%s: Warning- Code tag in old Deutsch area in line %d.\n",
+      fontfilename,currline);
+    printf("%s:          (Above warning will only be printed once.)\n",
+      fontfilename);
+    deutschcodetagwarn = 1;
+    wc++;
+    weregone(0); if (gone) return;
+    }
+  if (theord<127 && theord>31 && !asciicodetagwarn) {
+    printf("%s: Warning- Code tag in ASCII range in line %d.\n",
+      fontfilename,currline);
+    printf("%s:          (Above warning will only be printed once.)\n",
+      fontfilename);
+    asciicodetagwarn = 1;
+    wc++;
+    weregone(0); if (gone) return;
+    }
+  else if (theord<=oldord && theord>=0 && oldord>=0 && !nonincrwarn) {
+    printf("%s: Warning- Non-increasing code tag in line %d.\n",
+      fontfilename,currline);
+    printf("%s:          (Above warning will only be printed once.)\n",
+      fontfilename);
+    nonincrwarn = 1;
+    wc++;
+    weregone(0); if (gone) return;
+    }
+  oldord=theord;
+  readchar();
+  if (gone) return;
+  }
+
+if (spectagcnt!=-1 && spectagcnt!=codetagcnt) {
+  printf("%s: ERROR- Inconsistent Codetag_Cnt value %d\n",
+    fontfilename, spectagcnt);
+  ec++;
+  weregone(0); if (gone) return;
+  }
+
+if (fontfile!=stdin) fclose(fontfile);
+
+weregone(1); if (gone) return;
+}
+
+
+int main(argc,argv)
+int argc;
+char *argv[];
+{
+int arg;
+
+if ((myname=strrchr(argv[0],'/'))!=NULL) {
+  myname++;
+  }
+else {
+  myname = argv[0];
+  }
+if (argc<2) {
+  usageerr();
+  }
+for (arg=1;arg<argc;arg++) {
+  fontfilename=argv[arg];
+  fileline=NULL;
+  checkit();
+  if (fileline!=NULL) free(fileline);
+  }
+return 0;
+}
diff --git a/externals/figlet/crc.h b/externals/figlet/crc.h
new file mode 100644
--- /dev/null
+++ b/externals/figlet/crc.h
@@ -0,0 +1,62 @@
+/*
+ * crc.h - CRC calculation routine
+ *
+ * Version 1.0.1
+ */
+
+/*
+ * Copyright (C) 1995, Edward B. Hamrick
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear in
+ * supporting documentation, and that the name of the copyright holders
+ * not be used in advertising or publicity pertaining to distribution of
+ * the software without specific, written prior permission. The copyright
+ * holders makes no representations about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT
+ * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+ * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+/*
+ * Changes from 1.0 to 1.0.1:
+ * Relicensed under the MIT license, with consent of the copyright holders.
+ * Claudio Matsuoka (Jan 11 2011)
+ */
+
+/*
+ * This CRC algorithm is the same as that used in zip.  Normally it
+ * should be initialized with 0xffffffff, and the final CRC stored
+ * should be crc ^ 0xffffffff.
+ *
+ * It implements the polynomial:
+ *
+ * x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1
+ */
+
+#ifndef __CRC_H
+#define __CRC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+unsigned long CrcUpdate(          /* returns updated crc         */
+  unsigned long crc,              /* starting crc                */
+  unsigned char *buffer,          /* buffer to use to update crc */
+  long length                     /* length of buffer            */
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/externals/figlet/crc.c b/externals/figlet/crc.c
new file mode 100644
--- /dev/null
+++ b/externals/figlet/crc.c
@@ -0,0 +1,129 @@
+/*
+ * crc.c - CRC calculation routine
+ *
+ * Version 1.0.1
+ */
+
+/*
+ * Copyright (C) 1995, Edward B. Hamrick
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear in
+ * supporting documentation, and that the name of the copyright holders
+ * not be used in advertising or publicity pertaining to distribution of
+ * the software without specific, written prior permission. The copyright
+ * holders makes no representations about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT
+ * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+ * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+/*
+ * Changes from 1.0 to 1.0.1:
+ * Relicensed under the MIT license, with consent of the copyright holders.
+ * Claudio Matsuoka (Jan 11 2011)
+ */
+
+#include "crc.h"
+
+/* This is a pre-computed table to make crc computations efficient */
+static unsigned long crctable[] = {
+  0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL,
+  0x076dc419L, 0x706af48fL, 0xe963a535L, 0x9e6495a3L,
+  0x0edb8832L, 0x79dcb8a4L, 0xe0d5e91eL, 0x97d2d988L,
+  0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, 0x90bf1d91L,
+  0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
+  0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L,
+  0x136c9856L, 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL,
+  0x14015c4fL, 0x63066cd9L, 0xfa0f3d63L, 0x8d080df5L,
+  0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, 0xa2677172L,
+  0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
+  0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L,
+  0x32d86ce3L, 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L,
+  0x26d930acL, 0x51de003aL, 0xc8d75180L, 0xbfd06116L,
+  0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, 0xb8bda50fL,
+  0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
+  0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL,
+  0x76dc4190L, 0x01db7106L, 0x98d220bcL, 0xefd5102aL,
+  0x71b18589L, 0x06b6b51fL, 0x9fbfe4a5L, 0xe8b8d433L,
+  0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, 0xe10e9818L,
+  0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
+  0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL,
+  0x6c0695edL, 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L,
+  0x65b0d9c6L, 0x12b7e950L, 0x8bbeb8eaL, 0xfcb9887cL,
+  0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, 0xfbd44c65L,
+  0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
+  0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL,
+  0x4369e96aL, 0x346ed9fcL, 0xad678846L, 0xda60b8d0L,
+  0x44042d73L, 0x33031de5L, 0xaa0a4c5fL, 0xdd0d7cc9L,
+  0x5005713cL, 0x270241aaL, 0xbe0b1010L, 0xc90c2086L,
+  0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
+  0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L,
+  0x59b33d17L, 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL,
+  0xedb88320L, 0x9abfb3b6L, 0x03b6e20cL, 0x74b1d29aL,
+  0xead54739L, 0x9dd277afL, 0x04db2615L, 0x73dc1683L,
+  0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
+  0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L,
+  0xf00f9344L, 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL,
+  0xf762575dL, 0x806567cbL, 0x196c3671L, 0x6e6b06e7L,
+  0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, 0x67dd4accL,
+  0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
+  0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L,
+  0xd1bb67f1L, 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL,
+  0xd80d2bdaL, 0xaf0a1b4cL, 0x36034af6L, 0x41047a60L,
+  0xdf60efc3L, 0xa867df55L, 0x316e8eefL, 0x4669be79L,
+  0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
+  0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL,
+  0xc5ba3bbeL, 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L,
+  0xc2d7ffa7L, 0xb5d0cf31L, 0x2cd99e8bL, 0x5bdeae1dL,
+  0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, 0x026d930aL,
+  0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
+  0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L,
+  0x92d28e9bL, 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L,
+  0x86d3d2d4L, 0xf1d4e242L, 0x68ddb3f8L, 0x1fda836eL,
+  0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, 0x18b74777L,
+  0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
+  0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L,
+  0xa00ae278L, 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L,
+  0xa7672661L, 0xd06016f7L, 0x4969474dL, 0x3e6e77dbL,
+  0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, 0x37d83bf0L,
+  0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
+  0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L,
+  0xbad03605L, 0xcdd70693L, 0x54de5729L, 0x23d967bfL,
+  0xb3667a2eL, 0xc4614ab8L, 0x5d681b02L, 0x2a6f2b94L,
+  0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, 0x2d02ef8dL
+};
+
+/*
+ * This CRC algorithm is the same as that used in zip.  Normally it
+ * should be initialized with 0xffffffff, and the final CRC stored
+ * should be crc ^ 0xffffffff.
+ *
+ * It implements the polynomial:
+ *
+ * x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1
+ */
+
+unsigned long CrcUpdate(          /* returns updated crc         */
+  unsigned long crc,              /* starting crc                */
+  unsigned char *buffer,          /* buffer to use to update crc */
+  long length                     /* length of buffer            */
+)
+{
+  long i;
+
+  for (i=0; i<length; i++)
+  {
+    crc = crctable[buffer[i] ^ ((unsigned char) crc)] ^ (crc >> 8);
+  }
+
+  return crc;
+}
diff --git a/externals/figlet/figfont.txt b/externals/figlet/figfont.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8cbe6ea7b5ad987bbe7eec216787752a0f855815
GIT binary patch
literal 77423
zc$~$(XJZ@JxiI+s{ECxFb`9i$6af}ditQVSq$I`^sgRT%C(7~;fdM%dFoR$QqUg~6
zw*O;$@4dd;d+)vX-g|xODFc9%v+wRQu_OYgpXWTiSj#^b_(Om3zv&~}__;9hk2`8~
zcXweg?jF%UE&O#S{p|(yy|Z_2MBnl5LjJy^QREZoZQsJbKjFVFc-XtvMLV4G&h@;Y
zzu=QQ3vGBX`NqDzz(M?!)D8ZE@!nqWvhfrA_ahz&{(DQG!zVbUc0Iq&?DNAHqq3;&
zm)We!%fj~DCuuRne-CH*`)p><YWO{!4YluQpM8e^eHQ&4exm;l{-u58XMdKCYTH}i
zuzTh7c9vgV*S7oQ$xa9VeB5Y^KbN=m7v*&U&2Q3z*7rJ{kL|PhtS*a2``6{HhW%9W
z*j*ZXlm6UVKEsP~R=^b3>2#Wn$27}fN+0Bn4zJQ%dzsnMEX&5Xc2G|9Y)I{gc~#Hy
z%Xys**G=5%d44s{YCDEAt!!F9wbyk$efsFp&CSjFh`w7dXIGD~mw>DT&JbKL;Q9$L
zA33OgWFJw7@E1dW6Y%LD@Y@<dl>E}VSo_ovq|hH1j~>y#=s))he#6^1JU%}?*?+Tl
zet2?BA3W=y9q!rvgXf3Ghxp-{?H}*ky_4g;gV*P0ZtID_R1$qMxK3y3pa#H8=-868
z`Q=*hVbqwxF#c>l%i<4$-;UDTa$eh4<uD6JI-AU^>%6$Kr}J_2#Y=$g%W+z~lMnY!
z5Blea$1m^+JU=-OHiNI`WtI-%Q5@w(<~~0xVAa!ER;LJfwj5bm!)w^lB*QJawr5#g
z<0=+fz&p#PYnQic__u4WPjauEOtPY`!Y|x`+5NOmLugyG&(bO%(C0AjY(A*r#Nrlv
zuJ<0ERQ%;>_PcpL%ZAZ3jW*cLo~Kt=OPd{^oFAM)tNxcKhx>S%2dAeerwk=84vr5_
z`$x9F|K;J{0U!Da0@x7@badbkTv3mGUd|?I?LI&FP-n#u=EY-yCOqZYISk%E-9P;G
z0YGB^b^qDn5x^!a<K(&BdvkhvaC}blKYw%n=JWs;y?=W6<-sXWxc9PudQMFnU7_94
z!8xES_#gK_eDT%cvF)yJ7-OQB@mcU=%=vX**<m@D<JH+}nho+%4zIrkI2zH85LW1Z
zM>zmxhaLldn^sjh$WuTgfL)4uR*sFdm{;%_Agh`&IHD9m*I(s@ozBWD0I15g+{3Bb
z>j0s(g{9og@){1#z}yzDJijUs?ryG2dy`k!wl3}EJRc8fMLY!ks|}N;m*Whl&2pG{
zrt@?R&Yg~{(pK4w5F7m8R(fqb(fe#%PU#46w{rwV`<{tTWuZltPx5g(Gk(di;<IuB
zhm@t*y0Y1a={SWaH?%N291r|glyIc;=@hU%pU7odU%LZXH)mM}i<$yZ)|tBmexR_?
zahA>sdtKh(FL0)MmarT?N<iNT!cX;N;j-}vr|IBbiV%MT2LW4^`RpJakNF+Ybsh}!
z8ivCCL+4?6QyCbb181ENu5p}i=2Z=MnAUtb!xA=$JDTysgOLa2WC|<F>>MC{Mn{Tx
zqa2w!0xMYmV3y$~^}b-pm*q`{v^%GJPwiD%4sAZnQo7^}#?H(rg=5dt8E*yQDY+l1
zCpIq_Z1E5;Gx#^Gu7XvWyoU2S99h6=0$DJrtfymPA8CcRfxuGOY;BU}NMDO`UJNqX
zh53}JAZ_92o+5tU31OW<6Z_*~jDg(pqse$kq{X)e_J}JD2BDjnSGfBrU|l#C1Ot4A
z^%UR_4zD#LY7Bpd)EGFX2MArv=QKGWV>|&geFq+NC-|TRAZ8g*j|%ZSEearN3ZJL2
zq1h}gt}=Z*0giQD=p54772LM}8Xr&&XX|f)r=yAM>;wPW!Gjp2g#liMVMyV+xaC$E
zz%fpsU|tsV9X!SwAz__qB92u68N(%}CYo@9aE|v*<0k8)@hH(}Krmg=)g+%j|NQX9
zr$?Uyb<Ac6QSbqt8i1AgD2~BA%Lb`DWCjv|!vXMO8J|vYI5IsT)(YSU7hO&8`Ob`Q
z)4{Jtb7G9)gy4p%`M8FjSwREOtBPJ@ks->!ODhpEt^>{o1cfhy!4}2>Y#i-CHc*8d
zNC>4NZtuX&BBiJS5sq(l`^p31@HA$?pTnIJQOFUZ8<-(05RCvek@wRPbViTH;8hAf
zc7%h^COk-81Myr8#Mq-%U(YM#e$#1Qr{nzFY}h9FDr`PUuRKHnYEJ!fbu=34GN<E*
zRRgxXeF`X~uxC@ee_`44qM8yPA{6g{o;l(dA`Ap@z=r1tVF-bMf#Jct<LzCQDe?%2
zt8N`9-)XY>H?y+FcT(h|`W7%sT?5#5A8)Jyh5?kgmzV~QPm1j3GA$e!-;{HpnSz5E
z*2V<JK-}iEzj6ksJDmYy!Z#JY(tgcgl27<G-T(nD3lb_O(;TP6=kezF@K;DEfMNkP
zsZgfrm>Z;lH?%73nFxjiI+Lth#h1YwgBQhT^XcK|DMNt$^u_0R8lP0=Q)vCUEDGj%
zpU(0U5GEiIAe4mh;Z5+)?I52G=3~0tbOtz_d6t6E^9(S+pqvBB$DQ8-nXQ<_U8h5O
zE=&@H5Eg^+obL#>JO-jQ8z7~S^IIo?fFa;Z7T)j{hrmW*A6X2Z*l?cl)W9*^-~j{9
zgyjNTQkPd5aV*f2m=(VLbciDm0hq(__0RSW5B<derGh2G^MTWw)r7k6MDrO^oBFz(
zUtM<$E(P}l%|<yAHljVaX&kmH=d%G^X+>C=C*{@^y;b1aZa|1kiRzmhU}BgAg8=ys
zIK_03;i-wN%iZBCL_3J1fp37>5bQ3Iw}De7^qK=y=;<J)wpST&ctA#G*&6bG8C`nE
zKDHCMgzL)U9nLzIdFlC-N7>!owFvu_L5c%RKFG|Q9<7p?8?sYG1dzK-70aMx&**Q2
zX9m-!V?b-f1;Cx2m-t;i13Cw92ADXIo$@N{Xz#i#-#Lhar;ErzNX;#bHOK&uz`Ga&
zPeW@|$cHu1h(Ai~B&#aGLA=@&L52Bf7R|k)<C0z|5lVPZ**l!2go`SM0KfRK=yA@{
z(I_7<^Z|P|cn9zZAc7~BHh7W!w8*ouIm;&#<Zj;qWQ-9gMj2u;x>$zP!ahHLO{@n1
z3G!-iP1CHzck{j+&q1Q39>5nNhwG09;H6l5Q{*3PIfYI{ovYib&L#lx>+9>d;mi3I
zvJ}t{7*+s8A`a`GL^6z4nU^<;jOK#PymPG91lhYJN7<GUKsru33X_ImQZ7}`Sh#we
zKn77#i?AxkiW_J=I0L82cSZV|wYppzXQSF8DZm{r1+lJR5u_6I`UL6FMZ#eKn~OXN
zb92}p{-@()Fb$JT0Ko2McZ(t39SH0ka8YJTB(OUhAuW7%OV391Rk9j<+5j0uNJixt
zFd6gec9a4X0I4Td1V2OG)N`-~p~mCK%M92Hk!YadtFyKJle3O}l@8z>$_lpHpX665
z{58eB!V$iJuls<da*%#IravfWj51En9`!sGaAS|=Gs1@R=@8L(bH8wjglu~o8z$KD
zYSkODE%i<5*mK-23Y3b5ymSKaVN~jam3?)M>>-WJ6j(-35JFj-WDC33;Tc^s;9ppp
z@))L`0R?#R=Fql8+yYhv#V0TGIgsqguwUlY9MBReN?<*-61O`*$nR+NLOoy`Kr#r%
zolIJn5pP|Y5Y_=N!?qXYQaN!Qm-iI0Z35Lu-ml?_gTOnU(qtJ>qsuW0>cY7Kb9aj%
z9HC}x?j<@pd)U75l6NF!yT{Z67^wswZtZSt@O!Y10>D3bS@a^V)A5L936a2|`Q;2a
z9Kvn5aXevUVc?(;J<tIm>c5_WSWaAl5+B&WFXjw$+nr!Ruq1r$4#SWbEO_Q9A7n+9
znHKKxPyVDo07h?;4}kfD(dA2g@t=IsUgsCDV1>JcyLiu_c}a?hTSF%+=x~ZHt6DfO
zLV_bWE?G1nW?(=kc>&)6njPgIl*kk$0KkLh*_jCuxk0(}Ot%wYNZjfsokCj7@d$ex
zT|iX*@z{@r6lzu=HwLufJ)f<oW_UyVd@J}?G|`?W0+VP0y|f%8pWHDV=CiYXJ+n_f
zS%-J-M;5S}lt_=5K)`vJ8un(lHa6fw0{{xtP^c^+uul;cGF65-N8{`RU_s!qZ}DLW
zDMG{$Di-7!rKn<{eX`=m13E(!0Xc#zQK%6~jr5sewyqfHyD!JM;Q;PcwS&Tx!>vn*
z7aU#%*F8o^Ml~ag1T;#4tQ*nM93K9Rq~wlp8;FN=Fb2I_kb{Zc1-ys@tvd@0PP4~1
zC<DQ>7SIGh$;T*c&q>Fc)8{;V1<!m;3@*wHxWr2&Jpf%P3yualgUFNuH_42#-=`?#
zSQG<cEY_E^fG48m1X)y8LBuLv!J#Dn;vwL>OU69Vga+yeIvi#rJT&5or?`eISZaNP
z#3&k3jwBd^77qQ)bvetwMK~DS^g~|Js)jkTR3Q456B>I-KRo!FwJ6XFWi4QiM=6T&
zgX<Ci9xsQN$8SALVZAg1Dmv-f1mf03@TPr++eG^Jlr1FBQII$TG1#`wMD0k@G0Tkf
z?N|A*zD`hKz`wslHl$A0y<N_pdQA{5CsOm5gTZ`yOI(CXE;l$NjOYfqrZMqWkj-f5
zk0PA|DQiUytk$aMIa?=AP##;hk1qfZ(apmizSQ%TUeQKgm8cGmfo3o+D<Y;s{TP|n
z$kx{-Jdky7X}O)2qy=MG%bYI7ChvF!iCi=4WUsTLge?Y^K+@BIfIrR|ZDIEY7y*Mg
zM^wTaMjf{6En;cK!;?ze!O~@RoxaaYAY3><!#FcgxwntN%m5fg4F^{Qgd5kQ8>7K+
zM{@GcJk>fwu9fzRGcXzjD)Z3c;#&l=HPus2M>V5)Ib0TpuLCOzeFqDzbGY1Ffi8Zj
zxCE6#BZPqJJm&3!vnC-ffGj+5pg7YpqK}#Z`5QsV{LV#(51gYPCcPz$3L=O=I9xkU
zMI7T(e3N1dK|rkZxbTQ>-5~RVFgzTsHVDkHdrP_lY!Mri(fdf;=QA=A!sp{`z)Gy}
z*qrr*6;O&LEIyfR!PE#a15|Lm?afzsAUFf_P^6**37BaQK{{~Mjkn5>hUf2w0hIqu
zN!Sa{`xeAb(G0|=kK?(+zxOPNj-U}D9n)nn@pfOsum~cvPOt!$CyCRfP2h0xx)E99
zm>`*;VzVUf7nR8Vv5>Bl&V%Fv01gB-H}3!q1+~oW9xVM@1y2@WKMjrUZx%oS4NX%7
zbohLh55*7{L#`4OHw+3yIkOMGmE*6McV^ahsi{^aP~bs_^8xXWHo*mr0cQ|e%Yd*A
zSm^{Wc9Mm|5I=?j0&+V#Q{7x0QSIpzRxXSL2=Q(dSR<>|^#gB}5Q43yD7IJLlEOcJ
z7oz6V5eS8#LU6{^6C^OeZZ(}R0N~=AM6g$Aicxmh0!?8VGUAFdSgW23Q(J?eTva*R
zB}W1M^9B$1Mq#Q1nq20?#G?goBdZl1#i)q1=M_p!v<tT~cRmdJem**D50LP-u4r|B
zW3m-IA|UT{zJz%JEJ21!i#png7$rip9;27QVL>dcz#@-{Ks<+E9jS6p#Xlz0_0?!!
zbmASbGH4NtX$c-iGC?URVe$ueh)mEiA%}6mOT%&8J0YvMg{SER@`1r~WEvdE5PG;M
znzE{b#NlxkHX^*lk9W@egwZFhrospSKB*MH$6y>T$Iq<7!684e*mCS;182aV&hnCA
z43_3?K88sNGKmSvv1Fn_0V+$2CdaC37<?8)_eD#i>T!~28c(p5kML!-<%tWg<H1^0
z&yA@JB8PJ3&@xMuSpXn6OqxMnOo`QWNX=;ufzd(4M6_m-S7Q<Pg_$u6o;Id`m7>Y1
zu>+h1!FLH&M~&DB6@|POWzzYD3BAZ86Y~-z!xSQ*3@=z4KE4Gc5|C|tjLC48-V{nM
zFU#4GER8JX#1zdWYZrHq-u~vdzyGe){`B*tLq>0+oi{0?fjP_U3j`K**~C!jxzfe*
zX)upq?Frue4XML(vZp%)puEbsWTO(P8{)Nf@HrChrfCRu%V8J8WoJaoW<0Ftv<%D8
z;uhAUvMnJhnt@DVhW!fy4497`{%fQ24#=Lle^WU><x9Zzh<TkFnm9n?I6#)cgmJ9$
z4<7vojC~WtiXkg+TwBFeCT<D4e#U#m6K2ctR9`&qP8c(8>`=s2QO@{@B_zVXPsj62
zuyR4yNj3{yvG-sh=0FHAN|k4@mzRDE@#_gBL*y5`Pwl}k-}H~jS*gEwesF5fUcEVc
zi4ImRzXaQD$KHqMiwq?lBi{<DP*Agg&^~T3HPJBnh=qn!c8zj^k~HFHJ@bGgM}4my
zJgo+?ND{{JdQa_}<Nbrvv%QnkgXLT8HMZI>#A9ZFchgEPlD5;3%rdxyf!L%Aw97oT
z$sIi5<WbUzMoHe{r@z5Jev5zn9{>0b|7hVKZT#a?7Ue$=xhY!p=2QFf@Zhw6y7%(y
z<%`~GF4|rLlbOy2*JMFN@E(lQ3Lm_f_uWEyVZ5mCnyYT%!pOY<FcWjr1xpi-2VQ`J
zXavIctXx5zfh>aQ8d+}x78iL<Y7mW}XN`+)9?aHLd-D4A$=TugfqmUSTmihhjl-cA
zf!xXzo-yH3Sp7S+7`5;q=n{VWo21>LFOW9k$%IM~I-Bo)50F3_UXslbyI@l|G8&=X
zO4?2}(GgHV6HPb>@xrLeo2L0peZahK065?lTvNNb@9n4d+2ITOs}+xRXT^r`viWWD
z-M@XLzkaRP{Q0N)(XW#AXpm#JEC5MESWuqXzj)dU;#+d9kOv$Of!K-sdJ<Ya4Z^+}
zxZR(@vE^5JK`boWN>M$AC)0q4tchx9vGEb@z?<ox?ms)~AAhm@m^Pa)U5^Rj+hdny
zcZd)>k?V?v5RB(~-;bIc%6^VC#i_skv|#Ms_5u{($ph!Oio5~a`opp1c6Z?vADX83
z!_ixJqu0c64^FeW1X;X1IX(RK$?-WH-_hamDgv;vwF+ZYH6n^3!z3wq*2MejB3TL^
z@ncu;NIpwqyxDNtoG>m_=gt_Rl7CEk2@*=+CKf(Vhdvs&yNFe(fj!(mI6gnzgEMj4
z3Jz85*eo;=uO1FVBUf@d&0cC(6w~$o;q&JQ=rbL^n23HXL3Cdpobu}U#@@UJcw9;X
zH=Z;hp7;o)GO8Q%gox-4F=BXrRfp|qDY|mTSiYL00grc>__JNML2<i?`iHo@5@aq5
zV>>o8t8g3a8yG26@h29fuTzw*#`(|<jJOiTp-S|k;x-sTuiJuJ`tkzUN>P_H35tj~
zivr;gWTAt_i*p(+g9Syeh-gfc#&I;FphDdQ+HgrjN4886+F1<)a>fuYM%n956S)oq
z;1{%+w5&N=;Nd|0@}mB9TSIb#83if@#3EH$k_FDuV|nSz?~*T{xbR{?w#*svCMJsg
zFnv!4#JJ5GnueCo`EZMp6%DS~nme{gZQcfP3eKzG)w9Q>9vncBct(<Od7QsPEmHD6
zrz1=jW<!VlMa4?+ddIi1hAg0k@3L%a)8RL;q@p$rC667z0i`*4menaaL7^(oi8uam
zP)F+x1F&29coeFe#2<-8wV*HGF7pQS8GuSwiOH<nj^+>#*uZCm<ihY+V_j;X>=j5-
zGh=M7BuEwAuQ=@9c(s-B@HU=L3Pz}*utK2-75o;sj*(fYx-M@DW)Hmm4R;G7WS(B3
z$5hh-7u-#(vhGD^f!6OS>cOE`GB4mXDj1ExW0{i8AH*@5(eWfm>$p?{xNxXm;}}6+
zUWG3(d7lnaieiB-2|I~$9E*56d5!sp6kTsR2w?0Rj9#>h7a|OyFww~bkX#U!6<@S%
z{9H6b<d%Kg>_ky>7mrr-k#9}&(?@<tYd`;d?HMUIs<qGc+r_Ck1P}kQY(5UmTb%3d
zeXEmi{XL8O0IH{%w-}ctz>OdiJ@*&v&!~`u>_8{rfEP676S5tXj0~d$*pTlUkqFzo
zLJNsbwzmW*JTQ<2HbAegy9;DcJevF@dHVnFh5y9fcj157jsHKt@;4;=MhJujw@F&y
z<*~Iwj4sRL_T;UJ1~HpV>svvW&i03ryT>=TXghk3ZuI_TqV7Z}%7P0=pkj@Q4H4<I
zS_GPoJwo(!-eDw#EZ!8Ym2*}OPSV*s*PH!tD$ix07F#@of`bWE-?vc{w{ym29`ErH
zC|ys|!62)I8WZCwQE!L~1=nt_MAwc$Q%|vGJF4N7qU+&XhDq_`I-elb6Drvx7f6`U
zIS6eXq+B5-`8}^0d6>%zh#GltEHPy{o?|%$P&Q4qv3a2S)op~_MszKgq;$>k67gX(
z`+#8@2zX@wE^iiHQvB5_lT400yv$}>@oq$p5ZU!v9<c;pA*?rDzts6NI9KmRBFByv
zn$St2`I?sS)Z!<@dc_)p3o))Jh!A#Y)SKIwBNQGP-EBgI%TA=R5>+Czn4b<c7HY_J
zR_S#3Uf2z%@(-+vo)2I{WKqJiC@_Ak$Pn(+8S;|>boWmWTz56J6{<pAdN<5{06&Oc
zeIakK#6KgNirwuTNkD2))g@WRy}7x}i#lOunhvi29JMM8pyP7DJSee~<kFHydPrt%
z55%f35jVj8l7Hh0bG36Ah<rd+*#2?LtNaC4a9T~JYQte5IG+}}-bX;i5wwWFs<zY1
zXCDUHR6|{za_?u15fRn<XU47`0L0PFu6l8^><Sh$1}H&Cdk2|>Iinp5%B^C$ucCBF
zs@y05hs&q62?!|c(2zuE(@8wY)ek5%C=NYUf~S6e>bw;$e(}D&_9TnntGxW9lanuq
z(~7`B{5H_hnz?SGXh;*-Q?EkTK(sp!hdD=61Tw>d5G2T*4ctiuVoHX#_M0MEu;{u)
zlzwJ*HRg~-S~IeT%pE4#hkBN(GiIXRm`fS&P``7oepxIRAb_c%y2B^l@Ib++aIs(q
zvH{Mmz^q^^vA7iSfi%|9h;YzO1KfCDfqQA#_>)RJBk^&Mk*me{GK!K7F?*r$)<f?!
zx*P<_wcZPbF_mHV#2cgK+At16P5BE~=tc-VSMdrRtndaa5Ss~z)QMUyE`A8;gq01h
ziyU2M94oR+*GjksT~~;1E-()+JUk@v{2VBV346&(yh~Bw*6lq?*bW|nkn_5Zmn#ll
zmtOqW4J?T09wm=f;wUDmjW>l+b~=az*m|e@1xMjA2l<JT%NdVr@2w~XcA`IseO4%O
zHO!HmEI6`rC9g$IHM4<6^o9m^@qG&RF`%p<LbxdQzQjYuzp9eOG3;Lg{RE8D0U)bt
zz7_wN2+H8VN9-weML}E4uVH*5`HutQPdN_en%we3a$EzCMe0~afKP35=pyzbeze0Z
zlZy-raX-0G;7W>5YDQBYgONgJ;e5%R^^k`2oB@Lk436V5Rh^L&OJ1)hcpRj0As-ii
zcok=4iIDjM!9Z^?76JmD3cXc!xaNpshvv9xs#5SW8iQopIfJYQbarHrfcY$&@Erm*
zoR!lVW(Xk<UBWjd`)4e?X_D=H+#*8dEkjE_WKXv15*gn>!MgM?ygs$*x<oUiSE%A6
ziVI(pde!HcIm>E|+;1eFNsJ*YH7=;Wok~Ut2K;x~?PUoMnSE^VZKNm}j%gp94};pF
z^XVK%Obr}F&Yo?>d~(TBDf!#-uk68mnQ_zz=ImjvJsw6qrQyB3E6~@BBW{=YH%r)p
z>#06El30MqQ_j)TMttajr;Q?w6B$F++e`_;l+gDei@mzzhYS~<W#l9?LH<0NsuC2S
z(OlFlitt1^WPr4tv@u3AxsZd*tsSK^e%mw(J|Ikw5YB-3l7c%IlRTKD4~%h+e45Ma
zv#0SIhd}@krBmYgDLfmF6-Cap=JYvvU6~MZBE-@5Evi}_k=wv)>h>N-;XWKgz(c09
zI-!6tp?Ejhc)TXrRxn?Rdh4NkD+ne7&THV~{9O8o$P1rAsRG#)fV!oc3laFxGvGPJ
z<0ypSX;PRgW!P!N#a2NipYxw)qY!MjWAHJPD3WooQ*wIn%QuIonEptu&1Z>oEjw59
zqfSF-#x&4ykPj?q19kO8{WiM<ABniK1<OjjMh4|>IF&VcN%L7@*uvM{Y<I}&GRm^y
zqawSZz$y7|1HOaZ%CAq*Z6h7LV;u~Cw%bPMjRLVNf3Sf@ID!?pPxaBF<T$W;+6=k(
zF=8gG3bPmFlnTd9*>+O+2G#IS0bgF;)>*?ExQp2+fGH((Zfy4xlB_m90sa)(*-$1G
zRN|qmx4j*kVDx<uQm70OzJ0iuy>rXTCGNEoUUka;dRG)(h6y1Evq!JXL}?SM<_O4{
z3yvx5?iyy-h`I~#9ih@>?UJG@fkV2Qr<5&0-WmG+GmT-<uy#SV6!l2~55h?=o5ITQ
zUG?h=QH5xOX%JbVS=n7TDeiZIRVc)62pDB41~7Cd-QKR;N}OlH&L`uP0vlV&u$;q#
zTN{=jaSxNWOWA>Byg9Tc!{En*7s&3|qV0YI7#_wvLnQ*7qeLLnNVIv1)|VK4=7DsN
zLl8X%D4L}2(|nw=TJRP2LE1ViTrUpAAY4JrsAIMXO(Fy@xeH*uPYSmjmn0x=Lr<Kz
zKTbD*kD8qsrwA5_!nJV}g-@X|O3c0DGh@Xcc7-AKPtFL_;tK-_D86*tlHMpWQmc?6
z(dnm@hKvpV3KtSa71086ho7Z4oRFc&Dwq3=2FK)6m^x15JQa1|t3a3L@Hs3yP@$LA
z9P>fs<k9YfA4n1~2dMh%SFmC|@fb7EH1W0e2pv@}2GMV*<HCN%b&d|+{G{;ND;(7L
zAuurTSw|RVVt5O?v%S5!W1R33>FHaq5PvhKycUP_n{qZ5R*uw(m=glMo&bC$J{2uX
z(Z#t$Z%%iPS64{jKd{H6oO5Ux8vF)jdrCFIF{$ES6OY+IarpY9xYKOt2V18wA6}hy
zXs|>9mc|3w1`MLo9WZz<Fo89&6#m}pbv8CO!b$1PQvQUJE}q$>iX$fpBT?=lBT0&M
zNqazFFc;}u^JJyt>2-RksV?{(N$jwKgwN|m`~ab!#un*F7=!45{&Bwmw&PvLoML_|
zN!P&h?A^}bF7m;WJ}<M&S#|>iV3uBDniCR<8RZ%GAn>^y0`rk}?A|rLEP&--q|=oD
z^#wqZ<`iNN9ocgBfhnwmqUv^XS&l2WnZY$u!)cDHXXsxcr%_(9s0Zf@pIxOBJ|ODY
zF*Q*B>2*nNPNWMajxR?IHhhxRgLS*Mwk9;6Zj{oQp=iP38{W4Wr3xhOn*Na84nnA6
z8#u=1U_dOYoGW;;<J&e%!HiBQM8l<x!2|`3TcvZ64G`V%%r5-jPi7n)KyDyN5Ig54
zl**1MU~M^HUHHYid#fF#FnlAz?xJEzV!E6!2Qs*@P)0sM9GYo7qo>M;?`+%89Q~qS
zboum4(oZ^^+Y;Xh3QvVWigJW0RWY;XAvyCMoTJLVkMfG<sZ&`m@CvHJXW4}}32mxQ
zLskn6d}bjZV~X*@GVUau`kY;emz)Ub9AR*L0Kj*c`-rBv%q8~~f{y=|BB#BRbbM5B
z!CwS(RtCdCk_n%yrFRVsbQI-)AzT?+O2mIg(1jQB-RW@j3le`uq0BADE1)BBfjyF2
z$S<B0T*#Ohf(V7s8LH5y1bbw71Xw0rfSR+G(!-XVJVH#&jJ74-m?NWINNJ(rp5e80
z{46LZ0(!2N<m*%B!l?kJX->)>Q6J+Dk+enZm?3SK3wI(-Dncdm5^OVapoF5S2MYE6
z3Qo?PA=wPzKrEd|)N2hf#ayO%z1QV<$N_^lyukj^Ire3BssV(=rpw0V$!<W#Kw%j>
zOereod<K_V{|GZuQltu9m_MWLju+g3@kMsto*ukDJvci!J_mvD<k)_F^5)c@eSLO*
z@X9M?|C~Sf&-?TLg1_)D`iuXPzw|Hr%m0eM@~`@<|C+z{ulwu&hQIM|`kVijzx8kX
z+y9Qg^H2R<fA`<>_x^o<|3B~#{zL!pKk|?MWB>R+@lXC!+V7wKXa3oL?w|h`{>6Xk
zU;bDA)qm|@|2O{4f9v1=cmCaf@8ACq{=@(1KmJet)Bo&0|1bW_|LVW~Z~oi=?!W&Z
z{>T66fBs+o*Z=K*|3CiE|I3)eSFcY_&-=&cq6gm3rlP~~Nk5vZ1OXN&RTHpw9NtFx
zcgZ`f)XwBmA-32thEsXaWgGnt_(~trsaC7tV5hVi;Sh*XqqquDxWWnyJK(@{w8kJB
zR_FSp^5Ub5Bjkrqf+&X#tz)t~VG7FGP!XLRK~qd}VSf2Y)YJ~;BfrHGo2tko$14JI
z)a9W9=|_oA0yf46$PJvJl-vT2cKYxeHnUafC}R!?POyQF5o?R6mU|azqo(EDxqDuF
zF(|%v-taoA1ydP;qYLuN8Qq5^vqtJy@yCDs$H2vNf<BnGy4EC2*?UqPsjo0@j{?mk
zN{{WwO{EJWp#|+cW#(dD+NBXAUYUc0DS}tzGExr;R2t2dTKQ}_ct%&6)g}~mrsWg?
z2gYFYHfQ5<p{5i_F-gf#WQ5zG9W?wC$mpr;X_Ft06-h7<3qk1S*dY#pu7<N6G5YrG
z?+C9NQC&H#8ort)d7sY^G214k!{vyfMX580f!TN@UZ9df7U7kLW|KVoYew0P7f1p}
zJMt*r!b!MxF{2}81k369qP*wb6iuWpXCF9q86tjKl>@5mrv0EOJCLmG9p{ElSSf|;
zOC%dI@tu8o%bx(Wpm`;gQTxb=C(N;uA<;OMyZ7J#ZW2{Zl5|YN-`QS6#2WFIK(lxE
z=Yw1iEFK~Jc3d*E_)yiprA)hbTS9KgrE&8g>l+Mnyp%(A!zLD|=KLra|CkMG&rHz;
zJrWG?$nmXsz%r9Mq=#&fsv<E1l#A7ga>u)H9n7UO$xu<J$C}oQ(xU3RB2Br^?BWCj
z=Mv-rGPZfI2f$oq1I%*~Kr_e5asv1Pr4~&Gq!SyeoAV3c|J;t}!#pb_`HHe3B|CKB
zXp+6OR5Kgm6nR=aKxiSKWoy6{kg62TvY}fAg*U#{P_o}94gehb2f#g{Z{MgDm?I(Y
zw9|JQVjwznXW8~yjDx(cKI^;CKjK9zKs?F!944>WjmGd}+G_3F;DQL6i6AUF9dVyH
zcaPyFb$ZbR$6DK$=4cZnMq6AmG`wA(Tj&Z#;G+x#K<(u?NHtAHB}Exb*!Qz}UBM-^
z_+r}*$%Llryzq0&bu!{=`c*0g*0rEB;8dfh*=fp)j)H6nurXa~;j$G(7UU&<Unqck
z*-#uvBokXYxX!cpE)}zk5n(5na(n1(4vtM>doDR!5J%=RUFbo@Xk>;7-3t~=(L8X2
zqJkbhQCWQcCo`)?WELO3&1U5qdw#^@@tFX#PtMIQ&iIIP5Nfhg4}f9?ix5uL2_zB9
z_9;`tzh<lxBGH$#7zIS|0ZgTcLlT^(r1(HYf&TVD2`DrJ4<cd~@^3l&u5pm1`7!Xq
zP{fff_&g&R{W4_j8z5$Sg@hCYsxUdVXy1tTdi5ZBI1r~g4K=@L;$1A3vRM1)|Fc30
z=PGRiXlq7W%EIXqYA{V^B_*O6q?&o%gi~iuTXtXm#bGW-xSTprVuTqAS0vlF4<*|-
zE0XO8rgonHG7FKB(qc`_g1yIMvm{F}dj~oRShUZ|&T00Zro%2LFDFADQpES{Cfa(v
z_X%fcQ%j&_OCT*)O@OiguOW*zeix*+Wy^VU5ae!o-<SfO+qgmTOMJ=nayTWYvfX$Y
zlM+SC=JqLunONtcCRn7j9P9(a?l$MI9XP^)Fh(Z-tl^v-pytzYiP_9&B-`V^iGB9k
zj-oUQf0r(OXEqc~mS&Yh?2CURNX~>;5#fe2!qRM1_yu!N7uAT~9J9+o#f2E^KCa?|
zS*W;Rwc<j|lA}1Qc4{}P$XBX%<LvDrkL(37PyCU-F5CvMYl_M*d>vJ0Dm2d!-=Nc}
zKCC%Cg({#6nNmDn@orScfxW@V>cY<8bVxdVJ)0K<>_Q3sl*X{#2w{Y;1t5UaVJ+~-
zj3k*e5BWpnmC*~FOb|dBkr`eO54Xa6ecXxg6lZA}O1T#s<po|hUkA)6)v!SzOw<NL
z7i}rEI4cpHuRbUDa3}_wR3`P-SZ3@P3Mn3~A462&%S%CgQeW*UdaQFbEPl&g8bZ@&
z<PZvMZi?jM{N;gtdC=cKIHmAl2IgQ8(q~ptof&;Ij@?3Rty)F534^hC63R{1m`XFZ
zpld!?*m@d98^dY!(x2EJyKQ?Lw!3XNE&R2$X?wjV_`P=-;j0=&N*G*X6w7mGtyJoB
z|F&GzPenROyyf30CT62m#EBao(f^kW_10if7p;5|v~#WOTgz?|b$WHNhk>p%u=5}H
zo#g-69y5_%a1Pj?`gL$>QflqyxArwUs$A@o)jAIg?>&Q;OZUe;WFZ6&7e`b}z;EzX
z`r+azE3N=L(a*_v=;nuJKV?6in^N7(`~|Yk6VqFcZ#mbknBPWeK9iam<LrYTC-Yo~
z$L9y9uTKxo`&hjP>v<jZzdm_$ZeRCL`>zhjMMhJnvE~^a7H6!RC9gTo-NSqrGYArL
zhZ}AryCV@iO4yYAB;oh1{v(Y@xHu0ky%b^<uG7ja(|O<->_|v62LE;df+K$}pKIV!
zZl!|+Nmd)XW@3FfB%Y4bgSVhzuxMcIL=J%7pV-LV<bh_>S7{OdnC^B*NFpw4Q}KhQ
zC_o`XM<x#_afiT1?}BoITvO;Cj+Fss;&16HWSK_3CLNS=y(~!*g`YQk8Idh8_v~bA
zGfb6_+d(ve-1J(_74RaT`2fR{#i0Sh>U8dM9uo_TxV7cpR>uSnlP8Z}c1P_Ys*IGZ
zc%i^#B7un+0v8b_xg=4|7{^Npx~;Ns*__!623Iy$62f9Km#aBQkBM!;nW4bUs&p?3
zHtQ0#>E=TepKFu?D~Vi56?_~15JYds;VcxO*kL_RB?<0hY|ni94Cp!`3-R`)SfJ<4
z8gwG|J9h?(Ul>Y&et3B!bz61!K;*IkfW+UrZW0aa$dAL}3@5&rQ64&5HR#P#M=L`9
z0rjz=`wO*6)K~J>F>Mk%*%TGxdJ7xqbVtd_D9k93*V-~^l2Qtw!F(pkjdMzXHe@LB
zZv5p0)0o3a?=P{<C=SBGG+K)eoO~_4B`q(cVu4wCPaGtJ>LX-cM7APreCRe`1u_%5
zj=bYEW_cBxMUvD77de6nOdvqbFy|cDKB~E1c5gxSUJ$%>jtR^cztK|&c^{5tan9ax
zKphKwMx``QPMQJ1*&;pRswKe2y=T8H#_D8eZ>GEeYUT2KsNyHojT#Xi8|f}M*gtXw
z?Jxt(o}VhSwTVHs=-O$*Qxau4bGDvYYC6V}dC2LxSnJ&(JGzN)05-x7qDgS%t%jww
z+k4y=&AX_mC2GzP5y9@NZ_kT#_&%?KX{n5jUtj3QS%smT4yM?zl%BjWR~|#er9oYJ
zk2=Wa?()$G0a5T`Dyi<%%*zud80sG#Eo#HmbwD18aYi{({b^8x22$r$pfU$|2t&u2
z-$1fM>MWxPZc{7ko45o%IDTDDU7Bmu^;B_qt?EH9%epQnMp~j2Ngk-|>=+$`^F>Yr
zVbjG&DQC(j@Ay=I_VRj#(!+c%HEzQM=u$%~TjhlBg~dOxM?nh<<G9+8Ttbg(#xZIj
z{qWTDc^W=1Lbp*>e^rOUi<B0aw&c&HW54OxX~+JKc?u4Y$8*)|YZ{^5ktv#UAelDq
zfv5rT&BZP8WR(Ag`61Hy>5)5od&)7BwGXt6>Z15+td^91fS1gY`mwy+h4MDEGpFDS
zZ{Gwj&#4l~E=tb06&Ko?WuvjKj_M1!`$_{%H(UR`n<+@7vzcft-O;fgh{9%x%kJW`
zHK0!&FijIJC<uFjiGer}pccS*l77f1^9jsF-;<;Dt&$g4geo-);FwFMNuNhYN=uCN
zmnIZrUDtVKd#2SeXTh~|+J^9)B<*QCP_-)2CT?RoD=#tOgy9=$(=7x$ZA5YEscC%%
zbV;ah72_a+BV|%EUoGlCRL#l$hq$pg;yS2{L=JywVGej9mg;C`!5OF<%8Pu0L7Q|3
z8Ssr*eB~YB*ZI^Hz@!*H<6UK4)^AO(;tK->=2h~!UK*6^1!rSEUe;}7T8*W2^Gs^9
zct(^VUh7hm?^Uz%#3&LfB?#R_;-0*~Xtt#U5KA&o6lTQ(0e#Qc-BKmAf68VM=2im!
zp5sSR(+I%gYoQ{Fp>&ldD%l{X&{S;DJ8OIxEEm|pvGYN2-_w~1pm8=c;tyDw6rq$%
zx|{%yVr^JpYKpdS+Fkz2L<RAfQ>tTZ%4t5xi+KY$t#BwV$VzTHz>PQeqfT+^6zXJR
zT6W+l9pF@qJ`3Cg<1VngF9TlPS*Bfr^sYz@tR`7NbfL8OgFyNl)~7`ogkwFJISlkP
zA+-->_!jbXDx9|$d8Sag6Ch3TZG?VU(nUD{B+q`DW!6Xn7DIWjFk_}G4H4n=+o@y?
z6j=*lDa>agl2<4jz!xn1rHH&D))Z~pIhQVW44K$?LJcc{|KR!^L9?1dNCeTsB8!K(
zpa(GxWs~#rW0rb0FFKkYCr4MO>Xz|x1u)fsal?Xl#3V_rEYvE01dNzao#LocMZEE%
zw)uW#(NhyD#o}^Mq;f*mJzvO1-eK?4W}OQ|jL@>-U~3-5d!{K21CV<QcR<=pufZZm
zU-1G6;l`06?vG`b(?Ip+O9$#4Sf(vJL;re1N)%d0gUkxcHBud|8Rs}Q(Tl5`<(+Xo
zO$;5soY1mrVN#FhynnpkKixn4HAY7EU-zFK9vz+^9-JYl?7caqB&S%_{rQ{oH>U?U
z+5YL_m#P`QAE)&+=RVS)t3sK8<tsA#Q8@|Xnx;VQM5tL=Si-va{DA1AU%js~5nSoA
z>I^K&iB#`wybNuIftUGcVyuG9g2CO=Z3X*^++N7U2KPNLhRoAAkVN~q#AdRaX;ZDw
z!XoFsDLF$5wAFZMS1znYacM@9?6=hoSJZ1hKFQfDU2uaa2ZJ2_>!zjVwCY_x6({Wy
zVCCSP{23N7h&?+$cx|73O@AlqO2CeI9Sj$cPe^mg=!*?yT1g&GvmK$Kr?z#JT~UM^
zE{TJbHhYhE9xD;+TB`JVdruDN7@u&r-h<tG%erkn*llxJx7`Q3Z7u26-FdLv_L6R!
z5ASVfNw=LX8`fCR91blhCf5!)G;EInq+$E8f`=mN)`=@4wX;P&JQx5Wi(8e`d2wmm
z-QEM87ViqvYd_Fw@uo0M_5+<3?+KGMKhSCMmUg>Ode)~$*TW8vxVy8tyA`x~;DB+&
zw&aN@%4Tv54$72D^0Cbzijv`~e<+#=Vqo&OJm*(+ooZ>6j^^_S7FSAUUSFgt#FWjK
zz1F4p!%cbD@GC7+Jk<mt#vo_`9o!GH3*CPD@kpaN*T-OtW}lBi7tKB&gDV<+J_=DZ
z`g|0Y2>O_xa;1zAa=c;p%`x!;{i7%absCPX1GVz?Y+byq3s)UA3n@<{U;90<Y{(fp
z$f^%m$tz-;pxzF-FlD4fm9=47=o#5&RxJxNBKmT>%)_L^)$9vNf120J3xP|M`kiaY
zGY)s_oP<SO=F0YD1}e}mg<~?XYskl3-vj<Gs|S*C(c)q1BQ)EQlW$i}jjIhxGRpVi
zRgfQ)KQtHBp-V-5GDo747bx&i1INyMBv)ydbCs^NZIF;IGOLP%^QwDrBEM~+8E8Hs
z%^B77hz-1LHAXwr6@%IGTH;!mcQwmLlKSB&tUasB4pt5?JPA(ay96}Xy6mU1z)<2X
zy6E8G-2e?o7e9Cfx{CYY!>{Y1g>0-?$Ko1b2|sAf;abI&^ax<3Q3mmcA6@F9nVICy
zGA|5@5^#Pu4Ge_DO(n&Z*yw?SX(Be29M6DbmWq2m#o=m<7h|;GJ%04H1joDtSO1}>
z`~%>E7VscokRjD~;yUaIQfPCz;>^jEps1p#zF<kAdUVA(M*bo^_d>9@R6z{J5XA((
zaw;^8{Y>Nm%;vy_Q)}oc%>821+Ox0M@b4xvLjT9L%iA^bgPhJv%8WyLCN5_yHW`iz
z@>WrXH>2>j)K?6!c_iSm4KotaG7~s<Rbt2V{+{y+cXozL>psPB;+f<V-SCB(HOH99
zYhTTBIJU&!oTNMpt|lSJY)*K9moZJJF2Ox_4^(R#mZ&2ppG#eN?DOz@2|ymq$_llA
zin2L-*3d<NV>%(NG03C5C~;Ui_?~XF_Z0KA(E|1lp7-AzoktaT_-bFB>>ucUBeOl5
z#h<@9I<j9K?w`NZSdxeVBy-lgEClW~U+E@T)aLriDS|aUKV-1;X#c)R!xyr%^@q>u
z>e+nkWPl%5%*F@52?sBa_2tP|_WXpW2<ANc+J5!&;Mh%l&kZa=f%;M!CD50xX>0Wf
zEF)nLjoe3eOcglG2nL7tE-m8d6I~LaaLe)Ol5<u2Yv#&$q*d7zNjbkBdIQ_lMY`Ni
zT##v5p{@9*7qwqfF{|;j6}4YcColNfjoLTr%PszNcjEOd7F&ydHhb{_EmMaC$N3b?
zB6y&TB&pD4EPM)kgr!1UAl8%B+=5)4j&N9@n!1W#oA5s$JqSbpSp)i4?g0JdLiF(i
z*6@)_V5G3Mh>d-1t&hjWFAol1ygXlps)Colz53<5c@^KT7;V*2p#G-0*^i#{A#A&9
zQqnQ4nw5`udj;Orx&QQF-6*~Avi0ozVK{gBxF3yi7xa05AijMlckLg7ZF}20KM31y
zcYhGJMFncyepR7CS<c2*jBW2La%Wj>8gF<})7iwG7v`fd%5p923WTE2#n8S(%92m8
zpmtegq8ach<D6GQfRDA9Yn<~^)tT$7MhMrve25KVQ_0wY;)6tw0=U0=b%0T%ra!6$
zenS`8bmr~J8gArM@UnM^x~)=SoLeKs-x!`TKLp#%MP=j?52=tw9zzsmh6_BHq*!uq
zIK&!w>t-?T$OfqkF$Ae<E?EG7Rk#s-c_3rK6~7o~MS+BII?dqRKE1jc{Cu9z2kY5z
z{<+<K^n~H|H3rO8l>~sJs_oKc4t0@g9Lmla>3y_eEwS6wD5vB!v|Th<adBi4P(tq=
z*hA!d!<s@i@A7HZS``|THDI`LP0<an#{|YY7G<YaOD+t08U#J2Ly6>F?Ia|3h#Ed|
z4k~%b021~~%peYEj<FM5FFOQthy4>f5T|`yhsQtr{qw$yTz1jR{6ZGosR6pKFdR-Z
zHMzLh)WNI+MoK5@DmV&z6L?%uA`4@l_0JCXXcZtYpT5~cg`tE8#7?L#(s9g>f$toE
zk<*A)d=uWQk=-gghVux6pzNHSmlxslJ!6OJAd`ydA~buxqMRrckbN2=7ja+b?tomG
z>BKn4n=8pDo`ZoC32K8W8yE#8>0G|bOHlv8`717zj$jQ7<wNj+FLDv_eB>j@#-8No
zTo?Ms8gk*Zvxf8jjB`rZmWfdtNh7T59s9!+RW_KDhK}8WntsGC1llY*8aw5$y1I~7
zJ})>2chilZW)?SM({M+|;|<Q$)rD0SV8%|>lwm7dXZ1IF(_^AmqaHb&F+Q6$Q}EC$
zAS?;PlfyYLLqLdz#Q++^uA0Fz)-{J&j7r^;pwO0PcAAbjRB|va<`=|>*C@F+ySdI%
zEy~!)@Qn3Pot~5tHI*EJHQ`R+_z3xPjI8tMMGamU1nvF5Fmnk)y13cL6(>xit{sK}
zY9y2|6cSh)8Ua(wh{&>^yPy30W51)tJz}T*AJVV+-92C03wzJEclJ)c1uQg9#bJqZ
zc;dGgclY#dU9|6;*V+e`b??Gj&?Fk3vqRh8&GB~O%P--7_fG#4d;j+jEzr^u?;qrX
zf`S_x5vGdj9^n~U3y^v5N#1c8#e3Vp|1aQw4=(!N^}<Zi*TZs*S@C44t&6o!@9F)>
zUOc*ga9o=?E`b}C2e^Ruwf<L-)212b(b~~))Vwep6b2ki+b3S8MCcXS53&zb3VG=Z
zRpC^^d_vb&MH6nFBd!b84Ci5A=fKDlXuOHGnHGEXw_T=a4GtM(Avx0^(@FWBV@xTf
z1bKJe<dqZ_G8Eax!3u<rZF)m~)uV=NIfm=f>a~j}93(@Nm?0y@Gl<AE6VtIM;M}vv
zlml-*mGornEsfNAWCP<lQMg4uC=F9BMvKB|zMm%)U?AZHBui^zggDVx$OmXq@n|$H
z2EvY#lHMA*gIxVFYgb7mWrD`T!O;WvAbx3-0N<oz$>2i?4v#Q_LrSD>G36SiZ6Ja)
zO5c}k83<B1j5P4Y2>C>+YFzz?kh=wGib@#Amk|acvjs>YFQi;_&YHLk_@N<!^qKsQ
ze#uWmKh!1haA6j13F4!w$-+ExYogYa4vS`x$dcw5-6uO8+v{$@AH5CyV;BC|!q2vQ
z9defF^)`KFcwQ`J=?_z5R+&^GdmJ)lQFy-b7Anr(6$Rq@+?bf_I61*T-ryf8{!xm_
zXP*3wn14bZ380O&Z?mCBn7(%Bq&|XjfJ@RA23adMd$tu2@iv;oe;(mQ^w#<l-+t5n
zDEfM5+xFx3k8Mx{Y;(&dar+(nEN;IGY=m#WZGRlMe{A>S_D`%G`1U(gS~qCFYxkoM
zFv+vGS#LhJe@5K?i9Kkv?^<8~X>-^9nbFseH|+C9`=0ei>CGqhlem4?HWfvi*6YQ#
zHf$?y-?J|p?YFG2*tylU?YRA>J#4h!wz+TLvp<d7Z`ofo+V9wJeEUuNM{)aY`$ePu
zWBbmx-?E*!{f<3qwBNN}k+-#N*W&h%?W;!nCwAi7@7VRY{jNQZ+jlptPaCrJ*v8e5
zA3w1tjrLvZi>__$qElS(v%6tmH`@2?)VF_v&TwJ-uKi`B{igk$YrnmLj&Nc7o;_`}
z-?F~I)^^u!#_c!lS)={7^{UzJ9y-m1?YHcCqy3Kcn(ggPyB)XRwr?8kAKSTazh!sg
z_B+70#_f0Qd*6N=kYLpQvHhyi{)zRq?YDQ(fiG;oYkw8D?`_x*zWrnSByRu2e%)x_
zwZ0<W_O5*zef?y^{<_h=XTSCBpV*(p?Ys6jjrN=N_pbfUhW#{d-=j=5Vf!t6=i7Jf
zXL0*Y``bqQZTp>X-?N{`?YHco)o8zCzxVAo?H|YOx2>pw`>sl;52RR{DbZ8SfKULX
zw5^a%*|jy2z=tKK{X-8kjvU7C+O8YW*09^jJ>5>iZgA;Aw>S56dlPlr4ZEfHbW6i-
zThZRid%BfjH+XzOxA{HY=FuWIZOf5w?1So%nA;o!vr<d+3~@5P`~5#lYSu6R0bz*J
zKRx_&hmupXs6GB1@D{M5{TkJ>$EI&Te$=~W@%mLwFYbtczvXI_$RKNV4bj!bY^YkK
zhyg-Pp96RD$KhP>uliqWR<(pu4<z@d_e4cH{(}m1s7y2(V=--4Pc6{=h<<N*B2r2@
zMa(-Un3BAWX=P{`E^|egZB5c7aECZf9~oQGh)>C!Gf_9#Fv+ox)^~c&xBw@N@t!Ii
z`G%4QKv(56xM{ppGk8qx9(eZ5b@~K;oY;X`Y8Fo}(+b%C>Ab-BUkM(?LnVn$L$`s+
z=Z7Hq_PG43wXNr+lTuW0qRcuY@}4K7y80rLV|AQT0e7r<m{Hh#2O=f~GeyQ3UyMNl
z1B0r27<Xg#PWBJ%dH=<WMd`@fnjG*oaIDV1JQulS@odygQ7wV1thWaE_3_s3=FS$C
zC;KD!>*I9}cHn$ImsqE#EP_g3c@_rjxkT%ELB%C+)txwZHSA%-Cq<CZ<Y}|W1ea$c
ze`%C-wEnRxn#cK-up|LzH3*ZRaAx@h>5Q^)xSXO~uA4H~YFX0w&?qywXl6b#H@IYq
z1$Z>etQdz2**IKXIJ+T9(>Y99GBxsJR;=dI<oa9=`iMS(L)WlbH+n+xXIX)o937($
z%>?XtI+lR+oGJ%~DXjHfqQQ#9e;q~B0kFqORQ*@pTV6DD6dM{Dj?wZu4CTR%n~`OP
ztj1m!qe>U-)APqDHdaafm{PtQx)N8$in1)kP|(-{BNl!Do4qyUep(KWhj}#sxWFX9
zZ7Ru276W(!zK|}a!OO<e(R>`HY)I|(9E9>UG>b4$Vsg|m<0TfW*{r0)c+Gu8GAK1Z
zd)_Bk<J;*qS$Z_!nyo9z_lb^j6XrbS=cd`6&##v)A}TetbP!(#R4p=^&wPQl=>Xn#
zKn7h$&lZYUz=82mqeW1A`{EB&r6`*Q`#@;%i2xrzi4p-i&w|$ZHJLbI_!rqQ9p@=f
z%vqidv*I$FU3pXlol=d)-)vhlz|AtPzxUpkNfUdVW&;uQg2|(<NKxk29;2{U5U#og
z&mR^fmPFo!zYh00sUSrstkLu1p4I#<tv+0VuBnOKQva;f^&V51^b09XOs|OyjOby2
zIb`NnS7==G#V`C7h-sLWq+GgLih_#LQ@wVh<l_{}tb;7gOigESMR4V6j4~4KX+f|}
ztUK+V1sx#Qb<&h-`L|KY5UL`n{uSY3fEem9KrSh!N8d|aCppmL>V+<nj?yF0R1@wr
zUlYHaF#mvjj;dpv*84!QQJgcTPbsixzvSp+pC^%ObCeRRPM9YRAA5v0M=mw!&2_0<
zEoqeFf)r@6$5yM-c7}cvtZn6q3(7E>55oFdMp+2p#xgV~)MDR6|B7rV!PJvZQ0a_%
z)ag~ig=6J66Qu9Wyo(M|nCKol;+W47B(Ul_lcKy#bLkhX>qSWpve|VyC2hB6Vo}JB
z{c)OEg(PdWX(D9lwOBimjM%Q44VRXa48O>XV2bmgD5KV{4w*MeUQ=btAxedaexZ5h
z^sG9DX^e)d%N{yv)5Z%Vn^Kq@AB1+nlvI)cDSvlkBTUQ4b{$M{h>qbLpcN)Hl*s?V
zEUm5)WiGlI(F!>AAc(BG+^Z&|8hD^^Qqh~z+^;^sV?dN4z6AFg(9MGebQ>7Z`P}a@
zpx<NDCR6DB7Tb%qz277(>6q_tadCeO`}X3Z^MIk0e(pDuf}DS^p_Ih?`xgpA{rwHz
zJ~YDJz4lZx_TIaV?oJnY%wzO?1PSWkS9?eOSDbI<RsZyhKh!1Q!8`oJzkTT5?%!<B
z+C2>5JUe`G{D9s5e#<{X;RBcdz!|h203TFg-tQcNw~N+t({FN7f)OLr_7GT5M6#{4
z5@Q{!Vq8X!o9q(`1O~E~0xOlLENZopxu6)n0qQ(jRW=@$6T-G_`Q{q%nGBCkg$+I+
zT182Ns7;co9+ReIBe5LMEI4Lll(p#CWDUNgoJwu(EIpY!*>Lr&i6BcVLz-!rU*$E3
zlN;UM=GOMk;~;<xM&M)sKBtpdGy$KMK>g9b2eSj(UHv+FXnVm)tk~oS_CMSB6^w;k
zH;SQL#hS|8ApdzdvVP~ZLD>D0U4MwSZMr+r^s;lSJKue>(SNqLfAD;r*nJp)RYPms
zFyZvb>=a>~4vJFy1*7JACf%LHRa1~U@EFj>hq1s5`Xq^%PNUV-p`^vKs`G75HAoYy
zk6R;S5EtrYt9tDj4Z|bfc$c;2f>zyHkO1rw-~*uC1mj}7Am@_S{)=0U$MYH<qcSh@
zosxZP;uDLnrvCDnQKl5rJ(g={i#qu{=Ugg*wQf{43%_I+!!SWMsuF<DP+2OTCC(Jv
z<RKmJQBt~j6Ht83Hih2^3l>3zdSfhC#MULctcZ{E4LZ{hbL`|{b|1!)bGZuFfddV1
zRKxDI@FZV;3ll3~o~7;Wwu4miVEqWSR}(<VHGZ=zsdL$-h`;m|%0*^~Wqd8e7-J1g
zQcSF%;e^DlrDLyBaWCT4(y2BPkL<6z{e&|(c-zwQr9{P}$)UI|%a8|F9@_N1?+1s^
zB32z^>XVMwCXS_=rHVkx3{r|JO6(8qjT6_ja4@>M;)GmyH4~whvE#gwthurLb$>lT
zu}a`FSnR7&UCuf4xO^hXQwTHwEM}#+n){-PD%nXw8A4v9Asa^$wP{GyK!`oly;L;|
z%cBG`E7Y>=^?GL4Z2!xX!+i`pIXFE%IX$C<6E6;q4^I0>w!i=7;obrJwF4v2sLW-9
zB3)KXbusXhbDGaj%HDPKVU)l;We?@+uxOlSj)u*5%)Opz9q%TlvWHY#&+B>3^*1Uy
z)VP*RjDOfA4qc<E1XYH3lb(d8Kjd-4jEm$v&!f!JoT^-l-)_sxxK%@$OB$ZqSM25l
zpW)uf(&1~IQ3ok1OaP^ma54hd3*@~6bi%75e5O$>SQvazE6}T4nn-TOM9D+Pgc6pk
zW1!jUxYioKXJ#QZi8}36^6DF{T2HJ^P<?)s!zI*MWB!r(v#C&u?2{}!9X%=hBuW+u
zvLZkb`xuH_dziw}h+q59L?KVF2SYdV_q@@xkR5b<mKvO4I3G~{bu1N?aW?<V1Vjcf
ztxM+2S?E~9?c+@lHX0s<SOp{>X0a!ha0hyoK^0>YYN7}dZ{U}>P&KQeS<j}_JBo>D
zI2x*}B5O;8df|eC5D8H=7^>0k9nOoP)9h#CD*KtO;ES3RCK|Ov+5|D1a3l(4;Y7T7
zC~!mSo;cp6Q5u_A3O}(oO2Bcj&BxF^-<z5Rw&J4KD8p8O5hX<f+5@j5`Yx7Jgy(rh
zHQawhR=oh%n+ThQb*w@%!KNLjR0|690f{d;c1dcbczv=9TN140vqN2TG~^_mE>>72
zZquzHQtee7%^|_8oiHO4JqyNsQk&03VDbzVfY^Wn)Qr!NN!H}ll>uK!8NE>NqsNK2
zDKB@Mo|bCzFx#vfHz!|IoE8S(f3|mq8ss<U&)0S%C7aLW>PqfN70s$zW-n!Pkv=-y
zTZ1W!(xWSD=If>6Jz#R;4iS)L+O)Lbx`dJ58qMugN)PLFI=|K?g>S*F(=sZ}Zd;Lv
zA^yX(bl(QkYQ4e`$mzH_oz^7Lm?`qsQCx-!N$F+)Wy@@Cd6FV@MpZZQ1HxhF*UjpG
z5o~KNVl4CL3IGmB8Vz2GeSUKKs(+4QebH()m8aMr;6{g)^Oc8Pazq{l{uH@dpOPPA
zF<_t`7_bP36a?ILocn}J1kN-F^_!f}nBr*0a<bB5#>vCAf@IYRo}<JFIR{;-Wh!Q1
za&UmlL~M?KM;~_A`0t*6+g+1?aPY9i2Jm0>3A>82Lnpgkvhypu++F>C<F0$xyW9NE
z{{G3<-IJZWCtDw$Y<*{cgJb?y+8o`T!uQ(J7!IXMcq!yD%xln!%Jgs1PSBy~y9hEX
zJ0+|z1UYQ@reMG%B@EI4=C|h{IWB?lK-FMUECTIY{EXMZ#~|+O%ZK4>DN1jXFwsZ^
zu7Ir30j;4ortUl2#C{NsN#5>k>k+)&_|V<hX!c=?2x$e-O*odG+wAD=u|x9KVo56C
ze1H;G*O6@_H9~%uEef5iT~QlJd+))`56Dt9pf^Lr6}c)Y-B^}G0mrwgD&c78$7o6c
zab)}`9cQze-NfErMs0Sf4bDPq;3iqrq=(}a_TX&KAGI_bMGd<>vfUu6qvAW<rij~Y
zU>hma^N0)pLEBl}b`#q+YP3qrI%@d@8wNZ;onA`2_wk5bZ0Lebe6zRla6NY_c=l}*
z2%a2Ye3@$+Cn->*2CC%kTYgO>zRU};&oUE^LTtxG0nET&zR&Ste8aiE7*D&ev8*fM
z;jg@Xtl=$2Y1lQDUZN?W<h^sME&WnHBuA?N4@lJs7!92voMJDSXC6c$NwxX<c1ngd
zoKdi+kPGNB!8)N>n<e2)(v_w~405<H35M`NzKmuyk*b)?&#$A+OF*bIK?NqnsC1T5
zN6Shcyaq@wiI0}($9{2JOYV!X2A5Q*$Xw=VI8&^4n_S}`-z0<!(brSS2?!lZcfu-t
za&|U2J5Prz+vHswu5cGfjNa;IdbR6xWbuWClbYp|Mmi>$vrAPa<(FQfk^SDmgPfHX
zRaCkb>8}J3mi7!2nhDoKdEhP`x#jF}`L}xMgi?}-UJ{`|Q{#KUZJfU(#jQC?9!2-!
z-kk=^Jvmf%EGb!t-K3s6#|xp-wVL}(hl@sIxLwDQH5e-4w1hL$lIUz`XP!G^sDM7Q
z+zo)G*Hm#>v<eU`abHmc){<QDmz)L_t6w-<tn+gSYOE|Ub0&}gX%bg)j^8qt`x|IU
zKur7YzSnw9T=R~rE6ZaJsw+9}-?7h9`i&gNq$0AbRk_S8y+jAc0HR{46c~35qt+64
z$vp7N*^i4a+!y?AY71+hE#W*O$>H=*HQNT9i|~Fwwm*@7_1AuF)3t96$M2)SMws=-
z4UZKnf#*uC6Je*AdsxOCBwTj5W%U3^6W#}x6}Y54PovrxJ{Lgn)GMF9ffOi(59;)S
zqNGGbxq-Bx9%A4*jDciQsGU5pR!+s9+Rn8v`+)P})$OSYiX&VX4-5{+K9hevvwhM7
za@E8eIi>&|Av;GD>sjL54g*aYUMB$w#m5oxpe5@%Y1{#){=%W~$e$%m$ta*~PW^I;
z85?C!t0(5s{82^olG?8*O-7Z+JclP!EnVX?USmIrDo=Cp<pXEgw|gYD(z!cdj$lH4
zspLj#!`&6A51LV-TV*wsyt9~;5Z}y7ba)|iG-cK$ih8d~mb$PQGK+S>>3TF5#>=Lp
zWSmbigyGf+fC2ulI!>5H4a`)ukxX$N!$B2VWuHslBD_9)g@J5U+h5x6r9fPScY~6M
zH|261&Zp!rnm+9`U!?lAvnVQgF`3Z-vB|$^PrJn9&Bzteu!t_W^x-ejg_W~waX~3E
zqcIvpB!ST-zf0QQ(uiJVft!<nZE$M#27yY7rgpG*#7anMKeTJv<d@7WiV?<7i2(XN
z-u=O^&JT|FF(dWKt5^Nw{WC_Fo+C;w@sGL6T2~E>M0myvGE!~`&d`LKBiJz4bEA{G
zbytVVurQCcQzKQP$r5%_{qjN$Sp1lSo`e*!JEBvkib_%C2yEk^jw*?A4ioa7L!b1V
zodidu#;ZcJF;RZ34k8)|5+zJ@7Lxv({K{%hj3mUI46C9H3V_zX6+kgk(1hiE$E&-S
z+*C}Fgh3iqJyew|&17D)N*L2-%+Y!FXQ(IjE@)meQu#$#%KkJj0^(uFGV7juS%jLa
z1yFE&LkI5_QNp?dCI`Dz5?ZSWO*w_*Wfld+!`@&1n(icsVn7MTW$=Zs7cT~Pw0DiD
zj+M0f+~s~d(Se%e``;&lbGg`<8k*BK^GIWLzC{lf&qsLu3YD+}w8Jn<j@EM!QO5Bd
zCf|QYT(8<_)@?&Ssit;n`#slA_6UdsOn9_vmQf`bOuR<W?llZejobH0Xh>^pay^#I
zNC;@i1;m`Yc|t;<NSi6A`{JjhcljenCLM>u@bJwKg@?22d{nRf;_!^0YKy>JJXw=h
zXKP=i#Wy*9m#}7MN*VC#hBQN_?KQG%Q}qAVT5t1-WZy}LYQ($FuddhF0YI_HvfckI
zxC5RF2Wn(@fS1<jrvA~+vv$SF8Uzz~P(>iQtJ#Qhpz9;iM|Sx`50#Yj@iQ|K1{8J@
zApqur5BM5hJd55Le(?pM7EIct&kp7^tB$|7y)DrAkw<RsKk{Zmjg?1k9y)USLyvs^
zLyw&8Ai<d%@&sZ|A$L$4i{Kj{cB$0U#)s$6mkcYCJU>BydSoi#J*vFhIy^hUlmJ^h
z?WpE>(>h~>b0a*#xf=u2#-7kiZKfXAq2gp=jlp4~i%F{>=WHaG1>j54Q7t%_pc&_+
zmQ*yI;C$6JpOK@QB5;Sjjb6`Y)gYY)I8o0V0cM!75Kl=-F^zs52UIqc-wZv~!sj&B
zPl2`iDKg3POG%gS;?Gbv78ffby|6*_Hejo_KCA<vu%=(-{`K_j<t)!eHb^#)!@8Zp
z##ybVi~_$KkSzz}lqxwkxhgRfhc-GvLIDj|wF+LG=bV+|`q|yBdXH^dDZLuW7;jv2
zLJ-JVxh#Mp2iQsefpibBwHc7B3I<#ZB{BV)o(ATl@1PU`SB624jdps>&P^e5YQh#q
zv(_=+Gs{>%RXw#L-ZZfR4NKJX$yWF@TG=|h0Fo5iornAGgseID#pA5YDXeJxo=tdo
zT57d%F*w`o9?O}<R?c8xbsyp-$}~tUH+mbpzgp`)+1*5{cz}HIs<TF~9Fuxi5H_f%
zQi-dHk~ku@+uQybD{LGto)<YhI1XbnMPmv&@#tO5GJ5qX)g$2Vv6`|M3OhXc&W_Oq
z36g!XwH6O9UT*Z=PUAa&z&+cNvmXWa8a>2cq|>yBUpjV=k8)kvN~6_+dDev!V`Wz~
zlB!x7<ySu4|J<pm0Jt3(H*cJTj1(RjbbGPUu`jytUyt|kVv{IuUQ=XC$Gq53|H)NH
zMZLPN)#^j*V#)5Qr9%_M(aenHmNzdn_QvUcm0@O-?0DRY1Y_uehN;gS9NFIEwkt)#
z?5|6N>JFyiAQz;vz`<I0p!f^sLw~WMy%){_T1EZZQNQj-_xowoulLdY{wV6V`O*E>
zR;;smgUx>HE7ti?zeg+9`B1-~th$E=%39HR<u!g>_m#K#aoty5>c@3odAF;&Q*J`Z
z`1fMN72BrFe$A6s%*Fb02~I!(l$<$$6VUgQu9y&zIpPm;s+E{uk>Q97M*Dm!sr8hS
z6VpVbn^d7yz^*pA{LM|K4m(_#d}l+vr8@@Quqe|)LdH4_21BeO`e7P^LM-@0lt8ie
z`1_2a?E5kA-!bz-y#KRX;yhGRRVLDLqd^Ke+@C|+tR;hSM9hvbsEwA$eu5E48y_j0
zr%`(1H?gE$SG7*UWvhrU#wmv{O>-L|nmaqREy9-FZAuw-82WVutA^=cM6MuifD;{H
z>%jpwmJNVl?py;N7@)Umfbt^;*jzQh_bUg8?_l{M;0WJ+><BA2ardz!EZxP~S<l@>
zuN{s+iNZbbkW!8o63u?RboPh)o}F#Fc{e|5-py#<lOHtirV*w64AD(BxQ3S(hS%cb
zd=Jt~Ij;zbvGNX(&l)11wO_pE=co*t8I3W?WhfT~CNIWGo11Hjg7Cu-iWvu1;?F@T
zsT<;=_sl@kEwHnwQWiH1VV`huAWFm9fTsij+%b<Vvr#oykS944stOD^SCgH@oibi?
zc2#l|4`EhWbcfH8SLWd=_RLsh(gE?Jvc;gJJg-ZX=msvXx~VQ$Drc}8sQQ_T7xa{z
zv^`xYEfx4|I6lE8s>l(jSPYRDmcB`gsd3tjx0^&!Vtx;s;pdF(*(n9trG)^mjssOP
zmF6RIOJ)5JI{aiq(nV=%7c4_QU=)m>y3PtaQq6IDdvizl0!nftI)pr!4u6C!Nwb|D
z+v3|_|Cr6}{IJdBVFX;Tqg+aY{J*rPZPq1;c<^yMTgHeqw&vF*LP<5B0C+x)mePP;
zQZ>hmrEIW)(G=UQXt8h#>xP{Wm&V%QzA*!yi>eY1q9WJC#SR7&>xouM1$-D_jq}PS
zZP%Sr)vlOu<HJ_BZFm%iaJb5WT*u=rke{Ggzm1`VC8j#S-!?Y3y7sfJ-K{5&drzFO
zYZmMU$gjcwVWM8w;vclX7)!-78dw+2*o|iF_Ao!=XLhT%v%A^rdc7IB6*aIu+M6ku
z#<|MJ<~Q`kCLM}b>51<R>B(4J&Y4?7P(rzzv?(YlT+h(HjTBdQozDc<NG_E!W-^v>
zZdw;+%-Rx-5DZ;?M41&@!hoDqf(DgeyRs`Cf8jWPYfNCfrbNW7rFyZk2J0tx+9z8b
zix2|GLOmC>3iY)K)ert_glLZYE$#9ap>j?<OHzZ^?6l<=JxuGU;5m{|5GiQrAjR#-
zsc+>p+zD*p(|;zvbWtzXhka+_NV`Cr;ePmiwHAco<QcphN7TD!p`+;6_!41F?%^%S
ztN4`HF=Uy;a`AC!xl#crs)t;vXGa}CTnJ49bPbqN{fc}}kVT58PHZ}LF6y(1gO{cg
z_`-opZ+E_@wrA9qKr^k;5||TeEn^GX%S{O{dh6z^YgY}d%2pU!Nb`9sVfxb)@G;7b
z6h|O+ZqR4XgpQ(oK@!C2>*INCmrQTYD5_2o#%PwI2QJ|aWcj>rT6m0t5SpQEX!D=t
zmvd5PyUaG?9Vi)|2;DgKAflVy-R&o9y>>?ee>a0qH`|&UX)E}2OISNm-3H%05slfc
z8dYc?&QFmdeG*+YRw!`=&3!I4iFgczhrpk=@|&hW&p*7(_+mk$;FmD+(=IeI<}19u
z3Z33!K2R(_$x(WfP-xnmeKiWr#`pU4<oV$_duWg5WD*E?&gwd4jp_5#g9F;Z%l_$$
z1ASCl1$he0Yd)~=^ORmO$s<KZ))Zik(;<0`SDAaR%x>S57-FjBujlnOdVNT4g}iX;
zT`|EpPeUx^BR(`I#|LnGz-nd1Xg(IxJg=D?vdKRKeL~sP<-#4cj(dknl+(K!p&my9
zB&e;n;Zixinh*~^lt^=61vA7o<VBs*6PsorN3jEKKB0&-%A1Ma1H)3>-jj6`4k~Ld
zM<X1?Ije->tXR5zf;J+w9Dt}J4w&$E3}v~LVg#5!6Co40Y(|>wN>gOF>tVTpgFXTu
z!KA<;Lg3-a@fjey1t_3PVS6zfsx(TBo)0_3P)3KSBu=EE4+F}BuuRD%nMu|~9ys!}
z>2T~}$4FF_i%*1oNrYlYBd&a80v4>$RIFUS!$qPR4dU{l#$0vFr5`1!iyx&u?!P)%
zeI}QjAZr+=JCq!<l$kAo4oLu%Xaxgahs6VeZ5IpYD#K`y8%Y5b1qw~aX^s1%%42(9
zd<E#`3?0T^_s<Ury?nj&BJu4tpR~(~tCmHwu<Ha`5F@B=!QEI&_YuupoQ2BnX-?3E
zE*^PkNHyg>E3zBso960JXpXd?w?8!(%Zeum)08v1W6jKmL~cGEvS|vS2z{n}fMKz?
z%TD7);E={+6FjPgW$AF<ja6bg2jaO#p3mwRFFAr^<VcdCI}w-9H|RtUe_Ga(>thH&
zJ4QIB4K^LWX$Ny6Q<9%>mW>$;ES!PPYB;>p1$!2^oXzl3@eQU$sMzWmpkCfIU7SOp
z@U|6@xIVf9kT_}~vbg0`a7)1n4?|v%ksuWsAGf7`f&^cxtd%r??(K$pk&<U1T(}6*
zggS>gqSlN8_2ruLta3&_3YOsz02YM;^}iHe916dNc~vp8=>`eD3x61A=FRcZ!P%M5
zZ;K=2mSl9a)29`oykYLLo~A0u`mkmdlp9WDF$aRN1fwL5lCwThjE=!L#V3pHhiRn4
zV3E-0z@;+4^Yz|pZcM)?dHYkKcQgI0<vB}SV=rmT75ZGWl2--0l9#LlVP?FpD2WHA
zsdVy$+=~vul9byRr7Iog@Q&u_E68yQ7>R}HAJZ8p1Yqyyp-)GlkG*!;EG2-G^lSJC
z_yPKNM7huP1m7GV{;Fg5PtM$heU%qOfKh&%{Yie6%7!Gl0+7$kQf|^8VnxhgaJ~<m
zCJzrnK&p9%L%ih%2@!xx+~dk2iRmh@g5ZN`S_txrFUr2c%<OepU8CwNwJ+WrI+{iA
zuF^LuQm9WfD$z4SjNt+}&qC$h4_NO<kr2L_4j@?>MgXjo?*SopT28Tm6zz5vsM&JG
zP%B3%XWrN*K>;CIBqa(tflDO2Pavx^b}&A^oT*DD%Yl^DV$NJG2sIi^gcsn!RWZ4v
zy5!s}BQKth!1Y!e0}?v+7a*b$8xv`%wb&U4kP`xQSvUL@3^II8;)P8KwLl=74<z=I
z0iIrX>Ku`{B&aJh#JLvmJ>=qVM%5Qs7-v3TYi>CPlu?LFTzgrwdlF5goz^bt;(!3X
z&r#e&ELU=9CxvYWkO<GJ7*p}B;@01poDxXVD7!3H<nn^8bGS`3_h=$z3_Y|)l4@&t
zHkGz}>&pE_9{usd=7&lwy|7!l4IPA1LL+0O9o>Tky7Ur6!#Br!l(7+*yRS}8_w84w
z{nxJ#k6)~o);Q_zoPv#N&3&Vi44@{_Bc~3C055Ch13D@a5s@2a9=pia#!>_VFE(%p
z=hUrA$H@3wlxC4-^0b-QSx=T-h8W?#m9*1@CgR0)f80lzeGnf3#m_{Sz;+PKgo~N#
zweET&Q4p$e#XS`0t;>Q@&1ac2=gVFttd2YfZ#d^gS_sYhkWc0l!v$=`36ip1=)gYX
zp5jp4(<R^)Ou^y`?lJd;ZPj0Z9CD-tHize;@FLGvvY!K=cguG}tBFscYy?@Yo7Rz=
zTHJmk*C)>yv7QM=^&jbF(V~r36BLX|Pk;{FVYR3#hM(5my{rFcoJ7;c&}>aKq{6Ol
zsZvFwxL5><wq1;#+^}A(q4Q_QCORH>G6N!|!)D-$X2Y3fSE#olPML-@K7@d*s>JwF
zu8c<B7-H=TDpZ|uhK!dSenHuBWUvVEK#~Wc5s!(ycM*apx4fJf=j9w(U!B$)UBW!Y
z!T^K-P3Bkbrj$LAk^u>Td-<N(pj-1kXE|V5?rT|5C_2d-C0r0HRM*WJXJ<#{43qJE
zg7H_m>OrX>rIswz%L=wHnJr8JFTTp7k09dhrOk_*l#-B}6GLlVWiQYNn+p}hlmX}+
zY@#eD4t)7`qfP-3gsGDkZoG9ER8$m7Dd?4tp)S{OfDY$n<KXzJPHV3$p~~qXTumh)
z1~DFtjSmFhL*TP4LKq*EuQBNpcN4<TG;uzq2cpc|4C7pDAVeF0yfg>h;qf^tD4(C4
z+P%}0v$M6=NBwh5KVx5?oSw5X^J`=Flr3GE&qp%JO!Ki4{yj-K>GFL_>NPY<YY`au
z<jWj)VV_|M8#q}?&`pZ8d<hSm#)2{4y$r12uVSkDJtO<N=hAdiS)R1Gn!9{!N(M9m
z6R$eZL}=!NOJBN1QpB-%mrTcVO7@u-6o{G{oU*#k#$(5bPbsT|v$X{bA|Id<Jp7Wx
zZbigKav$z-3}eWPWB8RPF0Lr~pd_S^5rSM_=}O*+><`^ANO>~!$-yqU(50r*WVX|-
zp_!b>M=l;`H_HR;oP)U9w_|mNX0&sf^mXG<Xkcvtsds?EkV6fItP&UamKH1}A#Izz
z7xxCNdccvoE){92xgUwM;MKoA1;HKoEaOd~EzNV`^pI^1w;bVpgIq&(pHTIfxk5A)
z<A=C)u_BeQ0Yk;?LV_Bt;H_R|n)w&w7O^<*B;xQ|Y3=Lc5aYHaPnbq~wwXD>AW6-M
z>zU)`{+b4y5vL8b+L^H#DVL~bS0I+#vJqE_Vw6ekuMc0tzJM8{>?6T%-uF%(r`Q0P
zdjQdPcIz}vufKqfz@wt5O{*3$J7iAEne*Pm$O7$pSd7XwoEHB>HPsl!E=q*$f!SIL
zzYY~3@PF(fYjn~}TAM&D7z_cYt;6X&n$9mDVfSzI=_8&ppRQlmld+XE4R+34lPWaX
zJxc?;B_9K6ZAqmr^j*3dpQ%N13izyC680-l(#)+?2lr~EpbP9VS%(!TE+1^Tz`!jM
zBbCW6M!8uiI~isV3s^nIYA*Aji=!2GS~H*V!pB)yV?`&;$#iDWxO7fdriR@N_I7k|
zPQXp3GeGf&$3#1t_OZtAcF|<EkdNXTGghGPf=zv)f-p!KE3z_TW7Wq2J>?{aushQ1
z_$%OtE@_E1VRE3UNhc^UVW)fQDlGpAGJ^1LdKCDp^8{2y{qy;Fd~uZCqGau=oIj<3
zzJ~qzpRc7F)SH4ffKDBf^YQ7*r7R!ej9t`l1wjy8!2N0txP=jpS>k`~S)B+)EnCRa
z0rn7fNhnlz0!?3u`7`5jmJaZ2UJS=-CuTA$b-V*5@l);67>-8xQY}$xt|Eo~@)KPg
zVG$%Q{7>|0v)N+Lw-?&|k#*hgE-vo)H~tUH9xQ>wJD#L{!G(X{%4c_vu#Uo~^2<G4
zwbPyZt7Yw{7oXcUE#%I=UDEZD+b8}D`aF6|f8D*MP4F&o^{XGw+eh-(TOR5z`WXH;
F|2Jpuk+A>(

literal 0
Hc$@<O00001

diff --git a/externals/figlet/figlet.6 b/externals/figlet/figlet.6
new file mode 100644
--- /dev/null
+++ b/externals/figlet/figlet.6
@@ -0,0 +1,1102 @@
+.\"  FIGlet
+.\"  Copyright (C) 1991, 1993, 1994 Glenn Chappell and Ian Chai
+.\"  Internet: <info@figlet.org>
+.\"  Portions Copyright 1996, 1997, 1998, 1999, 2000, 2001 by John Cowan <cowan@ccil.org>
+.\"  Portions Copyright 2002 by Christiaan Keet
+.\"  Portions Copyright 2011, 2012 by Claudio Matsuoka
+.\"  FIGlet, along with the various FIGlet fonts and documentation, may
+.\"  be freely copied and distributed.
+.\"  If you use FIGlet, please send an e-mail message to
+.\"  <info@figlet.org>
+.\"
+.TH FIGLET 6 "31 May 2012" "v2.2.5"
+
+.SH NAME
+FIGlet \- display large characters made up of ordinary screen characters
+
+.SH SYNOPSIS
+.B figlet
+[
+.B \-cklnoprstvxDELNRSWX
+]
+[
+.B \-d
+.I fontdirectory
+]
+.PD 0
+.IP
+.PD
+[
+.B \-f
+.I fontfile
+]
+[
+.B \-m
+.I layoutmode
+]
+.PD 0
+.IP
+.PD
+[
+.B \-w
+.IR outputwidth
+]
+[
+.B \-C
+.I controlfile
+]
+.PD 0
+.IP
+.PD
+[
+.B \-I
+.I infocode
+]
+[
+.I message
+]
+
+.SH DESCRIPTION
+.B FIGlet
+prints its input using large characters
+(called ``FIGcharacters'')made up of ordinary
+screen characters
+(called ``sub-characters'').
+.B FIGlet
+output is generally reminiscent of the
+sort of ``signatures'' many people like to put at the end of e-mail
+and UseNet messages.  It is also reminiscent of the output of some banner
+programs, although it is oriented normally, not sideways.
+
+.B FIGlet
+can print in a variety of fonts, both left-to-right and right-to-left,
+with adjacent FIGcharacters kerned and ``smushed'' together in various ways.
+.B FIGlet
+fonts are stored in
+separate files, which can be identified by the suffix
+.RB `` .flf ''.
+In systems with UTF-8 support
+.B FIGlet
+may also support TOIlet
+.RB `` .tlf ''
+fonts.  Most
+.B FIGlet
+font files will be stored in
+.B FIGlet's
+default font directory.
+
+.B FIGlet
+can also use ``control files'', which tell it to map certain input
+characters to certain other characters, similar to the Unix
+.B tr
+command.  Control files can be identified by the suffix
+.RB `` .flc ''.
+Most
+.B FIGlet
+control files will be stored in
+.B FIGlet's
+default font directory.
+
+You can store
+.B FIGlet
+fonts and control files
+in compressed form.
+See
+.BR "COMPRESSED FONTS" .
+
+.SH USAGE
+Just start up
+.B FIGlet
+(type
+.RB `` figlet '')
+and then type whatever you want.
+Alternatively, pipe a file or the output of another command through
+.BR FIGlet ,
+or put input on the command line
+after the options.
+See
+.B EXAMPLES
+for other things to do.
+
+.SH OPTIONS
+.B FIGlet
+reads command line options from left to right, and only the last
+option that affects a parameter has any effect.  Almost every option
+has an inverse, so that, for example, if
+.B FIGlet
+is customized with a shell
+.BR alias ,
+all the options are usually still available.
+
+Commonly-used options are
+.BR \-f ,
+.BR \-c ,
+.BR \-k ,
+.BR \-t ,
+.B \-p
+and
+.BR \-v .
+
+.TP
+.BI \-f \ fontfile
+Select the font.  The
+.B .flf
+suffix may be left off of
+.IR fontfile ,
+in which case
+.B FIGlet
+automatically appends it.
+.B FIGlet
+looks for the file first in the default font directory and then
+in the current directory, or, if
+.I fontfile
+was given as a full pathname, in the given directory.
+If the
+.B \-f
+option is not specified,
+.B FIGlet
+uses the font that was specified
+when it was compiled.  To find out which font this is, use the
+.B \-I3
+option.
+
+.TP
+.BI \-d \ fontdirectory
+Change the default font directory.
+.B FIGlet
+looks for fonts first in the
+default directory and then in the current directory.
+If the
+.B \-d
+option is not specified,
+.B FIGlet
+uses the directory that was specified
+when it was compiled.  To find out which directory this is, use the
+.B \-I2
+option.
+
+.TP
+.B \-c
+.PD 0
+.TP
+.B \-l
+.PD 0
+.TP
+.B \-r
+.PD 0
+.TP
+.B \-x
+.PD
+These options handle the justification of
+.B FIGlet
+output.
+.B \-c
+centers the output horizontally.
+.B \-l
+makes the output flush-left.
+.B \-r
+makes it flush-right.
+.B \-x
+(default) sets the justification according to whether left-to-right or
+right-to-left text is selected.  Left-to-right text will be flush-left,
+while right-to-left text will be flush-right.  (Left-to-right versus
+right-to-left text is controlled by
+.BR \-L ,
+.B \-R
+and
+.BR \-X .)
+
+.TP
+.B \-t
+.PD 0
+.TP
+.BI \-w \ outputwidth
+.PD
+These options control the
+.IR outputwidth ,
+or the screen width
+.B FIGlet
+assumes when formatting its output.
+.B FIGlet
+uses the
+.I outputwidth
+to determine when to break lines and how to center
+the output.  Normally,
+.B FIGlet
+assumes 80 columns so that people with wide terminals
+won't annoy the people they e-mail
+.B FIGlet
+output to.
+.B \-t
+sets the
+.I outputwidth
+to the terminal width.  If the terminal width cannot be determined,
+the previous
+.I outputwidth
+is retained.
+.B \-w
+sets the
+.I outputwidth
+to the given integer.  An
+.I outputwidth
+of 1 is a special value that tells
+.B FIGlet
+to print each non-space FIGcharacter, in its entirety, on a separate line,
+no matter how wide it is.
+
+.TP
+.B \-p
+.PD 0
+.TP
+.B \-n
+.PD
+These options control how
+.B FIGlet
+handles newlines.
+.B \-p
+puts
+.B FIGlet
+into ``paragraph mode'', which eliminates some unnecessary line
+breaks when piping a multi-line file through
+.BR FIGlet .
+In paragraph mode,
+.B FIGlet
+treats line breaks within a paragraph as if they were merely blanks
+between words.  (Specifically,
+.B \-p
+causes
+.B FIGlet
+to convert any newline which is not preceded by a newline and not
+followed by a space character into a blank.)
+.B \-n
+(default) puts
+.B FIGlet
+back to normal, in which every newline
+.B FIGlet
+reads causes it to produce a line break.
+
+.TP
+.B \-D
+.PD 0
+.TP
+.B \-E
+.PD
+.B \-D
+switches to the German (ISO 646-DE) character set.  Turns `[', `\e'
+and `]' into umlauted A, O and U, respectively.  `{', `|' and `}' turn
+into the respective lower case versions of these.  `~' turns into s-z.
+.B \-E
+turns off
+.B \-D
+processing.
+These options are deprecated,
+which means they probably will not appear
+in the next version of
+.BR FIGlet .
+
+.TP
+.BI \-C \ controlfile
+.PD 0
+.TP
+.B \-N
+.PD
+These options deal with
+.B FIGlet
+.IR controlfiles .
+A 
+.I controlfile
+is a file containing a list of commands that
+.B FIGlet
+executes each time it reads a character.  These commands can map certain
+input characters to other characters, similar to the Unix
+.B tr
+command or the
+.B FIGlet
+.B \-D
+option.
+.B FIGlet
+maintains a list of
+.IR controlfiles ,
+which is empty when
+.B FIGlet
+starts up.
+.B \-C
+adds the given
+.I controlfile
+to the list.
+.B \-N
+clears the
+.I controlfile
+list, cancelling the effect of any previous
+.BR \-C .
+.B FIGlet
+executes the commands in all
+.I controlfiles
+in the list.  See
+the file
+.IR figfont.txt ,
+provided with FIGlet,
+for details on how to write a
+.IR controlfile .
+
+.TP
+.B \-s
+.PD 0
+.TP
+.B \-S
+.PD 0
+.TP
+.B \-k
+.PD 0
+.TP
+.B \-W
+.PD
+.TP
+.B \-o
+.PD
+These options control how
+.B FIGlet
+spaces the FIGcharacters that it outputs.
+.B \-s
+(default) and
+.B \-S
+cause ``smushing''.
+The FIGcharacters are displayed
+as close together as possible,
+and overlapping sub-characters are removed.
+Exactly which sub-characters count as ``overlapping''
+depends on the font's
+.IR layoutmode ,
+which is defined by the font's author.
+.B \-k
+causes ``kerning''.  As many blanks as possible are
+removed between FIGcharacters, so that they
+touch, but the FIGcharacters are not smushed.
+.B \-W
+makes
+.B FIGlet
+display all FIGcharacters at their full width,
+which may be fixed or variable, depending on the font.
+
+The difference between
+.B \-s
+and
+.B \-S
+is that
+.B \-s
+will not smush a font whose author specified
+kerning or full width as the default
+.IR layoutmode ,
+whereas
+.B \-S
+will attempt to do so.
+
+If there is no information in the font
+about how to smush,
+or if the
+.B \-o
+option is specified,
+then the FIGcharacters are ``overlapped''.
+This means that after kerning,
+the first subcharacter of
+each FIGcharacter is removed.
+(This is not done if a FIGcharacter
+contains only one subcharacter.)
+
+.TP
+.BI \-m \ layoutmode
+Specifies an explicit
+.I layoutmode
+between
+.B 1
+and
+.BR 63 .
+.I Smushmodes
+are explained in
+.IR figfont.txt ,
+which also provides complete information
+on the format of a
+.B FIGlet
+font.
+For the sake of backward compatibility
+with versions of
+.B FIGlet
+before 2.2,
+.B \-m0
+is equivalent to
+.BR \-k ,
+.B \-m-1
+is equivalent to
+.BR \-W ,
+and
+.B \-m-2
+is equivalent to
+.BR \-s .
+The
+.B \-m
+switch is normally
+used only by font designers testing the various
+.I layoutmodes
+with a new font.
+
+.TP
+.B \-v
+.PD 0
+.TP
+.BI \-I \ infocode
+.PD
+These options print various information about
+.BR FIGlet ,
+then exit.  If several of these options are given on the command line, only
+the last is executed, and only after
+all other command-line options have been dealt with.
+
+.B \-v
+prints version and copyright information, as well as a ``Usage: ...''
+line.
+.B \-I
+prints the information corresponding to the given
+.I infocode
+in a consistent, reliable (i.e., guaranteed to be the same in
+future releases) format.
+.B \-I
+is primarily intended to be used by programs that use
+.BR FIGlet .
+.I infocode
+can be any of the following.
+.RS
+.TP
+.BR -1 " Normal operation (default)."
+This
+.I infocode
+indicates that
+.B FIGlet
+should operate normally, not giving any informational printout,
+printing its input in the selected font.
+.TP
+.BR 0 " Version and copyright."
+This is identical to
+.BR \-v .
+.TP
+.BR 1 " Version (integer)."
+This will print the version of your copy of
+.B FIGlet
+as a decimal integer.  The main version number is multiplied by 10000,
+the sub-version number is multiplied by 100, and the sub-sub-version
+number is multiplied by 1.  These are added together, and the result is
+printed out.  For example,
+.B FIGlet
+2.2 will print
+.RB `` 20200 ''
+, version 2.2.1 will print
+.RB `` 20201 ''.
+Similarly, version 3.7.2 would print
+.RB `` 30702 ''.
+These numbers are guaranteed to be
+ascending, with later versions having higher numbers.  Note that
+the first major release of
+.BR FIGlet ,
+version 2.0, did not have the
+.B \-I
+option.
+.TP
+.BR 2 " Default font directory."
+This will print the default font directory.  It is affected by the
+.B \-d
+option.
+.TP
+.BR 3 " Font."
+This will print the name of the font
+.B FIGlet
+would use.  It is affected by
+the
+.B \-f
+option.
+This is not a filename; the
+.RB `` .flf ''
+suffix is not printed.
+.TP
+.BR 4 " Output width."
+This will print the value
+.B FIGlet
+would use for
+.IR outputwidth ,
+the number of columns wide
+.B FIGlet
+assumes the screen is.
+It is affected by the
+.B \-w
+and
+.B \-t
+options.
+.TP
+.BR 5 " Supported font formats."
+This will list font formats supported by
+.B FIGlet .
+Possible formats are
+.RB `` flf2 ''
+for FIGfont Version 2
+.B .flf
+files and
+.RB `` tlf2 ''
+for TOIlet
+.B .tlf
+files.
+.RE
+.IP
+If
+.I infocode
+is any other positive value,
+.B FIGlet
+will simply exit without printing anything.
+
+.TP
+.B \-L
+.PD 0
+.TP
+.B \-R
+.PD 0
+.TP
+.B \-X
+.PD
+These options control whether
+.B FIGlet
+prints left-to-right or right-to-left.
+.B \-L
+selects left-to-right printing.
+.B \-R
+selects right-to-left printing.
+.B \-X
+(default) makes
+.B FIGlet
+use whichever is specified in the font file.
+
+Once the options are read,
+if there are any remaining words on the command line,
+they are used instead
+of standard input as the source of text.
+This feature
+allows shell scripts to generate large letters without having to dummy
+up standard input files.
+
+An empty argument, obtained by two sequential quotes,
+results in a line break.
+
+.SH EXAMPLES
+To use
+.B FIGlet
+with its default settings, simply type
+.RS
+.nf
+.ft B
+
+example% figlet
+
+.ft R
+.fi
+.RE
+and then type whatever you like.
+
+To change the font, use the
+.B \-f
+option, for example,
+.RS
+.nf
+.ft B
+
+example% figlet \-f script
+
+.ft R
+.fi
+.RE
+
+Use the
+.B \-c
+option if you would prefer centered output:
+.RS
+.nf
+.ft B
+
+example% figlet \-c
+
+.ft R
+.fi
+.RE
+
+We have found that the most common use of
+.B FIGlet
+is making up large text to be placed in e-mail messages.  For this
+reason,
+.B FIGlet
+defaults to 80 column output.  If you are using a wider terminal, and
+would like
+.B FIGlet
+to use the full width of your terminal, use the
+.B \-t
+option:
+.RS
+.nf
+.ft B
+
+example% figlet \-t
+
+.ft R
+.fi
+.RE
+
+If you don't want
+.B FIGlet
+to smush FIGcharacters into each other, use the
+.B \-k
+option:
+.RS
+.nf
+.ft B
+
+example% figlet \-k
+
+.ft R
+.fi
+.RE
+
+If
+.B figlet
+gets its input from a file, it is often a good idea to use
+.BR \-p :
+.RS
+.nf
+.ft B
+
+example% figlet \-p < myfile
+
+.ft R
+.fi
+.RE
+
+Of course, the above can be combined:
+.RS
+.nf
+.ft B
+
+example% figlet \-ptk \-f shadow < anotherfile
+example% figlet \-cf slant
+
+.ft R
+.fi
+.RE
+
+Finally, if you want to have
+.B FIGlet
+take the input from the command
+line instead of a file:
+.RS
+.nf
+.ft B
+
+example% figlet Hello world
+
+.ft R
+.fi
+.RE
+
+.SS Other Things to Try
+On many systems nice effects can be obtained from the
+.B lean
+font by piping it through
+.BR tr .
+Some you might want to try are the following:
+
+.RS
+.nf
+.ft B
+example% figlet \-f lean | tr ' _/' ' ()'
+example% figlet \-f lean | tr ' _/' './\e\e'
+example% figlet \-f lean | tr ' _/' ' //'
+example% figlet \-f lean | tr ' _/' '/  '
+.ft R
+.fi
+.RE
+
+Similar things can be done with the
+.B block
+font and many of the other
+.B FIGlet
+fonts.
+
+.SH COMPRESSED FONTS
+You can compress the fonts and controlfiles
+using the
+.B zip
+archiving program.
+Place only one font or controlfile in each archive,
+and rename the archive file (which will have a name
+ending in
+.BR .zip )
+back to
+.B .flf
+or
+.B .flc
+as the case may be.
+If you don't rename the file appropriately,
+.B FIGlet
+won't be able to find it.
+
+.B FIGlet
+does not care what the filename within the
+.B .zip
+archive is, and will process only the first file.
+
+The
+.B .zip
+format was chosen because tools to create and manipulate it
+are widely available for free
+on many platforms.
+
+.SH THE STANDARD FONTS
+
+Here are a few notes about some of the fonts provided with
+.IR FIGlet .
+You can get many other font from the Web site
+.br
+http://www.figlet.org/   This location 
+should also contain the latest version of
+.B FIGlet
+and other related utilities.
+
+The font
+.I standard
+is the basic
+.B FIGlet
+font, used when no other font is specified.
+(This default can be changed when
+.B FIGlet
+is compiled on your system.)
+The
+.I controlfiles
+.IR 8859-2 ,
+.IR 8859-3 ,
+.IR 8859-4 ,
+and
+.I 8859-9
+are provided for interpreting those character sets,
+also known as ISO Latin-2 through Latin-5 respectively.
+The character set 8859-1 (ISO Latin-1) is
+.B FIGlet's
+default and requires no special
+.IR controlfile .
+
+Closely related are the fonts
+.IR slant ,
+.IR shadow ,
+.IR small ,
+.I smslant
+(both small and slanted),
+.IR smshadow ,
+(both small and shadowed),
+and
+.IR big .
+These fonts support only Latin-1, except that
+.I big
+supports Greek FIGcharacters as well;
+the
+.I controlfiles
+.I frango
+(for Greek text written in Latin characters, so-called
+.RI `` frangovlakhika ''),
+and
+.I 8859-7
+(for mixed Latin/Greek text)
+are provided.
+
+The
+.I ivrit
+font is a right-to-left font
+including both Latin and Hebrew FIGcharacters;
+the Latin characters are those of the
+.I standard
+font.
+The available
+.I controlfiles
+are
+.IR ilhebrew ,
+which maps the letters you get
+by typing on a U.S. keyboard
+as if it were a Hebrew keyboard;
+.IR ushebrew ,
+which makes a reasonable mapping from
+Latin letters to Hebrew ones;
+and
+.IR 8859-8 ,
+which supports mixed Latin/Hebrew text.
+.B Warning:
+.B FIGlet
+doesn't support bidirectional text,
+so everything will come out right-to-left,
+even Latin letters.
+
+The fonts
+.IR terminal ,
+.IR digital ,
+and
+.I bubble
+output the input character with some decoration around it
+(or no decoration,
+in the case of
+.IR terminal ).
+The characters coded 128 to 159,
+which have varying interpretations, are output as-is.
+You can use the appropriate
+.I controlfiles
+to process Latin-2, Latin-3, or Latin-4 (but not Latin-5) text,
+provided your output device
+has screen or printer fonts that
+are appropriate for these character sets.
+
+Two script fonts are available:
+.IR script ,
+which is larger than
+.IR standard ,
+and
+.IR smscript ,
+which is smaller.
+
+The font 
+.I lean
+is made up solely of `/' and `_' sub-characters;
+.I block
+is a straight (non-leaning) version of it.
+
+The font
+.I mini
+is very small, and especially suitable for e-mail signatures.
+
+The font
+.I banner
+looks like the output of the
+.B banner
+program;
+it is a capitals and small capitals font
+that doesn't support the ISO Latin-1 extensions
+to plain ASCII.
+It does, however, support the Japanese
+.I katakana
+syllabary;
+the
+.I controlfile
+.I uskata
+maps the upper-case and lower-case Latin letters
+into the 48 basic
+.I katakana
+characters,
+and the
+.I controlfile
+.I jis0201
+handles JIS 0201X (JIS-Roman)
+mixed Latin and
+.I katakana
+text.
+Furthermore, the
+.I banner
+font also supports Cyrillic (Russian)
+FIGcharacters; the
+.I controlfile
+.I 8859-5
+supports mixed Latin and Cyrillic text,
+the
+.I controlfile
+.I koi8r
+supports the popular KOI8-R mapping of mixed text,
+and the
+.I controlfile
+.I moscow
+supports a
+sensible mapping from Latin to Cyrillic,
+compatible with the
+.I moscow
+font (not supplied).
+
+The fonts
+.I mnemonic
+and
+.I safemnem
+support the mnemonic character set
+documented in RFC 1345.
+They implement a large subset of Unicode
+(over 1800 characters) very crudely,
+using ASCII-based mnemonic sequences,
+and are good for getting a quick look
+at UTF-8 unicode files,
+using the controlfile
+.IR utf8 .
+
+.SH ENVIRONMENT
+.TP
+.B FIGLET_FONTDIR
+If
+.RB $ FIGLET_FONTDIR
+is set, its value is used as a path to search for font files.
+
+.SH FILES
+.PD 0
+.TP 20
+.IB file .flf
+.B FIGlet
+font file
+.TP 20
+.IB file .flc
+.B FIGlet
+control file
+.PD
+
+.SH DIAGNOSTICS
+.B FIGlet's
+diagnostics are intended to be self-explanatory.  Possible
+messages are
+
+.RS
+.nf
+.ft B
+Usage: ...
+Out of memory
+Unable to open font file
+Not a FIGlet 2 font file
+Unable to open control file
+Not a FIGlet 2 control file
+"\-t" is disabled, since ioctl is not fully implemented.
+.ft R
+.fi
+.RE
+
+This last message is printed when the
+.B \-t
+option is given, but the operating system in use does not include
+the system call
+.B FIGlet
+uses to determine the terminal width.
+
+.B FIGlet
+also prints an explanatory message if the
+.B \-F
+option is given on the command line.
+The earlier version of
+.BR FIGlet ,
+version 2.0, listed the available fonts when the
+.B \-F
+option was given.  This option has been removed from
+.B FIGlet
+2.1.  It has been replaced by the
+.B figlist
+script, which is part of the standard
+.B FIGlet
+package.
+
+.SH ORIGIN
+.RB `` FIGlet ''
+stands for ``Frank, Ian and Glenn's LETters''.  Inspired by Frank's .sig,
+Glenn wrote (most of) it, and Ian helped.
+
+Most of the standard
+.B FIGlet
+fonts were inspired by signatures on various UseNet
+articles.  Since typically hundreds of people use the same style of
+letters in their signatures, it was often not deemed necessary to give
+credit to any one font designer.
+
+.SH BUGS
+Very little error checking is done on font and control files.  While
+.B FIGlet
+tries to be forgiving of errors, and should (hopefully) never actually
+crash, using an improperly-formatted file with
+.B FIGlet
+will produce unpredictable output.
+
+.B FIGlet
+does not handle format characters in a very intelligent way.
+A tab character is converted to a blank, and vertical-tab, form-feed and
+carriage-return are each converted to a newline.  On many systems, tabs
+can be handled better by piping files through
+.B expand
+before piping through
+.BR FIGlet .
+
+.B FIGlet
+output is quite ugly if it is displayed in a proportionally-spaced font.
+I suppose this is to be expected.
+
+Please report any errors you find in this man page or the program to
+<info@figlet.org>
+.SH WEBSITE AND MAILING LIST
+You can get many fonts which are not in the basic
+.B FIGlet
+package from the Web site
+http://www.figlet.org/   It 
+should also contain the latest version of
+.B FIGlet
+and other utilities related to
+.BR FIGlet .
+
+There is a mailing list for 
+.B FIGlet 
+for general discussions about 
+.B FIGlet 
+and a place where you can ask questions or share ideas 
+with other 
+.B FIGlet 
+users. It is also the place where we will publish 
+news about new fonts, new software updates etc.
+
+To subscribe or unsubscribe from the 
+.B FIGlet 
+mailing list,
+please send email to figlet-subscribe@figlet.org or figlet-unsubscribe@figlet.org or visit the 
+following web page: http://www.figlet.org/mailman/listinfo/figlet
+
+.SH AUTHORS
+Glenn Chappell did most of the work. 
+You can e-mail him but he is not an e-mail fanatic; people who e-mail
+Glenn will probably get answers, but if you e-mail his best friend:
+
+Ian Chai, who
+.I is
+an e-mail fanatic, you'll get answers, endless conversation about the
+mysteries of life, invitations to join some 473 mailing lists and a
+free toaster.  (Well, ok, maybe not the free toaster.) 
+
+Frank inspired this whole project with his .sig, but don't e-mail
+him; he's decidedly an un-e-mail-fanatic.
+
+Gilbert "The Mad Programmer" Healton added the
+.B \-A
+option for version 2.1.1.  This option specified input from
+the command line; it is still allowed,
+but has no effect.
+
+John Cowan added the
+.BR \-o ,
+.BR \-s ,
+.BR \-k ,
+.BR \-S ,
+and
+.B \-W
+options, and
+the support for Unicode mapping tables,
+ISO 2022/HZ/Shift-JIS/UTF-8 input,
+and compressed fonts
+and control files.
+He also revised this documentation,
+with a lot of input from
+Paul Burton.
+
+Claudio Matsuoka added the support for
+.B .tlf
+files for version 2.2.4 and performs random hacks and bugfixes.
+
+As a fan of FIGlet, Christiaan Keet revised the official FIGlet documentation 
+and set up the new FIGlet website at http://www.figlet.org/ (and the 
+corresponding ftp://ftp.figlet.org/pub/figlet/)
+
+.SH SEE ALSO
+.BR figlist (6),
+.BR chkfont (6),
+.BR showfigfonts (6),
+.BR toilet (1)
diff --git a/externals/figlet/figlet.c b/externals/figlet/figlet.c
new file mode 100644
--- /dev/null
+++ b/externals/figlet/figlet.c
@@ -0,0 +1,2131 @@
+/****************************************************************************
+
+  FIGlet Copyright 1991, 1993, 1994 Glenn Chappell and Ian Chai
+  FIGlet Copyright 1996, 1997, 1998, 1999, 2000, 2001 John Cowan
+  FIGlet Copyright 2002 Christiaan Keet
+  FIGlet Copyright 2011, 2012 Claudio Matsuoka
+  Portions written by Paul Burton and Christiaan Keet
+  Internet: <info@figlet.org>
+  FIGlet, along with the various FIGlet fonts and documentation, is
+    copyrighted under the provisions of the New BSD License (3-clause)
+    (as listed in the file "LICENSE" which is included in this package)
+****************************************************************************/
+
+#define DATE "31 May 2012"
+#define VERSION "2.2.5"
+#define VERSION_INT 20205
+
+/* FIGlet (Frank, Ian & Glenn's Letters) */
+/* by Glenn Chappell */
+/* Apr 1991 */
+/* Automatic file addition by Ian Chai May 1991 */
+/* Punctuation and numbers addition by Ian Chai Jan 1993 */
+/* Full ASCII by Glenn Chappell Feb 1993 */
+/* Line-breaking, general rewrite by Glenn Chappell Mar 1993 */
+/* Hard blanks by Glenn Chappell Apr 1993 */
+/* Release 2.0 5 Aug 1993 */
+/* Right-to-left printing, extended char set by Glenn Chappell Dec 1993 */
+/* Control files by Glenn Chappell Feb 1994 */
+/* Release 2.1 12 Aug 1994 */
+/* Release 2.1.1 25 Aug 1994 */
+/* Release 2.1.2 by Gilbert (Mad Programmer) Healton: Add -A command line 
+   option.  Sept 8, 1996 */
+/* Release 2.2 by John Cowan: multibyte inputs, compressed fonts,
+   mapping tables, kerning/smushing options. */
+/* Release 2.2.1 by Christiaan Keet: minor updates including readmes
+   FAQs and comments. 13 July 2002. The new official FIGlet website is 
+   http://www.figlet.org/  */
+/* Release 2.2.2 by Christiaan Keet: License changed from "Artistic License"
+   to "Academic Free License" as agreed by FIGlet authors. 05 July 2005 */
+/* Release 2.2.3 by Claudio Matsuoka, 12 Jan 2011: BSD license, fixes */
+/* Release 2.2.4 by Claudio Matsuoka, 26 Jan 2011: tlf2 font support */
+/* Release 2.2.5 by Claudio Matsuoka, 31 May 2012: flc licensing, minor fixes */
+
+/*---------------------------------------------------------------------------
+  DEFAULTFONTDIR and DEFAULTFONTFILE should be defined in the Makefile.
+  DEFAULTFONTDIR is the full path name of the directory in which FIGlet
+    will search first for fonts (the ".flf" files).
+  DEFAULTFONTFILE is the filename of the font to be used if no other
+    is specified (standard.flf is recommended, but any other can be
+    used). This file should reside in the directory specified by
+    DEFAULTFONTDIR.
+---------------------------------------------------------------------------*/
+#ifndef DEFAULTFONTDIR
+#define DEFAULTFONTDIR "fonts"
+#endif
+#ifndef DEFAULTFONTFILE
+#define DEFAULTFONTFILE "standard.flf"
+#endif
+
+#include <stdio.h>
+#ifdef __STDC__
+#include <stdlib.h>
+#endif
+#include <string.h>
+#include <ctype.h>
+#include <sys/stat.h>
+#include <fcntl.h>     /* Needed for get_columns */
+
+#if defined(unix) || defined(__unix__) || defined(__APPLE__)
+#include <unistd.h>
+#include <sys/ioctl.h> /* Needed for get_columns */
+#endif
+
+#ifdef TLF_FONTS
+#include <wchar.h>
+#include <wctype.h>
+#include "utf8.h"
+#endif
+
+#include "zipio.h"     /* Package for reading compressed files */
+
+#define MYSTRLEN(x) ((int)strlen(x)) /* Eliminate ANSI problem */
+
+#define DIRSEP '/'
+#define DIRSEP2 '\\'
+/* Leave alone for Unix and MS-DOS/Windows!
+Note: '/' also used in filename in get_columns(). */
+
+#define FONTFILESUFFIX ".flf"
+#define FONTFILEMAGICNUMBER "flf2"
+#define FSUFFIXLEN MYSTRLEN(FONTFILESUFFIX)
+#define CONTROLFILESUFFIX ".flc"
+#define CONTROLFILEMAGICNUMBER "flc2"   /* no longer used in 2.2 */
+#define CSUFFIXLEN MYSTRLEN(CONTROLFILESUFFIX)
+#define DEFAULTCOLUMNS 80
+#define MAXLEN 255     /* Maximum character width */
+
+/* Add support for Sam Hocevar's TOIlet fonts */
+#ifdef TLF_FONTS
+#define TOILETFILESUFFIX ".tlf"
+#define TOILETFILEMAGICNUMBER "tlf2"
+#define TSUFFIXLEN MYSTRLEN(TOILETFILESUFFIX)
+
+int toiletfont;	/* true if font is a TOIlet TLF font */
+#endif
+
+
+/****************************************************************************
+
+  Globals dealing with chars that are read
+
+****************************************************************************/
+
+typedef long inchr; /* "char" read from stdin */
+
+inchr *inchrline;  /* Alloc'd inchr inchrline[inchrlinelenlimit+1]; */
+                   /* Note: not null-terminated. */
+int inchrlinelen,inchrlinelenlimit;
+inchr deutsch[7] = {196, 214, 220, 228, 246, 252, 223};
+  /* Latin-1 codes for German letters, respectively:
+     LATIN CAPITAL LETTER A WITH DIAERESIS = A-umlaut
+     LATIN CAPITAL LETTER O WITH DIAERESIS = O-umlaut
+     LATIN CAPITAL LETTER U WITH DIAERESIS = U-umlaut
+     LATIN SMALL LETTER A WITH DIAERESIS = a-umlaut
+     LATIN SMALL LETTER O WITH DIAERESIS = o-umlaut
+     LATIN SMALL LETTER U WITH DIAERESIS = u-umlaut
+     LATIN SMALL LETTER SHARP S = ess-zed
+  */
+
+int hzmode;  /* true if reading double-bytes in HZ mode */
+int gndbl[4]; /* gndbl[n] is true if Gn is double-byte */
+inchr gn[4]; /* Gn character sets: ASCII, Latin-1, none, none */
+int gl; /* 0-3 specifies left-half Gn character set */
+int gr; /* 0-3 specifies right-half Gn character set */
+
+int Myargc;  /* to avoid passing around argc and argv */
+char **Myargv;
+
+/****************************************************************************
+
+  Globals dealing with chars that are written
+
+****************************************************************************/
+
+#ifdef TLF_FONTS
+typedef wchar_t outchr; /* "char" written to stdout */
+#define STRLEN(x) wcslen(x)
+#define STRCPY(x,y) wcscpy((x),(y))
+#define STRCAT(x,y) wcscat((x),(y))
+#define ISSPACE(x) iswspace(x)
+#else
+typedef char outchr; /* "char" written to stdout */
+#define STRLEN(x) MYSTRLEN(x)
+#define STRCPY(x,y) strcpy((x),(y))
+#define STRCAT(x,y) strcat((x),(y))
+#define ISSPACE(x) isspace(x)
+#endif
+
+typedef struct fc {
+  inchr ord;
+  outchr **thechar;  /* Alloc'd char thechar[charheight][]; */
+  struct fc *next;
+  } fcharnode;
+
+fcharnode *fcharlist;
+outchr **currchar;
+int currcharwidth;
+int previouscharwidth;
+outchr **outputline;   /* Alloc'd char outputline[charheight][outlinelenlimit+1]; */
+int outlinelen;
+
+
+/****************************************************************************
+
+  Globals dealing with command file storage
+
+****************************************************************************/
+
+typedef struct cfn {
+  char *thename;
+  struct cfn *next;
+  } cfnamenode;
+
+cfnamenode *cfilelist,**cfilelistend;
+
+typedef struct cm {
+  int thecommand;
+  inchr rangelo;
+  inchr rangehi;
+  inchr offset;
+  struct cm *next;
+  } comnode;
+
+comnode *commandlist,**commandlistend;
+
+/****************************************************************************
+
+  Globals affected by command line options
+
+****************************************************************************/
+
+int deutschflag,justification,paragraphflag,right2left,multibyte;
+int cmdinput;
+
+#define SM_SMUSH 128
+#define SM_KERN 64
+#define SM_EQUAL 1
+#define SM_LOWLINE 2
+#define SM_HIERARCHY 4
+#define SM_PAIR 8
+#define SM_BIGX 16
+#define SM_HARDBLANK 32
+
+int smushmode;
+
+#define SMO_NO 0     /* no command-line smushmode */
+#define SMO_YES 1    /* use command-line smushmode, ignore font smushmode */
+#define SMO_FORCE 2  /* logically OR command-line and font smushmodes */
+
+int smushoverride;
+
+int outputwidth;
+int outlinelenlimit;
+char *fontdirname,*fontname;
+
+
+/****************************************************************************
+
+  Globals read from font file
+
+****************************************************************************/
+
+char hardblank;
+int charheight;
+
+
+/****************************************************************************
+
+  Name of program, used in error messages
+
+****************************************************************************/
+
+char *myname;
+
+
+#ifdef TIOCGWINSZ
+/****************************************************************************
+
+  get_columns
+
+  Determines the number of columns of /dev/tty.  Returns the number of
+  columns, or -1 if error.  May return 0 if columns unknown.
+  Requires include files <fcntl.h> and <sys/ioctl.h>.
+  by Glenn Chappell & Ian Chai 14 Apr 1993
+
+****************************************************************************/
+
+int get_columns()
+{
+  struct winsize ws;
+  int fd,result;
+
+  if ((fd = open("/dev/tty",O_WRONLY))<0) return -1;
+  result = ioctl(fd,TIOCGWINSZ,&ws);
+  close(fd);
+  return result?-1:ws.ws_col;
+}
+#endif /* ifdef TIOCGWINSZ */
+
+
+/****************************************************************************
+
+  myalloc
+
+  Calls malloc.  If malloc returns error, prints error message and
+  quits.
+
+****************************************************************************/
+
+#ifdef __STDC__
+char *myalloc(size_t size)
+#else
+char *myalloc(size)
+int size;
+#endif
+{
+  char *ptr;
+#ifndef __STDC__
+  extern void *malloc();
+#endif
+
+  if ((ptr = (char*)malloc(size))==NULL) {
+    fprintf(stderr,"%s: Out of memory\n",myname);
+    exit(1);
+    }
+  else {
+    return ptr;
+    }
+}
+
+
+/****************************************************************************
+
+  hasdirsep
+
+  Returns true if s1 contains a DIRSEP or DIRSEP2 character.
+
+****************************************************************************/
+
+int hasdirsep(s1)
+char *s1;
+{
+  if (strchr(s1, DIRSEP)) return 1;
+  else if (strchr(s1, DIRSEP2)) return 1;
+  else return 0;
+}
+
+/****************************************************************************
+
+  suffixcmp
+
+  Returns true if s2 is a suffix of s1; uses case-blind comparison.
+
+****************************************************************************/
+
+int suffixcmp(s1, s2)
+char *s1;
+char *s2;
+{
+  int len1, len2;
+
+  len1 = MYSTRLEN(s1);
+  len2 = MYSTRLEN(s2);
+  if (len2 > len1) return 0;
+  s1 += len1 - len2;
+  while (*s1) {
+    if (tolower(*s1) != tolower(*s2)) return 0;
+    s1++;
+    s2++;
+    }
+  return 1;
+}
+   
+/****************************************************************************
+
+  skiptoeol
+
+  Skips to the end of a line, given a stream.  Handles \r, \n, or \r\n.
+
+****************************************************************************/
+
+void skiptoeol(fp)
+ZFILE *fp;
+{
+  int dummy;
+
+  while (dummy=Zgetc(fp),dummy!=EOF) {
+    if (dummy == '\n') return;
+    if (dummy == '\r') {
+      dummy = Zgetc(fp);
+      if (dummy != EOF && dummy != '\n') Zungetc(dummy,fp);
+      return;
+      }
+  }
+}
+
+
+/****************************************************************************
+
+  myfgets
+
+  Local version of fgets.  Handles \r, \n, and \r\n terminators.
+
+****************************************************************************/
+
+char *myfgets(line,maxlen,fp)
+char *line;
+int maxlen;
+ZFILE *fp;
+{
+  int c = 0;
+  char *p;
+
+  p = line;
+  while((c=Zgetc(fp))!=EOF&&maxlen) {
+    *p++ = c;
+    maxlen--;
+    if (c=='\n') break;
+    if (c=='\r') {
+      c = Zgetc(fp);
+      if (c != EOF && c != '\n') Zungetc(c,fp);
+      *(p-1) = '\n';
+      break;
+      }
+    }
+  *p = 0;
+  return (c==EOF) ? NULL : line;
+}
+
+
+/****************************************************************************
+
+  usageerr
+
+  Prints "Usage: ...." line to the given stream.
+
+****************************************************************************/
+
+void printusage(out)
+FILE *out;
+{
+  fprintf(out,
+    "Usage: %s [ -cklnoprstvxDELNRSWX ] [ -d fontdirectory ]\n",
+    myname);
+  fprintf(out,
+    "              [ -f fontfile ] [ -m smushmode ] [ -w outputwidth ]\n");
+  fprintf(out,
+    "              [ -C controlfile ] [ -I infocode ] [ message ]\n");
+}
+
+
+/****************************************************************************
+
+  printinfo
+
+  Prints version and copyright message, or utility information.
+
+****************************************************************************/
+
+void printinfo(infonum)
+int infonum;
+{
+  switch (infonum) {
+    case 0: /* Copyright message */
+      printf("FIGlet Copyright (C) 1991-2012 Glenn Chappell, Ian Chai, ");
+      printf("John Cowan,\nChristiaan Keet and Claudio Matsuoka\n");
+      printf("Internet: <info@figlet.org> ");
+      printf("Version: %s, date: %s\n\n",VERSION,DATE);
+      printf("FIGlet, along with the various FIGlet fonts");
+      printf(" and documentation, may be\n");
+      printf("freely copied and distributed.\n\n");
+      printf("If you use FIGlet, please send an");
+      printf(" e-mail message to <info@figlet.org>.\n\n");
+      printf("The latest version of FIGlet is available from the");
+      printf(" web site,\n\thttp://www.figlet.org/\n\n");
+      printusage(stdout);
+      break;
+    case 1: /* Version (integer) */
+      printf("%d\n",VERSION_INT);
+      break;
+    case 2: /* Font directory */
+      printf("%s\n",fontdirname);
+      break;
+    case 3: /* Font */
+      printf("%s\n",fontname);
+      break;
+    case 4: /* Outputwidth */
+      printf("%d\n",outputwidth);
+      break;
+    case 5: /* Font formats */
+      printf("%s", FONTFILEMAGICNUMBER);
+#ifdef TLF_FONTS
+      printf(" %s", TOILETFILEMAGICNUMBER);
+#endif
+      printf("\n");
+    }
+}
+
+
+/****************************************************************************
+
+  readmagic
+
+  Reads a four-character magic string from a stream.
+
+****************************************************************************/
+void readmagic(fp,magic)
+ZFILE *fp;
+char *magic;
+{
+  int i;
+
+  for (i=0;i<4;i++) {
+    magic[i] = Zgetc(fp);
+    }
+  magic[4] = 0;
+  }
+  
+/****************************************************************************
+
+  skipws
+
+  Skips whitespace characters from a stream.
+
+****************************************************************************/
+void skipws(fp)
+ZFILE *fp;
+{
+  int c;
+  while (c=Zgetc(fp),isascii(c)&&isspace(c)) ;
+  Zungetc(c,fp);
+  }
+
+/****************************************************************************
+
+  readnum
+
+  Reads a number from a stream.  Accepts "0" prefix for octal and
+  "0x" or "0X" for hexadecimal.  Ignores leading whitespace.
+
+****************************************************************************/
+void readnum(fp,nump)
+ZFILE *fp;
+inchr *nump;
+{
+  int acc = 0;
+  char *p;
+  int c;
+  int base;
+  int sign = 1;
+  char digits[] = "0123456789ABCDEF";
+
+  skipws(fp);
+  c = Zgetc(fp);
+  if (c=='-') {
+    sign = -1;
+    }
+  else {
+    Zungetc(c,fp);
+    }
+  c = Zgetc(fp);
+  if (c=='0') {
+     c = Zgetc(fp);
+     if (c=='x'||c=='X') {
+       base = 16;
+       }
+     else {
+       base = 8;
+       Zungetc(c,fp);
+       }
+    }
+  else {
+    base = 10;
+    Zungetc(c,fp);
+    }
+
+  while((c=Zgetc(fp))!=EOF) {
+    c=toupper(c);
+    p=strchr(digits,c);
+    if (!p) {
+      Zungetc(c,fp);
+      *nump = acc * sign;
+      return;
+      }
+    acc = acc*base+(p-digits);
+    }
+  *nump = acc * sign;
+  }  
+
+/****************************************************************************
+
+  readTchar
+
+  Reads a control file "T" command character specification.
+
+  Character is a single byte, an escape sequence, or
+  an escaped numeric.
+
+****************************************************************************/
+
+inchr readTchar(fp)
+ZFILE *fp;
+{
+  inchr thechar;
+  char next;
+
+  thechar=Zgetc(fp);
+  if (thechar=='\n' || thechar=='\r') { /* Handle badly-formatted file */
+    Zungetc(thechar,fp);
+    return '\0';
+    }
+  if (thechar!='\\') return thechar;
+  next=Zgetc(fp);
+  switch(next) {
+    case 'a':
+      return 7;
+    case 'b':
+      return 8;
+    case 'e':
+      return 27;
+    case 'f':
+      return 12;
+    case 'n':
+      return 10;
+    case 'r':
+      return 13;
+    case 't':
+      return 9;
+    case 'v':
+      return 11;
+    default:
+      if (next=='-' || next=='x' || (next>='0' && next<='9')) {
+        Zungetc(next,fp);
+        readnum(fp,&thechar);
+        return thechar;
+        }
+      return next;
+    }
+}
+
+/****************************************************************************
+
+  charsetname
+
+  Get a Tchar representing a charset name, or 0 if none available.
+  Called in getcharset().
+
+****************************************************************************/
+
+inchr charsetname(fp)
+ZFILE *fp;
+{
+  inchr result;
+
+  result = readTchar(fp);
+  if (result == '\n' || result == '\r') {
+    result = 0;
+    Zungetc(result,fp);
+    }
+  return result;
+  }
+
+/****************************************************************************
+
+  charset
+
+  Processes "g[0123]" character set specifier
+  Called in readcontrol().
+
+****************************************************************************/
+
+void charset(n, controlfile)
+int n;
+ZFILE *controlfile;
+{
+  int ch;
+
+  skipws(controlfile);
+  if (Zgetc(controlfile) != '9') {
+    skiptoeol(controlfile);
+    return;
+    }
+  ch = Zgetc(controlfile);
+  if (ch == '6') {
+     gn[n] = 65536L * charsetname(controlfile) + 0x80;
+     gndbl[n] = 0;
+     skiptoeol(controlfile);
+     return;
+     }
+  if (ch != '4') {
+    skiptoeol(controlfile);
+    return;
+    }
+  ch = Zgetc(controlfile);
+  if (ch == 'x') {
+     if (Zgetc(controlfile) != '9') {
+       skiptoeol(controlfile);
+       return;
+       }
+     if (Zgetc(controlfile) != '4') {
+       skiptoeol(controlfile);
+       return;
+       }
+     skipws(controlfile);
+     gn[n] = 65536L * charsetname(controlfile);
+     gndbl[n] = 1;
+     skiptoeol(controlfile);
+     return;
+     }
+  Zungetc(ch, controlfile);
+  skipws(controlfile);
+  gn[n] = 65536L * charsetname(controlfile);
+  gndbl[n] = 0;
+  return;
+  }
+
+/****************************************************************************
+
+  FIGopen
+
+  Given a FIGlet font or control file name and suffix, return the file
+  or NULL if not found
+
+****************************************************************************/
+
+ZFILE *FIGopen(name,suffix)
+char *name;
+char *suffix;
+{
+  char *fontpath;
+  ZFILE *fontfile;
+  struct stat st;
+  int namelen;
+
+  namelen = MYSTRLEN(fontdirname);
+  fontpath = (char*)alloca(sizeof(char)*
+    (namelen+MYSTRLEN(name)+MYSTRLEN(suffix)+2));
+  fontfile = NULL;
+  if (!hasdirsep(name)) {  /* not a full path name */
+    strcpy(fontpath,fontdirname);
+    fontpath[namelen] = DIRSEP;
+    fontpath[namelen+1] = '\0';
+    strcat(fontpath,name);
+    strcat(fontpath,suffix);
+    if(stat(fontpath,&st)==0) goto ok;
+    }
+  /* just append suffix */
+  strcpy(fontpath,name);
+  strcat(fontpath,suffix);
+  if(stat(fontpath,&st)==0) goto ok;
+
+  return NULL;
+
+ok:
+  fontfile = Zopen(fontpath,"rb");
+  return fontfile;
+}
+
+/****************************************************************************
+
+  readcontrol
+
+  Allocates memory and reads in the given control file.
+  Called in readcontrolfiles().
+
+****************************************************************************/
+
+void readcontrol(controlname)
+char *controlname;
+{
+  inchr firstch,lastch;
+  char dashcheck;
+  inchr offset;
+  int command;
+  ZFILE *controlfile;
+
+  controlfile = FIGopen(controlname,CONTROLFILESUFFIX);
+
+  if (controlfile==NULL) {
+    fprintf(stderr,"%s: %s: Unable to open control file\n",myname,
+      controlname);
+    exit(1);
+    }
+
+  (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
+  (*commandlistend)->thecommand = 0; /* Begin with a freeze command */
+  commandlistend = &(*commandlistend)->next;
+  (*commandlistend) = NULL;
+
+  while(command=Zgetc(controlfile),command!=EOF) {
+    switch (command) {
+      case 't': /* Translate */
+        skipws(controlfile);
+        firstch=readTchar(controlfile);
+        if ((dashcheck=Zgetc(controlfile))=='-') {
+          lastch=readTchar(controlfile);
+          }
+        else {
+          Zungetc(dashcheck,controlfile);
+          lastch=firstch;
+          }
+        skipws(controlfile);
+        offset=readTchar(controlfile)-firstch;
+        skiptoeol(controlfile);
+        (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
+        (*commandlistend)->thecommand = 1;
+        (*commandlistend)->rangelo = firstch;
+        (*commandlistend)->rangehi = lastch;
+        (*commandlistend)->offset = offset;
+        commandlistend = &(*commandlistend)->next;
+        (*commandlistend) = NULL;
+        break;
+      case '0': case '1': case '2': case '3': case '4':
+      case '5': case '6': case '7': case '8': case '9':
+      case '-':
+                /* Mapping table entry */
+        Zungetc(command,controlfile);
+        readnum(controlfile,&firstch);
+        skipws(controlfile);
+	readnum(controlfile,&lastch);
+	offset=lastch-firstch;
+        lastch=firstch;
+        skiptoeol(controlfile);
+        (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
+        (*commandlistend)->thecommand = 1;
+        (*commandlistend)->rangelo = firstch;
+        (*commandlistend)->rangehi = lastch;
+        (*commandlistend)->offset = offset;
+        commandlistend = &(*commandlistend)->next;
+        (*commandlistend) = NULL;
+        break;
+      case 'f': /* freeze */
+        skiptoeol(controlfile);
+        (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
+        (*commandlistend)->thecommand = 0;
+        commandlistend = &(*commandlistend)->next;
+        (*commandlistend) = NULL;
+        break;
+      case 'b': /* DBCS input mode */
+        multibyte = 1;
+        break;
+      case 'u': /* UTF-8 input mode */
+        multibyte = 2;
+        break;
+      case 'h': /* HZ input mode */
+        multibyte = 3;
+        break;
+      case 'j': /* Shift-JIS input mode */
+        multibyte = 4;
+        break;
+      case 'g': /* ISO 2022 character set choices */
+        multibyte = 0;
+        skipws(controlfile);
+        command=Zgetc(controlfile);
+        switch (command) {
+          case '0': /* define G0 charset */
+            charset(0, controlfile);
+            break;
+          case '1': /* set G1 charset */
+            charset(1, controlfile);
+            break;
+          case '2': /* set G2 charset */
+            charset(2, controlfile);
+            break;
+          case '3': /* set G3 charset */
+            charset(3, controlfile);
+            break;
+          case 'l': case 'L': /* define left half */
+            skipws(controlfile);
+            gl = Zgetc(controlfile) - '0';
+            skiptoeol(controlfile);
+            break;
+          case 'r': case 'R': /* define right half */
+            skipws(controlfile);
+            gr = Zgetc(controlfile) - '0';
+            skiptoeol(controlfile);
+            break;
+          default: /* meaningless "g" command */
+            skiptoeol(controlfile);
+          }
+      case '\r': case '\n': /* blank line */
+        break;
+      default: /* Includes '#' */
+        skiptoeol(controlfile);
+      }
+    }
+  Zclose(controlfile);
+}
+
+
+/****************************************************************************
+
+  readcontrolfiles
+
+  Reads in the controlfiles names in cfilelist.  Uses readcontrol.
+  Called in main().
+
+****************************************************************************/
+
+void readcontrolfiles()
+{
+  cfnamenode *cfnptr;
+
+  for (cfnptr=cfilelist;cfnptr!=NULL;cfnptr=cfnptr->next) {
+    readcontrol(cfnptr->thename);
+    }
+}
+
+
+/****************************************************************************
+
+  clearcfilelist
+
+  Clears the control file list.  Assumes thename does not need freeing.
+
+****************************************************************************/
+
+void clearcfilelist()
+{
+  cfnamenode *cfnptr1,*cfnptr2;
+
+  cfnptr1 = cfilelist;
+  while (cfnptr1 != NULL) {
+    cfnptr2 = cfnptr1->next;
+    free(cfnptr1);
+    cfnptr1 = cfnptr2;
+    }
+  cfilelist = NULL;
+  cfilelistend = &cfilelist;
+}
+
+
+/****************************************************************************
+
+  getparams
+
+  Handles all command-line parameters.  Puts all parameters within
+  bounds.
+
+****************************************************************************/
+
+void getparams()
+{
+  extern char *optarg;
+  extern int optind;
+  int c; /* "Should" be a char -- need int for "!= -1" test*/
+  int columns,infoprint;
+  char *controlname,*env;
+
+  if ((myname = strrchr(Myargv[0],DIRSEP))!=NULL) {
+    myname++;
+    }
+  else {
+    myname = Myargv[0];
+    }
+  fontdirname = DEFAULTFONTDIR;
+  env = getenv("FIGLET_FONTDIR");
+  if (env!=NULL) {
+    fontdirname = env;
+    }
+  fontname = DEFAULTFONTFILE;
+  cfilelist = NULL;
+  cfilelistend = &cfilelist;
+  commandlist = NULL;
+  commandlistend = &commandlist;
+  smushoverride = SMO_NO;
+  deutschflag = 0;
+  justification = -1;
+  right2left = -1;
+  paragraphflag = 0;
+  infoprint = -1;
+  cmdinput = 0;
+  outputwidth = DEFAULTCOLUMNS;
+  gn[1] = 0x80;
+  gr = 1;
+  while ((c = getopt(Myargc,Myargv,"ADEXLRI:xlcrpntvm:w:d:f:C:NFskSWo"))!= -1) {
+      /* Note: -F is not a legal option -- prints a special err message.  */
+    switch (c) {
+      case 'A':
+        cmdinput = 1;
+        break;
+      case 'D':
+        deutschflag = 1;
+        break;
+      case 'E':
+        deutschflag = 0;
+        break;
+      case 'X':
+        right2left = -1;
+        break;
+      case 'L':
+        right2left = 0;
+        break;
+      case 'R':
+        right2left = 1;
+        break;
+      case 'x':
+        justification = -1;
+        break;
+      case 'l':
+        justification = 0;
+        break;
+      case 'c':
+        justification = 1;
+        break;
+      case 'r':
+        justification = 2;
+        break;
+      case 'p':
+        paragraphflag = 1;
+        break;
+      case 'n':
+        paragraphflag = 0;
+        break;
+      case 's':
+        smushoverride = SMO_NO;
+        break;
+      case 'k':
+        smushmode = SM_KERN;
+        smushoverride = SMO_YES;
+        break;
+      case 'S':
+        smushmode = SM_SMUSH;
+	smushoverride = SMO_FORCE;
+        break;
+      case 'o':
+        smushmode = SM_SMUSH;
+	smushoverride = SMO_YES;
+        break;
+      case 'W':
+        smushmode = 0;
+	smushoverride = SMO_YES;
+        break;
+      case 't':
+#ifdef TIOCGWINSZ
+        columns = get_columns();
+        if (columns>0) {
+          outputwidth = columns;
+          }
+#else /* ifdef TIOCGWINSZ */
+        fprintf(stderr,
+          "%s: \"-t\" is disabled, since ioctl is not fully implemented.\n",
+          myname);
+#endif /* ifdef TIOCGWINSZ */
+        break;
+      case 'v':
+        infoprint = 0;
+        break;
+      case 'I':
+        infoprint = atoi(optarg);
+        break;
+      case 'm':
+        smushmode = atoi(optarg);
+        if (smushmode < -1) {
+          smushoverride = SMO_NO;
+          break;
+          }
+	if (smushmode == 0) smushmode = SM_KERN;
+	else if (smushmode == -1) smushmode = 0;
+	else smushmode = (smushmode & 63) | SM_SMUSH;
+	smushoverride = SMO_YES;
+        break;
+      case 'w':
+        columns = atoi(optarg);
+        if (columns>0) {
+          outputwidth = columns;
+          }
+        break;
+      case 'd':
+        fontdirname = optarg;
+        break;
+      case 'f':
+        fontname = optarg;
+        if (suffixcmp(fontname,FONTFILESUFFIX)) {
+          fontname[MYSTRLEN(fontname)-FSUFFIXLEN] = '\0';
+          }
+#ifdef TLF_FONTS
+        else if (suffixcmp(fontname,TOILETFILESUFFIX)) {
+          fontname[MYSTRLEN(fontname)-TSUFFIXLEN] = '\0';
+          }
+#endif
+        break;
+      case 'C':
+        controlname = optarg;
+        if (suffixcmp(controlname, CONTROLFILESUFFIX)) {
+          controlname[MYSTRLEN(controlname)-CSUFFIXLEN] = '\0';
+          }
+        (*cfilelistend) = (cfnamenode*)myalloc(sizeof(cfnamenode));
+        (*cfilelistend)->thename = controlname;
+        cfilelistend = &(*cfilelistend)->next;
+        (*cfilelistend) = NULL;
+        break;
+      case 'N':
+        clearcfilelist();
+        multibyte = 0;
+        gn[0] = 0;
+        gn[1] = 0x80;
+        gn[2] = gn[3] = 0;
+        gndbl[0] = gndbl[1] = gndbl[2] = gndbl[3] = 0;
+        gl = 0;
+        gr = 1;
+        break;
+      case 'F': /* Not a legal option */
+        fprintf(stderr,"%s: illegal option -- F\n",myname);
+        printusage(stderr);
+        fprintf(stderr,"\nBecause of numerous incompatibilities, the");
+        fprintf(stderr," \"-F\" option has been\n");
+        fprintf(stderr,"removed.  It has been replaced by the \"figlist\"");
+        fprintf(stderr," program, which is now\n");
+        fprintf(stderr,"included in the basic FIGlet package.  \"figlist\"");
+        fprintf(stderr," is also available\n");
+        fprintf(stderr,"from  http://www.figlet.org/");
+        fprintf(stderr,"under UNIX utilities.\n");
+        exit(1);
+        break;
+      default:
+        printusage(stderr);
+        exit(1);
+      }
+    }
+  if (optind!=Myargc) cmdinput = 1; /* force cmdinput if more arguments */
+  outlinelenlimit = outputwidth-1;
+  if (infoprint>=0) {
+    printinfo(infoprint);
+    exit(0);
+    }
+}
+
+
+/****************************************************************************
+
+  clearline
+
+  Clears both the input (inchrline) and output (outputline) storage.
+
+****************************************************************************/
+
+void clearline()
+{
+  int i;
+
+  for (i=0;i<charheight;i++) {
+    outputline[i][0] = '\0';
+    }
+  outlinelen = 0;
+  inchrlinelen = 0;
+}
+
+
+/****************************************************************************
+
+  readfontchar
+
+  Reads a font character from the font file, and places it in a
+  newly-allocated entry in the list.
+
+****************************************************************************/
+
+void readfontchar(file,theord)
+ZFILE *file;
+inchr theord;
+{
+  int row,k;
+  char templine[MAXLEN+1];
+  outchr endchar, outline[MAXLEN+1];
+  fcharnode *fclsave;
+
+  fclsave = fcharlist;
+  fcharlist = (fcharnode*)myalloc(sizeof(fcharnode));
+  fcharlist->ord = theord;
+  fcharlist->thechar = (outchr**)myalloc(sizeof(outchr*)*charheight);
+  fcharlist->next = fclsave;
+
+  outline[0] = 0;
+
+  for (row=0;row<charheight;row++) {
+    if (myfgets(templine,MAXLEN,file)==NULL) {
+      templine[0] = '\0';
+      }
+#ifdef TLF_FONTS
+    utf8_to_wchar(templine,MAXLEN,outline,MAXLEN,0);
+#else
+    strcpy(outline,templine);
+#endif
+    k = STRLEN(outline)-1;
+    while (k>=0 && ISSPACE(outline[k])) {  /* remove trailing spaces */
+      k--;
+      }
+    if (k>=0) {
+      endchar = outline[k];  /* remove endmarks */
+      while (k>=0 && outline[k]==endchar) {
+        k--;
+        }
+      }
+    outline[k+1] = '\0';
+    fcharlist->thechar[row] = (outchr*)myalloc(sizeof(outchr)*(STRLEN(outline)+1));
+    STRCPY(fcharlist->thechar[row],outline);
+    }
+}
+
+
+/****************************************************************************
+
+  readfont
+
+  Allocates memory, initializes variables, and reads in the font.
+  Called near beginning of main().
+
+****************************************************************************/
+
+void readfont()
+{
+  int i,row,numsread;
+  inchr theord;
+  int maxlen,cmtlines,ffright2left;
+  int smush,smush2;
+  char fileline[MAXLEN+1],magicnum[5];
+  ZFILE *fontfile;
+
+  fontfile = FIGopen(fontname,FONTFILESUFFIX);
+#ifdef TLF_FONTS
+  if (fontfile==NULL) {
+    fontfile = FIGopen(fontname,TOILETFILESUFFIX);
+    if(fontfile) toiletfont = 1;
+    }
+#endif
+
+  if (fontfile==NULL) {
+    fprintf(stderr,"%s: %s: Unable to open font file\n",myname,fontname);
+    exit(1);
+    }
+
+  readmagic(fontfile,magicnum);
+  if (myfgets(fileline,MAXLEN,fontfile)==NULL) {
+    fileline[0] = '\0';
+    }
+  if (MYSTRLEN(fileline)>0 ? fileline[MYSTRLEN(fileline)-1]!='\n' : 0) {
+    skiptoeol(fontfile);
+    }
+  numsread = sscanf(fileline,"%*c%c %d %*d %d %d %d %d %d",
+    &hardblank,&charheight,&maxlen,&smush,&cmtlines,
+    &ffright2left,&smush2);
+
+  if (maxlen > MAXLEN) {
+    fprintf(stderr,"%s: %s: character is too wide\n",myname,fontname);
+    exit(1);
+    }
+#ifdef TLF_FONTS
+  if ((!toiletfont && strcmp(magicnum,FONTFILEMAGICNUMBER)) ||
+      (toiletfont && strcmp(magicnum,TOILETFILEMAGICNUMBER)) || numsread<5) {
+#else
+  if (strcmp(magicnum,FONTFILEMAGICNUMBER) || numsread<5) {
+#endif
+    fprintf(stderr,"%s: %s: Not a FIGlet 2 font file\n",myname,fontname);
+    exit(1);
+    }
+  for (i=1;i<=cmtlines;i++) {
+    skiptoeol(fontfile);
+    }
+
+  if (numsread<6) {
+    ffright2left = 0;
+    }
+
+  if (numsread<7) { /* if no smush2, decode smush into smush2 */
+    if (smush == 0) smush2 = SM_KERN;
+    else if (smush < 0) smush2 = 0;
+    else smush2 = (smush & 31) | SM_SMUSH;
+    }
+
+  if (charheight<1) {
+    charheight = 1;
+    }
+
+  if (maxlen<1) {
+    maxlen = 1;
+    }
+
+  maxlen += 100; /* Give ourselves some extra room */
+
+  if (smushoverride == SMO_NO)
+     smushmode = smush2;
+  else if (smushoverride == SMO_FORCE)
+     smushmode |= smush2;
+
+  if (right2left<0) {
+    right2left = ffright2left;
+    }
+
+  if (justification<0) {
+    justification = 2*right2left;
+    }
+
+  /* Allocate "missing" character */
+  fcharlist = (fcharnode*)myalloc(sizeof(fcharnode));
+  fcharlist->ord = 0;
+  fcharlist->thechar = (outchr**)myalloc(sizeof(outchr*)*charheight);
+  fcharlist->next = NULL;
+  for (row=0;row<charheight;row++) {
+    fcharlist->thechar[row] = (outchr*)myalloc(sizeof(outchr));
+    fcharlist->thechar[row][0] = '\0';
+    }
+  for (theord=' ';theord<='~';theord++) {
+    readfontchar(fontfile,theord);
+    }
+  for (theord=0;theord<=6;theord++) {
+    readfontchar(fontfile,deutsch[theord]);
+    }
+  while (myfgets(fileline,maxlen+1,fontfile)==NULL?0:
+    sscanf(fileline,"%li",&theord)==1) {
+    readfontchar(fontfile,theord);
+    }
+  Zclose(fontfile);
+}
+
+
+/****************************************************************************
+
+  linealloc
+
+  Allocates & clears outputline, inchrline. Sets inchrlinelenlimit.
+  Called near beginning of main().
+
+****************************************************************************/
+
+void linealloc()
+{
+  int row; 
+
+  outputline = (outchr**)myalloc(sizeof(outchr*)*charheight);
+  for (row=0;row<charheight;row++) {
+    outputline[row] = (outchr*)myalloc(sizeof(outchr)*(outlinelenlimit+1));
+    }
+  inchrlinelenlimit = outputwidth*4+100;
+  inchrline = (inchr*)myalloc(sizeof(inchr)*(inchrlinelenlimit+1));
+  clearline();
+}
+
+
+/****************************************************************************
+
+  getletter
+
+  Sets currchar to point to the font entry for the given character.
+  Sets currcharwidth to the width of this character.
+
+****************************************************************************/
+
+void getletter(c)
+inchr c;
+{
+  fcharnode *charptr;
+
+  for (charptr=fcharlist;charptr==NULL?0:charptr->ord!=c;
+    charptr=charptr->next) ;
+  if (charptr!=NULL) {
+    currchar = charptr->thechar;
+    }
+  else {
+    for (charptr=fcharlist;charptr==NULL?0:charptr->ord!=0;
+      charptr=charptr->next) ;
+    currchar = charptr->thechar;
+    }
+  previouscharwidth = currcharwidth;
+  currcharwidth = STRLEN(currchar[0]);
+}
+
+
+/****************************************************************************
+
+  smushem
+
+  Given 2 characters, attempts to smush them into 1, according to
+  smushmode.  Returns smushed character or '\0' if no smushing can be
+  done.
+
+  smushmode values are sum of following (all values smush blanks):
+    1: Smush equal chars (not hardblanks)
+    2: Smush '_' with any char in hierarchy below
+    4: hierarchy: "|", "/\", "[]", "{}", "()", "<>"
+       Each class in hier. can be replaced by later class.
+    8: [ + ] -> |, { + } -> |, ( + ) -> |
+   16: / + \ -> X, > + < -> X (only in that order)
+   32: hardblank + hardblank -> hardblank
+
+****************************************************************************/
+
+outchr smushem(lch,rch)
+outchr lch,rch;
+{
+  if (lch==' ') return rch;
+  if (rch==' ') return lch;
+
+  if (previouscharwidth<2 || currcharwidth<2) return '\0';
+    /* Disallows overlapping if the previous character */
+    /* or the current character has a width of 1 or zero. */
+
+  if ((smushmode & SM_SMUSH) == 0) return '\0';  /* kerning */
+
+  if ((smushmode & 63) == 0) {
+    /* This is smushing by universal overlapping. */
+    if (lch==' ') return rch;
+    if (rch==' ') return lch;
+    if (lch==hardblank) return rch;
+    if (rch==hardblank) return lch;
+      /* Above four lines ensure overlapping preference to */
+      /* visible characters. */
+    if (right2left==1) return lch;
+      /* Above line ensures that the dominant (foreground) */
+      /* fig-character for overlapping is the latter in the */
+      /* user's text, not necessarily the rightmost character. */
+    return rch;
+      /* Occurs in the absence of above exceptions. */
+    }
+  
+  if (smushmode & SM_HARDBLANK) {
+    if (lch==hardblank && rch==hardblank) return lch;
+    }
+
+  if (lch==hardblank || rch==hardblank) return '\0';
+
+  if (smushmode & SM_EQUAL) {
+    if (lch==rch) return lch;
+    }
+
+  if (smushmode & SM_LOWLINE) {
+    if (lch=='_' && strchr("|/\\[]{}()<>",rch)) return rch;
+    if (rch=='_' && strchr("|/\\[]{}()<>",lch)) return lch;
+    }
+
+  if (smushmode & SM_HIERARCHY) {
+    if (lch=='|' && strchr("/\\[]{}()<>",rch)) return rch;
+    if (rch=='|' && strchr("/\\[]{}()<>",lch)) return lch;
+    if (strchr("/\\",lch) && strchr("[]{}()<>",rch)) return rch;
+    if (strchr("/\\",rch) && strchr("[]{}()<>",lch)) return lch;
+    if (strchr("[]",lch) && strchr("{}()<>",rch)) return rch;
+    if (strchr("[]",rch) && strchr("{}()<>",lch)) return lch;
+    if (strchr("{}",lch) && strchr("()<>",rch)) return rch;
+    if (strchr("{}",rch) && strchr("()<>",lch)) return lch;
+    if (strchr("()",lch) && strchr("<>",rch)) return rch;
+    if (strchr("()",rch) && strchr("<>",lch)) return lch;
+    }
+
+  if (smushmode & SM_PAIR) {
+    if (lch=='[' && rch==']') return '|';
+    if (rch=='[' && lch==']') return '|';
+    if (lch=='{' && rch=='}') return '|';
+    if (rch=='{' && lch=='}') return '|';
+    if (lch=='(' && rch==')') return '|';
+    if (rch=='(' && lch==')') return '|';
+    }
+
+  if (smushmode & SM_BIGX) {
+    if (lch=='/' && rch=='\\') return '|';
+    if (rch=='/' && lch=='\\') return 'Y';
+    if (lch=='>' && rch=='<') return 'X';
+      /* Don't want the reverse of above to give 'X'. */
+    }
+
+  return '\0';
+}
+
+
+/****************************************************************************
+
+  smushamt
+
+  Returns the maximum amount that the current character can be smushed
+  into the current line.
+
+****************************************************************************/
+
+int smushamt()
+{
+  int maxsmush,amt;
+  int row,linebd,charbd;
+  outchr ch1,ch2;
+
+  if ((smushmode & (SM_SMUSH | SM_KERN)) == 0) {
+    return 0;
+    }
+  maxsmush = currcharwidth;
+  for (row=0;row<charheight;row++) {
+    if (right2left) {
+      if (maxsmush>STRLEN(outputline[row])) {
+        maxsmush=STRLEN(outputline[row]);
+        }
+      for (charbd=STRLEN(currchar[row]);
+        ch1=currchar[row][charbd],(charbd>0&&(!ch1||ch1==' '));charbd--) ;
+      for (linebd=0;ch2=outputline[row][linebd],ch2==' ';linebd++) ;
+      amt = linebd+currcharwidth-1-charbd;
+      }
+    else {
+      for (linebd=STRLEN(outputline[row]);
+        ch1 = outputline[row][linebd],(linebd>0&&(!ch1||ch1==' '));linebd--) ;
+      for (charbd=0;ch2=currchar[row][charbd],ch2==' ';charbd++) ;
+      amt = charbd+outlinelen-1-linebd;
+      }
+    if (!ch1||ch1==' ') {
+      amt++;
+      }
+    else if (ch2) {
+      if (smushem(ch1,ch2)!='\0') {
+        amt++;
+        }
+      }
+    if (amt<maxsmush) {
+      maxsmush = amt;
+      }
+    }
+  return maxsmush;
+}
+
+
+/****************************************************************************
+
+  addchar
+
+  Attempts to add the given character onto the end of the current line.
+  Returns 1 if this can be done, 0 otherwise.
+
+****************************************************************************/
+
+int addchar(c)
+inchr c;
+{
+  int smushamount,row,k,column;
+  outchr *templine;
+
+  getletter(c);
+  smushamount = smushamt();
+  if (outlinelen+currcharwidth-smushamount>outlinelenlimit
+      ||inchrlinelen+1>inchrlinelenlimit) {
+    return 0;
+    }
+
+  templine = (outchr*)myalloc(sizeof(outchr)*(outlinelenlimit+1));
+  for (row=0;row<charheight;row++) {
+    if (right2left) {
+      STRCPY(templine,currchar[row]);
+      for (k=0;k<smushamount;k++) {
+        templine[currcharwidth-smushamount+k] =
+          smushem(templine[currcharwidth-smushamount+k],outputline[row][k]);
+        }
+      STRCAT(templine,outputline[row]+smushamount);
+      STRCPY(outputline[row],templine);
+      }
+    else {
+      for (k=0;k<smushamount;k++) {
+	column = outlinelen-smushamount+k;
+	if (column < 0) {
+	  column = 0;
+	  }
+        outputline[row][column] =
+          smushem(outputline[row][column],currchar[row][k]);
+        }
+      STRCAT(outputline[row],currchar[row]+smushamount);
+      }
+    }
+  free(templine);
+  outlinelen = STRLEN(outputline[0]);
+  inchrline[inchrlinelen++] = c;
+  return 1;
+}
+
+
+/****************************************************************************
+
+  putstring
+
+  Prints out the given null-terminated string, substituting blanks
+  for hardblanks.  If outputwidth is 1, prints the entire string;
+  otherwise prints at most outputwidth-1 characters.  Prints a newline
+  at the end of the string.  The string is left-justified, centered or
+  right-justified (taking outputwidth as the screen width) if
+  justification is 0, 1 or 2, respectively.
+
+****************************************************************************/
+
+void putstring(string)
+outchr *string;
+{
+  int i,len;
+  char c[10];
+#ifdef TLF_FONTS
+  size_t size;
+  wchar_t wc[2];
+#endif
+
+  len = STRLEN(string);
+  if (outputwidth>1) {
+    if (len>outputwidth-1) {
+      len = outputwidth-1;
+      }
+    if (justification>0) {
+      for (i=1;(3-justification)*i+len+justification-2<outputwidth;i++) {
+        putchar(' ');
+        }
+      }
+    }
+  for (i=0;i<len;i++) {
+#ifdef TLF_FONTS
+    wc[0] = string[i];
+    wc[1] = 0;
+    size = wchar_to_utf8(wc,1,c,10,0);
+    if(size==1) {
+      if(c[0]==hardblank) {
+        c[0] = ' ';
+        }
+      }
+    c[size] = 0;
+    printf("%s",c);
+#else
+    putchar(string[i]==hardblank?' ':string[i]);
+#endif
+    }
+  putchar('\n');
+}
+
+
+/****************************************************************************
+
+  printline
+
+  Prints outputline using putstring, then clears the current line.
+
+****************************************************************************/
+
+void printline()
+{
+  int i;
+
+  for (i=0;i<charheight;i++) {
+    putstring(outputline[i]);
+    }
+  clearline();
+}
+
+
+/****************************************************************************
+
+  splitline
+
+  Splits inchrline at the last word break (bunch of consecutive blanks).
+  Makes a new line out of the first part and prints it using
+  printline.  Makes a new line out of the second part and returns.
+
+****************************************************************************/
+
+void splitline()
+{
+  int i,gotspace,lastspace,len1,len2;
+  inchr *part1,*part2;
+
+  part1 = (inchr*)myalloc(sizeof(inchr)*(inchrlinelen+1));
+  part2 = (inchr*)myalloc(sizeof(inchr)*(inchrlinelen+1));
+  gotspace = 0;
+  lastspace = inchrlinelen-1;
+  for (i=inchrlinelen-1;i>=0;i--) {
+    if (!gotspace && inchrline[i]==' ') {
+      gotspace = 1;
+      lastspace = i;
+      }
+    if (gotspace && inchrline[i]!=' ') {
+      break;
+      }
+    }
+  len1 = i+1;
+  len2 = inchrlinelen-lastspace-1;
+  for (i=0;i<len1;i++) {
+    part1[i] = inchrline[i];
+    }
+  for (i=0;i<len2;i++) {
+    part2[i] = inchrline[lastspace+1+i];
+    }
+  clearline();
+  for (i=0;i<len1;i++) {
+    addchar(part1[i]);
+    }
+  printline();
+  for (i=0;i<len2;i++) {
+    addchar(part2[i]);
+    }
+  free(part1);
+  free(part2);
+}
+
+
+/****************************************************************************
+
+  handlemapping
+
+  Given an input character (type inchr), executes re-mapping commands
+  read from control files.  Returns re-mapped character (inchr).
+
+****************************************************************************/
+
+inchr handlemapping(c)
+inchr c;
+{
+  comnode *cmptr;
+
+  cmptr=commandlist;
+  while (cmptr!=NULL) {
+    if (cmptr->thecommand ?
+      (c >= cmptr->rangelo && c <= cmptr->rangehi) : 0) {
+      c += cmptr->offset;
+      while(cmptr!=NULL ? cmptr->thecommand : 0) {
+        cmptr=cmptr->next;
+        }
+      }
+    else {
+      cmptr=cmptr->next;
+      }
+    }
+  return c;
+}
+
+/****************************************************************************
+
+  Agetchar
+
+  Replacement to getchar().
+  Acts exactly like getchar if -A is NOT specified,
+  else obtains input from All remaining command line words.
+
+****************************************************************************/
+
+int Agetchar()
+{
+    extern int optind;		/* current argv[] element under study */
+    static int AgetMode = 0;	/* >= 0 for displacement into argv[n], <0 EOF */
+    char   *arg;		/* pointer to active character */
+    int    c;			/* current character */
+
+    if ( ! cmdinput )		/* is -A active? */
+	return( getchar() );	/* no: return stdin character */
+
+    if ( AgetMode < 0 || optind >= Myargc )		/* EOF is sticky: */
+	return( EOF );		/* **ensure it now and forever more */
+
+    /* find next character */
+    arg = Myargv[optind];		/* pointer to active arg */
+    c = arg[AgetMode++]&0xFF;	/* get appropriate char of arg */
+
+    if ( ! c )			/* at '\0' that terminates word? */
+    {   /* at end of word: return ' ' if normal word, '\n' if empty */
+	c = ' ';		/* suppose normal word and return blank */
+	if ( AgetMode == 1 )	/* if ran out in very 1st char, force \n */
+	    c = '\n';		/* (allows "hello '' world" to do \n at '') */
+	AgetMode = 0;		/* return to char 0 in NEXT word */
+	if ( ++optind >= Myargc )	/* run up word count and check if at "EOF" */
+	{   /* just ran out of arguments */
+	    c = EOF;		/* return EOF */
+	    AgetMode = -1;	/* ensure all future returns return EOF */
+	}
+    }
+
+    return( c );		/* return appropriate character */
+
+}	/* end: Agetchar() */
+
+
+/****************************************************************************
+
+  iso2022
+
+  Called by getinchr.  Interprets ISO 2022 sequences
+
+******************************************************************************/
+
+inchr iso2022()
+{
+  inchr ch;
+  inchr ch2;
+  int save_gl;
+  int save_gr;
+
+  ch = Agetchar();
+  if (ch == EOF) return ch;
+  if (ch == 27) ch = Agetchar() + 0x100; /* ESC x */
+  if (ch == 0x100 + '$') ch = Agetchar() + 0x200; /* ESC $ x */
+  switch (ch) {
+    case 14: /* invoke G1 into GL */
+      gl = 1;
+      return iso2022();
+    case 15: /* invoke G0 into GL */
+      gl = 0;
+      return iso2022();
+    case 142: case 'N' + 0x100: /* invoke G2 into GL for next char */
+      save_gl = gl; save_gr = gr;
+      gl = gr = 2;
+      ch = iso2022();
+      gl = save_gl; gr = save_gr;
+      return ch;
+    case 143: case 'O' + 0x100: /* invoke G3 into GL for next char */
+      save_gl = gl; save_gr = gr;
+      gl = gr = 3;
+      ch = iso2022();
+      gl = save_gl; gr = save_gr;
+      return ch;
+    case 'n' + 0x100: /* invoke G2 into GL */
+      gl = 2;
+      return iso2022();
+    case 'o' + 0x100: /* invoke G3 into GL */
+      gl = 3;
+      return iso2022();
+    case '~' + 0x100: /* invoke G1 into GR */
+      gr = 1;
+      return iso2022();
+    case '}' + 0x100: /* invoke G2 into GR */
+      gr = 2;
+      return iso2022();
+    case '|' + 0x100: /* invoke G3 into GR */
+      gr = 3;
+      return iso2022();
+    case '(' + 0x100: /* set G0 to 94-char set */
+      ch = Agetchar();
+      if (ch == 'B') ch = 0; /* ASCII */
+      gn[0] = ch << 16;
+      gndbl[0] = 0;
+      return iso2022();
+    case ')' + 0x100: /* set G1 to 94-char set */
+      ch = Agetchar();
+      if (ch == 'B') ch = 0;
+      gn[1] = ch << 16;
+      gndbl[1] = 0;
+      return iso2022();
+    case '*' + 0x100: /* set G2 to 94-char set */
+      ch = Agetchar();
+      if (ch == 'B') ch = 0;
+      gn[2] = ch << 16;
+      gndbl[2] = 0;
+      return iso2022();
+    case '+' + 0x100: /* set G3 to 94-char set */
+      ch = Agetchar();
+      if (ch == 'B') ch = 0;
+      gn[3] = ch << 16;
+      gndbl[3] = 0;
+      return iso2022();
+    case '-' + 0x100: /* set G1 to 96-char set */
+      ch = Agetchar();
+      if (ch == 'A') ch = 0; /* Latin-1 top half */
+      gn[1] = (ch << 16) | 0x80;
+      gndbl[1] = 0;
+      return iso2022();
+    case '.' + 0x100: /* set G2 to 96-char set */
+      ch = Agetchar();
+      if (ch == 'A') ch = 0;
+      gn[2] = (ch << 16) | 0x80;
+      gndbl[2] = 0;
+      return iso2022();
+    case '/' + 0x100: /* set G3 to 96-char set */
+      ch = Agetchar();
+      if (ch == 'A') ch = 0;
+      gn[3] = (ch << 16) | 0x80;
+      gndbl[3] = 0;
+      return iso2022();
+    case '(' + 0x200: /* set G0 to 94 x 94 char set */
+      ch = Agetchar();
+      gn[0] = ch << 16;
+      gndbl[0] = 1;
+      return iso2022();
+    case ')' + 0x200: /* set G1 to 94 x 94 char set */
+      ch = Agetchar();
+      gn[1] = ch << 16;
+      gndbl[1] = 1;
+      return iso2022();
+    case '*' + 0x200: /* set G2 to 94 x 94 char set */
+      ch = Agetchar();
+      gn[2] = ch << 16;
+      gndbl[2] = 1;
+      return iso2022();
+    case '+' + 0x200: /* set G3 to 94 x 94 char set */
+      ch = Agetchar();
+      gn[3] = ch << 16;
+      gndbl[3] = 1;
+      return iso2022();
+    default:
+      if (ch & 0x200) { /* set G0 to 94 x 94 char set (deprecated) */
+        gn[0] = (ch & ~0x200) << 16;
+        gndbl[0] = 1;
+        return iso2022();
+        }
+      }
+
+  if (ch >= 0x21 && ch <= 0x7E) { /* process GL */
+    if (gndbl[gl]) {
+      ch2 = Agetchar();
+      return gn[gl] | (ch << 8) | ch2;
+      }
+    else return gn[gl] | ch;
+    }
+  else if (ch >= 0xA0 && ch <= 0xFF) { /* process GR */
+    if (gndbl[gr]) {
+      ch2 = Agetchar();
+      return gn[gr] | (ch << 8) | ch2;
+      }
+    else return gn[gr] | (ch & ~0x80);
+    }
+  else return ch;
+  }
+
+/****************************************************************************
+
+  ungetinchr
+
+  Called by main.  Pushes back an "inchr" to be read by getinchr
+  on the next call.
+
+******************************************************************************/
+inchr getinchr_buffer;
+int getinchr_flag;
+
+inchr ungetinchr(c)
+inchr c;
+{
+  getinchr_buffer = c;
+  getinchr_flag = 1;
+  return c;
+}
+
+/*****************************************************************************
+
+  getinchr
+
+  Called by main.  Processes multibyte characters.  Invokes Agetchar.
+  If multibyte = 0, ISO 2022 mode (see iso2022 routine).
+  If multibyte = 1,  double-byte mode (0x00-0x7f bytes are characters,
+    0x80-0xFF bytes are first byte of a double-byte character).
+  If multibyte = 2, Unicode UTF-8 mode (0x00-0x7F bytes are characters,
+    0x80-0xBF bytes are nonfirst byte of a multibyte character,
+    0xC0-0xFD bytes are first byte of a multibyte character,
+    0xFE-0xFF bytes are errors (all errors return code 0x0080)).
+  If multibyte = 3, HZ mode ("~{" starts double-byte mode, "}~" ends it,
+    "~~" is a tilde, "~x" for all other x is ignored).
+  If multibyte = 4, Shift-JIS mode (0x80-0x9F and 0xE0-0xEF are first byte
+    of a double-byte character, all other bytes are characters).
+ 
+
+*****************************************************************************/
+
+inchr getinchr()
+{
+  int ch, ch2, ch3, ch4, ch5, ch6;
+
+  if (getinchr_flag) {
+    getinchr_flag = 0;
+    return getinchr_buffer;
+    }
+
+  switch(multibyte) {
+    case 0: /* single-byte */
+      return iso2022();
+   case 1: /* DBCS */
+     ch = Agetchar();
+     if ((ch >= 0x80 && ch <= 0x9F) ||
+         (ch >= 0xE0 && ch <= 0xEF)) {
+       ch = (ch << 8) + Agetchar();
+       }
+     return ch;
+   case 2: /* UTF-8 */
+      ch = Agetchar();
+      if (ch < 0x80) return ch;  /* handles EOF, too */
+      if (ch < 0xC0 || ch > 0xFD)
+        return 0x0080;  /* illegal first character */
+      ch2 = Agetchar() & 0x3F;
+      if (ch < 0xE0) return ((ch & 0x1F) << 6) + ch2;
+      ch3 = Agetchar() & 0x3F;
+      if (ch < 0xF0)
+        return ((ch & 0x0F) << 12) + (ch2 << 6) + ch3;
+      ch4 = Agetchar() & 0x3F;
+      if (ch < 0xF8)
+        return ((ch & 0x07) << 18) + (ch2 << 12) + (ch3 << 6) + ch4;
+      ch5 = Agetchar() & 0x3F;
+      if (ch < 0xFC)
+        return ((ch & 0x03) << 24) + (ch2 << 18) + (ch3 << 12) +
+          (ch4 << 6) + ch5;
+      ch6 = Agetchar() & 0x3F;
+      return ((ch & 0x01) << 30) + (ch2 << 24) + (ch3 << 18) +
+        (ch4 << 12) + (ch5 << 6) + ch6;
+   case 3: /* HZ */
+     ch = Agetchar();
+     if (ch == EOF) return ch;
+     if (hzmode) {
+       ch = (ch << 8) + Agetchar();
+       if (ch == ('}' << 8) + '~') {
+         hzmode = 0;
+         return getinchr();
+         }
+       return ch;
+       }
+     else if (ch == '~') {
+       ch = Agetchar();
+       if (ch == '{') {
+          hzmode = 1;
+          return getinchr();
+          }
+      else if (ch == '~') {
+        return ch;
+        }
+      else {
+        return getinchr();
+        }
+      }
+     else return ch;
+   case 4: /* Shift-JIS */
+     ch = Agetchar();
+     if ((ch >= 0x80 && ch <= 0x9F) ||
+         (ch >= 0xE0 && ch <= 0xEF)) {
+       ch = (ch << 8) + Agetchar();
+       }
+     return ch;
+   default:
+     return 0x80;
+    }
+  }
+
+/****************************************************************************
+
+  main
+
+  The main program, of course.
+  Reads characters 1 by 1 from stdin, and makes lines out of them using
+  addchar. Handles line breaking, (which accounts for most of the
+  complexity in this function).
+
+****************************************************************************/
+
+int main(argc,argv)
+int argc;
+char *argv[];
+{
+  inchr c,c2;
+  int i;
+  int last_was_eol_flag;
+/*---------------------------------------------------------------------------
+  wordbreakmode:
+    -1: /^$/ and blanks are to be absorbed (when line break was forced
+      by a blank or character larger than outlinelenlimit)
+    0: /^ *$/ and blanks are not to be absorbed
+    1: /[^ ]$/ no word break yet
+    2: /[^ ]  *$/
+    3: /[^ ]$/ had a word break
+---------------------------------------------------------------------------*/
+  int wordbreakmode;
+  int char_not_added;
+
+  Myargc = argc;
+  Myargv = argv;
+  getparams();
+  readcontrolfiles();
+  readfont();
+  linealloc();
+
+  wordbreakmode = 0;
+  last_was_eol_flag = 0;
+
+#ifdef TLF_FONTS
+  toiletfont = 0;
+#endif
+
+  while ((c = getinchr())!=EOF) {
+
+    if (c=='\n'&&paragraphflag&&!last_was_eol_flag) {
+      ungetinchr(c2 = getinchr());
+      c = ((isascii(c2)&&isspace(c2))?'\n':' ');
+      }
+    last_was_eol_flag = (isascii(c)&&isspace(c)&&c!='\t'&&c!=' ');
+
+    if (deutschflag) {
+      if (c>='[' && c<=']') {
+        c = deutsch[c-'['];
+        }
+      else if (c >='{' && c <= '~') {
+        c = deutsch[c-'{'+3];
+        }
+      }
+
+    c = handlemapping(c);
+
+    if (isascii(c)&&isspace(c)) {
+      c = (c=='\t'||c==' ') ? ' ' : '\n';
+      }
+
+    if ((c>'\0' && c<' ' && c!='\n') || c==127) continue;
+
+/*
+  Note: The following code is complex and thoroughly tested.
+  Be careful when modifying!
+*/
+
+    do {
+      char_not_added = 0;
+
+      if (wordbreakmode== -1) {
+        if (c==' ') {
+          break;
+          }
+        else if (c=='\n') {
+          wordbreakmode = 0;
+          break;
+          }
+        wordbreakmode = 0;
+        }
+
+      if (c=='\n') {
+        printline();
+        wordbreakmode = 0;
+        }
+
+      else if (addchar(c)) {
+        if (c!=' ') {
+          wordbreakmode = (wordbreakmode>=2)?3:1;
+          }
+        else {
+          wordbreakmode = (wordbreakmode>0)?2:0;
+          }
+        }
+
+      else if (outlinelen==0) {
+        for (i=0;i<charheight;i++) {
+          if (right2left && outputwidth>1) {
+            putstring(currchar[i]+STRLEN(currchar[i])-outlinelenlimit);
+            }
+          else {
+            putstring(currchar[i]);
+            }
+          }
+        wordbreakmode = -1;
+        }
+
+      else if (c==' ') {
+        if (wordbreakmode==2) {
+          splitline();
+          }
+        else {
+          printline();
+          }
+        wordbreakmode = -1;
+        }
+
+      else {
+        if (wordbreakmode>=2) {
+          splitline();
+          }
+        else {
+          printline();
+          }
+        wordbreakmode = (wordbreakmode==3)?1:0;
+        char_not_added = 1;
+        }
+
+      } while (char_not_added);
+    }
+
+  if (outlinelen!=0) {
+    printline();
+    }
+  return 0;
+}
diff --git a/externals/figlet/figlist b/externals/figlet/figlist
new file mode 100755
--- /dev/null
+++ b/externals/figlet/figlist
@@ -0,0 +1,64 @@
+#!/bin/sh -
+# figlist by Glenn Chappell <ggc@uiuc.edu>
+# figlet release 2.1.1 -- 25 Aug 1994
+#
+# Lists all fonts and control files in figlet's default font directory.
+# Replaces "figlet -F", which was removed from figlet version 2.1.
+#
+# Usage: figlist [ -d directory ]
+
+DIR=`dirname $0`
+FIGLET=$DIR/figlet
+
+# Get figlet version
+FIGLETVERSION=`$FIGLET -I1 2>/dev/null`
+if [ -z "$FIGLETVERSION" ]; then
+  FIGLETVERSION=20000
+fi
+
+USAGE="Usage: `basename $0` [ -d directory ]"
+
+if [ "$1" = "-d" ]; then
+  FONTDIROPT="-d $2"
+  if [ $# -ne 2 ]; then
+    echo "$USAGE"
+    exit 1
+  fi
+else
+  FONTDIROPT=""
+  if [ $# -ne 0 ]; then
+    echo "$USAGE"
+    exit 1
+  fi
+fi
+
+if [ "$FIGLETVERSION" -lt 20100 ]; then
+  # figlet 2.0
+  $FIGLET $FONTDIROPT -F
+  exit
+fi
+
+# From here on we may assume figlet 2.1 or later
+
+FONTDIR=`$FIGLET $FONTDIROPT -I2`
+FONT=`$FIGLET -I3`
+echo "Default font: $FONT"
+echo "Font directory: $FONTDIR"
+
+if [ -d "$FONTDIR" ] && [ -r "$FONTDIR" ]; then
+  cd "$FONTDIR"
+  if ls *.flf >/dev/null 2>&1 ; then
+    echo "Figlet fonts in this directory:"
+    ls *.flf 2>/dev/null | sed s/\.flf$//
+  else
+    echo 'No figlet fonts in this directory'
+  fi
+  if ls *.flc >/dev/null 2>&1 ; then
+    echo "Figlet control files in this directory:"
+    ls *.flc 2>/dev/null | sed s/\.flc$//
+  else
+    echo 'No figlet control files in this directory'
+  fi
+else
+  echo 'Unable to open directory'
+fi
diff --git a/externals/figlet/figlist.6 b/externals/figlet/figlist.6
new file mode 100644
--- /dev/null
+++ b/externals/figlet/figlist.6
@@ -0,0 +1,52 @@
+.\" figlist by Glenn Chappell <ggc@uiuc.edu>
+.\" figlet release 2.1.1 -- 25 Aug 1994
+.\"
+.\" Lists all fonts and control files in figlet's default font directory.
+.\" Replaces "figlet -F", which was removed from figlet version 2.1.
+.\"
+.\" Usage: figlist [ -d directory ]
+.\"
+.\" Manual page by Jonathon Abbott, for the Debian Project
+.\" slightly modified by Francesco Tapparo, for the Debian Project
+.TH FIGLIST 6 "31 May 2012" "v2.2.5"
+
+.SH NAME
+figlist \- lists figlet fonts and control files
+
+.SH SYNOPSIS
+.B figlist
+[
+.B \-d
+.I directory
+]
+
+.SH DESCRIPTION
+Lists all fonts and control files in figlet's default font directory.
+Replaces "figlet \-F", which was removed from figlet version 2.1.
+
+.SH EXAMPLES
+To use
+.B figlist
+with its default settings, simply type
+.RS
+
+.B example% figlist
+
+.RE
+
+To list all the font and control files in /usr/share/fonts/figlet
+.RS
+
+.B example% figlist \-d /usr/share/fonts/figlet
+
+.RE
+
+.SH AUTHORS
+figlist was written by Glenn Chappell <ggc@uiuc.edu>
+
+This manual page was written by Jonathon Abbott for the Debian Project.
+
+.SH "SEE ALSO"
+.BR figlet (6),
+.BR chkfont (6),
+.BR showfigfonts (6)
diff --git a/externals/figlet/figmagic b/externals/figlet/figmagic
new file mode 100644
--- /dev/null
+++ b/externals/figlet/figmagic
@@ -0,0 +1,6 @@
+# Append this file to your /etc/magic or /usr/share/misc/magic file
+# to enable the ``file'' command to report on FIGlet fonts and controlfiles.
+0	string		flf		FIGlet font
+>3	string		>2a		version %-2.2s
+0	string		flc		FIGlet controlfile
+>3	string		>2a		version %-2.2s
diff --git a/externals/figlet/fonts/646-ca.flc b/externals/figlet/fonts/646-ca.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/646-ca.flc
@@ -0,0 +1,157 @@
+#
+#	Name:             CSA_Z243.4-1985-1 to Unicode
+#	Unicode version:  2.0
+#	Table version:    0.1
+#	Table format:     Format A
+#	Date:             0097-01-24
+#	Authors:          John Cowan <cowan@ccil.org> (conversion)
+#                     Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+#	General notes:
+#
+#	This table contains data obtained from RFC 1345 on how
+#       CSA_Z243.4-1985-1 characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the CSA_Z243.4-1985-1 code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in CSA_Z243.4-1985-1 order
+#
+#	Any comments or problems, contact <cowan@ccil.org>
+#
+#   &rem source: ECMA registry
+#   &alias iso-ir-121
+#   &g0esc x2877 &g1esc x2977 &g2esc x2a77 &g3esc x2b77
+#   &alias ISO646-CA
+#   &alias csa7-1
+#   &alias ca
+0x00	0x0000	# NULL (NUL)
+0x01	0x0001	# START OF HEADING (SOH)
+0x02	0x0002	# START OF TEXT (STX)
+0x03	0x0003	# END OF TEXT (ETX)
+0x04	0x0004	# END OF TRANSMISSION (EOT)
+0x05	0x0005	# ENQUIRY (ENQ)
+0x06	0x0006	# ACKNOWLEDGE (ACK)
+0x07	0x0007	# BELL (BEL)
+0x08	0x0008	# BACKSPACE (BS)
+0x09	0x0009	# CHARACTER TABULATION (HT)
+0x0A	0x000A	# LINE FEED (LF)
+0x0B	0x000B	# LINE TABULATION (VT)
+0x0C	0x000C	# FORM FEED (FF)
+0x0D	0x000D	# CARRIAGE RETURN (CR)
+0x0E	0x000E	# SHIFT OUT (SO)
+0x0F	0x000F	# SHIFT IN (SI)
+0x10	0x0010	# DATALINK ESCAPE (DLE)
+0x11	0x0011	# DEVICE CONTROL ONE (DC1)
+0x12	0x0012	# DEVICE CONTROL TWO (DC2)
+0x13	0x0013	# DEVICE CONTROL THREE (DC3)
+0x14	0x0014	# DEVICE CONTROL FOUR (DC4)
+0x15	0x0015	# NEGATIVE ACKNOWLEDGE (NAK)
+0x16	0x0016	# SYNCRONOUS IDLE (SYN)
+0x17	0x0017	# END OF TRANSMISSION BLOCK (ETB)
+0x18	0x0018	# CANCEL (CAN)
+0x19	0x0019	# END OF MEDIUM (EM)
+0x1A	0x001A	# SUBSTITUTE (SUB)
+0x1B	0x001B	# ESCAPE (ESC)
+0x1C	0x001C	# FILE SEPARATOR (IS4)
+0x1D	0x001D	# GROUP SEPARATOR (IS3)
+0x1E	0x001E	# RECORD SEPARATOR (IS2)
+0x1F	0x001F	# UNIT SEPARATOR (IS1)
+0x20	0x0020	# SPACE
+0x21	0x0021	# EXCLAMATION MARK
+0x22	0x0022	# QUOTATION MARK
+0x23	0x0023	# NUMBER SIGN
+0x24	0x0024	# DOLLAR SIGN
+0x25	0x0025	# PERCENT SIGN
+0x26	0x0026	# AMPERSAND
+0x27	0x0027	# APOSTROPHE
+0x28	0x0028	# LEFT PARENTHESIS
+0x29	0x0029	# RIGHT PARENTHESIS
+0x2A	0x002A	# ASTERISK
+0x2B	0x002B	# PLUS SIGN
+0x2C	0x002C	# COMMA
+0x2D	0x002D	# HYPHEN-MINUS
+0x2E	0x002E	# FULL STOP
+0x2F	0x002F	# SOLIDUS
+0x30	0x0030	# DIGIT ZERO
+0x31	0x0031	# DIGIT ONE
+0x32	0x0032	# DIGIT TWO
+0x33	0x0033	# DIGIT THREE
+0x34	0x0034	# DIGIT FOUR
+0x35	0x0035	# DIGIT FIVE
+0x36	0x0036	# DIGIT SIX
+0x37	0x0037	# DIGIT SEVEN
+0x38	0x0038	# DIGIT EIGHT
+0x39	0x0039	# DIGIT NINE
+0x3A	0x003A	# COLON
+0x3B	0x003B	# SEMICOLON
+0x3C	0x003C	# LESS-THAN SIGN
+0x3D	0x003D	# EQUALS SIGN
+0x3E	0x003E	# GREATER-THAN SIGN
+0x3F	0x003F	# QUESTION MARK
+0x40	0x00E0	# LATIN SMALL LETTER A WITH GRAVE
+0x41	0x0041	# LATIN CAPITAL LETTER A
+0x42	0x0042	# LATIN CAPITAL LETTER B
+0x43	0x0043	# LATIN CAPITAL LETTER C
+0x44	0x0044	# LATIN CAPITAL LETTER D
+0x45	0x0045	# LATIN CAPITAL LETTER E
+0x46	0x0046	# LATIN CAPITAL LETTER F
+0x47	0x0047	# LATIN CAPITAL LETTER G
+0x48	0x0048	# LATIN CAPITAL LETTER H
+0x49	0x0049	# LATIN CAPITAL LETTER I
+0x4A	0x004A	# LATIN CAPITAL LETTER J
+0x4B	0x004B	# LATIN CAPITAL LETTER K
+0x4C	0x004C	# LATIN CAPITAL LETTER L
+0x4D	0x004D	# LATIN CAPITAL LETTER M
+0x4E	0x004E	# LATIN CAPITAL LETTER N
+0x4F	0x004F	# LATIN CAPITAL LETTER O
+0x50	0x0050	# LATIN CAPITAL LETTER P
+0x51	0x0051	# LATIN CAPITAL LETTER Q
+0x52	0x0052	# LATIN CAPITAL LETTER R
+0x53	0x0053	# LATIN CAPITAL LETTER S
+0x54	0x0054	# LATIN CAPITAL LETTER T
+0x55	0x0055	# LATIN CAPITAL LETTER U
+0x56	0x0056	# LATIN CAPITAL LETTER V
+0x57	0x0057	# LATIN CAPITAL LETTER W
+0x58	0x0058	# LATIN CAPITAL LETTER X
+0x59	0x0059	# LATIN CAPITAL LETTER Y
+0x5A	0x005A	# LATIN CAPITAL LETTER Z
+0x5B	0x00E2	# LATIN SMALL LETTER A WITH CIRCUMFLEX
+0x5C	0x00E7	# LATIN SMALL LETTER C WITH CEDILLA
+0x5D	0x00EA	# LATIN SMALL LETTER E WITH CIRCUMFLEX
+0x5E	0x00EE	# LATIN SMALL LETTER I WITH CIRCUMFLEX
+0x5F	0x005F	# LOW LINE
+0x60	0x00F4	# LATIN SMALL LETTER O WITH CIRCUMFLEX
+0x61	0x0061	# LATIN SMALL LETTER A
+0x62	0x0062	# LATIN SMALL LETTER B
+0x63	0x0063	# LATIN SMALL LETTER C
+0x64	0x0064	# LATIN SMALL LETTER D
+0x65	0x0065	# LATIN SMALL LETTER E
+0x66	0x0066	# LATIN SMALL LETTER F
+0x67	0x0067	# LATIN SMALL LETTER G
+0x68	0x0068	# LATIN SMALL LETTER H
+0x69	0x0069	# LATIN SMALL LETTER I
+0x6A	0x006A	# LATIN SMALL LETTER J
+0x6B	0x006B	# LATIN SMALL LETTER K
+0x6C	0x006C	# LATIN SMALL LETTER L
+0x6D	0x006D	# LATIN SMALL LETTER M
+0x6E	0x006E	# LATIN SMALL LETTER N
+0x6F	0x006F	# LATIN SMALL LETTER O
+0x70	0x0070	# LATIN SMALL LETTER P
+0x71	0x0071	# LATIN SMALL LETTER Q
+0x72	0x0072	# LATIN SMALL LETTER R
+0x73	0x0073	# LATIN SMALL LETTER S
+0x74	0x0074	# LATIN SMALL LETTER T
+0x75	0x0075	# LATIN SMALL LETTER U
+0x76	0x0076	# LATIN SMALL LETTER V
+0x77	0x0077	# LATIN SMALL LETTER W
+0x78	0x0078	# LATIN SMALL LETTER X
+0x79	0x0079	# LATIN SMALL LETTER Y
+0x7A	0x007A	# LATIN SMALL LETTER Z
+0x7B	0x00E9	# LATIN SMALL LETTER E WITH ACUTE
+0x7C	0x00F9	# LATIN SMALL LETTER U WITH GRAVE
+0x7D	0x00E8	# LATIN SMALL LETTER E WITH GRAVE
+0x7E	0x00FB	# LATIN SMALL LETTER U WITH CIRCUMFLEX
+0x7F	0x007F	# DELETE (DEL)
diff --git a/externals/figlet/fonts/646-ca2.flc b/externals/figlet/fonts/646-ca2.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/646-ca2.flc
@@ -0,0 +1,156 @@
+#
+#	Name:             CSA_Z243.4-1985-2 to Unicode
+#	Unicode version:  2.0
+#	Table version:    0.1
+#	Table format:     Format A
+#	Date:             0097-01-24
+#	Authors:          John Cowan <cowan@ccil.org> (conversion)
+#                     Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+#	General notes:
+#
+#	This table contains data obtained from RFC 1345 on how
+#       CSA_Z243.4-1985-2 characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the CSA_Z243.4-1985-2 code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in CSA_Z243.4-1985-2 order
+#
+#	Any comments or problems, contact <cowan@ccil.org>
+#
+#   &rem source: ECMA registry
+#   &alias iso-ir-122
+#   &alias ISO646-CA2
+#   &g0esc x2878 &g1esc x2978 &g2esc x2a78 &g3esc x2b78
+#   &alias csa7-2
+0x00	0x0000	# NULL (NUL)
+0x01	0x0001	# START OF HEADING (SOH)
+0x02	0x0002	# START OF TEXT (STX)
+0x03	0x0003	# END OF TEXT (ETX)
+0x04	0x0004	# END OF TRANSMISSION (EOT)
+0x05	0x0005	# ENQUIRY (ENQ)
+0x06	0x0006	# ACKNOWLEDGE (ACK)
+0x07	0x0007	# BELL (BEL)
+0x08	0x0008	# BACKSPACE (BS)
+0x09	0x0009	# CHARACTER TABULATION (HT)
+0x0A	0x000A	# LINE FEED (LF)
+0x0B	0x000B	# LINE TABULATION (VT)
+0x0C	0x000C	# FORM FEED (FF)
+0x0D	0x000D	# CARRIAGE RETURN (CR)
+0x0E	0x000E	# SHIFT OUT (SO)
+0x0F	0x000F	# SHIFT IN (SI)
+0x10	0x0010	# DATALINK ESCAPE (DLE)
+0x11	0x0011	# DEVICE CONTROL ONE (DC1)
+0x12	0x0012	# DEVICE CONTROL TWO (DC2)
+0x13	0x0013	# DEVICE CONTROL THREE (DC3)
+0x14	0x0014	# DEVICE CONTROL FOUR (DC4)
+0x15	0x0015	# NEGATIVE ACKNOWLEDGE (NAK)
+0x16	0x0016	# SYNCRONOUS IDLE (SYN)
+0x17	0x0017	# END OF TRANSMISSION BLOCK (ETB)
+0x18	0x0018	# CANCEL (CAN)
+0x19	0x0019	# END OF MEDIUM (EM)
+0x1A	0x001A	# SUBSTITUTE (SUB)
+0x1B	0x001B	# ESCAPE (ESC)
+0x1C	0x001C	# FILE SEPARATOR (IS4)
+0x1D	0x001D	# GROUP SEPARATOR (IS3)
+0x1E	0x001E	# RECORD SEPARATOR (IS2)
+0x1F	0x001F	# UNIT SEPARATOR (IS1)
+0x20	0x0020	# SPACE
+0x21	0x0021	# EXCLAMATION MARK
+0x22	0x0022	# QUOTATION MARK
+0x23	0x0023	# NUMBER SIGN
+0x24	0x0024	# DOLLAR SIGN
+0x25	0x0025	# PERCENT SIGN
+0x26	0x0026	# AMPERSAND
+0x27	0x0027	# APOSTROPHE
+0x28	0x0028	# LEFT PARENTHESIS
+0x29	0x0029	# RIGHT PARENTHESIS
+0x2A	0x002A	# ASTERISK
+0x2B	0x002B	# PLUS SIGN
+0x2C	0x002C	# COMMA
+0x2D	0x002D	# HYPHEN-MINUS
+0x2E	0x002E	# FULL STOP
+0x2F	0x002F	# SOLIDUS
+0x30	0x0030	# DIGIT ZERO
+0x31	0x0031	# DIGIT ONE
+0x32	0x0032	# DIGIT TWO
+0x33	0x0033	# DIGIT THREE
+0x34	0x0034	# DIGIT FOUR
+0x35	0x0035	# DIGIT FIVE
+0x36	0x0036	# DIGIT SIX
+0x37	0x0037	# DIGIT SEVEN
+0x38	0x0038	# DIGIT EIGHT
+0x39	0x0039	# DIGIT NINE
+0x3A	0x003A	# COLON
+0x3B	0x003B	# SEMICOLON
+0x3C	0x003C	# LESS-THAN SIGN
+0x3D	0x003D	# EQUALS SIGN
+0x3E	0x003E	# GREATER-THAN SIGN
+0x3F	0x003F	# QUESTION MARK
+0x40	0x00E0	# LATIN SMALL LETTER A WITH GRAVE
+0x41	0x0041	# LATIN CAPITAL LETTER A
+0x42	0x0042	# LATIN CAPITAL LETTER B
+0x43	0x0043	# LATIN CAPITAL LETTER C
+0x44	0x0044	# LATIN CAPITAL LETTER D
+0x45	0x0045	# LATIN CAPITAL LETTER E
+0x46	0x0046	# LATIN CAPITAL LETTER F
+0x47	0x0047	# LATIN CAPITAL LETTER G
+0x48	0x0048	# LATIN CAPITAL LETTER H
+0x49	0x0049	# LATIN CAPITAL LETTER I
+0x4A	0x004A	# LATIN CAPITAL LETTER J
+0x4B	0x004B	# LATIN CAPITAL LETTER K
+0x4C	0x004C	# LATIN CAPITAL LETTER L
+0x4D	0x004D	# LATIN CAPITAL LETTER M
+0x4E	0x004E	# LATIN CAPITAL LETTER N
+0x4F	0x004F	# LATIN CAPITAL LETTER O
+0x50	0x0050	# LATIN CAPITAL LETTER P
+0x51	0x0051	# LATIN CAPITAL LETTER Q
+0x52	0x0052	# LATIN CAPITAL LETTER R
+0x53	0x0053	# LATIN CAPITAL LETTER S
+0x54	0x0054	# LATIN CAPITAL LETTER T
+0x55	0x0055	# LATIN CAPITAL LETTER U
+0x56	0x0056	# LATIN CAPITAL LETTER V
+0x57	0x0057	# LATIN CAPITAL LETTER W
+0x58	0x0058	# LATIN CAPITAL LETTER X
+0x59	0x0059	# LATIN CAPITAL LETTER Y
+0x5A	0x005A	# LATIN CAPITAL LETTER Z
+0x5B	0x00E2	# LATIN SMALL LETTER A WITH CIRCUMFLEX
+0x5C	0x00E7	# LATIN SMALL LETTER C WITH CEDILLA
+0x5D	0x00EA	# LATIN SMALL LETTER E WITH CIRCUMFLEX
+0x5E	0x00C9	# LATIN CAPITAL LETTER E WITH ACUTE
+0x5F	0x005F	# LOW LINE
+0x60	0x00F4	# LATIN SMALL LETTER O WITH CIRCUMFLEX
+0x61	0x0061	# LATIN SMALL LETTER A
+0x62	0x0062	# LATIN SMALL LETTER B
+0x63	0x0063	# LATIN SMALL LETTER C
+0x64	0x0064	# LATIN SMALL LETTER D
+0x65	0x0065	# LATIN SMALL LETTER E
+0x66	0x0066	# LATIN SMALL LETTER F
+0x67	0x0067	# LATIN SMALL LETTER G
+0x68	0x0068	# LATIN SMALL LETTER H
+0x69	0x0069	# LATIN SMALL LETTER I
+0x6A	0x006A	# LATIN SMALL LETTER J
+0x6B	0x006B	# LATIN SMALL LETTER K
+0x6C	0x006C	# LATIN SMALL LETTER L
+0x6D	0x006D	# LATIN SMALL LETTER M
+0x6E	0x006E	# LATIN SMALL LETTER N
+0x6F	0x006F	# LATIN SMALL LETTER O
+0x70	0x0070	# LATIN SMALL LETTER P
+0x71	0x0071	# LATIN SMALL LETTER Q
+0x72	0x0072	# LATIN SMALL LETTER R
+0x73	0x0073	# LATIN SMALL LETTER S
+0x74	0x0074	# LATIN SMALL LETTER T
+0x75	0x0075	# LATIN SMALL LETTER U
+0x76	0x0076	# LATIN SMALL LETTER V
+0x77	0x0077	# LATIN SMALL LETTER W
+0x78	0x0078	# LATIN SMALL LETTER X
+0x79	0x0079	# LATIN SMALL LETTER Y
+0x7A	0x007A	# LATIN SMALL LETTER Z
+0x7B	0x00E9	# LATIN SMALL LETTER E WITH ACUTE
+0x7C	0x00F9	# LATIN SMALL LETTER U WITH GRAVE
+0x7D	0x00E8	# LATIN SMALL LETTER E WITH GRAVE
+0x7E	0x00FB	# LATIN SMALL LETTER U WITH CIRCUMFLEX
+0x7F	0x007F	# DELETE (DEL)
diff --git a/externals/figlet/fonts/646-cn.flc b/externals/figlet/fonts/646-cn.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/646-cn.flc
@@ -0,0 +1,156 @@
+#
+#	Name:             GB_1988-80 to Unicode
+#	Unicode version:  2.0
+#	Table version:    0.1
+#	Table format:     Format A
+#	Date:             0097-01-24
+#	Authors:          John Cowan <cowan@ccil.org> (conversion)
+#                     Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+#	General notes:
+#
+#	This table contains data obtained from RFC 1345 on how
+#       GB_1988-80 characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the GB_1988-80 code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in GB_1988-80 order
+#
+#	Any comments or problems, contact <cowan@ccil.org>
+#
+#   &rem source: ECMA registry
+#   &alias iso-ir-57
+#   &g0esc x2854 &g1esc x2954 &g2esc x2a54 &g3esc x2b54
+#   &alias cn
+#   &alias ISO646-CN
+0x00	0x0000	# NULL (NUL)
+0x01	0x0001	# START OF HEADING (SOH)
+0x02	0x0002	# START OF TEXT (STX)
+0x03	0x0003	# END OF TEXT (ETX)
+0x04	0x0004	# END OF TRANSMISSION (EOT)
+0x05	0x0005	# ENQUIRY (ENQ)
+0x06	0x0006	# ACKNOWLEDGE (ACK)
+0x07	0x0007	# BELL (BEL)
+0x08	0x0008	# BACKSPACE (BS)
+0x09	0x0009	# CHARACTER TABULATION (HT)
+0x0A	0x000A	# LINE FEED (LF)
+0x0B	0x000B	# LINE TABULATION (VT)
+0x0C	0x000C	# FORM FEED (FF)
+0x0D	0x000D	# CARRIAGE RETURN (CR)
+0x0E	0x000E	# SHIFT OUT (SO)
+0x0F	0x000F	# SHIFT IN (SI)
+0x10	0x0010	# DATALINK ESCAPE (DLE)
+0x11	0x0011	# DEVICE CONTROL ONE (DC1)
+0x12	0x0012	# DEVICE CONTROL TWO (DC2)
+0x13	0x0013	# DEVICE CONTROL THREE (DC3)
+0x14	0x0014	# DEVICE CONTROL FOUR (DC4)
+0x15	0x0015	# NEGATIVE ACKNOWLEDGE (NAK)
+0x16	0x0016	# SYNCRONOUS IDLE (SYN)
+0x17	0x0017	# END OF TRANSMISSION BLOCK (ETB)
+0x18	0x0018	# CANCEL (CAN)
+0x19	0x0019	# END OF MEDIUM (EM)
+0x1A	0x001A	# SUBSTITUTE (SUB)
+0x1B	0x001B	# ESCAPE (ESC)
+0x1C	0x001C	# FILE SEPARATOR (IS4)
+0x1D	0x001D	# GROUP SEPARATOR (IS3)
+0x1E	0x001E	# RECORD SEPARATOR (IS2)
+0x1F	0x001F	# UNIT SEPARATOR (IS1)
+0x20	0x0020	# SPACE
+0x21	0x0021	# EXCLAMATION MARK
+0x22	0x0022	# QUOTATION MARK
+0x23	0x0023	# NUMBER SIGN
+0x24	0x00A5	# YEN SIGN
+0x25	0x0025	# PERCENT SIGN
+0x26	0x0026	# AMPERSAND
+0x27	0x0027	# APOSTROPHE
+0x28	0x0028	# LEFT PARENTHESIS
+0x29	0x0029	# RIGHT PARENTHESIS
+0x2A	0x002A	# ASTERISK
+0x2B	0x002B	# PLUS SIGN
+0x2C	0x002C	# COMMA
+0x2D	0x002D	# HYPHEN-MINUS
+0x2E	0x002E	# FULL STOP
+0x2F	0x002F	# SOLIDUS
+0x30	0x0030	# DIGIT ZERO
+0x31	0x0031	# DIGIT ONE
+0x32	0x0032	# DIGIT TWO
+0x33	0x0033	# DIGIT THREE
+0x34	0x0034	# DIGIT FOUR
+0x35	0x0035	# DIGIT FIVE
+0x36	0x0036	# DIGIT SIX
+0x37	0x0037	# DIGIT SEVEN
+0x38	0x0038	# DIGIT EIGHT
+0x39	0x0039	# DIGIT NINE
+0x3A	0x003A	# COLON
+0x3B	0x003B	# SEMICOLON
+0x3C	0x003C	# LESS-THAN SIGN
+0x3D	0x003D	# EQUALS SIGN
+0x3E	0x003E	# GREATER-THAN SIGN
+0x3F	0x003F	# QUESTION MARK
+0x40	0x0040	# COMMERCIAL AT
+0x41	0x0041	# LATIN CAPITAL LETTER A
+0x42	0x0042	# LATIN CAPITAL LETTER B
+0x43	0x0043	# LATIN CAPITAL LETTER C
+0x44	0x0044	# LATIN CAPITAL LETTER D
+0x45	0x0045	# LATIN CAPITAL LETTER E
+0x46	0x0046	# LATIN CAPITAL LETTER F
+0x47	0x0047	# LATIN CAPITAL LETTER G
+0x48	0x0048	# LATIN CAPITAL LETTER H
+0x49	0x0049	# LATIN CAPITAL LETTER I
+0x4A	0x004A	# LATIN CAPITAL LETTER J
+0x4B	0x004B	# LATIN CAPITAL LETTER K
+0x4C	0x004C	# LATIN CAPITAL LETTER L
+0x4D	0x004D	# LATIN CAPITAL LETTER M
+0x4E	0x004E	# LATIN CAPITAL LETTER N
+0x4F	0x004F	# LATIN CAPITAL LETTER O
+0x50	0x0050	# LATIN CAPITAL LETTER P
+0x51	0x0051	# LATIN CAPITAL LETTER Q
+0x52	0x0052	# LATIN CAPITAL LETTER R
+0x53	0x0053	# LATIN CAPITAL LETTER S
+0x54	0x0054	# LATIN CAPITAL LETTER T
+0x55	0x0055	# LATIN CAPITAL LETTER U
+0x56	0x0056	# LATIN CAPITAL LETTER V
+0x57	0x0057	# LATIN CAPITAL LETTER W
+0x58	0x0058	# LATIN CAPITAL LETTER X
+0x59	0x0059	# LATIN CAPITAL LETTER Y
+0x5A	0x005A	# LATIN CAPITAL LETTER Z
+0x5B	0x005B	# LEFT SQUARE BRACKET
+0x5C	0x005C	# REVERSE SOLIDUS
+0x5D	0x005D	# RIGHT SQUARE BRACKET
+0x5E	0x005E	# CIRCUMFLEX ACCENT
+0x5F	0x005F	# LOW LINE
+0x60	0x0060	# GRAVE ACCENT
+0x61	0x0061	# LATIN SMALL LETTER A
+0x62	0x0062	# LATIN SMALL LETTER B
+0x63	0x0063	# LATIN SMALL LETTER C
+0x64	0x0064	# LATIN SMALL LETTER D
+0x65	0x0065	# LATIN SMALL LETTER E
+0x66	0x0066	# LATIN SMALL LETTER F
+0x67	0x0067	# LATIN SMALL LETTER G
+0x68	0x0068	# LATIN SMALL LETTER H
+0x69	0x0069	# LATIN SMALL LETTER I
+0x6A	0x006A	# LATIN SMALL LETTER J
+0x6B	0x006B	# LATIN SMALL LETTER K
+0x6C	0x006C	# LATIN SMALL LETTER L
+0x6D	0x006D	# LATIN SMALL LETTER M
+0x6E	0x006E	# LATIN SMALL LETTER N
+0x6F	0x006F	# LATIN SMALL LETTER O
+0x70	0x0070	# LATIN SMALL LETTER P
+0x71	0x0071	# LATIN SMALL LETTER Q
+0x72	0x0072	# LATIN SMALL LETTER R
+0x73	0x0073	# LATIN SMALL LETTER S
+0x74	0x0074	# LATIN SMALL LETTER T
+0x75	0x0075	# LATIN SMALL LETTER U
+0x76	0x0076	# LATIN SMALL LETTER V
+0x77	0x0077	# LATIN SMALL LETTER W
+0x78	0x0078	# LATIN SMALL LETTER X
+0x79	0x0079	# LATIN SMALL LETTER Y
+0x7A	0x007A	# LATIN SMALL LETTER Z
+0x7B	0x007B	# LEFT CURLY BRACKET
+0x7C	0x007C	# VERTICAL LINE
+0x7D	0x007D	# RIGHT CURLY BRACKET
+0x7E	0x203E	# OVERLINE
+0x7F	0x007F	# DELETE (DEL)
diff --git a/externals/figlet/fonts/646-cu.flc b/externals/figlet/fonts/646-cu.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/646-cu.flc
@@ -0,0 +1,156 @@
+#
+#	Name:             NC_NC00-10:81 to Unicode
+#	Unicode version:  2.0
+#	Table version:    0.1
+#	Table format:     Format A
+#	Date:             0097-01-24
+#	Authors:          John Cowan <cowan@ccil.org> (conversion)
+#                     Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+#	General notes:
+#
+#	This table contains data obtained from RFC 1345 on how
+#       NC_NC00-10:81 characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the NC_NC00-10:81 code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in NC_NC00-10:81 order
+#
+#	Any comments or problems, contact <cowan@ccil.org>
+#
+#   &rem source: ECMA registry
+#   &alias cuba
+#   &alias iso-ir-151
+#   &alias ISO646-CU
+#   &g0esc x282141 &g1esc x292141 &g2esc x2a2141 &g3esc x2b2141
+0x00	0x0000	# NULL (NUL)
+0x01	0x0001	# START OF HEADING (SOH)
+0x02	0x0002	# START OF TEXT (STX)
+0x03	0x0003	# END OF TEXT (ETX)
+0x04	0x0004	# END OF TRANSMISSION (EOT)
+0x05	0x0005	# ENQUIRY (ENQ)
+0x06	0x0006	# ACKNOWLEDGE (ACK)
+0x07	0x0007	# BELL (BEL)
+0x08	0x0008	# BACKSPACE (BS)
+0x09	0x0009	# CHARACTER TABULATION (HT)
+0x0A	0x000A	# LINE FEED (LF)
+0x0B	0x000B	# LINE TABULATION (VT)
+0x0C	0x000C	# FORM FEED (FF)
+0x0D	0x000D	# CARRIAGE RETURN (CR)
+0x0E	0x000E	# SHIFT OUT (SO)
+0x0F	0x000F	# SHIFT IN (SI)
+0x10	0x0010	# DATALINK ESCAPE (DLE)
+0x11	0x0011	# DEVICE CONTROL ONE (DC1)
+0x12	0x0012	# DEVICE CONTROL TWO (DC2)
+0x13	0x0013	# DEVICE CONTROL THREE (DC3)
+0x14	0x0014	# DEVICE CONTROL FOUR (DC4)
+0x15	0x0015	# NEGATIVE ACKNOWLEDGE (NAK)
+0x16	0x0016	# SYNCRONOUS IDLE (SYN)
+0x17	0x0017	# END OF TRANSMISSION BLOCK (ETB)
+0x18	0x0018	# CANCEL (CAN)
+0x19	0x0019	# END OF MEDIUM (EM)
+0x1A	0x001A	# SUBSTITUTE (SUB)
+0x1B	0x001B	# ESCAPE (ESC)
+0x1C	0x001C	# FILE SEPARATOR (IS4)
+0x1D	0x001D	# GROUP SEPARATOR (IS3)
+0x1E	0x001E	# RECORD SEPARATOR (IS2)
+0x1F	0x001F	# UNIT SEPARATOR (IS1)
+0x20	0x0020	# SPACE
+0x21	0x0021	# EXCLAMATION MARK
+0x22	0x0022	# QUOTATION MARK
+0x23	0x0023	# NUMBER SIGN
+0x24	0x00A4	# CURRENCY SIGN
+0x25	0x0025	# PERCENT SIGN
+0x26	0x0026	# AMPERSAND
+0x27	0x0027	# APOSTROPHE
+0x28	0x0028	# LEFT PARENTHESIS
+0x29	0x0029	# RIGHT PARENTHESIS
+0x2A	0x002A	# ASTERISK
+0x2B	0x002B	# PLUS SIGN
+0x2C	0x002C	# COMMA
+0x2D	0x002D	# HYPHEN-MINUS
+0x2E	0x002E	# FULL STOP
+0x2F	0x002F	# SOLIDUS
+0x30	0x0030	# DIGIT ZERO
+0x31	0x0031	# DIGIT ONE
+0x32	0x0032	# DIGIT TWO
+0x33	0x0033	# DIGIT THREE
+0x34	0x0034	# DIGIT FOUR
+0x35	0x0035	# DIGIT FIVE
+0x36	0x0036	# DIGIT SIX
+0x37	0x0037	# DIGIT SEVEN
+0x38	0x0038	# DIGIT EIGHT
+0x39	0x0039	# DIGIT NINE
+0x3A	0x003A	# COLON
+0x3B	0x003B	# SEMICOLON
+0x3C	0x003C	# LESS-THAN SIGN
+0x3D	0x003D	# EQUALS SIGN
+0x3E	0x003E	# GREATER-THAN SIGN
+0x3F	0x003F	# QUESTION MARK
+0x40	0x0040	# COMMERCIAL AT
+0x41	0x0041	# LATIN CAPITAL LETTER A
+0x42	0x0042	# LATIN CAPITAL LETTER B
+0x43	0x0043	# LATIN CAPITAL LETTER C
+0x44	0x0044	# LATIN CAPITAL LETTER D
+0x45	0x0045	# LATIN CAPITAL LETTER E
+0x46	0x0046	# LATIN CAPITAL LETTER F
+0x47	0x0047	# LATIN CAPITAL LETTER G
+0x48	0x0048	# LATIN CAPITAL LETTER H
+0x49	0x0049	# LATIN CAPITAL LETTER I
+0x4A	0x004A	# LATIN CAPITAL LETTER J
+0x4B	0x004B	# LATIN CAPITAL LETTER K
+0x4C	0x004C	# LATIN CAPITAL LETTER L
+0x4D	0x004D	# LATIN CAPITAL LETTER M
+0x4E	0x004E	# LATIN CAPITAL LETTER N
+0x4F	0x004F	# LATIN CAPITAL LETTER O
+0x50	0x0050	# LATIN CAPITAL LETTER P
+0x51	0x0051	# LATIN CAPITAL LETTER Q
+0x52	0x0052	# LATIN CAPITAL LETTER R
+0x53	0x0053	# LATIN CAPITAL LETTER S
+0x54	0x0054	# LATIN CAPITAL LETTER T
+0x55	0x0055	# LATIN CAPITAL LETTER U
+0x56	0x0056	# LATIN CAPITAL LETTER V
+0x57	0x0057	# LATIN CAPITAL LETTER W
+0x58	0x0058	# LATIN CAPITAL LETTER X
+0x59	0x0059	# LATIN CAPITAL LETTER Y
+0x5A	0x005A	# LATIN CAPITAL LETTER Z
+0x5B	0x00A1	# INVERTED EXCLAMATION MARK
+0x5C	0x00D1	# LATIN CAPITAL LETTER N WITH TILDE
+0x5D	0x005D	# RIGHT SQUARE BRACKET
+0x5E	0x00BF	# INVERTED QUESTION MARK
+0x5F	0x005F	# LOW LINE
+0x60	0x0060	# GRAVE ACCENT
+0x61	0x0061	# LATIN SMALL LETTER A
+0x62	0x0062	# LATIN SMALL LETTER B
+0x63	0x0063	# LATIN SMALL LETTER C
+0x64	0x0064	# LATIN SMALL LETTER D
+0x65	0x0065	# LATIN SMALL LETTER E
+0x66	0x0066	# LATIN SMALL LETTER F
+0x67	0x0067	# LATIN SMALL LETTER G
+0x68	0x0068	# LATIN SMALL LETTER H
+0x69	0x0069	# LATIN SMALL LETTER I
+0x6A	0x006A	# LATIN SMALL LETTER J
+0x6B	0x006B	# LATIN SMALL LETTER K
+0x6C	0x006C	# LATIN SMALL LETTER L
+0x6D	0x006D	# LATIN SMALL LETTER M
+0x6E	0x006E	# LATIN SMALL LETTER N
+0x6F	0x006F	# LATIN SMALL LETTER O
+0x70	0x0070	# LATIN SMALL LETTER P
+0x71	0x0071	# LATIN SMALL LETTER Q
+0x72	0x0072	# LATIN SMALL LETTER R
+0x73	0x0073	# LATIN SMALL LETTER S
+0x74	0x0074	# LATIN SMALL LETTER T
+0x75	0x0075	# LATIN SMALL LETTER U
+0x76	0x0076	# LATIN SMALL LETTER V
+0x77	0x0077	# LATIN SMALL LETTER W
+0x78	0x0078	# LATIN SMALL LETTER X
+0x79	0x0079	# LATIN SMALL LETTER Y
+0x7A	0x007A	# LATIN SMALL LETTER Z
+0x7B	0x00B4	# ACUTE ACCENT
+0x7C	0x00F1	# LATIN SMALL LETTER N WITH TILDE
+0x7D	0x005B	# LEFT SQUARE BRACKET
+0x7E	0x00A8	# DIAERESIS
+0x7F	0x007F	# DELETE (DEL)
diff --git a/externals/figlet/fonts/646-de.flc b/externals/figlet/fonts/646-de.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/646-de.flc
@@ -0,0 +1,156 @@
+#
+#	Name:             DIN_66003 to Unicode
+#	Unicode version:  2.0
+#	Table version:    0.1
+#	Table format:     Format A
+#	Date:             0097-01-24
+#	Authors:          John Cowan <cowan@ccil.org> (conversion)
+#                     Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+#	General notes:
+#
+#	This table contains data obtained from RFC 1345 on how
+#       DIN_66003 characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the DIN_66003 code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in DIN_66003 order
+#
+#	Any comments or problems, contact <cowan@ccil.org>
+#
+#   &rem source: ECMA registry
+#   &alias iso-ir-21
+#   &g0esc x284b &g1esc x294b &g2esc x2a4b &g3esc x2b4b
+#   &alias de
+#   &alias ISO646-DE
+0x00	0x0000	# NULL (NUL)
+0x01	0x0001	# START OF HEADING (SOH)
+0x02	0x0002	# START OF TEXT (STX)
+0x03	0x0003	# END OF TEXT (ETX)
+0x04	0x0004	# END OF TRANSMISSION (EOT)
+0x05	0x0005	# ENQUIRY (ENQ)
+0x06	0x0006	# ACKNOWLEDGE (ACK)
+0x07	0x0007	# BELL (BEL)
+0x08	0x0008	# BACKSPACE (BS)
+0x09	0x0009	# CHARACTER TABULATION (HT)
+0x0A	0x000A	# LINE FEED (LF)
+0x0B	0x000B	# LINE TABULATION (VT)
+0x0C	0x000C	# FORM FEED (FF)
+0x0D	0x000D	# CARRIAGE RETURN (CR)
+0x0E	0x000E	# SHIFT OUT (SO)
+0x0F	0x000F	# SHIFT IN (SI)
+0x10	0x0010	# DATALINK ESCAPE (DLE)
+0x11	0x0011	# DEVICE CONTROL ONE (DC1)
+0x12	0x0012	# DEVICE CONTROL TWO (DC2)
+0x13	0x0013	# DEVICE CONTROL THREE (DC3)
+0x14	0x0014	# DEVICE CONTROL FOUR (DC4)
+0x15	0x0015	# NEGATIVE ACKNOWLEDGE (NAK)
+0x16	0x0016	# SYNCRONOUS IDLE (SYN)
+0x17	0x0017	# END OF TRANSMISSION BLOCK (ETB)
+0x18	0x0018	# CANCEL (CAN)
+0x19	0x0019	# END OF MEDIUM (EM)
+0x1A	0x001A	# SUBSTITUTE (SUB)
+0x1B	0x001B	# ESCAPE (ESC)
+0x1C	0x001C	# FILE SEPARATOR (IS4)
+0x1D	0x001D	# GROUP SEPARATOR (IS3)
+0x1E	0x001E	# RECORD SEPARATOR (IS2)
+0x1F	0x001F	# UNIT SEPARATOR (IS1)
+0x20	0x0020	# SPACE
+0x21	0x0021	# EXCLAMATION MARK
+0x22	0x0022	# QUOTATION MARK
+0x23	0x0023	# NUMBER SIGN
+0x24	0x0024	# DOLLAR SIGN
+0x25	0x0025	# PERCENT SIGN
+0x26	0x0026	# AMPERSAND
+0x27	0x0027	# APOSTROPHE
+0x28	0x0028	# LEFT PARENTHESIS
+0x29	0x0029	# RIGHT PARENTHESIS
+0x2A	0x002A	# ASTERISK
+0x2B	0x002B	# PLUS SIGN
+0x2C	0x002C	# COMMA
+0x2D	0x002D	# HYPHEN-MINUS
+0x2E	0x002E	# FULL STOP
+0x2F	0x002F	# SOLIDUS
+0x30	0x0030	# DIGIT ZERO
+0x31	0x0031	# DIGIT ONE
+0x32	0x0032	# DIGIT TWO
+0x33	0x0033	# DIGIT THREE
+0x34	0x0034	# DIGIT FOUR
+0x35	0x0035	# DIGIT FIVE
+0x36	0x0036	# DIGIT SIX
+0x37	0x0037	# DIGIT SEVEN
+0x38	0x0038	# DIGIT EIGHT
+0x39	0x0039	# DIGIT NINE
+0x3A	0x003A	# COLON
+0x3B	0x003B	# SEMICOLON
+0x3C	0x003C	# LESS-THAN SIGN
+0x3D	0x003D	# EQUALS SIGN
+0x3E	0x003E	# GREATER-THAN SIGN
+0x3F	0x003F	# QUESTION MARK
+0x40	0x00A7	# SECTION SIGN
+0x41	0x0041	# LATIN CAPITAL LETTER A
+0x42	0x0042	# LATIN CAPITAL LETTER B
+0x43	0x0043	# LATIN CAPITAL LETTER C
+0x44	0x0044	# LATIN CAPITAL LETTER D
+0x45	0x0045	# LATIN CAPITAL LETTER E
+0x46	0x0046	# LATIN CAPITAL LETTER F
+0x47	0x0047	# LATIN CAPITAL LETTER G
+0x48	0x0048	# LATIN CAPITAL LETTER H
+0x49	0x0049	# LATIN CAPITAL LETTER I
+0x4A	0x004A	# LATIN CAPITAL LETTER J
+0x4B	0x004B	# LATIN CAPITAL LETTER K
+0x4C	0x004C	# LATIN CAPITAL LETTER L
+0x4D	0x004D	# LATIN CAPITAL LETTER M
+0x4E	0x004E	# LATIN CAPITAL LETTER N
+0x4F	0x004F	# LATIN CAPITAL LETTER O
+0x50	0x0050	# LATIN CAPITAL LETTER P
+0x51	0x0051	# LATIN CAPITAL LETTER Q
+0x52	0x0052	# LATIN CAPITAL LETTER R
+0x53	0x0053	# LATIN CAPITAL LETTER S
+0x54	0x0054	# LATIN CAPITAL LETTER T
+0x55	0x0055	# LATIN CAPITAL LETTER U
+0x56	0x0056	# LATIN CAPITAL LETTER V
+0x57	0x0057	# LATIN CAPITAL LETTER W
+0x58	0x0058	# LATIN CAPITAL LETTER X
+0x59	0x0059	# LATIN CAPITAL LETTER Y
+0x5A	0x005A	# LATIN CAPITAL LETTER Z
+0x5B	0x00C4	# LATIN CAPITAL LETTER A WITH DIAERESIS
+0x5C	0x00D6	# LATIN CAPITAL LETTER O WITH DIAERESIS
+0x5D	0x00DC	# LATIN CAPITAL LETTER U WITH DIAERESIS
+0x5E	0x005E	# CIRCUMFLEX ACCENT
+0x5F	0x005F	# LOW LINE
+0x60	0x0060	# GRAVE ACCENT
+0x61	0x0061	# LATIN SMALL LETTER A
+0x62	0x0062	# LATIN SMALL LETTER B
+0x63	0x0063	# LATIN SMALL LETTER C
+0x64	0x0064	# LATIN SMALL LETTER D
+0x65	0x0065	# LATIN SMALL LETTER E
+0x66	0x0066	# LATIN SMALL LETTER F
+0x67	0x0067	# LATIN SMALL LETTER G
+0x68	0x0068	# LATIN SMALL LETTER H
+0x69	0x0069	# LATIN SMALL LETTER I
+0x6A	0x006A	# LATIN SMALL LETTER J
+0x6B	0x006B	# LATIN SMALL LETTER K
+0x6C	0x006C	# LATIN SMALL LETTER L
+0x6D	0x006D	# LATIN SMALL LETTER M
+0x6E	0x006E	# LATIN SMALL LETTER N
+0x6F	0x006F	# LATIN SMALL LETTER O
+0x70	0x0070	# LATIN SMALL LETTER P
+0x71	0x0071	# LATIN SMALL LETTER Q
+0x72	0x0072	# LATIN SMALL LETTER R
+0x73	0x0073	# LATIN SMALL LETTER S
+0x74	0x0074	# LATIN SMALL LETTER T
+0x75	0x0075	# LATIN SMALL LETTER U
+0x76	0x0076	# LATIN SMALL LETTER V
+0x77	0x0077	# LATIN SMALL LETTER W
+0x78	0x0078	# LATIN SMALL LETTER X
+0x79	0x0079	# LATIN SMALL LETTER Y
+0x7A	0x007A	# LATIN SMALL LETTER Z
+0x7B	0x00E4	# LATIN SMALL LETTER A WITH DIAERESIS
+0x7C	0x00F6	# LATIN SMALL LETTER O WITH DIAERESIS
+0x7D	0x00FC	# LATIN SMALL LETTER U WITH DIAERESIS
+0x7E	0x00DF	# LATIN SMALL LETTER SHARP S (German)
+0x7F	0x007F	# DELETE (DEL)
diff --git a/externals/figlet/fonts/646-dk.flc b/externals/figlet/fonts/646-dk.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/646-dk.flc
@@ -0,0 +1,155 @@
+#
+#	Name:             DS_2089 to Unicode
+#	Unicode version:  2.0
+#	Table version:    0.1
+#	Table format:     Format A
+#	Date:             0097-01-24
+#	Authors:          John Cowan <cowan@ccil.org> (conversion)
+#                     Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+#	General notes:
+#
+#	This table contains data obtained from RFC 1345 on how
+#       DS_2089 characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the DS_2089 code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in DS_2089 order
+#
+#	Any comments or problems, contact <cowan@ccil.org>
+#
+#   &rem source: Danish Standard, DS 2089, February 1974
+#   &alias DS2089
+#   &alias ISO646-DK
+#   &alias dk
+0x00	0x0000	# NULL (NUL)
+0x01	0x0001	# START OF HEADING (SOH)
+0x02	0x0002	# START OF TEXT (STX)
+0x03	0x0003	# END OF TEXT (ETX)
+0x04	0x0004	# END OF TRANSMISSION (EOT)
+0x05	0x0005	# ENQUIRY (ENQ)
+0x06	0x0006	# ACKNOWLEDGE (ACK)
+0x07	0x0007	# BELL (BEL)
+0x08	0x0008	# BACKSPACE (BS)
+0x09	0x0009	# CHARACTER TABULATION (HT)
+0x0A	0x000A	# LINE FEED (LF)
+0x0B	0x000B	# LINE TABULATION (VT)
+0x0C	0x000C	# FORM FEED (FF)
+0x0D	0x000D	# CARRIAGE RETURN (CR)
+0x0E	0x000E	# SHIFT OUT (SO)
+0x0F	0x000F	# SHIFT IN (SI)
+0x10	0x0010	# DATALINK ESCAPE (DLE)
+0x11	0x0011	# DEVICE CONTROL ONE (DC1)
+0x12	0x0012	# DEVICE CONTROL TWO (DC2)
+0x13	0x0013	# DEVICE CONTROL THREE (DC3)
+0x14	0x0014	# DEVICE CONTROL FOUR (DC4)
+0x15	0x0015	# NEGATIVE ACKNOWLEDGE (NAK)
+0x16	0x0016	# SYNCRONOUS IDLE (SYN)
+0x17	0x0017	# END OF TRANSMISSION BLOCK (ETB)
+0x18	0x0018	# CANCEL (CAN)
+0x19	0x0019	# END OF MEDIUM (EM)
+0x1A	0x001A	# SUBSTITUTE (SUB)
+0x1B	0x001B	# ESCAPE (ESC)
+0x1C	0x001C	# FILE SEPARATOR (IS4)
+0x1D	0x001D	# GROUP SEPARATOR (IS3)
+0x1E	0x001E	# RECORD SEPARATOR (IS2)
+0x1F	0x001F	# UNIT SEPARATOR (IS1)
+0x20	0x0020	# SPACE
+0x21	0x0021	# EXCLAMATION MARK
+0x22	0x0022	# QUOTATION MARK
+0x23	0x0023	# NUMBER SIGN
+0x24	0x0024	# DOLLAR SIGN
+0x25	0x0025	# PERCENT SIGN
+0x26	0x0026	# AMPERSAND
+0x27	0x0027	# APOSTROPHE
+0x28	0x0028	# LEFT PARENTHESIS
+0x29	0x0029	# RIGHT PARENTHESIS
+0x2A	0x002A	# ASTERISK
+0x2B	0x002B	# PLUS SIGN
+0x2C	0x002C	# COMMA
+0x2D	0x002D	# HYPHEN-MINUS
+0x2E	0x002E	# FULL STOP
+0x2F	0x002F	# SOLIDUS
+0x30	0x0030	# DIGIT ZERO
+0x31	0x0031	# DIGIT ONE
+0x32	0x0032	# DIGIT TWO
+0x33	0x0033	# DIGIT THREE
+0x34	0x0034	# DIGIT FOUR
+0x35	0x0035	# DIGIT FIVE
+0x36	0x0036	# DIGIT SIX
+0x37	0x0037	# DIGIT SEVEN
+0x38	0x0038	# DIGIT EIGHT
+0x39	0x0039	# DIGIT NINE
+0x3A	0x003A	# COLON
+0x3B	0x003B	# SEMICOLON
+0x3C	0x003C	# LESS-THAN SIGN
+0x3D	0x003D	# EQUALS SIGN
+0x3E	0x003E	# GREATER-THAN SIGN
+0x3F	0x003F	# QUESTION MARK
+0x40	0x0040	# COMMERCIAL AT
+0x41	0x0041	# LATIN CAPITAL LETTER A
+0x42	0x0042	# LATIN CAPITAL LETTER B
+0x43	0x0043	# LATIN CAPITAL LETTER C
+0x44	0x0044	# LATIN CAPITAL LETTER D
+0x45	0x0045	# LATIN CAPITAL LETTER E
+0x46	0x0046	# LATIN CAPITAL LETTER F
+0x47	0x0047	# LATIN CAPITAL LETTER G
+0x48	0x0048	# LATIN CAPITAL LETTER H
+0x49	0x0049	# LATIN CAPITAL LETTER I
+0x4A	0x004A	# LATIN CAPITAL LETTER J
+0x4B	0x004B	# LATIN CAPITAL LETTER K
+0x4C	0x004C	# LATIN CAPITAL LETTER L
+0x4D	0x004D	# LATIN CAPITAL LETTER M
+0x4E	0x004E	# LATIN CAPITAL LETTER N
+0x4F	0x004F	# LATIN CAPITAL LETTER O
+0x50	0x0050	# LATIN CAPITAL LETTER P
+0x51	0x0051	# LATIN CAPITAL LETTER Q
+0x52	0x0052	# LATIN CAPITAL LETTER R
+0x53	0x0053	# LATIN CAPITAL LETTER S
+0x54	0x0054	# LATIN CAPITAL LETTER T
+0x55	0x0055	# LATIN CAPITAL LETTER U
+0x56	0x0056	# LATIN CAPITAL LETTER V
+0x57	0x0057	# LATIN CAPITAL LETTER W
+0x58	0x0058	# LATIN CAPITAL LETTER X
+0x59	0x0059	# LATIN CAPITAL LETTER Y
+0x5A	0x005A	# LATIN CAPITAL LETTER Z
+0x5B	0x00C6	# LATIN CAPITAL LETTER AE
+0x5C	0x00D8	# LATIN CAPITAL LETTER O WITH STROKE
+0x5D	0x00C5	# LATIN CAPITAL LETTER A WITH RING ABOVE
+0x5E	0x005E	# CIRCUMFLEX ACCENT
+0x5F	0x005F	# LOW LINE
+0x60	0x0060	# GRAVE ACCENT
+0x61	0x0061	# LATIN SMALL LETTER A
+0x62	0x0062	# LATIN SMALL LETTER B
+0x63	0x0063	# LATIN SMALL LETTER C
+0x64	0x0064	# LATIN SMALL LETTER D
+0x65	0x0065	# LATIN SMALL LETTER E
+0x66	0x0066	# LATIN SMALL LETTER F
+0x67	0x0067	# LATIN SMALL LETTER G
+0x68	0x0068	# LATIN SMALL LETTER H
+0x69	0x0069	# LATIN SMALL LETTER I
+0x6A	0x006A	# LATIN SMALL LETTER J
+0x6B	0x006B	# LATIN SMALL LETTER K
+0x6C	0x006C	# LATIN SMALL LETTER L
+0x6D	0x006D	# LATIN SMALL LETTER M
+0x6E	0x006E	# LATIN SMALL LETTER N
+0x6F	0x006F	# LATIN SMALL LETTER O
+0x70	0x0070	# LATIN SMALL LETTER P
+0x71	0x0071	# LATIN SMALL LETTER Q
+0x72	0x0072	# LATIN SMALL LETTER R
+0x73	0x0073	# LATIN SMALL LETTER S
+0x74	0x0074	# LATIN SMALL LETTER T
+0x75	0x0075	# LATIN SMALL LETTER U
+0x76	0x0076	# LATIN SMALL LETTER V
+0x77	0x0077	# LATIN SMALL LETTER W
+0x78	0x0078	# LATIN SMALL LETTER X
+0x79	0x0079	# LATIN SMALL LETTER Y
+0x7A	0x007A	# LATIN SMALL LETTER Z
+0x7B	0x00E6	# LATIN SMALL LETTER AE
+0x7C	0x00F8	# LATIN SMALL LETTER O WITH STROKE
+0x7D	0x00E5	# LATIN SMALL LETTER A WITH RING ABOVE
+0x7E	0x007E	# TILDE
+0x7F	0x007F	# DELETE (DEL)
diff --git a/externals/figlet/fonts/646-es.flc b/externals/figlet/fonts/646-es.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/646-es.flc
@@ -0,0 +1,155 @@
+#
+#	Name:             ES to Unicode
+#	Unicode version:  2.0
+#	Table version:    0.1
+#	Table format:     Format A
+#	Date:             0097-01-24
+#	Authors:          John Cowan <cowan@ccil.org> (conversion)
+#                     Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+#	General notes:
+#
+#	This table contains data obtained from RFC 1345 on how
+#       ES characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the ES code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in ES order
+#
+#	Any comments or problems, contact <cowan@ccil.org>
+#
+#   &rem source: ECMA registry
+#   &alias iso-ir-17
+#   &alias ISO646-ES
+#   &g0esc x285a &g1esc x295a &g2esc x2a5a &g3esc x2b5a
+0x00	0x0000	# NULL (NUL)
+0x01	0x0001	# START OF HEADING (SOH)
+0x02	0x0002	# START OF TEXT (STX)
+0x03	0x0003	# END OF TEXT (ETX)
+0x04	0x0004	# END OF TRANSMISSION (EOT)
+0x05	0x0005	# ENQUIRY (ENQ)
+0x06	0x0006	# ACKNOWLEDGE (ACK)
+0x07	0x0007	# BELL (BEL)
+0x08	0x0008	# BACKSPACE (BS)
+0x09	0x0009	# CHARACTER TABULATION (HT)
+0x0A	0x000A	# LINE FEED (LF)
+0x0B	0x000B	# LINE TABULATION (VT)
+0x0C	0x000C	# FORM FEED (FF)
+0x0D	0x000D	# CARRIAGE RETURN (CR)
+0x0E	0x000E	# SHIFT OUT (SO)
+0x0F	0x000F	# SHIFT IN (SI)
+0x10	0x0010	# DATALINK ESCAPE (DLE)
+0x11	0x0011	# DEVICE CONTROL ONE (DC1)
+0x12	0x0012	# DEVICE CONTROL TWO (DC2)
+0x13	0x0013	# DEVICE CONTROL THREE (DC3)
+0x14	0x0014	# DEVICE CONTROL FOUR (DC4)
+0x15	0x0015	# NEGATIVE ACKNOWLEDGE (NAK)
+0x16	0x0016	# SYNCRONOUS IDLE (SYN)
+0x17	0x0017	# END OF TRANSMISSION BLOCK (ETB)
+0x18	0x0018	# CANCEL (CAN)
+0x19	0x0019	# END OF MEDIUM (EM)
+0x1A	0x001A	# SUBSTITUTE (SUB)
+0x1B	0x001B	# ESCAPE (ESC)
+0x1C	0x001C	# FILE SEPARATOR (IS4)
+0x1D	0x001D	# GROUP SEPARATOR (IS3)
+0x1E	0x001E	# RECORD SEPARATOR (IS2)
+0x1F	0x001F	# UNIT SEPARATOR (IS1)
+0x20	0x0020	# SPACE
+0x21	0x0021	# EXCLAMATION MARK
+0x22	0x0022	# QUOTATION MARK
+0x23	0x00A3	# POUND SIGN
+0x24	0x0024	# DOLLAR SIGN
+0x25	0x0025	# PERCENT SIGN
+0x26	0x0026	# AMPERSAND
+0x27	0x0027	# APOSTROPHE
+0x28	0x0028	# LEFT PARENTHESIS
+0x29	0x0029	# RIGHT PARENTHESIS
+0x2A	0x002A	# ASTERISK
+0x2B	0x002B	# PLUS SIGN
+0x2C	0x002C	# COMMA
+0x2D	0x002D	# HYPHEN-MINUS
+0x2E	0x002E	# FULL STOP
+0x2F	0x002F	# SOLIDUS
+0x30	0x0030	# DIGIT ZERO
+0x31	0x0031	# DIGIT ONE
+0x32	0x0032	# DIGIT TWO
+0x33	0x0033	# DIGIT THREE
+0x34	0x0034	# DIGIT FOUR
+0x35	0x0035	# DIGIT FIVE
+0x36	0x0036	# DIGIT SIX
+0x37	0x0037	# DIGIT SEVEN
+0x38	0x0038	# DIGIT EIGHT
+0x39	0x0039	# DIGIT NINE
+0x3A	0x003A	# COLON
+0x3B	0x003B	# SEMICOLON
+0x3C	0x003C	# LESS-THAN SIGN
+0x3D	0x003D	# EQUALS SIGN
+0x3E	0x003E	# GREATER-THAN SIGN
+0x3F	0x003F	# QUESTION MARK
+0x40	0x00A7	# SECTION SIGN
+0x41	0x0041	# LATIN CAPITAL LETTER A
+0x42	0x0042	# LATIN CAPITAL LETTER B
+0x43	0x0043	# LATIN CAPITAL LETTER C
+0x44	0x0044	# LATIN CAPITAL LETTER D
+0x45	0x0045	# LATIN CAPITAL LETTER E
+0x46	0x0046	# LATIN CAPITAL LETTER F
+0x47	0x0047	# LATIN CAPITAL LETTER G
+0x48	0x0048	# LATIN CAPITAL LETTER H
+0x49	0x0049	# LATIN CAPITAL LETTER I
+0x4A	0x004A	# LATIN CAPITAL LETTER J
+0x4B	0x004B	# LATIN CAPITAL LETTER K
+0x4C	0x004C	# LATIN CAPITAL LETTER L
+0x4D	0x004D	# LATIN CAPITAL LETTER M
+0x4E	0x004E	# LATIN CAPITAL LETTER N
+0x4F	0x004F	# LATIN CAPITAL LETTER O
+0x50	0x0050	# LATIN CAPITAL LETTER P
+0x51	0x0051	# LATIN CAPITAL LETTER Q
+0x52	0x0052	# LATIN CAPITAL LETTER R
+0x53	0x0053	# LATIN CAPITAL LETTER S
+0x54	0x0054	# LATIN CAPITAL LETTER T
+0x55	0x0055	# LATIN CAPITAL LETTER U
+0x56	0x0056	# LATIN CAPITAL LETTER V
+0x57	0x0057	# LATIN CAPITAL LETTER W
+0x58	0x0058	# LATIN CAPITAL LETTER X
+0x59	0x0059	# LATIN CAPITAL LETTER Y
+0x5A	0x005A	# LATIN CAPITAL LETTER Z
+0x5B	0x00A1	# INVERTED EXCLAMATION MARK
+0x5C	0x00D1	# LATIN CAPITAL LETTER N WITH TILDE
+0x5D	0x00BF	# INVERTED QUESTION MARK
+0x5E	0x005E	# CIRCUMFLEX ACCENT
+0x5F	0x005F	# LOW LINE
+0x60	0x0060	# GRAVE ACCENT
+0x61	0x0061	# LATIN SMALL LETTER A
+0x62	0x0062	# LATIN SMALL LETTER B
+0x63	0x0063	# LATIN SMALL LETTER C
+0x64	0x0064	# LATIN SMALL LETTER D
+0x65	0x0065	# LATIN SMALL LETTER E
+0x66	0x0066	# LATIN SMALL LETTER F
+0x67	0x0067	# LATIN SMALL LETTER G
+0x68	0x0068	# LATIN SMALL LETTER H
+0x69	0x0069	# LATIN SMALL LETTER I
+0x6A	0x006A	# LATIN SMALL LETTER J
+0x6B	0x006B	# LATIN SMALL LETTER K
+0x6C	0x006C	# LATIN SMALL LETTER L
+0x6D	0x006D	# LATIN SMALL LETTER M
+0x6E	0x006E	# LATIN SMALL LETTER N
+0x6F	0x006F	# LATIN SMALL LETTER O
+0x70	0x0070	# LATIN SMALL LETTER P
+0x71	0x0071	# LATIN SMALL LETTER Q
+0x72	0x0072	# LATIN SMALL LETTER R
+0x73	0x0073	# LATIN SMALL LETTER S
+0x74	0x0074	# LATIN SMALL LETTER T
+0x75	0x0075	# LATIN SMALL LETTER U
+0x76	0x0076	# LATIN SMALL LETTER V
+0x77	0x0077	# LATIN SMALL LETTER W
+0x78	0x0078	# LATIN SMALL LETTER X
+0x79	0x0079	# LATIN SMALL LETTER Y
+0x7A	0x007A	# LATIN SMALL LETTER Z
+0x7B	0x00B0	# DEGREE SIGN
+0x7C	0x00F1	# LATIN SMALL LETTER N WITH TILDE
+0x7D	0x00E7	# LATIN SMALL LETTER C WITH CEDILLA
+0x7E	0x007E	# TILDE
+0x7F	0x007F	# DELETE (DEL)
diff --git a/externals/figlet/fonts/646-es2.flc b/externals/figlet/fonts/646-es2.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/646-es2.flc
@@ -0,0 +1,155 @@
+#
+#	Name:             ES2 to Unicode
+#	Unicode version:  2.0
+#	Table version:    0.1
+#	Table format:     Format A
+#	Date:             0097-01-24
+#	Authors:          John Cowan <cowan@ccil.org> (conversion)
+#                     Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+#	General notes:
+#
+#	This table contains data obtained from RFC 1345 on how
+#       ES2 characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the ES2 code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in ES2 order
+#
+#	Any comments or problems, contact <cowan@ccil.org>
+#
+#   &rem source: ECMA registry
+#   &alias iso-ir-85
+#   &alias ISO646-ES2
+#   &g0esc x2868 &g1esc x2968 &g2esc x2a68 &g3esc x2b68
+0x00	0x0000	# NULL (NUL)
+0x01	0x0001	# START OF HEADING (SOH)
+0x02	0x0002	# START OF TEXT (STX)
+0x03	0x0003	# END OF TEXT (ETX)
+0x04	0x0004	# END OF TRANSMISSION (EOT)
+0x05	0x0005	# ENQUIRY (ENQ)
+0x06	0x0006	# ACKNOWLEDGE (ACK)
+0x07	0x0007	# BELL (BEL)
+0x08	0x0008	# BACKSPACE (BS)
+0x09	0x0009	# CHARACTER TABULATION (HT)
+0x0A	0x000A	# LINE FEED (LF)
+0x0B	0x000B	# LINE TABULATION (VT)
+0x0C	0x000C	# FORM FEED (FF)
+0x0D	0x000D	# CARRIAGE RETURN (CR)
+0x0E	0x000E	# SHIFT OUT (SO)
+0x0F	0x000F	# SHIFT IN (SI)
+0x10	0x0010	# DATALINK ESCAPE (DLE)
+0x11	0x0011	# DEVICE CONTROL ONE (DC1)
+0x12	0x0012	# DEVICE CONTROL TWO (DC2)
+0x13	0x0013	# DEVICE CONTROL THREE (DC3)
+0x14	0x0014	# DEVICE CONTROL FOUR (DC4)
+0x15	0x0015	# NEGATIVE ACKNOWLEDGE (NAK)
+0x16	0x0016	# SYNCRONOUS IDLE (SYN)
+0x17	0x0017	# END OF TRANSMISSION BLOCK (ETB)
+0x18	0x0018	# CANCEL (CAN)
+0x19	0x0019	# END OF MEDIUM (EM)
+0x1A	0x001A	# SUBSTITUTE (SUB)
+0x1B	0x001B	# ESCAPE (ESC)
+0x1C	0x001C	# FILE SEPARATOR (IS4)
+0x1D	0x001D	# GROUP SEPARATOR (IS3)
+0x1E	0x001E	# RECORD SEPARATOR (IS2)
+0x1F	0x001F	# UNIT SEPARATOR (IS1)
+0x20	0x0020	# SPACE
+0x21	0x0021	# EXCLAMATION MARK
+0x22	0x0022	# QUOTATION MARK
+0x23	0x0023	# NUMBER SIGN
+0x24	0x0024	# DOLLAR SIGN
+0x25	0x0025	# PERCENT SIGN
+0x26	0x0026	# AMPERSAND
+0x27	0x0027	# APOSTROPHE
+0x28	0x0028	# LEFT PARENTHESIS
+0x29	0x0029	# RIGHT PARENTHESIS
+0x2A	0x002A	# ASTERISK
+0x2B	0x002B	# PLUS SIGN
+0x2C	0x002C	# COMMA
+0x2D	0x002D	# HYPHEN-MINUS
+0x2E	0x002E	# FULL STOP
+0x2F	0x002F	# SOLIDUS
+0x30	0x0030	# DIGIT ZERO
+0x31	0x0031	# DIGIT ONE
+0x32	0x0032	# DIGIT TWO
+0x33	0x0033	# DIGIT THREE
+0x34	0x0034	# DIGIT FOUR
+0x35	0x0035	# DIGIT FIVE
+0x36	0x0036	# DIGIT SIX
+0x37	0x0037	# DIGIT SEVEN
+0x38	0x0038	# DIGIT EIGHT
+0x39	0x0039	# DIGIT NINE
+0x3A	0x003A	# COLON
+0x3B	0x003B	# SEMICOLON
+0x3C	0x003C	# LESS-THAN SIGN
+0x3D	0x003D	# EQUALS SIGN
+0x3E	0x003E	# GREATER-THAN SIGN
+0x3F	0x003F	# QUESTION MARK
+0x40	0x2219	# BULLET OPERATOR
+0x41	0x0041	# LATIN CAPITAL LETTER A
+0x42	0x0042	# LATIN CAPITAL LETTER B
+0x43	0x0043	# LATIN CAPITAL LETTER C
+0x44	0x0044	# LATIN CAPITAL LETTER D
+0x45	0x0045	# LATIN CAPITAL LETTER E
+0x46	0x0046	# LATIN CAPITAL LETTER F
+0x47	0x0047	# LATIN CAPITAL LETTER G
+0x48	0x0048	# LATIN CAPITAL LETTER H
+0x49	0x0049	# LATIN CAPITAL LETTER I
+0x4A	0x004A	# LATIN CAPITAL LETTER J
+0x4B	0x004B	# LATIN CAPITAL LETTER K
+0x4C	0x004C	# LATIN CAPITAL LETTER L
+0x4D	0x004D	# LATIN CAPITAL LETTER M
+0x4E	0x004E	# LATIN CAPITAL LETTER N
+0x4F	0x004F	# LATIN CAPITAL LETTER O
+0x50	0x0050	# LATIN CAPITAL LETTER P
+0x51	0x0051	# LATIN CAPITAL LETTER Q
+0x52	0x0052	# LATIN CAPITAL LETTER R
+0x53	0x0053	# LATIN CAPITAL LETTER S
+0x54	0x0054	# LATIN CAPITAL LETTER T
+0x55	0x0055	# LATIN CAPITAL LETTER U
+0x56	0x0056	# LATIN CAPITAL LETTER V
+0x57	0x0057	# LATIN CAPITAL LETTER W
+0x58	0x0058	# LATIN CAPITAL LETTER X
+0x59	0x0059	# LATIN CAPITAL LETTER Y
+0x5A	0x005A	# LATIN CAPITAL LETTER Z
+0x5B	0x00A1	# INVERTED EXCLAMATION MARK
+0x5C	0x00D1	# LATIN CAPITAL LETTER N WITH TILDE
+0x5D	0x00C7	# LATIN CAPITAL LETTER C WITH CEDILLA
+0x5E	0x00BF	# INVERTED QUESTION MARK
+0x5F	0x005F	# LOW LINE
+0x60	0x0060	# GRAVE ACCENT
+0x61	0x0061	# LATIN SMALL LETTER A
+0x62	0x0062	# LATIN SMALL LETTER B
+0x63	0x0063	# LATIN SMALL LETTER C
+0x64	0x0064	# LATIN SMALL LETTER D
+0x65	0x0065	# LATIN SMALL LETTER E
+0x66	0x0066	# LATIN SMALL LETTER F
+0x67	0x0067	# LATIN SMALL LETTER G
+0x68	0x0068	# LATIN SMALL LETTER H
+0x69	0x0069	# LATIN SMALL LETTER I
+0x6A	0x006A	# LATIN SMALL LETTER J
+0x6B	0x006B	# LATIN SMALL LETTER K
+0x6C	0x006C	# LATIN SMALL LETTER L
+0x6D	0x006D	# LATIN SMALL LETTER M
+0x6E	0x006E	# LATIN SMALL LETTER N
+0x6F	0x006F	# LATIN SMALL LETTER O
+0x70	0x0070	# LATIN SMALL LETTER P
+0x71	0x0071	# LATIN SMALL LETTER Q
+0x72	0x0072	# LATIN SMALL LETTER R
+0x73	0x0073	# LATIN SMALL LETTER S
+0x74	0x0074	# LATIN SMALL LETTER T
+0x75	0x0075	# LATIN SMALL LETTER U
+0x76	0x0076	# LATIN SMALL LETTER V
+0x77	0x0077	# LATIN SMALL LETTER W
+0x78	0x0078	# LATIN SMALL LETTER X
+0x79	0x0079	# LATIN SMALL LETTER Y
+0x7A	0x007A	# LATIN SMALL LETTER Z
+0x7B	0x00B4	# ACUTE ACCENT
+0x7C	0x00F1	# LATIN SMALL LETTER N WITH TILDE
+0x7D	0x00E7	# LATIN SMALL LETTER C WITH CEDILLA
+0x7E	0x00A8	# DIAERESIS
+0x7F	0x007F	# DELETE (DEL)
diff --git a/externals/figlet/fonts/646-fr.flc b/externals/figlet/fonts/646-fr.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/646-fr.flc
@@ -0,0 +1,156 @@
+#
+#	Name:             NF_Z_62-010 to Unicode
+#	Unicode version:  2.0
+#	Table version:    0.1
+#	Table format:     Format A
+#	Date:             0097-01-24
+#	Authors:          John Cowan <cowan@ccil.org> (conversion)
+#                     Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+#	General notes:
+#
+#	This table contains data obtained from RFC 1345 on how
+#       NF_Z_62-010 characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the NF_Z_62-010 code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in NF_Z_62-010 order
+#
+#	Any comments or problems, contact <cowan@ccil.org>
+#
+#   &rem source: ECMA registry
+#   &alias iso-ir-69
+#   &alias ISO646-FR
+#   &g0esc x2866 &g1esc x2966 &g2esc x2a66 &g3esc x2b66
+#   &alias fr
+0x00	0x0000	# NULL (NUL)
+0x01	0x0001	# START OF HEADING (SOH)
+0x02	0x0002	# START OF TEXT (STX)
+0x03	0x0003	# END OF TEXT (ETX)
+0x04	0x0004	# END OF TRANSMISSION (EOT)
+0x05	0x0005	# ENQUIRY (ENQ)
+0x06	0x0006	# ACKNOWLEDGE (ACK)
+0x07	0x0007	# BELL (BEL)
+0x08	0x0008	# BACKSPACE (BS)
+0x09	0x0009	# CHARACTER TABULATION (HT)
+0x0A	0x000A	# LINE FEED (LF)
+0x0B	0x000B	# LINE TABULATION (VT)
+0x0C	0x000C	# FORM FEED (FF)
+0x0D	0x000D	# CARRIAGE RETURN (CR)
+0x0E	0x000E	# SHIFT OUT (SO)
+0x0F	0x000F	# SHIFT IN (SI)
+0x10	0x0010	# DATALINK ESCAPE (DLE)
+0x11	0x0011	# DEVICE CONTROL ONE (DC1)
+0x12	0x0012	# DEVICE CONTROL TWO (DC2)
+0x13	0x0013	# DEVICE CONTROL THREE (DC3)
+0x14	0x0014	# DEVICE CONTROL FOUR (DC4)
+0x15	0x0015	# NEGATIVE ACKNOWLEDGE (NAK)
+0x16	0x0016	# SYNCRONOUS IDLE (SYN)
+0x17	0x0017	# END OF TRANSMISSION BLOCK (ETB)
+0x18	0x0018	# CANCEL (CAN)
+0x19	0x0019	# END OF MEDIUM (EM)
+0x1A	0x001A	# SUBSTITUTE (SUB)
+0x1B	0x001B	# ESCAPE (ESC)
+0x1C	0x001C	# FILE SEPARATOR (IS4)
+0x1D	0x001D	# GROUP SEPARATOR (IS3)
+0x1E	0x001E	# RECORD SEPARATOR (IS2)
+0x1F	0x001F	# UNIT SEPARATOR (IS1)
+0x20	0x0020	# SPACE
+0x21	0x0021	# EXCLAMATION MARK
+0x22	0x0022	# QUOTATION MARK
+0x23	0x00A3	# POUND SIGN
+0x24	0x0024	# DOLLAR SIGN
+0x25	0x0025	# PERCENT SIGN
+0x26	0x0026	# AMPERSAND
+0x27	0x0027	# APOSTROPHE
+0x28	0x0028	# LEFT PARENTHESIS
+0x29	0x0029	# RIGHT PARENTHESIS
+0x2A	0x002A	# ASTERISK
+0x2B	0x002B	# PLUS SIGN
+0x2C	0x002C	# COMMA
+0x2D	0x002D	# HYPHEN-MINUS
+0x2E	0x002E	# FULL STOP
+0x2F	0x002F	# SOLIDUS
+0x30	0x0030	# DIGIT ZERO
+0x31	0x0031	# DIGIT ONE
+0x32	0x0032	# DIGIT TWO
+0x33	0x0033	# DIGIT THREE
+0x34	0x0034	# DIGIT FOUR
+0x35	0x0035	# DIGIT FIVE
+0x36	0x0036	# DIGIT SIX
+0x37	0x0037	# DIGIT SEVEN
+0x38	0x0038	# DIGIT EIGHT
+0x39	0x0039	# DIGIT NINE
+0x3A	0x003A	# COLON
+0x3B	0x003B	# SEMICOLON
+0x3C	0x003C	# LESS-THAN SIGN
+0x3D	0x003D	# EQUALS SIGN
+0x3E	0x003E	# GREATER-THAN SIGN
+0x3F	0x003F	# QUESTION MARK
+0x40	0x00E0	# LATIN SMALL LETTER A WITH GRAVE
+0x41	0x0041	# LATIN CAPITAL LETTER A
+0x42	0x0042	# LATIN CAPITAL LETTER B
+0x43	0x0043	# LATIN CAPITAL LETTER C
+0x44	0x0044	# LATIN CAPITAL LETTER D
+0x45	0x0045	# LATIN CAPITAL LETTER E
+0x46	0x0046	# LATIN CAPITAL LETTER F
+0x47	0x0047	# LATIN CAPITAL LETTER G
+0x48	0x0048	# LATIN CAPITAL LETTER H
+0x49	0x0049	# LATIN CAPITAL LETTER I
+0x4A	0x004A	# LATIN CAPITAL LETTER J
+0x4B	0x004B	# LATIN CAPITAL LETTER K
+0x4C	0x004C	# LATIN CAPITAL LETTER L
+0x4D	0x004D	# LATIN CAPITAL LETTER M
+0x4E	0x004E	# LATIN CAPITAL LETTER N
+0x4F	0x004F	# LATIN CAPITAL LETTER O
+0x50	0x0050	# LATIN CAPITAL LETTER P
+0x51	0x0051	# LATIN CAPITAL LETTER Q
+0x52	0x0052	# LATIN CAPITAL LETTER R
+0x53	0x0053	# LATIN CAPITAL LETTER S
+0x54	0x0054	# LATIN CAPITAL LETTER T
+0x55	0x0055	# LATIN CAPITAL LETTER U
+0x56	0x0056	# LATIN CAPITAL LETTER V
+0x57	0x0057	# LATIN CAPITAL LETTER W
+0x58	0x0058	# LATIN CAPITAL LETTER X
+0x59	0x0059	# LATIN CAPITAL LETTER Y
+0x5A	0x005A	# LATIN CAPITAL LETTER Z
+0x5B	0x00B0	# DEGREE SIGN
+0x5C	0x00E7	# LATIN SMALL LETTER C WITH CEDILLA
+0x5D	0x00A7	# SECTION SIGN
+0x5E	0x005E	# CIRCUMFLEX ACCENT
+0x5F	0x005F	# LOW LINE
+0x60	0x00B5	# MICRO SIGN
+0x61	0x0061	# LATIN SMALL LETTER A
+0x62	0x0062	# LATIN SMALL LETTER B
+0x63	0x0063	# LATIN SMALL LETTER C
+0x64	0x0064	# LATIN SMALL LETTER D
+0x65	0x0065	# LATIN SMALL LETTER E
+0x66	0x0066	# LATIN SMALL LETTER F
+0x67	0x0067	# LATIN SMALL LETTER G
+0x68	0x0068	# LATIN SMALL LETTER H
+0x69	0x0069	# LATIN SMALL LETTER I
+0x6A	0x006A	# LATIN SMALL LETTER J
+0x6B	0x006B	# LATIN SMALL LETTER K
+0x6C	0x006C	# LATIN SMALL LETTER L
+0x6D	0x006D	# LATIN SMALL LETTER M
+0x6E	0x006E	# LATIN SMALL LETTER N
+0x6F	0x006F	# LATIN SMALL LETTER O
+0x70	0x0070	# LATIN SMALL LETTER P
+0x71	0x0071	# LATIN SMALL LETTER Q
+0x72	0x0072	# LATIN SMALL LETTER R
+0x73	0x0073	# LATIN SMALL LETTER S
+0x74	0x0074	# LATIN SMALL LETTER T
+0x75	0x0075	# LATIN SMALL LETTER U
+0x76	0x0076	# LATIN SMALL LETTER V
+0x77	0x0077	# LATIN SMALL LETTER W
+0x78	0x0078	# LATIN SMALL LETTER X
+0x79	0x0079	# LATIN SMALL LETTER Y
+0x7A	0x007A	# LATIN SMALL LETTER Z
+0x7B	0x00E9	# LATIN SMALL LETTER E WITH ACUTE
+0x7C	0x00F9	# LATIN SMALL LETTER U WITH GRAVE
+0x7D	0x00E8	# LATIN SMALL LETTER E WITH GRAVE
+0x7E	0x00A8	# DIAERESIS
+0x7F	0x007F	# DELETE (DEL)
diff --git a/externals/figlet/fonts/646-gb.flc b/externals/figlet/fonts/646-gb.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/646-gb.flc
@@ -0,0 +1,157 @@
+#
+#	Name:             BS_4730 to Unicode
+#	Unicode version:  2.0
+#	Table version:    0.1
+#	Table format:     Format A
+#	Date:             0097-01-24
+#	Authors:          John Cowan <cowan@ccil.org> (conversion)
+#                     Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+#	General notes:
+#
+#	This table contains data obtained from RFC 1345 on how
+#       BS_4730 characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the BS_4730 code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in BS_4730 order
+#
+#	Any comments or problems, contact <cowan@ccil.org>
+#
+#   &rem source: ECMA registry
+#   &alias iso-ir-4
+#   &alias ISO646-GB
+#   &g0esc x2841 &g1esc x2941 &g2esc x2a41 &g3esc x2b41
+#   &alias gb
+#   &alias uk
+0x00	0x0000	# NULL (NUL)
+0x01	0x0001	# START OF HEADING (SOH)
+0x02	0x0002	# START OF TEXT (STX)
+0x03	0x0003	# END OF TEXT (ETX)
+0x04	0x0004	# END OF TRANSMISSION (EOT)
+0x05	0x0005	# ENQUIRY (ENQ)
+0x06	0x0006	# ACKNOWLEDGE (ACK)
+0x07	0x0007	# BELL (BEL)
+0x08	0x0008	# BACKSPACE (BS)
+0x09	0x0009	# CHARACTER TABULATION (HT)
+0x0A	0x000A	# LINE FEED (LF)
+0x0B	0x000B	# LINE TABULATION (VT)
+0x0C	0x000C	# FORM FEED (FF)
+0x0D	0x000D	# CARRIAGE RETURN (CR)
+0x0E	0x000E	# SHIFT OUT (SO)
+0x0F	0x000F	# SHIFT IN (SI)
+0x10	0x0010	# DATALINK ESCAPE (DLE)
+0x11	0x0011	# DEVICE CONTROL ONE (DC1)
+0x12	0x0012	# DEVICE CONTROL TWO (DC2)
+0x13	0x0013	# DEVICE CONTROL THREE (DC3)
+0x14	0x0014	# DEVICE CONTROL FOUR (DC4)
+0x15	0x0015	# NEGATIVE ACKNOWLEDGE (NAK)
+0x16	0x0016	# SYNCRONOUS IDLE (SYN)
+0x17	0x0017	# END OF TRANSMISSION BLOCK (ETB)
+0x18	0x0018	# CANCEL (CAN)
+0x19	0x0019	# END OF MEDIUM (EM)
+0x1A	0x001A	# SUBSTITUTE (SUB)
+0x1B	0x001B	# ESCAPE (ESC)
+0x1C	0x001C	# FILE SEPARATOR (IS4)
+0x1D	0x001D	# GROUP SEPARATOR (IS3)
+0x1E	0x001E	# RECORD SEPARATOR (IS2)
+0x1F	0x001F	# UNIT SEPARATOR (IS1)
+0x20	0x0020	# SPACE
+0x21	0x0021	# EXCLAMATION MARK
+0x22	0x0022	# QUOTATION MARK
+0x23	0x00A3	# POUND SIGN
+0x24	0x0024	# DOLLAR SIGN
+0x25	0x0025	# PERCENT SIGN
+0x26	0x0026	# AMPERSAND
+0x27	0x0027	# APOSTROPHE
+0x28	0x0028	# LEFT PARENTHESIS
+0x29	0x0029	# RIGHT PARENTHESIS
+0x2A	0x002A	# ASTERISK
+0x2B	0x002B	# PLUS SIGN
+0x2C	0x002C	# COMMA
+0x2D	0x002D	# HYPHEN-MINUS
+0x2E	0x002E	# FULL STOP
+0x2F	0x002F	# SOLIDUS
+0x30	0x0030	# DIGIT ZERO
+0x31	0x0031	# DIGIT ONE
+0x32	0x0032	# DIGIT TWO
+0x33	0x0033	# DIGIT THREE
+0x34	0x0034	# DIGIT FOUR
+0x35	0x0035	# DIGIT FIVE
+0x36	0x0036	# DIGIT SIX
+0x37	0x0037	# DIGIT SEVEN
+0x38	0x0038	# DIGIT EIGHT
+0x39	0x0039	# DIGIT NINE
+0x3A	0x003A	# COLON
+0x3B	0x003B	# SEMICOLON
+0x3C	0x003C	# LESS-THAN SIGN
+0x3D	0x003D	# EQUALS SIGN
+0x3E	0x003E	# GREATER-THAN SIGN
+0x3F	0x003F	# QUESTION MARK
+0x40	0x0040	# COMMERCIAL AT
+0x41	0x0041	# LATIN CAPITAL LETTER A
+0x42	0x0042	# LATIN CAPITAL LETTER B
+0x43	0x0043	# LATIN CAPITAL LETTER C
+0x44	0x0044	# LATIN CAPITAL LETTER D
+0x45	0x0045	# LATIN CAPITAL LETTER E
+0x46	0x0046	# LATIN CAPITAL LETTER F
+0x47	0x0047	# LATIN CAPITAL LETTER G
+0x48	0x0048	# LATIN CAPITAL LETTER H
+0x49	0x0049	# LATIN CAPITAL LETTER I
+0x4A	0x004A	# LATIN CAPITAL LETTER J
+0x4B	0x004B	# LATIN CAPITAL LETTER K
+0x4C	0x004C	# LATIN CAPITAL LETTER L
+0x4D	0x004D	# LATIN CAPITAL LETTER M
+0x4E	0x004E	# LATIN CAPITAL LETTER N
+0x4F	0x004F	# LATIN CAPITAL LETTER O
+0x50	0x0050	# LATIN CAPITAL LETTER P
+0x51	0x0051	# LATIN CAPITAL LETTER Q
+0x52	0x0052	# LATIN CAPITAL LETTER R
+0x53	0x0053	# LATIN CAPITAL LETTER S
+0x54	0x0054	# LATIN CAPITAL LETTER T
+0x55	0x0055	# LATIN CAPITAL LETTER U
+0x56	0x0056	# LATIN CAPITAL LETTER V
+0x57	0x0057	# LATIN CAPITAL LETTER W
+0x58	0x0058	# LATIN CAPITAL LETTER X
+0x59	0x0059	# LATIN CAPITAL LETTER Y
+0x5A	0x005A	# LATIN CAPITAL LETTER Z
+0x5B	0x005B	# LEFT SQUARE BRACKET
+0x5C	0x005C	# REVERSE SOLIDUS
+0x5D	0x005D	# RIGHT SQUARE BRACKET
+0x5E	0x005E	# CIRCUMFLEX ACCENT
+0x5F	0x005F	# LOW LINE
+0x60	0x0060	# GRAVE ACCENT
+0x61	0x0061	# LATIN SMALL LETTER A
+0x62	0x0062	# LATIN SMALL LETTER B
+0x63	0x0063	# LATIN SMALL LETTER C
+0x64	0x0064	# LATIN SMALL LETTER D
+0x65	0x0065	# LATIN SMALL LETTER E
+0x66	0x0066	# LATIN SMALL LETTER F
+0x67	0x0067	# LATIN SMALL LETTER G
+0x68	0x0068	# LATIN SMALL LETTER H
+0x69	0x0069	# LATIN SMALL LETTER I
+0x6A	0x006A	# LATIN SMALL LETTER J
+0x6B	0x006B	# LATIN SMALL LETTER K
+0x6C	0x006C	# LATIN SMALL LETTER L
+0x6D	0x006D	# LATIN SMALL LETTER M
+0x6E	0x006E	# LATIN SMALL LETTER N
+0x6F	0x006F	# LATIN SMALL LETTER O
+0x70	0x0070	# LATIN SMALL LETTER P
+0x71	0x0071	# LATIN SMALL LETTER Q
+0x72	0x0072	# LATIN SMALL LETTER R
+0x73	0x0073	# LATIN SMALL LETTER S
+0x74	0x0074	# LATIN SMALL LETTER T
+0x75	0x0075	# LATIN SMALL LETTER U
+0x76	0x0076	# LATIN SMALL LETTER V
+0x77	0x0077	# LATIN SMALL LETTER W
+0x78	0x0078	# LATIN SMALL LETTER X
+0x79	0x0079	# LATIN SMALL LETTER Y
+0x7A	0x007A	# LATIN SMALL LETTER Z
+0x7B	0x007B	# LEFT CURLY BRACKET
+0x7C	0x007C	# VERTICAL LINE
+0x7D	0x007D	# RIGHT CURLY BRACKET
+0x7E	0x203E	# OVERLINE
+0x7F	0x007F	# DELETE (DEL)
diff --git a/externals/figlet/fonts/646-hu.flc b/externals/figlet/fonts/646-hu.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/646-hu.flc
@@ -0,0 +1,156 @@
+#
+#	Name:             MSZ_7795.3 to Unicode
+#	Unicode version:  2.0
+#	Table version:    0.1
+#	Table format:     Format A
+#	Date:             0097-01-24
+#	Authors:          John Cowan <cowan@ccil.org> (conversion)
+#                     Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+#	General notes:
+#
+#	This table contains data obtained from RFC 1345 on how
+#       MSZ_7795.3 characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the MSZ_7795.3 code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in MSZ_7795.3 order
+#
+#	Any comments or problems, contact <cowan@ccil.org>
+#
+#   &rem source: ECMA registry
+#   &alias iso-ir-86
+#   &alias ISO646-HU
+#   &g0esc x2869 &g1esc x2969 &g2esc x2a69 &g3esc x2b69
+#   &alias hu
+0x00	0x0000	# NULL (NUL)
+0x01	0x0001	# START OF HEADING (SOH)
+0x02	0x0002	# START OF TEXT (STX)
+0x03	0x0003	# END OF TEXT (ETX)
+0x04	0x0004	# END OF TRANSMISSION (EOT)
+0x05	0x0005	# ENQUIRY (ENQ)
+0x06	0x0006	# ACKNOWLEDGE (ACK)
+0x07	0x0007	# BELL (BEL)
+0x08	0x0008	# BACKSPACE (BS)
+0x09	0x0009	# CHARACTER TABULATION (HT)
+0x0A	0x000A	# LINE FEED (LF)
+0x0B	0x000B	# LINE TABULATION (VT)
+0x0C	0x000C	# FORM FEED (FF)
+0x0D	0x000D	# CARRIAGE RETURN (CR)
+0x0E	0x000E	# SHIFT OUT (SO)
+0x0F	0x000F	# SHIFT IN (SI)
+0x10	0x0010	# DATALINK ESCAPE (DLE)
+0x11	0x0011	# DEVICE CONTROL ONE (DC1)
+0x12	0x0012	# DEVICE CONTROL TWO (DC2)
+0x13	0x0013	# DEVICE CONTROL THREE (DC3)
+0x14	0x0014	# DEVICE CONTROL FOUR (DC4)
+0x15	0x0015	# NEGATIVE ACKNOWLEDGE (NAK)
+0x16	0x0016	# SYNCRONOUS IDLE (SYN)
+0x17	0x0017	# END OF TRANSMISSION BLOCK (ETB)
+0x18	0x0018	# CANCEL (CAN)
+0x19	0x0019	# END OF MEDIUM (EM)
+0x1A	0x001A	# SUBSTITUTE (SUB)
+0x1B	0x001B	# ESCAPE (ESC)
+0x1C	0x001C	# FILE SEPARATOR (IS4)
+0x1D	0x001D	# GROUP SEPARATOR (IS3)
+0x1E	0x001E	# RECORD SEPARATOR (IS2)
+0x1F	0x001F	# UNIT SEPARATOR (IS1)
+0x20	0x0020	# SPACE
+0x21	0x0021	# EXCLAMATION MARK
+0x22	0x0022	# QUOTATION MARK
+0x23	0x0023	# NUMBER SIGN
+0x24	0x00A4	# CURRENCY SIGN
+0x25	0x0025	# PERCENT SIGN
+0x26	0x0026	# AMPERSAND
+0x27	0x0027	# APOSTROPHE
+0x28	0x0028	# LEFT PARENTHESIS
+0x29	0x0029	# RIGHT PARENTHESIS
+0x2A	0x002A	# ASTERISK
+0x2B	0x002B	# PLUS SIGN
+0x2C	0x002C	# COMMA
+0x2D	0x002D	# HYPHEN-MINUS
+0x2E	0x002E	# FULL STOP
+0x2F	0x002F	# SOLIDUS
+0x30	0x0030	# DIGIT ZERO
+0x31	0x0031	# DIGIT ONE
+0x32	0x0032	# DIGIT TWO
+0x33	0x0033	# DIGIT THREE
+0x34	0x0034	# DIGIT FOUR
+0x35	0x0035	# DIGIT FIVE
+0x36	0x0036	# DIGIT SIX
+0x37	0x0037	# DIGIT SEVEN
+0x38	0x0038	# DIGIT EIGHT
+0x39	0x0039	# DIGIT NINE
+0x3A	0x003A	# COLON
+0x3B	0x003B	# SEMICOLON
+0x3C	0x003C	# LESS-THAN SIGN
+0x3D	0x003D	# EQUALS SIGN
+0x3E	0x003E	# GREATER-THAN SIGN
+0x3F	0x003F	# QUESTION MARK
+0x40	0x00C1	# LATIN CAPITAL LETTER A WITH ACUTE
+0x41	0x0041	# LATIN CAPITAL LETTER A
+0x42	0x0042	# LATIN CAPITAL LETTER B
+0x43	0x0043	# LATIN CAPITAL LETTER C
+0x44	0x0044	# LATIN CAPITAL LETTER D
+0x45	0x0045	# LATIN CAPITAL LETTER E
+0x46	0x0046	# LATIN CAPITAL LETTER F
+0x47	0x0047	# LATIN CAPITAL LETTER G
+0x48	0x0048	# LATIN CAPITAL LETTER H
+0x49	0x0049	# LATIN CAPITAL LETTER I
+0x4A	0x004A	# LATIN CAPITAL LETTER J
+0x4B	0x004B	# LATIN CAPITAL LETTER K
+0x4C	0x004C	# LATIN CAPITAL LETTER L
+0x4D	0x004D	# LATIN CAPITAL LETTER M
+0x4E	0x004E	# LATIN CAPITAL LETTER N
+0x4F	0x004F	# LATIN CAPITAL LETTER O
+0x50	0x0050	# LATIN CAPITAL LETTER P
+0x51	0x0051	# LATIN CAPITAL LETTER Q
+0x52	0x0052	# LATIN CAPITAL LETTER R
+0x53	0x0053	# LATIN CAPITAL LETTER S
+0x54	0x0054	# LATIN CAPITAL LETTER T
+0x55	0x0055	# LATIN CAPITAL LETTER U
+0x56	0x0056	# LATIN CAPITAL LETTER V
+0x57	0x0057	# LATIN CAPITAL LETTER W
+0x58	0x0058	# LATIN CAPITAL LETTER X
+0x59	0x0059	# LATIN CAPITAL LETTER Y
+0x5A	0x005A	# LATIN CAPITAL LETTER Z
+0x5B	0x00C9	# LATIN CAPITAL LETTER E WITH ACUTE
+0x5C	0x00D6	# LATIN CAPITAL LETTER O WITH DIAERESIS
+0x5D	0x00DC	# LATIN CAPITAL LETTER U WITH DIAERESIS
+0x5E	0x005E	# CIRCUMFLEX ACCENT
+0x5F	0x005F	# LOW LINE
+0x60	0x00E1	# LATIN SMALL LETTER A WITH ACUTE
+0x61	0x0061	# LATIN SMALL LETTER A
+0x62	0x0062	# LATIN SMALL LETTER B
+0x63	0x0063	# LATIN SMALL LETTER C
+0x64	0x0064	# LATIN SMALL LETTER D
+0x65	0x0065	# LATIN SMALL LETTER E
+0x66	0x0066	# LATIN SMALL LETTER F
+0x67	0x0067	# LATIN SMALL LETTER G
+0x68	0x0068	# LATIN SMALL LETTER H
+0x69	0x0069	# LATIN SMALL LETTER I
+0x6A	0x006A	# LATIN SMALL LETTER J
+0x6B	0x006B	# LATIN SMALL LETTER K
+0x6C	0x006C	# LATIN SMALL LETTER L
+0x6D	0x006D	# LATIN SMALL LETTER M
+0x6E	0x006E	# LATIN SMALL LETTER N
+0x6F	0x006F	# LATIN SMALL LETTER O
+0x70	0x0070	# LATIN SMALL LETTER P
+0x71	0x0071	# LATIN SMALL LETTER Q
+0x72	0x0072	# LATIN SMALL LETTER R
+0x73	0x0073	# LATIN SMALL LETTER S
+0x74	0x0074	# LATIN SMALL LETTER T
+0x75	0x0075	# LATIN SMALL LETTER U
+0x76	0x0076	# LATIN SMALL LETTER V
+0x77	0x0077	# LATIN SMALL LETTER W
+0x78	0x0078	# LATIN SMALL LETTER X
+0x79	0x0079	# LATIN SMALL LETTER Y
+0x7A	0x007A	# LATIN SMALL LETTER Z
+0x7B	0x00E9	# LATIN SMALL LETTER E WITH ACUTE
+0x7C	0x00F6	# LATIN SMALL LETTER O WITH DIAERESIS
+0x7D	0x00FC	# LATIN SMALL LETTER U WITH DIAERESIS
+0x7E	0x02DD	# DOUBLE ACUTE ACCENT
+0x7F	0x007F	# DELETE (DEL)
diff --git a/externals/figlet/fonts/646-irv.flc b/externals/figlet/fonts/646-irv.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/646-irv.flc
@@ -0,0 +1,155 @@
+#
+#	Name:             ISO_646.irv:1983 to Unicode
+#	Unicode version:  2.0
+#	Table version:    0.1
+#	Table format:     Format A
+#	Date:             0097-01-24
+#	Authors:          John Cowan <cowan@ccil.org> (conversion)
+#                     Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+#	General notes:
+#
+#	This table contains data obtained from RFC 1345 on how
+#       ISO_646.irv:1983 characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the ISO_646.irv:1983 code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in ISO_646.irv:1983 order
+#
+#	Any comments or problems, contact <cowan@ccil.org>
+#
+#   &rem source: ECMA registry
+#   &alias iso-ir-2
+#   &alias irv
+#   &g0esc x2840 &g1esc x2940 &g2esc x2a40 &g3esc x2b40
+0x00	0x0000	# NULL (NUL)
+0x01	0x0001	# START OF HEADING (SOH)
+0x02	0x0002	# START OF TEXT (STX)
+0x03	0x0003	# END OF TEXT (ETX)
+0x04	0x0004	# END OF TRANSMISSION (EOT)
+0x05	0x0005	# ENQUIRY (ENQ)
+0x06	0x0006	# ACKNOWLEDGE (ACK)
+0x07	0x0007	# BELL (BEL)
+0x08	0x0008	# BACKSPACE (BS)
+0x09	0x0009	# CHARACTER TABULATION (HT)
+0x0A	0x000A	# LINE FEED (LF)
+0x0B	0x000B	# LINE TABULATION (VT)
+0x0C	0x000C	# FORM FEED (FF)
+0x0D	0x000D	# CARRIAGE RETURN (CR)
+0x0E	0x000E	# SHIFT OUT (SO)
+0x0F	0x000F	# SHIFT IN (SI)
+0x10	0x0010	# DATALINK ESCAPE (DLE)
+0x11	0x0011	# DEVICE CONTROL ONE (DC1)
+0x12	0x0012	# DEVICE CONTROL TWO (DC2)
+0x13	0x0013	# DEVICE CONTROL THREE (DC3)
+0x14	0x0014	# DEVICE CONTROL FOUR (DC4)
+0x15	0x0015	# NEGATIVE ACKNOWLEDGE (NAK)
+0x16	0x0016	# SYNCRONOUS IDLE (SYN)
+0x17	0x0017	# END OF TRANSMISSION BLOCK (ETB)
+0x18	0x0018	# CANCEL (CAN)
+0x19	0x0019	# END OF MEDIUM (EM)
+0x1A	0x001A	# SUBSTITUTE (SUB)
+0x1B	0x001B	# ESCAPE (ESC)
+0x1C	0x001C	# FILE SEPARATOR (IS4)
+0x1D	0x001D	# GROUP SEPARATOR (IS3)
+0x1E	0x001E	# RECORD SEPARATOR (IS2)
+0x1F	0x001F	# UNIT SEPARATOR (IS1)
+0x20	0x0020	# SPACE
+0x21	0x0021	# EXCLAMATION MARK
+0x22	0x0022	# QUOTATION MARK
+0x23	0x0023	# NUMBER SIGN
+0x24	0x00A4	# CURRENCY SIGN
+0x25	0x0025	# PERCENT SIGN
+0x26	0x0026	# AMPERSAND
+0x27	0x0027	# APOSTROPHE
+0x28	0x0028	# LEFT PARENTHESIS
+0x29	0x0029	# RIGHT PARENTHESIS
+0x2A	0x002A	# ASTERISK
+0x2B	0x002B	# PLUS SIGN
+0x2C	0x002C	# COMMA
+0x2D	0x002D	# HYPHEN-MINUS
+0x2E	0x002E	# FULL STOP
+0x2F	0x002F	# SOLIDUS
+0x30	0x0030	# DIGIT ZERO
+0x31	0x0031	# DIGIT ONE
+0x32	0x0032	# DIGIT TWO
+0x33	0x0033	# DIGIT THREE
+0x34	0x0034	# DIGIT FOUR
+0x35	0x0035	# DIGIT FIVE
+0x36	0x0036	# DIGIT SIX
+0x37	0x0037	# DIGIT SEVEN
+0x38	0x0038	# DIGIT EIGHT
+0x39	0x0039	# DIGIT NINE
+0x3A	0x003A	# COLON
+0x3B	0x003B	# SEMICOLON
+0x3C	0x003C	# LESS-THAN SIGN
+0x3D	0x003D	# EQUALS SIGN
+0x3E	0x003E	# GREATER-THAN SIGN
+0x3F	0x003F	# QUESTION MARK
+0x40	0x0040	# COMMERCIAL AT
+0x41	0x0041	# LATIN CAPITAL LETTER A
+0x42	0x0042	# LATIN CAPITAL LETTER B
+0x43	0x0043	# LATIN CAPITAL LETTER C
+0x44	0x0044	# LATIN CAPITAL LETTER D
+0x45	0x0045	# LATIN CAPITAL LETTER E
+0x46	0x0046	# LATIN CAPITAL LETTER F
+0x47	0x0047	# LATIN CAPITAL LETTER G
+0x48	0x0048	# LATIN CAPITAL LETTER H
+0x49	0x0049	# LATIN CAPITAL LETTER I
+0x4A	0x004A	# LATIN CAPITAL LETTER J
+0x4B	0x004B	# LATIN CAPITAL LETTER K
+0x4C	0x004C	# LATIN CAPITAL LETTER L
+0x4D	0x004D	# LATIN CAPITAL LETTER M
+0x4E	0x004E	# LATIN CAPITAL LETTER N
+0x4F	0x004F	# LATIN CAPITAL LETTER O
+0x50	0x0050	# LATIN CAPITAL LETTER P
+0x51	0x0051	# LATIN CAPITAL LETTER Q
+0x52	0x0052	# LATIN CAPITAL LETTER R
+0x53	0x0053	# LATIN CAPITAL LETTER S
+0x54	0x0054	# LATIN CAPITAL LETTER T
+0x55	0x0055	# LATIN CAPITAL LETTER U
+0x56	0x0056	# LATIN CAPITAL LETTER V
+0x57	0x0057	# LATIN CAPITAL LETTER W
+0x58	0x0058	# LATIN CAPITAL LETTER X
+0x59	0x0059	# LATIN CAPITAL LETTER Y
+0x5A	0x005A	# LATIN CAPITAL LETTER Z
+0x5B	0x005B	# LEFT SQUARE BRACKET
+0x5C	0x005C	# REVERSE SOLIDUS
+0x5D	0x005D	# RIGHT SQUARE BRACKET
+0x5E	0x005E	# CIRCUMFLEX ACCENT
+0x5F	0x005F	# LOW LINE
+0x60	0x0060	# GRAVE ACCENT
+0x61	0x0061	# LATIN SMALL LETTER A
+0x62	0x0062	# LATIN SMALL LETTER B
+0x63	0x0063	# LATIN SMALL LETTER C
+0x64	0x0064	# LATIN SMALL LETTER D
+0x65	0x0065	# LATIN SMALL LETTER E
+0x66	0x0066	# LATIN SMALL LETTER F
+0x67	0x0067	# LATIN SMALL LETTER G
+0x68	0x0068	# LATIN SMALL LETTER H
+0x69	0x0069	# LATIN SMALL LETTER I
+0x6A	0x006A	# LATIN SMALL LETTER J
+0x6B	0x006B	# LATIN SMALL LETTER K
+0x6C	0x006C	# LATIN SMALL LETTER L
+0x6D	0x006D	# LATIN SMALL LETTER M
+0x6E	0x006E	# LATIN SMALL LETTER N
+0x6F	0x006F	# LATIN SMALL LETTER O
+0x70	0x0070	# LATIN SMALL LETTER P
+0x71	0x0071	# LATIN SMALL LETTER Q
+0x72	0x0072	# LATIN SMALL LETTER R
+0x73	0x0073	# LATIN SMALL LETTER S
+0x74	0x0074	# LATIN SMALL LETTER T
+0x75	0x0075	# LATIN SMALL LETTER U
+0x76	0x0076	# LATIN SMALL LETTER V
+0x77	0x0077	# LATIN SMALL LETTER W
+0x78	0x0078	# LATIN SMALL LETTER X
+0x79	0x0079	# LATIN SMALL LETTER Y
+0x7A	0x007A	# LATIN SMALL LETTER Z
+0x7B	0x007B	# LEFT CURLY BRACKET
+0x7C	0x007C	# VERTICAL LINE
+0x7D	0x007D	# RIGHT CURLY BRACKET
+0x7E	0x203E	# OVERLINE
+0x7F	0x007F	# DELETE (DEL)
diff --git a/externals/figlet/fonts/646-it.flc b/externals/figlet/fonts/646-it.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/646-it.flc
@@ -0,0 +1,155 @@
+#
+#	Name:             IT to Unicode
+#	Unicode version:  2.0
+#	Table version:    0.1
+#	Table format:     Format A
+#	Date:             0097-01-24
+#	Authors:          John Cowan <cowan@ccil.org> (conversion)
+#                     Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+#	General notes:
+#
+#	This table contains data obtained from RFC 1345 on how
+#       IT characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the IT code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in IT order
+#
+#	Any comments or problems, contact <cowan@ccil.org>
+#
+#   &rem source: ECMA registry
+#   &alias iso-ir-15
+#   &alias ISO646-IT
+#   &g0esc x2859 &g1esc x2959 &g2esc x2a59 &g3esc x2b59
+0x00	0x0000	# NULL (NUL)
+0x01	0x0001	# START OF HEADING (SOH)
+0x02	0x0002	# START OF TEXT (STX)
+0x03	0x0003	# END OF TEXT (ETX)
+0x04	0x0004	# END OF TRANSMISSION (EOT)
+0x05	0x0005	# ENQUIRY (ENQ)
+0x06	0x0006	# ACKNOWLEDGE (ACK)
+0x07	0x0007	# BELL (BEL)
+0x08	0x0008	# BACKSPACE (BS)
+0x09	0x0009	# CHARACTER TABULATION (HT)
+0x0A	0x000A	# LINE FEED (LF)
+0x0B	0x000B	# LINE TABULATION (VT)
+0x0C	0x000C	# FORM FEED (FF)
+0x0D	0x000D	# CARRIAGE RETURN (CR)
+0x0E	0x000E	# SHIFT OUT (SO)
+0x0F	0x000F	# SHIFT IN (SI)
+0x10	0x0010	# DATALINK ESCAPE (DLE)
+0x11	0x0011	# DEVICE CONTROL ONE (DC1)
+0x12	0x0012	# DEVICE CONTROL TWO (DC2)
+0x13	0x0013	# DEVICE CONTROL THREE (DC3)
+0x14	0x0014	# DEVICE CONTROL FOUR (DC4)
+0x15	0x0015	# NEGATIVE ACKNOWLEDGE (NAK)
+0x16	0x0016	# SYNCRONOUS IDLE (SYN)
+0x17	0x0017	# END OF TRANSMISSION BLOCK (ETB)
+0x18	0x0018	# CANCEL (CAN)
+0x19	0x0019	# END OF MEDIUM (EM)
+0x1A	0x001A	# SUBSTITUTE (SUB)
+0x1B	0x001B	# ESCAPE (ESC)
+0x1C	0x001C	# FILE SEPARATOR (IS4)
+0x1D	0x001D	# GROUP SEPARATOR (IS3)
+0x1E	0x001E	# RECORD SEPARATOR (IS2)
+0x1F	0x001F	# UNIT SEPARATOR (IS1)
+0x20	0x0020	# SPACE
+0x21	0x0021	# EXCLAMATION MARK
+0x22	0x0022	# QUOTATION MARK
+0x23	0x00A3	# POUND SIGN
+0x24	0x0024	# DOLLAR SIGN
+0x25	0x0025	# PERCENT SIGN
+0x26	0x0026	# AMPERSAND
+0x27	0x0027	# APOSTROPHE
+0x28	0x0028	# LEFT PARENTHESIS
+0x29	0x0029	# RIGHT PARENTHESIS
+0x2A	0x002A	# ASTERISK
+0x2B	0x002B	# PLUS SIGN
+0x2C	0x002C	# COMMA
+0x2D	0x002D	# HYPHEN-MINUS
+0x2E	0x002E	# FULL STOP
+0x2F	0x002F	# SOLIDUS
+0x30	0x0030	# DIGIT ZERO
+0x31	0x0031	# DIGIT ONE
+0x32	0x0032	# DIGIT TWO
+0x33	0x0033	# DIGIT THREE
+0x34	0x0034	# DIGIT FOUR
+0x35	0x0035	# DIGIT FIVE
+0x36	0x0036	# DIGIT SIX
+0x37	0x0037	# DIGIT SEVEN
+0x38	0x0038	# DIGIT EIGHT
+0x39	0x0039	# DIGIT NINE
+0x3A	0x003A	# COLON
+0x3B	0x003B	# SEMICOLON
+0x3C	0x003C	# LESS-THAN SIGN
+0x3D	0x003D	# EQUALS SIGN
+0x3E	0x003E	# GREATER-THAN SIGN
+0x3F	0x003F	# QUESTION MARK
+0x40	0x00A7	# SECTION SIGN
+0x41	0x0041	# LATIN CAPITAL LETTER A
+0x42	0x0042	# LATIN CAPITAL LETTER B
+0x43	0x0043	# LATIN CAPITAL LETTER C
+0x44	0x0044	# LATIN CAPITAL LETTER D
+0x45	0x0045	# LATIN CAPITAL LETTER E
+0x46	0x0046	# LATIN CAPITAL LETTER F
+0x47	0x0047	# LATIN CAPITAL LETTER G
+0x48	0x0048	# LATIN CAPITAL LETTER H
+0x49	0x0049	# LATIN CAPITAL LETTER I
+0x4A	0x004A	# LATIN CAPITAL LETTER J
+0x4B	0x004B	# LATIN CAPITAL LETTER K
+0x4C	0x004C	# LATIN CAPITAL LETTER L
+0x4D	0x004D	# LATIN CAPITAL LETTER M
+0x4E	0x004E	# LATIN CAPITAL LETTER N
+0x4F	0x004F	# LATIN CAPITAL LETTER O
+0x50	0x0050	# LATIN CAPITAL LETTER P
+0x51	0x0051	# LATIN CAPITAL LETTER Q
+0x52	0x0052	# LATIN CAPITAL LETTER R
+0x53	0x0053	# LATIN CAPITAL LETTER S
+0x54	0x0054	# LATIN CAPITAL LETTER T
+0x55	0x0055	# LATIN CAPITAL LETTER U
+0x56	0x0056	# LATIN CAPITAL LETTER V
+0x57	0x0057	# LATIN CAPITAL LETTER W
+0x58	0x0058	# LATIN CAPITAL LETTER X
+0x59	0x0059	# LATIN CAPITAL LETTER Y
+0x5A	0x005A	# LATIN CAPITAL LETTER Z
+0x5B	0x00B0	# DEGREE SIGN
+0x5C	0x00E7	# LATIN SMALL LETTER C WITH CEDILLA
+0x5D	0x00E9	# LATIN SMALL LETTER E WITH ACUTE
+0x5E	0x005E	# CIRCUMFLEX ACCENT
+0x5F	0x005F	# LOW LINE
+0x60	0x00F9	# LATIN SMALL LETTER U WITH GRAVE
+0x61	0x0061	# LATIN SMALL LETTER A
+0x62	0x0062	# LATIN SMALL LETTER B
+0x63	0x0063	# LATIN SMALL LETTER C
+0x64	0x0064	# LATIN SMALL LETTER D
+0x65	0x0065	# LATIN SMALL LETTER E
+0x66	0x0066	# LATIN SMALL LETTER F
+0x67	0x0067	# LATIN SMALL LETTER G
+0x68	0x0068	# LATIN SMALL LETTER H
+0x69	0x0069	# LATIN SMALL LETTER I
+0x6A	0x006A	# LATIN SMALL LETTER J
+0x6B	0x006B	# LATIN SMALL LETTER K
+0x6C	0x006C	# LATIN SMALL LETTER L
+0x6D	0x006D	# LATIN SMALL LETTER M
+0x6E	0x006E	# LATIN SMALL LETTER N
+0x6F	0x006F	# LATIN SMALL LETTER O
+0x70	0x0070	# LATIN SMALL LETTER P
+0x71	0x0071	# LATIN SMALL LETTER Q
+0x72	0x0072	# LATIN SMALL LETTER R
+0x73	0x0073	# LATIN SMALL LETTER S
+0x74	0x0074	# LATIN SMALL LETTER T
+0x75	0x0075	# LATIN SMALL LETTER U
+0x76	0x0076	# LATIN SMALL LETTER V
+0x77	0x0077	# LATIN SMALL LETTER W
+0x78	0x0078	# LATIN SMALL LETTER X
+0x79	0x0079	# LATIN SMALL LETTER Y
+0x7A	0x007A	# LATIN SMALL LETTER Z
+0x7B	0x00E0	# LATIN SMALL LETTER A WITH GRAVE
+0x7C	0x00F2	# LATIN SMALL LETTER O WITH GRAVE
+0x7D	0x00E8	# LATIN SMALL LETTER E WITH GRAVE
+0x7E	0x00EC	# LATIN SMALL LETTER I WITH GRAVE
+0x7F	0x007F	# DELETE (DEL)
diff --git a/externals/figlet/fonts/646-jp.flc b/externals/figlet/fonts/646-jp.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/646-jp.flc
@@ -0,0 +1,156 @@
+#
+#	Name:             JIS_C6220-1969-ro to Unicode
+#	Unicode version:  2.0
+#	Table version:    0.1
+#	Table format:     Format A
+#	Date:             0097-01-24
+#	Authors:          John Cowan <cowan@ccil.org> (conversion)
+#                     Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+#	General notes:
+#
+#	This table contains data obtained from RFC 1345 on how
+#       JIS_C6220-1969-ro characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the JIS_C6220-1969-ro code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in JIS_C6220-1969-ro order
+#
+#	Any comments or problems, contact <cowan@ccil.org>
+#
+#   &rem source: ECMA registry
+#   &alias iso-ir-14
+#   &g0esc x284a &g1esc x294a &g2esc x2a4a &g3esc x2b4a
+#   &alias jp
+#   &alias ISO646-JP
+0x00	0x0000	# NULL (NUL)
+0x01	0x0001	# START OF HEADING (SOH)
+0x02	0x0002	# START OF TEXT (STX)
+0x03	0x0003	# END OF TEXT (ETX)
+0x04	0x0004	# END OF TRANSMISSION (EOT)
+0x05	0x0005	# ENQUIRY (ENQ)
+0x06	0x0006	# ACKNOWLEDGE (ACK)
+0x07	0x0007	# BELL (BEL)
+0x08	0x0008	# BACKSPACE (BS)
+0x09	0x0009	# CHARACTER TABULATION (HT)
+0x0A	0x000A	# LINE FEED (LF)
+0x0B	0x000B	# LINE TABULATION (VT)
+0x0C	0x000C	# FORM FEED (FF)
+0x0D	0x000D	# CARRIAGE RETURN (CR)
+0x0E	0x000E	# SHIFT OUT (SO)
+0x0F	0x000F	# SHIFT IN (SI)
+0x10	0x0010	# DATALINK ESCAPE (DLE)
+0x11	0x0011	# DEVICE CONTROL ONE (DC1)
+0x12	0x0012	# DEVICE CONTROL TWO (DC2)
+0x13	0x0013	# DEVICE CONTROL THREE (DC3)
+0x14	0x0014	# DEVICE CONTROL FOUR (DC4)
+0x15	0x0015	# NEGATIVE ACKNOWLEDGE (NAK)
+0x16	0x0016	# SYNCRONOUS IDLE (SYN)
+0x17	0x0017	# END OF TRANSMISSION BLOCK (ETB)
+0x18	0x0018	# CANCEL (CAN)
+0x19	0x0019	# END OF MEDIUM (EM)
+0x1A	0x001A	# SUBSTITUTE (SUB)
+0x1B	0x001B	# ESCAPE (ESC)
+0x1C	0x001C	# FILE SEPARATOR (IS4)
+0x1D	0x001D	# GROUP SEPARATOR (IS3)
+0x1E	0x001E	# RECORD SEPARATOR (IS2)
+0x1F	0x001F	# UNIT SEPARATOR (IS1)
+0x20	0x0020	# SPACE
+0x21	0x0021	# EXCLAMATION MARK
+0x22	0x0022	# QUOTATION MARK
+0x23	0x0023	# NUMBER SIGN
+0x24	0x0024	# DOLLAR SIGN
+0x25	0x0025	# PERCENT SIGN
+0x26	0x0026	# AMPERSAND
+0x27	0x0027	# APOSTROPHE
+0x28	0x0028	# LEFT PARENTHESIS
+0x29	0x0029	# RIGHT PARENTHESIS
+0x2A	0x002A	# ASTERISK
+0x2B	0x002B	# PLUS SIGN
+0x2C	0x002C	# COMMA
+0x2D	0x002D	# HYPHEN-MINUS
+0x2E	0x002E	# FULL STOP
+0x2F	0x002F	# SOLIDUS
+0x30	0x0030	# DIGIT ZERO
+0x31	0x0031	# DIGIT ONE
+0x32	0x0032	# DIGIT TWO
+0x33	0x0033	# DIGIT THREE
+0x34	0x0034	# DIGIT FOUR
+0x35	0x0035	# DIGIT FIVE
+0x36	0x0036	# DIGIT SIX
+0x37	0x0037	# DIGIT SEVEN
+0x38	0x0038	# DIGIT EIGHT
+0x39	0x0039	# DIGIT NINE
+0x3A	0x003A	# COLON
+0x3B	0x003B	# SEMICOLON
+0x3C	0x003C	# LESS-THAN SIGN
+0x3D	0x003D	# EQUALS SIGN
+0x3E	0x003E	# GREATER-THAN SIGN
+0x3F	0x003F	# QUESTION MARK
+0x40	0x0040	# COMMERCIAL AT
+0x41	0x0041	# LATIN CAPITAL LETTER A
+0x42	0x0042	# LATIN CAPITAL LETTER B
+0x43	0x0043	# LATIN CAPITAL LETTER C
+0x44	0x0044	# LATIN CAPITAL LETTER D
+0x45	0x0045	# LATIN CAPITAL LETTER E
+0x46	0x0046	# LATIN CAPITAL LETTER F
+0x47	0x0047	# LATIN CAPITAL LETTER G
+0x48	0x0048	# LATIN CAPITAL LETTER H
+0x49	0x0049	# LATIN CAPITAL LETTER I
+0x4A	0x004A	# LATIN CAPITAL LETTER J
+0x4B	0x004B	# LATIN CAPITAL LETTER K
+0x4C	0x004C	# LATIN CAPITAL LETTER L
+0x4D	0x004D	# LATIN CAPITAL LETTER M
+0x4E	0x004E	# LATIN CAPITAL LETTER N
+0x4F	0x004F	# LATIN CAPITAL LETTER O
+0x50	0x0050	# LATIN CAPITAL LETTER P
+0x51	0x0051	# LATIN CAPITAL LETTER Q
+0x52	0x0052	# LATIN CAPITAL LETTER R
+0x53	0x0053	# LATIN CAPITAL LETTER S
+0x54	0x0054	# LATIN CAPITAL LETTER T
+0x55	0x0055	# LATIN CAPITAL LETTER U
+0x56	0x0056	# LATIN CAPITAL LETTER V
+0x57	0x0057	# LATIN CAPITAL LETTER W
+0x58	0x0058	# LATIN CAPITAL LETTER X
+0x59	0x0059	# LATIN CAPITAL LETTER Y
+0x5A	0x005A	# LATIN CAPITAL LETTER Z
+0x5B	0x005B	# LEFT SQUARE BRACKET
+0x5C	0x00A5	# YEN SIGN
+0x5D	0x005D	# RIGHT SQUARE BRACKET
+0x5E	0x005E	# CIRCUMFLEX ACCENT
+0x5F	0x005F	# LOW LINE
+0x60	0x0060	# GRAVE ACCENT
+0x61	0x0061	# LATIN SMALL LETTER A
+0x62	0x0062	# LATIN SMALL LETTER B
+0x63	0x0063	# LATIN SMALL LETTER C
+0x64	0x0064	# LATIN SMALL LETTER D
+0x65	0x0065	# LATIN SMALL LETTER E
+0x66	0x0066	# LATIN SMALL LETTER F
+0x67	0x0067	# LATIN SMALL LETTER G
+0x68	0x0068	# LATIN SMALL LETTER H
+0x69	0x0069	# LATIN SMALL LETTER I
+0x6A	0x006A	# LATIN SMALL LETTER J
+0x6B	0x006B	# LATIN SMALL LETTER K
+0x6C	0x006C	# LATIN SMALL LETTER L
+0x6D	0x006D	# LATIN SMALL LETTER M
+0x6E	0x006E	# LATIN SMALL LETTER N
+0x6F	0x006F	# LATIN SMALL LETTER O
+0x70	0x0070	# LATIN SMALL LETTER P
+0x71	0x0071	# LATIN SMALL LETTER Q
+0x72	0x0072	# LATIN SMALL LETTER R
+0x73	0x0073	# LATIN SMALL LETTER S
+0x74	0x0074	# LATIN SMALL LETTER T
+0x75	0x0075	# LATIN SMALL LETTER U
+0x76	0x0076	# LATIN SMALL LETTER V
+0x77	0x0077	# LATIN SMALL LETTER W
+0x78	0x0078	# LATIN SMALL LETTER X
+0x79	0x0079	# LATIN SMALL LETTER Y
+0x7A	0x007A	# LATIN SMALL LETTER Z
+0x7B	0x007B	# LEFT CURLY BRACKET
+0x7C	0x007C	# VERTICAL LINE
+0x7D	0x007D	# RIGHT CURLY BRACKET
+0x7E	0x203E	# OVERLINE
+0x7F	0x007F	# DELETE (DEL)
diff --git a/externals/figlet/fonts/646-kr.flc b/externals/figlet/fonts/646-kr.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/646-kr.flc
@@ -0,0 +1,152 @@
+#
+#	Name:             KSC5636 to Unicode
+#	Unicode version:  2.0
+#	Table version:    0.1
+#	Table format:     Format A
+#	Date:             0097-01-24
+#	Authors:          John Cowan <cowan@ccil.org> (conversion)
+#                     Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+#	General notes:
+#
+#	This table contains data obtained from RFC 1345 on how
+#       KSC5636 characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the KSC5636 code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in KSC5636 order
+#
+#	Any comments or problems, contact <cowan@ccil.org>
+#
+#   &alias ISO646-KR
+0x00	0x0000	# NULL (NUL)
+0x01	0x0001	# START OF HEADING (SOH)
+0x02	0x0002	# START OF TEXT (STX)
+0x03	0x0003	# END OF TEXT (ETX)
+0x04	0x0004	# END OF TRANSMISSION (EOT)
+0x05	0x0005	# ENQUIRY (ENQ)
+0x06	0x0006	# ACKNOWLEDGE (ACK)
+0x07	0x0007	# BELL (BEL)
+0x08	0x0008	# BACKSPACE (BS)
+0x09	0x0009	# CHARACTER TABULATION (HT)
+0x0A	0x000A	# LINE FEED (LF)
+0x0B	0x000B	# LINE TABULATION (VT)
+0x0C	0x000C	# FORM FEED (FF)
+0x0D	0x000D	# CARRIAGE RETURN (CR)
+0x0E	0x000E	# SHIFT OUT (SO)
+0x0F	0x000F	# SHIFT IN (SI)
+0x10	0x0010	# DATALINK ESCAPE (DLE)
+0x11	0x0011	# DEVICE CONTROL ONE (DC1)
+0x12	0x0012	# DEVICE CONTROL TWO (DC2)
+0x13	0x0013	# DEVICE CONTROL THREE (DC3)
+0x14	0x0014	# DEVICE CONTROL FOUR (DC4)
+0x15	0x0015	# NEGATIVE ACKNOWLEDGE (NAK)
+0x16	0x0016	# SYNCRONOUS IDLE (SYN)
+0x17	0x0017	# END OF TRANSMISSION BLOCK (ETB)
+0x18	0x0018	# CANCEL (CAN)
+0x19	0x0019	# END OF MEDIUM (EM)
+0x1A	0x001A	# SUBSTITUTE (SUB)
+0x1B	0x001B	# ESCAPE (ESC)
+0x1C	0x001C	# FILE SEPARATOR (IS4)
+0x1D	0x001D	# GROUP SEPARATOR (IS3)
+0x1E	0x001E	# RECORD SEPARATOR (IS2)
+0x1F	0x001F	# UNIT SEPARATOR (IS1)
+0x20	0x0020	# SPACE
+0x21	0x0021	# EXCLAMATION MARK
+0x22	0x0022	# QUOTATION MARK
+0x23	0x0023	# NUMBER SIGN
+0x24	0x0024	# DOLLAR SIGN
+0x25	0x0025	# PERCENT SIGN
+0x26	0x0026	# AMPERSAND
+0x27	0x0027	# APOSTROPHE
+0x28	0x0028	# LEFT PARENTHESIS
+0x29	0x0029	# RIGHT PARENTHESIS
+0x2A	0x002A	# ASTERISK
+0x2B	0x002B	# PLUS SIGN
+0x2C	0x002C	# COMMA
+0x2D	0x002D	# HYPHEN-MINUS
+0x2E	0x002E	# FULL STOP
+0x2F	0x002F	# SOLIDUS
+0x30	0x0030	# DIGIT ZERO
+0x31	0x0031	# DIGIT ONE
+0x32	0x0032	# DIGIT TWO
+0x33	0x0033	# DIGIT THREE
+0x34	0x0034	# DIGIT FOUR
+0x35	0x0035	# DIGIT FIVE
+0x36	0x0036	# DIGIT SIX
+0x37	0x0037	# DIGIT SEVEN
+0x38	0x0038	# DIGIT EIGHT
+0x39	0x0039	# DIGIT NINE
+0x3A	0x003A	# COLON
+0x3B	0x003B	# SEMICOLON
+0x3C	0x003C	# LESS-THAN SIGN
+0x3D	0x003D	# EQUALS SIGN
+0x3E	0x003E	# GREATER-THAN SIGN
+0x3F	0x003F	# QUESTION MARK
+0x40	0x0040	# COMMERCIAL AT
+0x41	0x0041	# LATIN CAPITAL LETTER A
+0x42	0x0042	# LATIN CAPITAL LETTER B
+0x43	0x0043	# LATIN CAPITAL LETTER C
+0x44	0x0044	# LATIN CAPITAL LETTER D
+0x45	0x0045	# LATIN CAPITAL LETTER E
+0x46	0x0046	# LATIN CAPITAL LETTER F
+0x47	0x0047	# LATIN CAPITAL LETTER G
+0x48	0x0048	# LATIN CAPITAL LETTER H
+0x49	0x0049	# LATIN CAPITAL LETTER I
+0x4A	0x004A	# LATIN CAPITAL LETTER J
+0x4B	0x004B	# LATIN CAPITAL LETTER K
+0x4C	0x004C	# LATIN CAPITAL LETTER L
+0x4D	0x004D	# LATIN CAPITAL LETTER M
+0x4E	0x004E	# LATIN CAPITAL LETTER N
+0x4F	0x004F	# LATIN CAPITAL LETTER O
+0x50	0x0050	# LATIN CAPITAL LETTER P
+0x51	0x0051	# LATIN CAPITAL LETTER Q
+0x52	0x0052	# LATIN CAPITAL LETTER R
+0x53	0x0053	# LATIN CAPITAL LETTER S
+0x54	0x0054	# LATIN CAPITAL LETTER T
+0x55	0x0055	# LATIN CAPITAL LETTER U
+0x56	0x0056	# LATIN CAPITAL LETTER V
+0x57	0x0057	# LATIN CAPITAL LETTER W
+0x58	0x0058	# LATIN CAPITAL LETTER X
+0x59	0x0059	# LATIN CAPITAL LETTER Y
+0x5A	0x005A	# LATIN CAPITAL LETTER Z
+0x5B	0x005B	# LEFT SQUARE BRACKET
+0x5C	0x20A9	# WON SIGN
+0x5D	0x005D	# RIGHT SQUARE BRACKET
+0x5E	0x005E	# CIRCUMFLEX ACCENT
+0x5F	0x005F	# LOW LINE
+0x60	0x0060	# GRAVE ACCENT
+0x61	0x0061	# LATIN SMALL LETTER A
+0x62	0x0062	# LATIN SMALL LETTER B
+0x63	0x0063	# LATIN SMALL LETTER C
+0x64	0x0064	# LATIN SMALL LETTER D
+0x65	0x0065	# LATIN SMALL LETTER E
+0x66	0x0066	# LATIN SMALL LETTER F
+0x67	0x0067	# LATIN SMALL LETTER G
+0x68	0x0068	# LATIN SMALL LETTER H
+0x69	0x0069	# LATIN SMALL LETTER I
+0x6A	0x006A	# LATIN SMALL LETTER J
+0x6B	0x006B	# LATIN SMALL LETTER K
+0x6C	0x006C	# LATIN SMALL LETTER L
+0x6D	0x006D	# LATIN SMALL LETTER M
+0x6E	0x006E	# LATIN SMALL LETTER N
+0x6F	0x006F	# LATIN SMALL LETTER O
+0x70	0x0070	# LATIN SMALL LETTER P
+0x71	0x0071	# LATIN SMALL LETTER Q
+0x72	0x0072	# LATIN SMALL LETTER R
+0x73	0x0073	# LATIN SMALL LETTER S
+0x74	0x0074	# LATIN SMALL LETTER T
+0x75	0x0075	# LATIN SMALL LETTER U
+0x76	0x0076	# LATIN SMALL LETTER V
+0x77	0x0077	# LATIN SMALL LETTER W
+0x78	0x0078	# LATIN SMALL LETTER X
+0x79	0x0079	# LATIN SMALL LETTER Y
+0x7A	0x007A	# LATIN SMALL LETTER Z
+0x7B	0x007B	# LEFT CURLY BRACKET
+0x7C	0x007C	# VERTICAL LINE
+0x7D	0x007D	# RIGHT CURLY BRACKET
+0x7E	0x007E	# TILDE
+0x7F	0x007F	# DELETE (DEL)
diff --git a/externals/figlet/fonts/646-no.flc b/externals/figlet/fonts/646-no.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/646-no.flc
@@ -0,0 +1,156 @@
+#
+#	Name:             NS_4551-1 to Unicode
+#	Unicode version:  2.0
+#	Table version:    0.1
+#	Table format:     Format A
+#	Date:             0097-01-24
+#	Authors:          John Cowan <cowan@ccil.org> (conversion)
+#                     Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+#	General notes:
+#
+#	This table contains data obtained from RFC 1345 on how
+#       NS_4551-1 characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the NS_4551-1 code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in NS_4551-1 order
+#
+#	Any comments or problems, contact <cowan@ccil.org>
+#
+#   &rem source: ECMA registry
+#   &alias iso-ir-60
+#   &alias ISO646-NO
+#   &g0esc x2860 &g1esc x2960 &g2esc x2a60 &g3esc x2b60
+#   &alias no
+0x00	0x0000	# NULL (NUL)
+0x01	0x0001	# START OF HEADING (SOH)
+0x02	0x0002	# START OF TEXT (STX)
+0x03	0x0003	# END OF TEXT (ETX)
+0x04	0x0004	# END OF TRANSMISSION (EOT)
+0x05	0x0005	# ENQUIRY (ENQ)
+0x06	0x0006	# ACKNOWLEDGE (ACK)
+0x07	0x0007	# BELL (BEL)
+0x08	0x0008	# BACKSPACE (BS)
+0x09	0x0009	# CHARACTER TABULATION (HT)
+0x0A	0x000A	# LINE FEED (LF)
+0x0B	0x000B	# LINE TABULATION (VT)
+0x0C	0x000C	# FORM FEED (FF)
+0x0D	0x000D	# CARRIAGE RETURN (CR)
+0x0E	0x000E	# SHIFT OUT (SO)
+0x0F	0x000F	# SHIFT IN (SI)
+0x10	0x0010	# DATALINK ESCAPE (DLE)
+0x11	0x0011	# DEVICE CONTROL ONE (DC1)
+0x12	0x0012	# DEVICE CONTROL TWO (DC2)
+0x13	0x0013	# DEVICE CONTROL THREE (DC3)
+0x14	0x0014	# DEVICE CONTROL FOUR (DC4)
+0x15	0x0015	# NEGATIVE ACKNOWLEDGE (NAK)
+0x16	0x0016	# SYNCRONOUS IDLE (SYN)
+0x17	0x0017	# END OF TRANSMISSION BLOCK (ETB)
+0x18	0x0018	# CANCEL (CAN)
+0x19	0x0019	# END OF MEDIUM (EM)
+0x1A	0x001A	# SUBSTITUTE (SUB)
+0x1B	0x001B	# ESCAPE (ESC)
+0x1C	0x001C	# FILE SEPARATOR (IS4)
+0x1D	0x001D	# GROUP SEPARATOR (IS3)
+0x1E	0x001E	# RECORD SEPARATOR (IS2)
+0x1F	0x001F	# UNIT SEPARATOR (IS1)
+0x20	0x0020	# SPACE
+0x21	0x0021	# EXCLAMATION MARK
+0x22	0x0022	# QUOTATION MARK
+0x23	0x0023	# NUMBER SIGN
+0x24	0x0024	# DOLLAR SIGN
+0x25	0x0025	# PERCENT SIGN
+0x26	0x0026	# AMPERSAND
+0x27	0x0027	# APOSTROPHE
+0x28	0x0028	# LEFT PARENTHESIS
+0x29	0x0029	# RIGHT PARENTHESIS
+0x2A	0x002A	# ASTERISK
+0x2B	0x002B	# PLUS SIGN
+0x2C	0x002C	# COMMA
+0x2D	0x002D	# HYPHEN-MINUS
+0x2E	0x002E	# FULL STOP
+0x2F	0x002F	# SOLIDUS
+0x30	0x0030	# DIGIT ZERO
+0x31	0x0031	# DIGIT ONE
+0x32	0x0032	# DIGIT TWO
+0x33	0x0033	# DIGIT THREE
+0x34	0x0034	# DIGIT FOUR
+0x35	0x0035	# DIGIT FIVE
+0x36	0x0036	# DIGIT SIX
+0x37	0x0037	# DIGIT SEVEN
+0x38	0x0038	# DIGIT EIGHT
+0x39	0x0039	# DIGIT NINE
+0x3A	0x003A	# COLON
+0x3B	0x003B	# SEMICOLON
+0x3C	0x003C	# LESS-THAN SIGN
+0x3D	0x003D	# EQUALS SIGN
+0x3E	0x003E	# GREATER-THAN SIGN
+0x3F	0x003F	# QUESTION MARK
+0x40	0x0040	# COMMERCIAL AT
+0x41	0x0041	# LATIN CAPITAL LETTER A
+0x42	0x0042	# LATIN CAPITAL LETTER B
+0x43	0x0043	# LATIN CAPITAL LETTER C
+0x44	0x0044	# LATIN CAPITAL LETTER D
+0x45	0x0045	# LATIN CAPITAL LETTER E
+0x46	0x0046	# LATIN CAPITAL LETTER F
+0x47	0x0047	# LATIN CAPITAL LETTER G
+0x48	0x0048	# LATIN CAPITAL LETTER H
+0x49	0x0049	# LATIN CAPITAL LETTER I
+0x4A	0x004A	# LATIN CAPITAL LETTER J
+0x4B	0x004B	# LATIN CAPITAL LETTER K
+0x4C	0x004C	# LATIN CAPITAL LETTER L
+0x4D	0x004D	# LATIN CAPITAL LETTER M
+0x4E	0x004E	# LATIN CAPITAL LETTER N
+0x4F	0x004F	# LATIN CAPITAL LETTER O
+0x50	0x0050	# LATIN CAPITAL LETTER P
+0x51	0x0051	# LATIN CAPITAL LETTER Q
+0x52	0x0052	# LATIN CAPITAL LETTER R
+0x53	0x0053	# LATIN CAPITAL LETTER S
+0x54	0x0054	# LATIN CAPITAL LETTER T
+0x55	0x0055	# LATIN CAPITAL LETTER U
+0x56	0x0056	# LATIN CAPITAL LETTER V
+0x57	0x0057	# LATIN CAPITAL LETTER W
+0x58	0x0058	# LATIN CAPITAL LETTER X
+0x59	0x0059	# LATIN CAPITAL LETTER Y
+0x5A	0x005A	# LATIN CAPITAL LETTER Z
+0x5B	0x00C6	# LATIN CAPITAL LETTER AE
+0x5C	0x00D8	# LATIN CAPITAL LETTER O WITH STROKE
+0x5D	0x00C5	# LATIN CAPITAL LETTER A WITH RING ABOVE
+0x5E	0x005E	# CIRCUMFLEX ACCENT
+0x5F	0x005F	# LOW LINE
+0x60	0x0060	# GRAVE ACCENT
+0x61	0x0061	# LATIN SMALL LETTER A
+0x62	0x0062	# LATIN SMALL LETTER B
+0x63	0x0063	# LATIN SMALL LETTER C
+0x64	0x0064	# LATIN SMALL LETTER D
+0x65	0x0065	# LATIN SMALL LETTER E
+0x66	0x0066	# LATIN SMALL LETTER F
+0x67	0x0067	# LATIN SMALL LETTER G
+0x68	0x0068	# LATIN SMALL LETTER H
+0x69	0x0069	# LATIN SMALL LETTER I
+0x6A	0x006A	# LATIN SMALL LETTER J
+0x6B	0x006B	# LATIN SMALL LETTER K
+0x6C	0x006C	# LATIN SMALL LETTER L
+0x6D	0x006D	# LATIN SMALL LETTER M
+0x6E	0x006E	# LATIN SMALL LETTER N
+0x6F	0x006F	# LATIN SMALL LETTER O
+0x70	0x0070	# LATIN SMALL LETTER P
+0x71	0x0071	# LATIN SMALL LETTER Q
+0x72	0x0072	# LATIN SMALL LETTER R
+0x73	0x0073	# LATIN SMALL LETTER S
+0x74	0x0074	# LATIN SMALL LETTER T
+0x75	0x0075	# LATIN SMALL LETTER U
+0x76	0x0076	# LATIN SMALL LETTER V
+0x77	0x0077	# LATIN SMALL LETTER W
+0x78	0x0078	# LATIN SMALL LETTER X
+0x79	0x0079	# LATIN SMALL LETTER Y
+0x7A	0x007A	# LATIN SMALL LETTER Z
+0x7B	0x00E6	# LATIN SMALL LETTER AE
+0x7C	0x00F8	# LATIN SMALL LETTER O WITH STROKE
+0x7D	0x00E5	# LATIN SMALL LETTER A WITH RING ABOVE
+0x7E	0x203E	# OVERLINE
+0x7F	0x007F	# DELETE (DEL)
diff --git a/externals/figlet/fonts/646-no2.flc b/externals/figlet/fonts/646-no2.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/646-no2.flc
@@ -0,0 +1,156 @@
+#
+#	Name:             NS_4551-2 to Unicode
+#	Unicode version:  2.0
+#	Table version:    0.1
+#	Table format:     Format A
+#	Date:             0097-01-24
+#	Authors:          John Cowan <cowan@ccil.org> (conversion)
+#                     Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+#	General notes:
+#
+#	This table contains data obtained from RFC 1345 on how
+#       NS_4551-2 characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the NS_4551-2 code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in NS_4551-2 order
+#
+#	Any comments or problems, contact <cowan@ccil.org>
+#
+#   &rem source: ECMA registry
+#   &alias ISO646-NO2
+#   &alias iso-ir-61
+#   &g0esc x2861 &g1esc x2961 &g2esc x2a61 &g3esc x2b61
+#   &alias no2
+0x00	0x0000	# NULL (NUL)
+0x01	0x0001	# START OF HEADING (SOH)
+0x02	0x0002	# START OF TEXT (STX)
+0x03	0x0003	# END OF TEXT (ETX)
+0x04	0x0004	# END OF TRANSMISSION (EOT)
+0x05	0x0005	# ENQUIRY (ENQ)
+0x06	0x0006	# ACKNOWLEDGE (ACK)
+0x07	0x0007	# BELL (BEL)
+0x08	0x0008	# BACKSPACE (BS)
+0x09	0x0009	# CHARACTER TABULATION (HT)
+0x0A	0x000A	# LINE FEED (LF)
+0x0B	0x000B	# LINE TABULATION (VT)
+0x0C	0x000C	# FORM FEED (FF)
+0x0D	0x000D	# CARRIAGE RETURN (CR)
+0x0E	0x000E	# SHIFT OUT (SO)
+0x0F	0x000F	# SHIFT IN (SI)
+0x10	0x0010	# DATALINK ESCAPE (DLE)
+0x11	0x0011	# DEVICE CONTROL ONE (DC1)
+0x12	0x0012	# DEVICE CONTROL TWO (DC2)
+0x13	0x0013	# DEVICE CONTROL THREE (DC3)
+0x14	0x0014	# DEVICE CONTROL FOUR (DC4)
+0x15	0x0015	# NEGATIVE ACKNOWLEDGE (NAK)
+0x16	0x0016	# SYNCRONOUS IDLE (SYN)
+0x17	0x0017	# END OF TRANSMISSION BLOCK (ETB)
+0x18	0x0018	# CANCEL (CAN)
+0x19	0x0019	# END OF MEDIUM (EM)
+0x1A	0x001A	# SUBSTITUTE (SUB)
+0x1B	0x001B	# ESCAPE (ESC)
+0x1C	0x001C	# FILE SEPARATOR (IS4)
+0x1D	0x001D	# GROUP SEPARATOR (IS3)
+0x1E	0x001E	# RECORD SEPARATOR (IS2)
+0x1F	0x001F	# UNIT SEPARATOR (IS1)
+0x20	0x0020	# SPACE
+0x21	0x0021	# EXCLAMATION MARK
+0x22	0x0022	# QUOTATION MARK
+0x23	0x00B6	# PILCROW SIGN
+0x24	0x0024	# DOLLAR SIGN
+0x25	0x0025	# PERCENT SIGN
+0x26	0x0026	# AMPERSAND
+0x27	0x0027	# APOSTROPHE
+0x28	0x0028	# LEFT PARENTHESIS
+0x29	0x0029	# RIGHT PARENTHESIS
+0x2A	0x002A	# ASTERISK
+0x2B	0x002B	# PLUS SIGN
+0x2C	0x002C	# COMMA
+0x2D	0x002D	# HYPHEN-MINUS
+0x2E	0x002E	# FULL STOP
+0x2F	0x002F	# SOLIDUS
+0x30	0x0030	# DIGIT ZERO
+0x31	0x0031	# DIGIT ONE
+0x32	0x0032	# DIGIT TWO
+0x33	0x0033	# DIGIT THREE
+0x34	0x0034	# DIGIT FOUR
+0x35	0x0035	# DIGIT FIVE
+0x36	0x0036	# DIGIT SIX
+0x37	0x0037	# DIGIT SEVEN
+0x38	0x0038	# DIGIT EIGHT
+0x39	0x0039	# DIGIT NINE
+0x3A	0x003A	# COLON
+0x3B	0x003B	# SEMICOLON
+0x3C	0x003C	# LESS-THAN SIGN
+0x3D	0x003D	# EQUALS SIGN
+0x3E	0x003E	# GREATER-THAN SIGN
+0x3F	0x003F	# QUESTION MARK
+0x40	0x0040	# COMMERCIAL AT
+0x41	0x0041	# LATIN CAPITAL LETTER A
+0x42	0x0042	# LATIN CAPITAL LETTER B
+0x43	0x0043	# LATIN CAPITAL LETTER C
+0x44	0x0044	# LATIN CAPITAL LETTER D
+0x45	0x0045	# LATIN CAPITAL LETTER E
+0x46	0x0046	# LATIN CAPITAL LETTER F
+0x47	0x0047	# LATIN CAPITAL LETTER G
+0x48	0x0048	# LATIN CAPITAL LETTER H
+0x49	0x0049	# LATIN CAPITAL LETTER I
+0x4A	0x004A	# LATIN CAPITAL LETTER J
+0x4B	0x004B	# LATIN CAPITAL LETTER K
+0x4C	0x004C	# LATIN CAPITAL LETTER L
+0x4D	0x004D	# LATIN CAPITAL LETTER M
+0x4E	0x004E	# LATIN CAPITAL LETTER N
+0x4F	0x004F	# LATIN CAPITAL LETTER O
+0x50	0x0050	# LATIN CAPITAL LETTER P
+0x51	0x0051	# LATIN CAPITAL LETTER Q
+0x52	0x0052	# LATIN CAPITAL LETTER R
+0x53	0x0053	# LATIN CAPITAL LETTER S
+0x54	0x0054	# LATIN CAPITAL LETTER T
+0x55	0x0055	# LATIN CAPITAL LETTER U
+0x56	0x0056	# LATIN CAPITAL LETTER V
+0x57	0x0057	# LATIN CAPITAL LETTER W
+0x58	0x0058	# LATIN CAPITAL LETTER X
+0x59	0x0059	# LATIN CAPITAL LETTER Y
+0x5A	0x005A	# LATIN CAPITAL LETTER Z
+0x5B	0x00C6	# LATIN CAPITAL LETTER AE
+0x5C	0x00D8	# LATIN CAPITAL LETTER O WITH STROKE
+0x5D	0x00C5	# LATIN CAPITAL LETTER A WITH RING ABOVE
+0x5E	0x005E	# CIRCUMFLEX ACCENT
+0x5F	0x005F	# LOW LINE
+0x60	0x0060	# GRAVE ACCENT
+0x61	0x0061	# LATIN SMALL LETTER A
+0x62	0x0062	# LATIN SMALL LETTER B
+0x63	0x0063	# LATIN SMALL LETTER C
+0x64	0x0064	# LATIN SMALL LETTER D
+0x65	0x0065	# LATIN SMALL LETTER E
+0x66	0x0066	# LATIN SMALL LETTER F
+0x67	0x0067	# LATIN SMALL LETTER G
+0x68	0x0068	# LATIN SMALL LETTER H
+0x69	0x0069	# LATIN SMALL LETTER I
+0x6A	0x006A	# LATIN SMALL LETTER J
+0x6B	0x006B	# LATIN SMALL LETTER K
+0x6C	0x006C	# LATIN SMALL LETTER L
+0x6D	0x006D	# LATIN SMALL LETTER M
+0x6E	0x006E	# LATIN SMALL LETTER N
+0x6F	0x006F	# LATIN SMALL LETTER O
+0x70	0x0070	# LATIN SMALL LETTER P
+0x71	0x0071	# LATIN SMALL LETTER Q
+0x72	0x0072	# LATIN SMALL LETTER R
+0x73	0x0073	# LATIN SMALL LETTER S
+0x74	0x0074	# LATIN SMALL LETTER T
+0x75	0x0075	# LATIN SMALL LETTER U
+0x76	0x0076	# LATIN SMALL LETTER V
+0x77	0x0077	# LATIN SMALL LETTER W
+0x78	0x0078	# LATIN SMALL LETTER X
+0x79	0x0079	# LATIN SMALL LETTER Y
+0x7A	0x007A	# LATIN SMALL LETTER Z
+0x7B	0x00E6	# LATIN SMALL LETTER AE
+0x7C	0x00F8	# LATIN SMALL LETTER O WITH STROKE
+0x7D	0x00E5	# LATIN SMALL LETTER A WITH RING ABOVE
+0x7E	0x007C	# VERTICAL LINE
+0x7F	0x007F	# DELETE (DEL)
diff --git a/externals/figlet/fonts/646-pt.flc b/externals/figlet/fonts/646-pt.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/646-pt.flc
@@ -0,0 +1,155 @@
+#
+#	Name:             PT to Unicode
+#	Unicode version:  2.0
+#	Table version:    0.1
+#	Table format:     Format A
+#	Date:             0097-01-24
+#	Authors:          John Cowan <cowan@ccil.org> (conversion)
+#                     Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+#	General notes:
+#
+#	This table contains data obtained from RFC 1345 on how
+#       PT characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the PT code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in PT order
+#
+#	Any comments or problems, contact <cowan@ccil.org>
+#
+#   &rem source: ECMA registry
+#   &alias iso-ir-16
+#   &alias ISO646-PT
+#   &g0esc x284c &g1esc x294c &g2esc x2a4c &g3esc x2b4c
+0x00	0x0000	# NULL (NUL)
+0x01	0x0001	# START OF HEADING (SOH)
+0x02	0x0002	# START OF TEXT (STX)
+0x03	0x0003	# END OF TEXT (ETX)
+0x04	0x0004	# END OF TRANSMISSION (EOT)
+0x05	0x0005	# ENQUIRY (ENQ)
+0x06	0x0006	# ACKNOWLEDGE (ACK)
+0x07	0x0007	# BELL (BEL)
+0x08	0x0008	# BACKSPACE (BS)
+0x09	0x0009	# CHARACTER TABULATION (HT)
+0x0A	0x000A	# LINE FEED (LF)
+0x0B	0x000B	# LINE TABULATION (VT)
+0x0C	0x000C	# FORM FEED (FF)
+0x0D	0x000D	# CARRIAGE RETURN (CR)
+0x0E	0x000E	# SHIFT OUT (SO)
+0x0F	0x000F	# SHIFT IN (SI)
+0x10	0x0010	# DATALINK ESCAPE (DLE)
+0x11	0x0011	# DEVICE CONTROL ONE (DC1)
+0x12	0x0012	# DEVICE CONTROL TWO (DC2)
+0x13	0x0013	# DEVICE CONTROL THREE (DC3)
+0x14	0x0014	# DEVICE CONTROL FOUR (DC4)
+0x15	0x0015	# NEGATIVE ACKNOWLEDGE (NAK)
+0x16	0x0016	# SYNCRONOUS IDLE (SYN)
+0x17	0x0017	# END OF TRANSMISSION BLOCK (ETB)
+0x18	0x0018	# CANCEL (CAN)
+0x19	0x0019	# END OF MEDIUM (EM)
+0x1A	0x001A	# SUBSTITUTE (SUB)
+0x1B	0x001B	# ESCAPE (ESC)
+0x1C	0x001C	# FILE SEPARATOR (IS4)
+0x1D	0x001D	# GROUP SEPARATOR (IS3)
+0x1E	0x001E	# RECORD SEPARATOR (IS2)
+0x1F	0x001F	# UNIT SEPARATOR (IS1)
+0x20	0x0020	# SPACE
+0x21	0x0021	# EXCLAMATION MARK
+0x22	0x0022	# QUOTATION MARK
+0x23	0x0023	# NUMBER SIGN
+0x24	0x0024	# DOLLAR SIGN
+0x25	0x0025	# PERCENT SIGN
+0x26	0x0026	# AMPERSAND
+0x27	0x0027	# APOSTROPHE
+0x28	0x0028	# LEFT PARENTHESIS
+0x29	0x0029	# RIGHT PARENTHESIS
+0x2A	0x002A	# ASTERISK
+0x2B	0x002B	# PLUS SIGN
+0x2C	0x002C	# COMMA
+0x2D	0x002D	# HYPHEN-MINUS
+0x2E	0x002E	# FULL STOP
+0x2F	0x002F	# SOLIDUS
+0x30	0x0030	# DIGIT ZERO
+0x31	0x0031	# DIGIT ONE
+0x32	0x0032	# DIGIT TWO
+0x33	0x0033	# DIGIT THREE
+0x34	0x0034	# DIGIT FOUR
+0x35	0x0035	# DIGIT FIVE
+0x36	0x0036	# DIGIT SIX
+0x37	0x0037	# DIGIT SEVEN
+0x38	0x0038	# DIGIT EIGHT
+0x39	0x0039	# DIGIT NINE
+0x3A	0x003A	# COLON
+0x3B	0x003B	# SEMICOLON
+0x3C	0x003C	# LESS-THAN SIGN
+0x3D	0x003D	# EQUALS SIGN
+0x3E	0x003E	# GREATER-THAN SIGN
+0x3F	0x003F	# QUESTION MARK
+0x40	0x00A7	# SECTION SIGN
+0x41	0x0041	# LATIN CAPITAL LETTER A
+0x42	0x0042	# LATIN CAPITAL LETTER B
+0x43	0x0043	# LATIN CAPITAL LETTER C
+0x44	0x0044	# LATIN CAPITAL LETTER D
+0x45	0x0045	# LATIN CAPITAL LETTER E
+0x46	0x0046	# LATIN CAPITAL LETTER F
+0x47	0x0047	# LATIN CAPITAL LETTER G
+0x48	0x0048	# LATIN CAPITAL LETTER H
+0x49	0x0049	# LATIN CAPITAL LETTER I
+0x4A	0x004A	# LATIN CAPITAL LETTER J
+0x4B	0x004B	# LATIN CAPITAL LETTER K
+0x4C	0x004C	# LATIN CAPITAL LETTER L
+0x4D	0x004D	# LATIN CAPITAL LETTER M
+0x4E	0x004E	# LATIN CAPITAL LETTER N
+0x4F	0x004F	# LATIN CAPITAL LETTER O
+0x50	0x0050	# LATIN CAPITAL LETTER P
+0x51	0x0051	# LATIN CAPITAL LETTER Q
+0x52	0x0052	# LATIN CAPITAL LETTER R
+0x53	0x0053	# LATIN CAPITAL LETTER S
+0x54	0x0054	# LATIN CAPITAL LETTER T
+0x55	0x0055	# LATIN CAPITAL LETTER U
+0x56	0x0056	# LATIN CAPITAL LETTER V
+0x57	0x0057	# LATIN CAPITAL LETTER W
+0x58	0x0058	# LATIN CAPITAL LETTER X
+0x59	0x0059	# LATIN CAPITAL LETTER Y
+0x5A	0x005A	# LATIN CAPITAL LETTER Z
+0x5B	0x00C3	# LATIN CAPITAL LETTER A WITH TILDE
+0x5C	0x00C7	# LATIN CAPITAL LETTER C WITH CEDILLA
+0x5D	0x00D5	# LATIN CAPITAL LETTER O WITH TILDE
+0x5E	0x005E	# CIRCUMFLEX ACCENT
+0x5F	0x005F	# LOW LINE
+0x60	0x0060	# GRAVE ACCENT
+0x61	0x0061	# LATIN SMALL LETTER A
+0x62	0x0062	# LATIN SMALL LETTER B
+0x63	0x0063	# LATIN SMALL LETTER C
+0x64	0x0064	# LATIN SMALL LETTER D
+0x65	0x0065	# LATIN SMALL LETTER E
+0x66	0x0066	# LATIN SMALL LETTER F
+0x67	0x0067	# LATIN SMALL LETTER G
+0x68	0x0068	# LATIN SMALL LETTER H
+0x69	0x0069	# LATIN SMALL LETTER I
+0x6A	0x006A	# LATIN SMALL LETTER J
+0x6B	0x006B	# LATIN SMALL LETTER K
+0x6C	0x006C	# LATIN SMALL LETTER L
+0x6D	0x006D	# LATIN SMALL LETTER M
+0x6E	0x006E	# LATIN SMALL LETTER N
+0x6F	0x006F	# LATIN SMALL LETTER O
+0x70	0x0070	# LATIN SMALL LETTER P
+0x71	0x0071	# LATIN SMALL LETTER Q
+0x72	0x0072	# LATIN SMALL LETTER R
+0x73	0x0073	# LATIN SMALL LETTER S
+0x74	0x0074	# LATIN SMALL LETTER T
+0x75	0x0075	# LATIN SMALL LETTER U
+0x76	0x0076	# LATIN SMALL LETTER V
+0x77	0x0077	# LATIN SMALL LETTER W
+0x78	0x0078	# LATIN SMALL LETTER X
+0x79	0x0079	# LATIN SMALL LETTER Y
+0x7A	0x007A	# LATIN SMALL LETTER Z
+0x7B	0x00E3	# LATIN SMALL LETTER A WITH TILDE
+0x7C	0x00E7	# LATIN SMALL LETTER C WITH CEDILLA
+0x7D	0x00F5	# LATIN SMALL LETTER O WITH TILDE
+0x7E	0x00B0	# DEGREE SIGN
+0x7F	0x007F	# DELETE (DEL)
diff --git a/externals/figlet/fonts/646-pt2.flc b/externals/figlet/fonts/646-pt2.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/646-pt2.flc
@@ -0,0 +1,155 @@
+#
+#	Name:             PT2 to Unicode
+#	Unicode version:  2.0
+#	Table version:    0.1
+#	Table format:     Format A
+#	Date:             0097-01-24
+#	Authors:          John Cowan <cowan@ccil.org> (conversion)
+#                     Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+#	General notes:
+#
+#	This table contains data obtained from RFC 1345 on how
+#       PT2 characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the PT2 code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in PT2 order
+#
+#	Any comments or problems, contact <cowan@ccil.org>
+#
+#   &rem source: ECMA registry
+#   &alias iso-ir-84
+#   &alias ISO646-PT2
+#   &g0esc x2867 &g1esc x2967 &g2esc x2a67 &g3esc x2b67
+0x00	0x0000	# NULL (NUL)
+0x01	0x0001	# START OF HEADING (SOH)
+0x02	0x0002	# START OF TEXT (STX)
+0x03	0x0003	# END OF TEXT (ETX)
+0x04	0x0004	# END OF TRANSMISSION (EOT)
+0x05	0x0005	# ENQUIRY (ENQ)
+0x06	0x0006	# ACKNOWLEDGE (ACK)
+0x07	0x0007	# BELL (BEL)
+0x08	0x0008	# BACKSPACE (BS)
+0x09	0x0009	# CHARACTER TABULATION (HT)
+0x0A	0x000A	# LINE FEED (LF)
+0x0B	0x000B	# LINE TABULATION (VT)
+0x0C	0x000C	# FORM FEED (FF)
+0x0D	0x000D	# CARRIAGE RETURN (CR)
+0x0E	0x000E	# SHIFT OUT (SO)
+0x0F	0x000F	# SHIFT IN (SI)
+0x10	0x0010	# DATALINK ESCAPE (DLE)
+0x11	0x0011	# DEVICE CONTROL ONE (DC1)
+0x12	0x0012	# DEVICE CONTROL TWO (DC2)
+0x13	0x0013	# DEVICE CONTROL THREE (DC3)
+0x14	0x0014	# DEVICE CONTROL FOUR (DC4)
+0x15	0x0015	# NEGATIVE ACKNOWLEDGE (NAK)
+0x16	0x0016	# SYNCRONOUS IDLE (SYN)
+0x17	0x0017	# END OF TRANSMISSION BLOCK (ETB)
+0x18	0x0018	# CANCEL (CAN)
+0x19	0x0019	# END OF MEDIUM (EM)
+0x1A	0x001A	# SUBSTITUTE (SUB)
+0x1B	0x001B	# ESCAPE (ESC)
+0x1C	0x001C	# FILE SEPARATOR (IS4)
+0x1D	0x001D	# GROUP SEPARATOR (IS3)
+0x1E	0x001E	# RECORD SEPARATOR (IS2)
+0x1F	0x001F	# UNIT SEPARATOR (IS1)
+0x20	0x0020	# SPACE
+0x21	0x0021	# EXCLAMATION MARK
+0x22	0x0022	# QUOTATION MARK
+0x23	0x0023	# NUMBER SIGN
+0x24	0x0024	# DOLLAR SIGN
+0x25	0x0025	# PERCENT SIGN
+0x26	0x0026	# AMPERSAND
+0x27	0x0027	# APOSTROPHE
+0x28	0x0028	# LEFT PARENTHESIS
+0x29	0x0029	# RIGHT PARENTHESIS
+0x2A	0x002A	# ASTERISK
+0x2B	0x002B	# PLUS SIGN
+0x2C	0x002C	# COMMA
+0x2D	0x002D	# HYPHEN-MINUS
+0x2E	0x002E	# FULL STOP
+0x2F	0x002F	# SOLIDUS
+0x30	0x0030	# DIGIT ZERO
+0x31	0x0031	# DIGIT ONE
+0x32	0x0032	# DIGIT TWO
+0x33	0x0033	# DIGIT THREE
+0x34	0x0034	# DIGIT FOUR
+0x35	0x0035	# DIGIT FIVE
+0x36	0x0036	# DIGIT SIX
+0x37	0x0037	# DIGIT SEVEN
+0x38	0x0038	# DIGIT EIGHT
+0x39	0x0039	# DIGIT NINE
+0x3A	0x003A	# COLON
+0x3B	0x003B	# SEMICOLON
+0x3C	0x003C	# LESS-THAN SIGN
+0x3D	0x003D	# EQUALS SIGN
+0x3E	0x003E	# GREATER-THAN SIGN
+0x3F	0x003F	# QUESTION MARK
+0x40	0x00B4	# ACUTE ACCENT
+0x41	0x0041	# LATIN CAPITAL LETTER A
+0x42	0x0042	# LATIN CAPITAL LETTER B
+0x43	0x0043	# LATIN CAPITAL LETTER C
+0x44	0x0044	# LATIN CAPITAL LETTER D
+0x45	0x0045	# LATIN CAPITAL LETTER E
+0x46	0x0046	# LATIN CAPITAL LETTER F
+0x47	0x0047	# LATIN CAPITAL LETTER G
+0x48	0x0048	# LATIN CAPITAL LETTER H
+0x49	0x0049	# LATIN CAPITAL LETTER I
+0x4A	0x004A	# LATIN CAPITAL LETTER J
+0x4B	0x004B	# LATIN CAPITAL LETTER K
+0x4C	0x004C	# LATIN CAPITAL LETTER L
+0x4D	0x004D	# LATIN CAPITAL LETTER M
+0x4E	0x004E	# LATIN CAPITAL LETTER N
+0x4F	0x004F	# LATIN CAPITAL LETTER O
+0x50	0x0050	# LATIN CAPITAL LETTER P
+0x51	0x0051	# LATIN CAPITAL LETTER Q
+0x52	0x0052	# LATIN CAPITAL LETTER R
+0x53	0x0053	# LATIN CAPITAL LETTER S
+0x54	0x0054	# LATIN CAPITAL LETTER T
+0x55	0x0055	# LATIN CAPITAL LETTER U
+0x56	0x0056	# LATIN CAPITAL LETTER V
+0x57	0x0057	# LATIN CAPITAL LETTER W
+0x58	0x0058	# LATIN CAPITAL LETTER X
+0x59	0x0059	# LATIN CAPITAL LETTER Y
+0x5A	0x005A	# LATIN CAPITAL LETTER Z
+0x5B	0x00C3	# LATIN CAPITAL LETTER A WITH TILDE
+0x5C	0x00C7	# LATIN CAPITAL LETTER C WITH CEDILLA
+0x5D	0x00D5	# LATIN CAPITAL LETTER O WITH TILDE
+0x5E	0x005E	# CIRCUMFLEX ACCENT
+0x5F	0x005F	# LOW LINE
+0x60	0x0060	# GRAVE ACCENT
+0x61	0x0061	# LATIN SMALL LETTER A
+0x62	0x0062	# LATIN SMALL LETTER B
+0x63	0x0063	# LATIN SMALL LETTER C
+0x64	0x0064	# LATIN SMALL LETTER D
+0x65	0x0065	# LATIN SMALL LETTER E
+0x66	0x0066	# LATIN SMALL LETTER F
+0x67	0x0067	# LATIN SMALL LETTER G
+0x68	0x0068	# LATIN SMALL LETTER H
+0x69	0x0069	# LATIN SMALL LETTER I
+0x6A	0x006A	# LATIN SMALL LETTER J
+0x6B	0x006B	# LATIN SMALL LETTER K
+0x6C	0x006C	# LATIN SMALL LETTER L
+0x6D	0x006D	# LATIN SMALL LETTER M
+0x6E	0x006E	# LATIN SMALL LETTER N
+0x6F	0x006F	# LATIN SMALL LETTER O
+0x70	0x0070	# LATIN SMALL LETTER P
+0x71	0x0071	# LATIN SMALL LETTER Q
+0x72	0x0072	# LATIN SMALL LETTER R
+0x73	0x0073	# LATIN SMALL LETTER S
+0x74	0x0074	# LATIN SMALL LETTER T
+0x75	0x0075	# LATIN SMALL LETTER U
+0x76	0x0076	# LATIN SMALL LETTER V
+0x77	0x0077	# LATIN SMALL LETTER W
+0x78	0x0078	# LATIN SMALL LETTER X
+0x79	0x0079	# LATIN SMALL LETTER Y
+0x7A	0x007A	# LATIN SMALL LETTER Z
+0x7B	0x00E3	# LATIN SMALL LETTER A WITH TILDE
+0x7C	0x00E7	# LATIN SMALL LETTER C WITH CEDILLA
+0x7D	0x00F5	# LATIN SMALL LETTER O WITH TILDE
+0x7E	0x203E	# OVERLINE
+0x7F	0x007F	# DELETE (DEL)
diff --git a/externals/figlet/fonts/646-se.flc b/externals/figlet/fonts/646-se.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/646-se.flc
@@ -0,0 +1,158 @@
+#
+#	Name:             SEN_850200_B to Unicode
+#	Unicode version:  2.0
+#	Table version:    0.1
+#	Table format:     Format A
+#	Date:             0097-01-24
+#	Authors:          John Cowan <cowan@ccil.org> (conversion)
+#                     Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+#	General notes:
+#
+#	This table contains data obtained from RFC 1345 on how
+#       SEN_850200_B characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the SEN_850200_B code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in SEN_850200_B order
+#
+#	Any comments or problems, contact <cowan@ccil.org>
+#
+#   &rem source: ECMA registry
+#   &alias iso-ir-10
+#   &alias FI
+#   &alias ISO646-FI
+#   &alias ISO646-SE
+#   &alias se
+#   &g0esc x2847 &g1esc x2947 &g2esc x2a47 &g3esc x2b47
+0x00	0x0000	# NULL (NUL)
+0x01	0x0001	# START OF HEADING (SOH)
+0x02	0x0002	# START OF TEXT (STX)
+0x03	0x0003	# END OF TEXT (ETX)
+0x04	0x0004	# END OF TRANSMISSION (EOT)
+0x05	0x0005	# ENQUIRY (ENQ)
+0x06	0x0006	# ACKNOWLEDGE (ACK)
+0x07	0x0007	# BELL (BEL)
+0x08	0x0008	# BACKSPACE (BS)
+0x09	0x0009	# CHARACTER TABULATION (HT)
+0x0A	0x000A	# LINE FEED (LF)
+0x0B	0x000B	# LINE TABULATION (VT)
+0x0C	0x000C	# FORM FEED (FF)
+0x0D	0x000D	# CARRIAGE RETURN (CR)
+0x0E	0x000E	# SHIFT OUT (SO)
+0x0F	0x000F	# SHIFT IN (SI)
+0x10	0x0010	# DATALINK ESCAPE (DLE)
+0x11	0x0011	# DEVICE CONTROL ONE (DC1)
+0x12	0x0012	# DEVICE CONTROL TWO (DC2)
+0x13	0x0013	# DEVICE CONTROL THREE (DC3)
+0x14	0x0014	# DEVICE CONTROL FOUR (DC4)
+0x15	0x0015	# NEGATIVE ACKNOWLEDGE (NAK)
+0x16	0x0016	# SYNCRONOUS IDLE (SYN)
+0x17	0x0017	# END OF TRANSMISSION BLOCK (ETB)
+0x18	0x0018	# CANCEL (CAN)
+0x19	0x0019	# END OF MEDIUM (EM)
+0x1A	0x001A	# SUBSTITUTE (SUB)
+0x1B	0x001B	# ESCAPE (ESC)
+0x1C	0x001C	# FILE SEPARATOR (IS4)
+0x1D	0x001D	# GROUP SEPARATOR (IS3)
+0x1E	0x001E	# RECORD SEPARATOR (IS2)
+0x1F	0x001F	# UNIT SEPARATOR (IS1)
+0x20	0x0020	# SPACE
+0x21	0x0021	# EXCLAMATION MARK
+0x22	0x0022	# QUOTATION MARK
+0x23	0x0023	# NUMBER SIGN
+0x24	0x00A4	# CURRENCY SIGN
+0x25	0x0025	# PERCENT SIGN
+0x26	0x0026	# AMPERSAND
+0x27	0x0027	# APOSTROPHE
+0x28	0x0028	# LEFT PARENTHESIS
+0x29	0x0029	# RIGHT PARENTHESIS
+0x2A	0x002A	# ASTERISK
+0x2B	0x002B	# PLUS SIGN
+0x2C	0x002C	# COMMA
+0x2D	0x002D	# HYPHEN-MINUS
+0x2E	0x002E	# FULL STOP
+0x2F	0x002F	# SOLIDUS
+0x30	0x0030	# DIGIT ZERO
+0x31	0x0031	# DIGIT ONE
+0x32	0x0032	# DIGIT TWO
+0x33	0x0033	# DIGIT THREE
+0x34	0x0034	# DIGIT FOUR
+0x35	0x0035	# DIGIT FIVE
+0x36	0x0036	# DIGIT SIX
+0x37	0x0037	# DIGIT SEVEN
+0x38	0x0038	# DIGIT EIGHT
+0x39	0x0039	# DIGIT NINE
+0x3A	0x003A	# COLON
+0x3B	0x003B	# SEMICOLON
+0x3C	0x003C	# LESS-THAN SIGN
+0x3D	0x003D	# EQUALS SIGN
+0x3E	0x003E	# GREATER-THAN SIGN
+0x3F	0x003F	# QUESTION MARK
+0x40	0x0040	# COMMERCIAL AT
+0x41	0x0041	# LATIN CAPITAL LETTER A
+0x42	0x0042	# LATIN CAPITAL LETTER B
+0x43	0x0043	# LATIN CAPITAL LETTER C
+0x44	0x0044	# LATIN CAPITAL LETTER D
+0x45	0x0045	# LATIN CAPITAL LETTER E
+0x46	0x0046	# LATIN CAPITAL LETTER F
+0x47	0x0047	# LATIN CAPITAL LETTER G
+0x48	0x0048	# LATIN CAPITAL LETTER H
+0x49	0x0049	# LATIN CAPITAL LETTER I
+0x4A	0x004A	# LATIN CAPITAL LETTER J
+0x4B	0x004B	# LATIN CAPITAL LETTER K
+0x4C	0x004C	# LATIN CAPITAL LETTER L
+0x4D	0x004D	# LATIN CAPITAL LETTER M
+0x4E	0x004E	# LATIN CAPITAL LETTER N
+0x4F	0x004F	# LATIN CAPITAL LETTER O
+0x50	0x0050	# LATIN CAPITAL LETTER P
+0x51	0x0051	# LATIN CAPITAL LETTER Q
+0x52	0x0052	# LATIN CAPITAL LETTER R
+0x53	0x0053	# LATIN CAPITAL LETTER S
+0x54	0x0054	# LATIN CAPITAL LETTER T
+0x55	0x0055	# LATIN CAPITAL LETTER U
+0x56	0x0056	# LATIN CAPITAL LETTER V
+0x57	0x0057	# LATIN CAPITAL LETTER W
+0x58	0x0058	# LATIN CAPITAL LETTER X
+0x59	0x0059	# LATIN CAPITAL LETTER Y
+0x5A	0x005A	# LATIN CAPITAL LETTER Z
+0x5B	0x00C4	# LATIN CAPITAL LETTER A WITH DIAERESIS
+0x5C	0x00D6	# LATIN CAPITAL LETTER O WITH DIAERESIS
+0x5D	0x00C5	# LATIN CAPITAL LETTER A WITH RING ABOVE
+0x5E	0x005E	# CIRCUMFLEX ACCENT
+0x5F	0x005F	# LOW LINE
+0x60	0x0060	# GRAVE ACCENT
+0x61	0x0061	# LATIN SMALL LETTER A
+0x62	0x0062	# LATIN SMALL LETTER B
+0x63	0x0063	# LATIN SMALL LETTER C
+0x64	0x0064	# LATIN SMALL LETTER D
+0x65	0x0065	# LATIN SMALL LETTER E
+0x66	0x0066	# LATIN SMALL LETTER F
+0x67	0x0067	# LATIN SMALL LETTER G
+0x68	0x0068	# LATIN SMALL LETTER H
+0x69	0x0069	# LATIN SMALL LETTER I
+0x6A	0x006A	# LATIN SMALL LETTER J
+0x6B	0x006B	# LATIN SMALL LETTER K
+0x6C	0x006C	# LATIN SMALL LETTER L
+0x6D	0x006D	# LATIN SMALL LETTER M
+0x6E	0x006E	# LATIN SMALL LETTER N
+0x6F	0x006F	# LATIN SMALL LETTER O
+0x70	0x0070	# LATIN SMALL LETTER P
+0x71	0x0071	# LATIN SMALL LETTER Q
+0x72	0x0072	# LATIN SMALL LETTER R
+0x73	0x0073	# LATIN SMALL LETTER S
+0x74	0x0074	# LATIN SMALL LETTER T
+0x75	0x0075	# LATIN SMALL LETTER U
+0x76	0x0076	# LATIN SMALL LETTER V
+0x77	0x0077	# LATIN SMALL LETTER W
+0x78	0x0078	# LATIN SMALL LETTER X
+0x79	0x0079	# LATIN SMALL LETTER Y
+0x7A	0x007A	# LATIN SMALL LETTER Z
+0x7B	0x00E4	# LATIN SMALL LETTER A WITH DIAERESIS
+0x7C	0x00F6	# LATIN SMALL LETTER O WITH DIAERESIS
+0x7D	0x00E5	# LATIN SMALL LETTER A WITH RING ABOVE
+0x7E	0x203E	# OVERLINE
+0x7F	0x007F	# DELETE (DEL)
diff --git a/externals/figlet/fonts/646-se2.flc b/externals/figlet/fonts/646-se2.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/646-se2.flc
@@ -0,0 +1,156 @@
+#
+#	Name:             SEN_850200_C to Unicode
+#	Unicode version:  2.0
+#	Table version:    0.1
+#	Table format:     Format A
+#	Date:             0097-01-24
+#	Authors:          John Cowan <cowan@ccil.org> (conversion)
+#                     Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+#	General notes:
+#
+#	This table contains data obtained from RFC 1345 on how
+#       SEN_850200_C characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the SEN_850200_C code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in SEN_850200_C order
+#
+#	Any comments or problems, contact <cowan@ccil.org>
+#
+#   &rem source: ECMA registry
+#   &alias iso-ir-11
+#   &alias ISO646-SE2
+#   &g0esc x2848 &g1esc x2948 &g2esc x2a48 &g3esc x2b48
+#   &alias se2
+0x00	0x0000	# NULL (NUL)
+0x01	0x0001	# START OF HEADING (SOH)
+0x02	0x0002	# START OF TEXT (STX)
+0x03	0x0003	# END OF TEXT (ETX)
+0x04	0x0004	# END OF TRANSMISSION (EOT)
+0x05	0x0005	# ENQUIRY (ENQ)
+0x06	0x0006	# ACKNOWLEDGE (ACK)
+0x07	0x0007	# BELL (BEL)
+0x08	0x0008	# BACKSPACE (BS)
+0x09	0x0009	# CHARACTER TABULATION (HT)
+0x0A	0x000A	# LINE FEED (LF)
+0x0B	0x000B	# LINE TABULATION (VT)
+0x0C	0x000C	# FORM FEED (FF)
+0x0D	0x000D	# CARRIAGE RETURN (CR)
+0x0E	0x000E	# SHIFT OUT (SO)
+0x0F	0x000F	# SHIFT IN (SI)
+0x10	0x0010	# DATALINK ESCAPE (DLE)
+0x11	0x0011	# DEVICE CONTROL ONE (DC1)
+0x12	0x0012	# DEVICE CONTROL TWO (DC2)
+0x13	0x0013	# DEVICE CONTROL THREE (DC3)
+0x14	0x0014	# DEVICE CONTROL FOUR (DC4)
+0x15	0x0015	# NEGATIVE ACKNOWLEDGE (NAK)
+0x16	0x0016	# SYNCRONOUS IDLE (SYN)
+0x17	0x0017	# END OF TRANSMISSION BLOCK (ETB)
+0x18	0x0018	# CANCEL (CAN)
+0x19	0x0019	# END OF MEDIUM (EM)
+0x1A	0x001A	# SUBSTITUTE (SUB)
+0x1B	0x001B	# ESCAPE (ESC)
+0x1C	0x001C	# FILE SEPARATOR (IS4)
+0x1D	0x001D	# GROUP SEPARATOR (IS3)
+0x1E	0x001E	# RECORD SEPARATOR (IS2)
+0x1F	0x001F	# UNIT SEPARATOR (IS1)
+0x20	0x0020	# SPACE
+0x21	0x0021	# EXCLAMATION MARK
+0x22	0x0022	# QUOTATION MARK
+0x23	0x0023	# NUMBER SIGN
+0x24	0x00A4	# CURRENCY SIGN
+0x25	0x0025	# PERCENT SIGN
+0x26	0x0026	# AMPERSAND
+0x27	0x0027	# APOSTROPHE
+0x28	0x0028	# LEFT PARENTHESIS
+0x29	0x0029	# RIGHT PARENTHESIS
+0x2A	0x002A	# ASTERISK
+0x2B	0x002B	# PLUS SIGN
+0x2C	0x002C	# COMMA
+0x2D	0x002D	# HYPHEN-MINUS
+0x2E	0x002E	# FULL STOP
+0x2F	0x002F	# SOLIDUS
+0x30	0x0030	# DIGIT ZERO
+0x31	0x0031	# DIGIT ONE
+0x32	0x0032	# DIGIT TWO
+0x33	0x0033	# DIGIT THREE
+0x34	0x0034	# DIGIT FOUR
+0x35	0x0035	# DIGIT FIVE
+0x36	0x0036	# DIGIT SIX
+0x37	0x0037	# DIGIT SEVEN
+0x38	0x0038	# DIGIT EIGHT
+0x39	0x0039	# DIGIT NINE
+0x3A	0x003A	# COLON
+0x3B	0x003B	# SEMICOLON
+0x3C	0x003C	# LESS-THAN SIGN
+0x3D	0x003D	# EQUALS SIGN
+0x3E	0x003E	# GREATER-THAN SIGN
+0x3F	0x003F	# QUESTION MARK
+0x40	0x00C9	# LATIN CAPITAL LETTER E WITH ACUTE
+0x41	0x0041	# LATIN CAPITAL LETTER A
+0x42	0x0042	# LATIN CAPITAL LETTER B
+0x43	0x0043	# LATIN CAPITAL LETTER C
+0x44	0x0044	# LATIN CAPITAL LETTER D
+0x45	0x0045	# LATIN CAPITAL LETTER E
+0x46	0x0046	# LATIN CAPITAL LETTER F
+0x47	0x0047	# LATIN CAPITAL LETTER G
+0x48	0x0048	# LATIN CAPITAL LETTER H
+0x49	0x0049	# LATIN CAPITAL LETTER I
+0x4A	0x004A	# LATIN CAPITAL LETTER J
+0x4B	0x004B	# LATIN CAPITAL LETTER K
+0x4C	0x004C	# LATIN CAPITAL LETTER L
+0x4D	0x004D	# LATIN CAPITAL LETTER M
+0x4E	0x004E	# LATIN CAPITAL LETTER N
+0x4F	0x004F	# LATIN CAPITAL LETTER O
+0x50	0x0050	# LATIN CAPITAL LETTER P
+0x51	0x0051	# LATIN CAPITAL LETTER Q
+0x52	0x0052	# LATIN CAPITAL LETTER R
+0x53	0x0053	# LATIN CAPITAL LETTER S
+0x54	0x0054	# LATIN CAPITAL LETTER T
+0x55	0x0055	# LATIN CAPITAL LETTER U
+0x56	0x0056	# LATIN CAPITAL LETTER V
+0x57	0x0057	# LATIN CAPITAL LETTER W
+0x58	0x0058	# LATIN CAPITAL LETTER X
+0x59	0x0059	# LATIN CAPITAL LETTER Y
+0x5A	0x005A	# LATIN CAPITAL LETTER Z
+0x5B	0x00C4	# LATIN CAPITAL LETTER A WITH DIAERESIS
+0x5C	0x00D6	# LATIN CAPITAL LETTER O WITH DIAERESIS
+0x5D	0x00C5	# LATIN CAPITAL LETTER A WITH RING ABOVE
+0x5E	0x00DC	# LATIN CAPITAL LETTER U WITH DIAERESIS
+0x5F	0x005F	# LOW LINE
+0x60	0x00E9	# LATIN SMALL LETTER E WITH ACUTE
+0x61	0x0061	# LATIN SMALL LETTER A
+0x62	0x0062	# LATIN SMALL LETTER B
+0x63	0x0063	# LATIN SMALL LETTER C
+0x64	0x0064	# LATIN SMALL LETTER D
+0x65	0x0065	# LATIN SMALL LETTER E
+0x66	0x0066	# LATIN SMALL LETTER F
+0x67	0x0067	# LATIN SMALL LETTER G
+0x68	0x0068	# LATIN SMALL LETTER H
+0x69	0x0069	# LATIN SMALL LETTER I
+0x6A	0x006A	# LATIN SMALL LETTER J
+0x6B	0x006B	# LATIN SMALL LETTER K
+0x6C	0x006C	# LATIN SMALL LETTER L
+0x6D	0x006D	# LATIN SMALL LETTER M
+0x6E	0x006E	# LATIN SMALL LETTER N
+0x6F	0x006F	# LATIN SMALL LETTER O
+0x70	0x0070	# LATIN SMALL LETTER P
+0x71	0x0071	# LATIN SMALL LETTER Q
+0x72	0x0072	# LATIN SMALL LETTER R
+0x73	0x0073	# LATIN SMALL LETTER S
+0x74	0x0074	# LATIN SMALL LETTER T
+0x75	0x0075	# LATIN SMALL LETTER U
+0x76	0x0076	# LATIN SMALL LETTER V
+0x77	0x0077	# LATIN SMALL LETTER W
+0x78	0x0078	# LATIN SMALL LETTER X
+0x79	0x0079	# LATIN SMALL LETTER Y
+0x7A	0x007A	# LATIN SMALL LETTER Z
+0x7B	0x00E4	# LATIN SMALL LETTER A WITH DIAERESIS
+0x7C	0x00F6	# LATIN SMALL LETTER O WITH DIAERESIS
+0x7D	0x00E5	# LATIN SMALL LETTER A WITH RING ABOVE
+0x7E	0x00FC	# LATIN SMALL LETTER U WITH DIAERESIS
+0x7F	0x007F	# DELETE (DEL)
diff --git a/externals/figlet/fonts/646-yu.flc b/externals/figlet/fonts/646-yu.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/646-yu.flc
@@ -0,0 +1,157 @@
+#
+#	Name:             JUS_I.B1.002 to Unicode
+#	Unicode version:  2.0
+#	Table version:    0.1
+#	Table format:     Format A
+#	Date:             0097-01-24
+#	Authors:          John Cowan <cowan@ccil.org> (conversion)
+#                     Keld Simonsen <Keld.Simonsen@dkuug.dk> (RFC 1345)
+#
+#	General notes:
+#
+#	This table contains data obtained from RFC 1345 on how
+#       JUS_I.B1.002 characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the JUS_I.B1.002 code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in JUS_I.B1.002 order
+#
+#	Any comments or problems, contact <cowan@ccil.org>
+#
+#   &rem source: ECMA registry
+#   &alias iso-ir-141
+#   &g0esc x287a &g1esc x297a &g2esc x2a7a &g3esc x2b7a
+#   &alias ISO646-YU
+#   &alias js
+#   &alias yu
+0x00	0x0000	# NULL (NUL)
+0x01	0x0001	# START OF HEADING (SOH)
+0x02	0x0002	# START OF TEXT (STX)
+0x03	0x0003	# END OF TEXT (ETX)
+0x04	0x0004	# END OF TRANSMISSION (EOT)
+0x05	0x0005	# ENQUIRY (ENQ)
+0x06	0x0006	# ACKNOWLEDGE (ACK)
+0x07	0x0007	# BELL (BEL)
+0x08	0x0008	# BACKSPACE (BS)
+0x09	0x0009	# CHARACTER TABULATION (HT)
+0x0A	0x000A	# LINE FEED (LF)
+0x0B	0x000B	# LINE TABULATION (VT)
+0x0C	0x000C	# FORM FEED (FF)
+0x0D	0x000D	# CARRIAGE RETURN (CR)
+0x0E	0x000E	# SHIFT OUT (SO)
+0x0F	0x000F	# SHIFT IN (SI)
+0x10	0x0010	# DATALINK ESCAPE (DLE)
+0x11	0x0011	# DEVICE CONTROL ONE (DC1)
+0x12	0x0012	# DEVICE CONTROL TWO (DC2)
+0x13	0x0013	# DEVICE CONTROL THREE (DC3)
+0x14	0x0014	# DEVICE CONTROL FOUR (DC4)
+0x15	0x0015	# NEGATIVE ACKNOWLEDGE (NAK)
+0x16	0x0016	# SYNCRONOUS IDLE (SYN)
+0x17	0x0017	# END OF TRANSMISSION BLOCK (ETB)
+0x18	0x0018	# CANCEL (CAN)
+0x19	0x0019	# END OF MEDIUM (EM)
+0x1A	0x001A	# SUBSTITUTE (SUB)
+0x1B	0x001B	# ESCAPE (ESC)
+0x1C	0x001C	# FILE SEPARATOR (IS4)
+0x1D	0x001D	# GROUP SEPARATOR (IS3)
+0x1E	0x001E	# RECORD SEPARATOR (IS2)
+0x1F	0x001F	# UNIT SEPARATOR (IS1)
+0x20	0x0020	# SPACE
+0x21	0x0021	# EXCLAMATION MARK
+0x22	0x0022	# QUOTATION MARK
+0x23	0x0023	# NUMBER SIGN
+0x24	0x0024	# DOLLAR SIGN
+0x25	0x0025	# PERCENT SIGN
+0x26	0x0026	# AMPERSAND
+0x27	0x0027	# APOSTROPHE
+0x28	0x0028	# LEFT PARENTHESIS
+0x29	0x0029	# RIGHT PARENTHESIS
+0x2A	0x002A	# ASTERISK
+0x2B	0x002B	# PLUS SIGN
+0x2C	0x002C	# COMMA
+0x2D	0x002D	# HYPHEN-MINUS
+0x2E	0x002E	# FULL STOP
+0x2F	0x002F	# SOLIDUS
+0x30	0x0030	# DIGIT ZERO
+0x31	0x0031	# DIGIT ONE
+0x32	0x0032	# DIGIT TWO
+0x33	0x0033	# DIGIT THREE
+0x34	0x0034	# DIGIT FOUR
+0x35	0x0035	# DIGIT FIVE
+0x36	0x0036	# DIGIT SIX
+0x37	0x0037	# DIGIT SEVEN
+0x38	0x0038	# DIGIT EIGHT
+0x39	0x0039	# DIGIT NINE
+0x3A	0x003A	# COLON
+0x3B	0x003B	# SEMICOLON
+0x3C	0x003C	# LESS-THAN SIGN
+0x3D	0x003D	# EQUALS SIGN
+0x3E	0x003E	# GREATER-THAN SIGN
+0x3F	0x003F	# QUESTION MARK
+0x40	0x017D	# LATIN CAPITAL LETTER Z WITH CARON
+0x41	0x0041	# LATIN CAPITAL LETTER A
+0x42	0x0042	# LATIN CAPITAL LETTER B
+0x43	0x0043	# LATIN CAPITAL LETTER C
+0x44	0x0044	# LATIN CAPITAL LETTER D
+0x45	0x0045	# LATIN CAPITAL LETTER E
+0x46	0x0046	# LATIN CAPITAL LETTER F
+0x47	0x0047	# LATIN CAPITAL LETTER G
+0x48	0x0048	# LATIN CAPITAL LETTER H
+0x49	0x0049	# LATIN CAPITAL LETTER I
+0x4A	0x004A	# LATIN CAPITAL LETTER J
+0x4B	0x004B	# LATIN CAPITAL LETTER K
+0x4C	0x004C	# LATIN CAPITAL LETTER L
+0x4D	0x004D	# LATIN CAPITAL LETTER M
+0x4E	0x004E	# LATIN CAPITAL LETTER N
+0x4F	0x004F	# LATIN CAPITAL LETTER O
+0x50	0x0050	# LATIN CAPITAL LETTER P
+0x51	0x0051	# LATIN CAPITAL LETTER Q
+0x52	0x0052	# LATIN CAPITAL LETTER R
+0x53	0x0053	# LATIN CAPITAL LETTER S
+0x54	0x0054	# LATIN CAPITAL LETTER T
+0x55	0x0055	# LATIN CAPITAL LETTER U
+0x56	0x0056	# LATIN CAPITAL LETTER V
+0x57	0x0057	# LATIN CAPITAL LETTER W
+0x58	0x0058	# LATIN CAPITAL LETTER X
+0x59	0x0059	# LATIN CAPITAL LETTER Y
+0x5A	0x005A	# LATIN CAPITAL LETTER Z
+0x5B	0x0160	# LATIN CAPITAL LETTER S WITH CARON
+0x5C	0x0110	# LATIN CAPITAL LETTER D WITH STROKE
+0x5D	0x0106	# LATIN CAPITAL LETTER C WITH ACUTE
+0x5E	0x010C	# LATIN CAPITAL LETTER C WITH CARON
+0x5F	0x005F	# LOW LINE
+0x60	0x017E	# LATIN SMALL LETTER Z WITH CARON
+0x61	0x0061	# LATIN SMALL LETTER A
+0x62	0x0062	# LATIN SMALL LETTER B
+0x63	0x0063	# LATIN SMALL LETTER C
+0x64	0x0064	# LATIN SMALL LETTER D
+0x65	0x0065	# LATIN SMALL LETTER E
+0x66	0x0066	# LATIN SMALL LETTER F
+0x67	0x0067	# LATIN SMALL LETTER G
+0x68	0x0068	# LATIN SMALL LETTER H
+0x69	0x0069	# LATIN SMALL LETTER I
+0x6A	0x006A	# LATIN SMALL LETTER J
+0x6B	0x006B	# LATIN SMALL LETTER K
+0x6C	0x006C	# LATIN SMALL LETTER L
+0x6D	0x006D	# LATIN SMALL LETTER M
+0x6E	0x006E	# LATIN SMALL LETTER N
+0x6F	0x006F	# LATIN SMALL LETTER O
+0x70	0x0070	# LATIN SMALL LETTER P
+0x71	0x0071	# LATIN SMALL LETTER Q
+0x72	0x0072	# LATIN SMALL LETTER R
+0x73	0x0073	# LATIN SMALL LETTER S
+0x74	0x0074	# LATIN SMALL LETTER T
+0x75	0x0075	# LATIN SMALL LETTER U
+0x76	0x0076	# LATIN SMALL LETTER V
+0x77	0x0077	# LATIN SMALL LETTER W
+0x78	0x0078	# LATIN SMALL LETTER X
+0x79	0x0079	# LATIN SMALL LETTER Y
+0x7A	0x007A	# LATIN SMALL LETTER Z
+0x7B	0x0161	# LATIN SMALL LETTER S WITH CARON
+0x7C	0x0111	# LATIN SMALL LETTER D WITH STROKE
+0x7D	0x0107	# LATIN SMALL LETTER C WITH ACUTE
+0x7E	0x010D	# LATIN SMALL LETTER C WITH CARON
+0x7F	0x007F	# DELETE (DEL)
diff --git a/externals/figlet/fonts/8859-2.flc b/externals/figlet/fonts/8859-2.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/8859-2.flc
@@ -0,0 +1,303 @@
+#
+#	Name:             ISO 8859-2:1999 to Unicode
+#	Unicode version:  3.0
+#	Table version:    1.0
+#	Table format:     Format A
+#	Date:             1999 July 27
+#	Authors:          Ken Whistler <kenw@sybase.com>
+#
+#	Copyright (c) 1991-1999 Unicode, Inc.  All Rights reserved.
+#
+#	This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+#	No claims are made as to fitness for any particular purpose.  No
+#	warranties of any kind are expressed or implied.  The recipient
+#	agrees to determine applicability of information provided.  If this
+#	file has been provided on optical media by Unicode, Inc., the sole
+#	remedy for any claim will be exchange of defective media within 90
+#	days of receipt.
+#
+#	Unicode, Inc. hereby grants the right to freely use the information
+#	supplied in this file in the creation of products supporting the
+#	Unicode Standard, and to make copies of this file in any form for
+#	internal or external distribution as long as this notice remains
+#	attached.
+#
+#	General notes:
+#
+#	This table contains the data the Unicode Consortium has on how
+#       ISO/IEC 8859-2:1999 characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the ISO/IEC 8859-2 code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in ISO/IEC 8859-2 order.
+#
+#	Version history
+#	1.0 version updates 0.1 version by adding mappings for all
+#	control characters.
+#
+#	Updated versions of this file may be found in:
+#		<ftp://ftp.unicode.org/Public/MAPPINGS/>
+#
+#	Any comments or problems, contact <errata@unicode.org>
+#	Please note that <errata@unicode.org> is an archival address;
+#	notices will be checked, but do not expect an immediate response.
+#
+0x00	0x0000	#	NULL
+0x01	0x0001	#	START OF HEADING
+0x02	0x0002	#	START OF TEXT
+0x03	0x0003	#	END OF TEXT
+0x04	0x0004	#	END OF TRANSMISSION
+0x05	0x0005	#	ENQUIRY
+0x06	0x0006	#	ACKNOWLEDGE
+0x07	0x0007	#	BELL
+0x08	0x0008	#	BACKSPACE
+0x09	0x0009	#	HORIZONTAL TABULATION
+0x0A	0x000A	#	LINE FEED
+0x0B	0x000B	#	VERTICAL TABULATION
+0x0C	0x000C	#	FORM FEED
+0x0D	0x000D	#	CARRIAGE RETURN
+0x0E	0x000E	#	SHIFT OUT
+0x0F	0x000F	#	SHIFT IN
+0x10	0x0010	#	DATA LINK ESCAPE
+0x11	0x0011	#	DEVICE CONTROL ONE
+0x12	0x0012	#	DEVICE CONTROL TWO
+0x13	0x0013	#	DEVICE CONTROL THREE
+0x14	0x0014	#	DEVICE CONTROL FOUR
+0x15	0x0015	#	NEGATIVE ACKNOWLEDGE
+0x16	0x0016	#	SYNCHRONOUS IDLE
+0x17	0x0017	#	END OF TRANSMISSION BLOCK
+0x18	0x0018	#	CANCEL
+0x19	0x0019	#	END OF MEDIUM
+0x1A	0x001A	#	SUBSTITUTE
+0x1B	0x001B	#	ESCAPE
+0x1C	0x001C	#	FILE SEPARATOR
+0x1D	0x001D	#	GROUP SEPARATOR
+0x1E	0x001E	#	RECORD SEPARATOR
+0x1F	0x001F	#	UNIT SEPARATOR
+0x20	0x0020	#	SPACE
+0x21	0x0021	#	EXCLAMATION MARK
+0x22	0x0022	#	QUOTATION MARK
+0x23	0x0023	#	NUMBER SIGN
+0x24	0x0024	#	DOLLAR SIGN
+0x25	0x0025	#	PERCENT SIGN
+0x26	0x0026	#	AMPERSAND
+0x27	0x0027	#	APOSTROPHE
+0x28	0x0028	#	LEFT PARENTHESIS
+0x29	0x0029	#	RIGHT PARENTHESIS
+0x2A	0x002A	#	ASTERISK
+0x2B	0x002B	#	PLUS SIGN
+0x2C	0x002C	#	COMMA
+0x2D	0x002D	#	HYPHEN-MINUS
+0x2E	0x002E	#	FULL STOP
+0x2F	0x002F	#	SOLIDUS
+0x30	0x0030	#	DIGIT ZERO
+0x31	0x0031	#	DIGIT ONE
+0x32	0x0032	#	DIGIT TWO
+0x33	0x0033	#	DIGIT THREE
+0x34	0x0034	#	DIGIT FOUR
+0x35	0x0035	#	DIGIT FIVE
+0x36	0x0036	#	DIGIT SIX
+0x37	0x0037	#	DIGIT SEVEN
+0x38	0x0038	#	DIGIT EIGHT
+0x39	0x0039	#	DIGIT NINE
+0x3A	0x003A	#	COLON
+0x3B	0x003B	#	SEMICOLON
+0x3C	0x003C	#	LESS-THAN SIGN
+0x3D	0x003D	#	EQUALS SIGN
+0x3E	0x003E	#	GREATER-THAN SIGN
+0x3F	0x003F	#	QUESTION MARK
+0x40	0x0040	#	COMMERCIAL AT
+0x41	0x0041	#	LATIN CAPITAL LETTER A
+0x42	0x0042	#	LATIN CAPITAL LETTER B
+0x43	0x0043	#	LATIN CAPITAL LETTER C
+0x44	0x0044	#	LATIN CAPITAL LETTER D
+0x45	0x0045	#	LATIN CAPITAL LETTER E
+0x46	0x0046	#	LATIN CAPITAL LETTER F
+0x47	0x0047	#	LATIN CAPITAL LETTER G
+0x48	0x0048	#	LATIN CAPITAL LETTER H
+0x49	0x0049	#	LATIN CAPITAL LETTER I
+0x4A	0x004A	#	LATIN CAPITAL LETTER J
+0x4B	0x004B	#	LATIN CAPITAL LETTER K
+0x4C	0x004C	#	LATIN CAPITAL LETTER L
+0x4D	0x004D	#	LATIN CAPITAL LETTER M
+0x4E	0x004E	#	LATIN CAPITAL LETTER N
+0x4F	0x004F	#	LATIN CAPITAL LETTER O
+0x50	0x0050	#	LATIN CAPITAL LETTER P
+0x51	0x0051	#	LATIN CAPITAL LETTER Q
+0x52	0x0052	#	LATIN CAPITAL LETTER R
+0x53	0x0053	#	LATIN CAPITAL LETTER S
+0x54	0x0054	#	LATIN CAPITAL LETTER T
+0x55	0x0055	#	LATIN CAPITAL LETTER U
+0x56	0x0056	#	LATIN CAPITAL LETTER V
+0x57	0x0057	#	LATIN CAPITAL LETTER W
+0x58	0x0058	#	LATIN CAPITAL LETTER X
+0x59	0x0059	#	LATIN CAPITAL LETTER Y
+0x5A	0x005A	#	LATIN CAPITAL LETTER Z
+0x5B	0x005B	#	LEFT SQUARE BRACKET
+0x5C	0x005C	#	REVERSE SOLIDUS
+0x5D	0x005D	#	RIGHT SQUARE BRACKET
+0x5E	0x005E	#	CIRCUMFLEX ACCENT
+0x5F	0x005F	#	LOW LINE
+0x60	0x0060	#	GRAVE ACCENT
+0x61	0x0061	#	LATIN SMALL LETTER A
+0x62	0x0062	#	LATIN SMALL LETTER B
+0x63	0x0063	#	LATIN SMALL LETTER C
+0x64	0x0064	#	LATIN SMALL LETTER D
+0x65	0x0065	#	LATIN SMALL LETTER E
+0x66	0x0066	#	LATIN SMALL LETTER F
+0x67	0x0067	#	LATIN SMALL LETTER G
+0x68	0x0068	#	LATIN SMALL LETTER H
+0x69	0x0069	#	LATIN SMALL LETTER I
+0x6A	0x006A	#	LATIN SMALL LETTER J
+0x6B	0x006B	#	LATIN SMALL LETTER K
+0x6C	0x006C	#	LATIN SMALL LETTER L
+0x6D	0x006D	#	LATIN SMALL LETTER M
+0x6E	0x006E	#	LATIN SMALL LETTER N
+0x6F	0x006F	#	LATIN SMALL LETTER O
+0x70	0x0070	#	LATIN SMALL LETTER P
+0x71	0x0071	#	LATIN SMALL LETTER Q
+0x72	0x0072	#	LATIN SMALL LETTER R
+0x73	0x0073	#	LATIN SMALL LETTER S
+0x74	0x0074	#	LATIN SMALL LETTER T
+0x75	0x0075	#	LATIN SMALL LETTER U
+0x76	0x0076	#	LATIN SMALL LETTER V
+0x77	0x0077	#	LATIN SMALL LETTER W
+0x78	0x0078	#	LATIN SMALL LETTER X
+0x79	0x0079	#	LATIN SMALL LETTER Y
+0x7A	0x007A	#	LATIN SMALL LETTER Z
+0x7B	0x007B	#	LEFT CURLY BRACKET
+0x7C	0x007C	#	VERTICAL LINE
+0x7D	0x007D	#	RIGHT CURLY BRACKET
+0x7E	0x007E	#	TILDE
+0x7F	0x007F	#	DELETE
+0x80	0x0080	#	<control>
+0x81	0x0081	#	<control>
+0x82	0x0082	#	<control>
+0x83	0x0083	#	<control>
+0x84	0x0084	#	<control>
+0x85	0x0085	#	<control>
+0x86	0x0086	#	<control>
+0x87	0x0087	#	<control>
+0x88	0x0088	#	<control>
+0x89	0x0089	#	<control>
+0x8A	0x008A	#	<control>
+0x8B	0x008B	#	<control>
+0x8C	0x008C	#	<control>
+0x8D	0x008D	#	<control>
+0x8E	0x008E	#	<control>
+0x8F	0x008F	#	<control>
+0x90	0x0090	#	<control>
+0x91	0x0091	#	<control>
+0x92	0x0092	#	<control>
+0x93	0x0093	#	<control>
+0x94	0x0094	#	<control>
+0x95	0x0095	#	<control>
+0x96	0x0096	#	<control>
+0x97	0x0097	#	<control>
+0x98	0x0098	#	<control>
+0x99	0x0099	#	<control>
+0x9A	0x009A	#	<control>
+0x9B	0x009B	#	<control>
+0x9C	0x009C	#	<control>
+0x9D	0x009D	#	<control>
+0x9E	0x009E	#	<control>
+0x9F	0x009F	#	<control>
+0xA0	0x00A0	#	NO-BREAK SPACE
+0xA1	0x0104	#	LATIN CAPITAL LETTER A WITH OGONEK
+0xA2	0x02D8	#	BREVE
+0xA3	0x0141	#	LATIN CAPITAL LETTER L WITH STROKE
+0xA4	0x00A4	#	CURRENCY SIGN
+0xA5	0x013D	#	LATIN CAPITAL LETTER L WITH CARON
+0xA6	0x015A	#	LATIN CAPITAL LETTER S WITH ACUTE
+0xA7	0x00A7	#	SECTION SIGN
+0xA8	0x00A8	#	DIAERESIS
+0xA9	0x0160	#	LATIN CAPITAL LETTER S WITH CARON
+0xAA	0x015E	#	LATIN CAPITAL LETTER S WITH CEDILLA
+0xAB	0x0164	#	LATIN CAPITAL LETTER T WITH CARON
+0xAC	0x0179	#	LATIN CAPITAL LETTER Z WITH ACUTE
+0xAD	0x00AD	#	SOFT HYPHEN
+0xAE	0x017D	#	LATIN CAPITAL LETTER Z WITH CARON
+0xAF	0x017B	#	LATIN CAPITAL LETTER Z WITH DOT ABOVE
+0xB0	0x00B0	#	DEGREE SIGN
+0xB1	0x0105	#	LATIN SMALL LETTER A WITH OGONEK
+0xB2	0x02DB	#	OGONEK
+0xB3	0x0142	#	LATIN SMALL LETTER L WITH STROKE
+0xB4	0x00B4	#	ACUTE ACCENT
+0xB5	0x013E	#	LATIN SMALL LETTER L WITH CARON
+0xB6	0x015B	#	LATIN SMALL LETTER S WITH ACUTE
+0xB7	0x02C7	#	CARON
+0xB8	0x00B8	#	CEDILLA
+0xB9	0x0161	#	LATIN SMALL LETTER S WITH CARON
+0xBA	0x015F	#	LATIN SMALL LETTER S WITH CEDILLA
+0xBB	0x0165	#	LATIN SMALL LETTER T WITH CARON
+0xBC	0x017A	#	LATIN SMALL LETTER Z WITH ACUTE
+0xBD	0x02DD	#	DOUBLE ACUTE ACCENT
+0xBE	0x017E	#	LATIN SMALL LETTER Z WITH CARON
+0xBF	0x017C	#	LATIN SMALL LETTER Z WITH DOT ABOVE
+0xC0	0x0154	#	LATIN CAPITAL LETTER R WITH ACUTE
+0xC1	0x00C1	#	LATIN CAPITAL LETTER A WITH ACUTE
+0xC2	0x00C2	#	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0xC3	0x0102	#	LATIN CAPITAL LETTER A WITH BREVE
+0xC4	0x00C4	#	LATIN CAPITAL LETTER A WITH DIAERESIS
+0xC5	0x0139	#	LATIN CAPITAL LETTER L WITH ACUTE
+0xC6	0x0106	#	LATIN CAPITAL LETTER C WITH ACUTE
+0xC7	0x00C7	#	LATIN CAPITAL LETTER C WITH CEDILLA
+0xC8	0x010C	#	LATIN CAPITAL LETTER C WITH CARON
+0xC9	0x00C9	#	LATIN CAPITAL LETTER E WITH ACUTE
+0xCA	0x0118	#	LATIN CAPITAL LETTER E WITH OGONEK
+0xCB	0x00CB	#	LATIN CAPITAL LETTER E WITH DIAERESIS
+0xCC	0x011A	#	LATIN CAPITAL LETTER E WITH CARON
+0xCD	0x00CD	#	LATIN CAPITAL LETTER I WITH ACUTE
+0xCE	0x00CE	#	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0xCF	0x010E	#	LATIN CAPITAL LETTER D WITH CARON
+0xD0	0x0110	#	LATIN CAPITAL LETTER D WITH STROKE
+0xD1	0x0143	#	LATIN CAPITAL LETTER N WITH ACUTE
+0xD2	0x0147	#	LATIN CAPITAL LETTER N WITH CARON
+0xD3	0x00D3	#	LATIN CAPITAL LETTER O WITH ACUTE
+0xD4	0x00D4	#	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xD5	0x0150	#	LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0xD6	0x00D6	#	LATIN CAPITAL LETTER O WITH DIAERESIS
+0xD7	0x00D7	#	MULTIPLICATION SIGN
+0xD8	0x0158	#	LATIN CAPITAL LETTER R WITH CARON
+0xD9	0x016E	#	LATIN CAPITAL LETTER U WITH RING ABOVE
+0xDA	0x00DA	#	LATIN CAPITAL LETTER U WITH ACUTE
+0xDB	0x0170	#	LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0xDC	0x00DC	#	LATIN CAPITAL LETTER U WITH DIAERESIS
+0xDD	0x00DD	#	LATIN CAPITAL LETTER Y WITH ACUTE
+0xDE	0x0162	#	LATIN CAPITAL LETTER T WITH CEDILLA
+0xDF	0x00DF	#	LATIN SMALL LETTER SHARP S
+0xE0	0x0155	#	LATIN SMALL LETTER R WITH ACUTE
+0xE1	0x00E1	#	LATIN SMALL LETTER A WITH ACUTE
+0xE2	0x00E2	#	LATIN SMALL LETTER A WITH CIRCUMFLEX
+0xE3	0x0103	#	LATIN SMALL LETTER A WITH BREVE
+0xE4	0x00E4	#	LATIN SMALL LETTER A WITH DIAERESIS
+0xE5	0x013A	#	LATIN SMALL LETTER L WITH ACUTE
+0xE6	0x0107	#	LATIN SMALL LETTER C WITH ACUTE
+0xE7	0x00E7	#	LATIN SMALL LETTER C WITH CEDILLA
+0xE8	0x010D	#	LATIN SMALL LETTER C WITH CARON
+0xE9	0x00E9	#	LATIN SMALL LETTER E WITH ACUTE
+0xEA	0x0119	#	LATIN SMALL LETTER E WITH OGONEK
+0xEB	0x00EB	#	LATIN SMALL LETTER E WITH DIAERESIS
+0xEC	0x011B	#	LATIN SMALL LETTER E WITH CARON
+0xED	0x00ED	#	LATIN SMALL LETTER I WITH ACUTE
+0xEE	0x00EE	#	LATIN SMALL LETTER I WITH CIRCUMFLEX
+0xEF	0x010F	#	LATIN SMALL LETTER D WITH CARON
+0xF0	0x0111	#	LATIN SMALL LETTER D WITH STROKE
+0xF1	0x0144	#	LATIN SMALL LETTER N WITH ACUTE
+0xF2	0x0148	#	LATIN SMALL LETTER N WITH CARON
+0xF3	0x00F3	#	LATIN SMALL LETTER O WITH ACUTE
+0xF4	0x00F4	#	LATIN SMALL LETTER O WITH CIRCUMFLEX
+0xF5	0x0151	#	LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0xF6	0x00F6	#	LATIN SMALL LETTER O WITH DIAERESIS
+0xF7	0x00F7	#	DIVISION SIGN
+0xF8	0x0159	#	LATIN SMALL LETTER R WITH CARON
+0xF9	0x016F	#	LATIN SMALL LETTER U WITH RING ABOVE
+0xFA	0x00FA	#	LATIN SMALL LETTER U WITH ACUTE
+0xFB	0x0171	#	LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0xFC	0x00FC	#	LATIN SMALL LETTER U WITH DIAERESIS
+0xFD	0x00FD	#	LATIN SMALL LETTER Y WITH ACUTE
+0xFE	0x0163	#	LATIN SMALL LETTER T WITH CEDILLA
+0xFF	0x02D9	#	DOT ABOVE
diff --git a/externals/figlet/fonts/8859-3.flc b/externals/figlet/fonts/8859-3.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/8859-3.flc
@@ -0,0 +1,296 @@
+#
+#	Name:             ISO/IEC 8859-3:1999 to Unicode
+#	Unicode version:  3.0
+#	Table version:    1.0
+#	Table format:     Format A
+#	Date:             1999 July 27
+#	Authors:          Ken Whistler <kenw@sybase.com>
+#
+#	Copyright (c) 1991-1999 Unicode, Inc.  All Rights reserved.
+#
+#	This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+#	No claims are made as to fitness for any particular purpose.  No
+#	warranties of any kind are expressed or implied.  The recipient
+#	agrees to determine applicability of information provided.  If this
+#	file has been provided on optical media by Unicode, Inc., the sole
+#	remedy for any claim will be exchange of defective media within 90
+#	days of receipt.
+#
+#	Unicode, Inc. hereby grants the right to freely use the information
+#	supplied in this file in the creation of products supporting the
+#	Unicode Standard, and to make copies of this file in any form for
+#	internal or external distribution as long as this notice remains
+#	attached.
+#
+#	General notes:
+#
+#	This table contains the data the Unicode Consortium has on how
+#       ISO/IEC 8859-3:1999 characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the ISO/IEC 8859-3 code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in ISO/IEC 8859-3 order.
+#
+#	Version history
+#	1.0 version updates 0.1 version by adding mappings for all
+#	control characters.
+#
+#	Updated versions of this file may be found in:
+#		<ftp://ftp.unicode.org/Public/MAPPINGS/>
+#
+#	Any comments or problems, contact <errata@unicode.org>
+#	Please note that <errata@unicode.org> is an archival address;
+#	notices will be checked, but do not expect an immediate response.
+#
+0x00	0x0000	#	NULL
+0x01	0x0001	#	START OF HEADING
+0x02	0x0002	#	START OF TEXT
+0x03	0x0003	#	END OF TEXT
+0x04	0x0004	#	END OF TRANSMISSION
+0x05	0x0005	#	ENQUIRY
+0x06	0x0006	#	ACKNOWLEDGE
+0x07	0x0007	#	BELL
+0x08	0x0008	#	BACKSPACE
+0x09	0x0009	#	HORIZONTAL TABULATION
+0x0A	0x000A	#	LINE FEED
+0x0B	0x000B	#	VERTICAL TABULATION
+0x0C	0x000C	#	FORM FEED
+0x0D	0x000D	#	CARRIAGE RETURN
+0x0E	0x000E	#	SHIFT OUT
+0x0F	0x000F	#	SHIFT IN
+0x10	0x0010	#	DATA LINK ESCAPE
+0x11	0x0011	#	DEVICE CONTROL ONE
+0x12	0x0012	#	DEVICE CONTROL TWO
+0x13	0x0013	#	DEVICE CONTROL THREE
+0x14	0x0014	#	DEVICE CONTROL FOUR
+0x15	0x0015	#	NEGATIVE ACKNOWLEDGE
+0x16	0x0016	#	SYNCHRONOUS IDLE
+0x17	0x0017	#	END OF TRANSMISSION BLOCK
+0x18	0x0018	#	CANCEL
+0x19	0x0019	#	END OF MEDIUM
+0x1A	0x001A	#	SUBSTITUTE
+0x1B	0x001B	#	ESCAPE
+0x1C	0x001C	#	FILE SEPARATOR
+0x1D	0x001D	#	GROUP SEPARATOR
+0x1E	0x001E	#	RECORD SEPARATOR
+0x1F	0x001F	#	UNIT SEPARATOR
+0x20	0x0020	#	SPACE
+0x21	0x0021	#	EXCLAMATION MARK
+0x22	0x0022	#	QUOTATION MARK
+0x23	0x0023	#	NUMBER SIGN
+0x24	0x0024	#	DOLLAR SIGN
+0x25	0x0025	#	PERCENT SIGN
+0x26	0x0026	#	AMPERSAND
+0x27	0x0027	#	APOSTROPHE
+0x28	0x0028	#	LEFT PARENTHESIS
+0x29	0x0029	#	RIGHT PARENTHESIS
+0x2A	0x002A	#	ASTERISK
+0x2B	0x002B	#	PLUS SIGN
+0x2C	0x002C	#	COMMA
+0x2D	0x002D	#	HYPHEN-MINUS
+0x2E	0x002E	#	FULL STOP
+0x2F	0x002F	#	SOLIDUS
+0x30	0x0030	#	DIGIT ZERO
+0x31	0x0031	#	DIGIT ONE
+0x32	0x0032	#	DIGIT TWO
+0x33	0x0033	#	DIGIT THREE
+0x34	0x0034	#	DIGIT FOUR
+0x35	0x0035	#	DIGIT FIVE
+0x36	0x0036	#	DIGIT SIX
+0x37	0x0037	#	DIGIT SEVEN
+0x38	0x0038	#	DIGIT EIGHT
+0x39	0x0039	#	DIGIT NINE
+0x3A	0x003A	#	COLON
+0x3B	0x003B	#	SEMICOLON
+0x3C	0x003C	#	LESS-THAN SIGN
+0x3D	0x003D	#	EQUALS SIGN
+0x3E	0x003E	#	GREATER-THAN SIGN
+0x3F	0x003F	#	QUESTION MARK
+0x40	0x0040	#	COMMERCIAL AT
+0x41	0x0041	#	LATIN CAPITAL LETTER A
+0x42	0x0042	#	LATIN CAPITAL LETTER B
+0x43	0x0043	#	LATIN CAPITAL LETTER C
+0x44	0x0044	#	LATIN CAPITAL LETTER D
+0x45	0x0045	#	LATIN CAPITAL LETTER E
+0x46	0x0046	#	LATIN CAPITAL LETTER F
+0x47	0x0047	#	LATIN CAPITAL LETTER G
+0x48	0x0048	#	LATIN CAPITAL LETTER H
+0x49	0x0049	#	LATIN CAPITAL LETTER I
+0x4A	0x004A	#	LATIN CAPITAL LETTER J
+0x4B	0x004B	#	LATIN CAPITAL LETTER K
+0x4C	0x004C	#	LATIN CAPITAL LETTER L
+0x4D	0x004D	#	LATIN CAPITAL LETTER M
+0x4E	0x004E	#	LATIN CAPITAL LETTER N
+0x4F	0x004F	#	LATIN CAPITAL LETTER O
+0x50	0x0050	#	LATIN CAPITAL LETTER P
+0x51	0x0051	#	LATIN CAPITAL LETTER Q
+0x52	0x0052	#	LATIN CAPITAL LETTER R
+0x53	0x0053	#	LATIN CAPITAL LETTER S
+0x54	0x0054	#	LATIN CAPITAL LETTER T
+0x55	0x0055	#	LATIN CAPITAL LETTER U
+0x56	0x0056	#	LATIN CAPITAL LETTER V
+0x57	0x0057	#	LATIN CAPITAL LETTER W
+0x58	0x0058	#	LATIN CAPITAL LETTER X
+0x59	0x0059	#	LATIN CAPITAL LETTER Y
+0x5A	0x005A	#	LATIN CAPITAL LETTER Z
+0x5B	0x005B	#	LEFT SQUARE BRACKET
+0x5C	0x005C	#	REVERSE SOLIDUS
+0x5D	0x005D	#	RIGHT SQUARE BRACKET
+0x5E	0x005E	#	CIRCUMFLEX ACCENT
+0x5F	0x005F	#	LOW LINE
+0x60	0x0060	#	GRAVE ACCENT
+0x61	0x0061	#	LATIN SMALL LETTER A
+0x62	0x0062	#	LATIN SMALL LETTER B
+0x63	0x0063	#	LATIN SMALL LETTER C
+0x64	0x0064	#	LATIN SMALL LETTER D
+0x65	0x0065	#	LATIN SMALL LETTER E
+0x66	0x0066	#	LATIN SMALL LETTER F
+0x67	0x0067	#	LATIN SMALL LETTER G
+0x68	0x0068	#	LATIN SMALL LETTER H
+0x69	0x0069	#	LATIN SMALL LETTER I
+0x6A	0x006A	#	LATIN SMALL LETTER J
+0x6B	0x006B	#	LATIN SMALL LETTER K
+0x6C	0x006C	#	LATIN SMALL LETTER L
+0x6D	0x006D	#	LATIN SMALL LETTER M
+0x6E	0x006E	#	LATIN SMALL LETTER N
+0x6F	0x006F	#	LATIN SMALL LETTER O
+0x70	0x0070	#	LATIN SMALL LETTER P
+0x71	0x0071	#	LATIN SMALL LETTER Q
+0x72	0x0072	#	LATIN SMALL LETTER R
+0x73	0x0073	#	LATIN SMALL LETTER S
+0x74	0x0074	#	LATIN SMALL LETTER T
+0x75	0x0075	#	LATIN SMALL LETTER U
+0x76	0x0076	#	LATIN SMALL LETTER V
+0x77	0x0077	#	LATIN SMALL LETTER W
+0x78	0x0078	#	LATIN SMALL LETTER X
+0x79	0x0079	#	LATIN SMALL LETTER Y
+0x7A	0x007A	#	LATIN SMALL LETTER Z
+0x7B	0x007B	#	LEFT CURLY BRACKET
+0x7C	0x007C	#	VERTICAL LINE
+0x7D	0x007D	#	RIGHT CURLY BRACKET
+0x7E	0x007E	#	TILDE
+0x7F	0x007F	#	DELETE
+0x80	0x0080	#	<control>
+0x81	0x0081	#	<control>
+0x82	0x0082	#	<control>
+0x83	0x0083	#	<control>
+0x84	0x0084	#	<control>
+0x85	0x0085	#	<control>
+0x86	0x0086	#	<control>
+0x87	0x0087	#	<control>
+0x88	0x0088	#	<control>
+0x89	0x0089	#	<control>
+0x8A	0x008A	#	<control>
+0x8B	0x008B	#	<control>
+0x8C	0x008C	#	<control>
+0x8D	0x008D	#	<control>
+0x8E	0x008E	#	<control>
+0x8F	0x008F	#	<control>
+0x90	0x0090	#	<control>
+0x91	0x0091	#	<control>
+0x92	0x0092	#	<control>
+0x93	0x0093	#	<control>
+0x94	0x0094	#	<control>
+0x95	0x0095	#	<control>
+0x96	0x0096	#	<control>
+0x97	0x0097	#	<control>
+0x98	0x0098	#	<control>
+0x99	0x0099	#	<control>
+0x9A	0x009A	#	<control>
+0x9B	0x009B	#	<control>
+0x9C	0x009C	#	<control>
+0x9D	0x009D	#	<control>
+0x9E	0x009E	#	<control>
+0x9F	0x009F	#	<control>
+0xA0	0x00A0	#	NO-BREAK SPACE
+0xA1	0x0126	#	LATIN CAPITAL LETTER H WITH STROKE
+0xA2	0x02D8	#	BREVE
+0xA3	0x00A3	#	POUND SIGN
+0xA4	0x00A4	#	CURRENCY SIGN
+0xA6	0x0124	#	LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0xA7	0x00A7	#	SECTION SIGN
+0xA8	0x00A8	#	DIAERESIS
+0xA9	0x0130	#	LATIN CAPITAL LETTER I WITH DOT ABOVE
+0xAA	0x015E	#	LATIN CAPITAL LETTER S WITH CEDILLA
+0xAB	0x011E	#	LATIN CAPITAL LETTER G WITH BREVE
+0xAC	0x0134	#	LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+0xAD	0x00AD	#	SOFT HYPHEN
+0xAF	0x017B	#	LATIN CAPITAL LETTER Z WITH DOT ABOVE
+0xB0	0x00B0	#	DEGREE SIGN
+0xB1	0x0127	#	LATIN SMALL LETTER H WITH STROKE
+0xB2	0x00B2	#	SUPERSCRIPT TWO
+0xB3	0x00B3	#	SUPERSCRIPT THREE
+0xB4	0x00B4	#	ACUTE ACCENT
+0xB5	0x00B5	#	MICRO SIGN
+0xB6	0x0125	#	LATIN SMALL LETTER H WITH CIRCUMFLEX
+0xB7	0x00B7	#	MIDDLE DOT
+0xB8	0x00B8	#	CEDILLA
+0xB9	0x0131	#	LATIN SMALL LETTER DOTLESS I
+0xBA	0x015F	#	LATIN SMALL LETTER S WITH CEDILLA
+0xBB	0x011F	#	LATIN SMALL LETTER G WITH BREVE
+0xBC	0x0135	#	LATIN SMALL LETTER J WITH CIRCUMFLEX
+0xBD	0x00BD	#	VULGAR FRACTION ONE HALF
+0xBF	0x017C	#	LATIN SMALL LETTER Z WITH DOT ABOVE
+0xC0	0x00C0	#	LATIN CAPITAL LETTER A WITH GRAVE
+0xC1	0x00C1	#	LATIN CAPITAL LETTER A WITH ACUTE
+0xC2	0x00C2	#	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0xC4	0x00C4	#	LATIN CAPITAL LETTER A WITH DIAERESIS
+0xC5	0x010A	#	LATIN CAPITAL LETTER C WITH DOT ABOVE
+0xC6	0x0108	#	LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+0xC7	0x00C7	#	LATIN CAPITAL LETTER C WITH CEDILLA
+0xC8	0x00C8	#	LATIN CAPITAL LETTER E WITH GRAVE
+0xC9	0x00C9	#	LATIN CAPITAL LETTER E WITH ACUTE
+0xCA	0x00CA	#	LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+0xCB	0x00CB	#	LATIN CAPITAL LETTER E WITH DIAERESIS
+0xCC	0x00CC	#	LATIN CAPITAL LETTER I WITH GRAVE
+0xCD	0x00CD	#	LATIN CAPITAL LETTER I WITH ACUTE
+0xCE	0x00CE	#	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0xCF	0x00CF	#	LATIN CAPITAL LETTER I WITH DIAERESIS
+0xD1	0x00D1	#	LATIN CAPITAL LETTER N WITH TILDE
+0xD2	0x00D2	#	LATIN CAPITAL LETTER O WITH GRAVE
+0xD3	0x00D3	#	LATIN CAPITAL LETTER O WITH ACUTE
+0xD4	0x00D4	#	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xD5	0x0120	#	LATIN CAPITAL LETTER G WITH DOT ABOVE
+0xD6	0x00D6	#	LATIN CAPITAL LETTER O WITH DIAERESIS
+0xD7	0x00D7	#	MULTIPLICATION SIGN
+0xD8	0x011C	#	LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+0xD9	0x00D9	#	LATIN CAPITAL LETTER U WITH GRAVE
+0xDA	0x00DA	#	LATIN CAPITAL LETTER U WITH ACUTE
+0xDB	0x00DB	#	LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+0xDC	0x00DC	#	LATIN CAPITAL LETTER U WITH DIAERESIS
+0xDD	0x016C	#	LATIN CAPITAL LETTER U WITH BREVE
+0xDE	0x015C	#	LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+0xDF	0x00DF	#	LATIN SMALL LETTER SHARP S
+0xE0	0x00E0	#	LATIN SMALL LETTER A WITH GRAVE
+0xE1	0x00E1	#	LATIN SMALL LETTER A WITH ACUTE
+0xE2	0x00E2	#	LATIN SMALL LETTER A WITH CIRCUMFLEX
+0xE4	0x00E4	#	LATIN SMALL LETTER A WITH DIAERESIS
+0xE5	0x010B	#	LATIN SMALL LETTER C WITH DOT ABOVE
+0xE6	0x0109	#	LATIN SMALL LETTER C WITH CIRCUMFLEX
+0xE7	0x00E7	#	LATIN SMALL LETTER C WITH CEDILLA
+0xE8	0x00E8	#	LATIN SMALL LETTER E WITH GRAVE
+0xE9	0x00E9	#	LATIN SMALL LETTER E WITH ACUTE
+0xEA	0x00EA	#	LATIN SMALL LETTER E WITH CIRCUMFLEX
+0xEB	0x00EB	#	LATIN SMALL LETTER E WITH DIAERESIS
+0xEC	0x00EC	#	LATIN SMALL LETTER I WITH GRAVE
+0xED	0x00ED	#	LATIN SMALL LETTER I WITH ACUTE
+0xEE	0x00EE	#	LATIN SMALL LETTER I WITH CIRCUMFLEX
+0xEF	0x00EF	#	LATIN SMALL LETTER I WITH DIAERESIS
+0xF1	0x00F1	#	LATIN SMALL LETTER N WITH TILDE
+0xF2	0x00F2	#	LATIN SMALL LETTER O WITH GRAVE
+0xF3	0x00F3	#	LATIN SMALL LETTER O WITH ACUTE
+0xF4	0x00F4	#	LATIN SMALL LETTER O WITH CIRCUMFLEX
+0xF5	0x0121	#	LATIN SMALL LETTER G WITH DOT ABOVE
+0xF6	0x00F6	#	LATIN SMALL LETTER O WITH DIAERESIS
+0xF7	0x00F7	#	DIVISION SIGN
+0xF8	0x011D	#	LATIN SMALL LETTER G WITH CIRCUMFLEX
+0xF9	0x00F9	#	LATIN SMALL LETTER U WITH GRAVE
+0xFA	0x00FA	#	LATIN SMALL LETTER U WITH ACUTE
+0xFB	0x00FB	#	LATIN SMALL LETTER U WITH CIRCUMFLEX
+0xFC	0x00FC	#	LATIN SMALL LETTER U WITH DIAERESIS
+0xFD	0x016D	#	LATIN SMALL LETTER U WITH BREVE
+0xFE	0x015D	#	LATIN SMALL LETTER S WITH CIRCUMFLEX
+0xFF	0x02D9	#	DOT ABOVE
diff --git a/externals/figlet/fonts/8859-4.flc b/externals/figlet/fonts/8859-4.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/8859-4.flc
@@ -0,0 +1,303 @@
+#
+#	Name:             ISO/IEC 8859-4:1998 to Unicode
+#	Unicode version:  3.0
+#	Table version:    1.0
+#	Table format:     Format A
+#	Date:             1999 July 27
+#	Authors:          Ken Whistler <kenw@sybase.com>
+#
+#	Copyright (c) 1991-1999 Unicode, Inc.  All Rights reserved.
+#
+#	This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+#	No claims are made as to fitness for any particular purpose.  No
+#	warranties of any kind are expressed or implied.  The recipient
+#	agrees to determine applicability of information provided.  If this
+#	file has been provided on optical media by Unicode, Inc., the sole
+#	remedy for any claim will be exchange of defective media within 90
+#	days of receipt.
+#
+#	Unicode, Inc. hereby grants the right to freely use the information
+#	supplied in this file in the creation of products supporting the
+#	Unicode Standard, and to make copies of this file in any form for
+#	internal or external distribution as long as this notice remains
+#	attached.
+#
+#	General notes:
+#
+#	This table contains the data the Unicode Consortium has on how
+#       ISO/IEC 8859-4:1998 characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the ISO/IEC 8859-4 code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in ISO/IEC 8859-4 order.
+#
+#	Version history
+#	1.0 version updates 0.1 version by adding mappings for all
+#	control characters.
+#
+#	Updated versions of this file may be found in:
+#		<ftp://ftp.unicode.org/Public/MAPPINGS/>
+#
+#	Any comments or problems, contact <errata@unicode.org>
+#	Please note that <errata@unicode.org> is an archival address;
+#	notices will be checked, but do not expect an immediate response.
+#
+0x00	0x0000	#	NULL
+0x01	0x0001	#	START OF HEADING
+0x02	0x0002	#	START OF TEXT
+0x03	0x0003	#	END OF TEXT
+0x04	0x0004	#	END OF TRANSMISSION
+0x05	0x0005	#	ENQUIRY
+0x06	0x0006	#	ACKNOWLEDGE
+0x07	0x0007	#	BELL
+0x08	0x0008	#	BACKSPACE
+0x09	0x0009	#	HORIZONTAL TABULATION
+0x0A	0x000A	#	LINE FEED
+0x0B	0x000B	#	VERTICAL TABULATION
+0x0C	0x000C	#	FORM FEED
+0x0D	0x000D	#	CARRIAGE RETURN
+0x0E	0x000E	#	SHIFT OUT
+0x0F	0x000F	#	SHIFT IN
+0x10	0x0010	#	DATA LINK ESCAPE
+0x11	0x0011	#	DEVICE CONTROL ONE
+0x12	0x0012	#	DEVICE CONTROL TWO
+0x13	0x0013	#	DEVICE CONTROL THREE
+0x14	0x0014	#	DEVICE CONTROL FOUR
+0x15	0x0015	#	NEGATIVE ACKNOWLEDGE
+0x16	0x0016	#	SYNCHRONOUS IDLE
+0x17	0x0017	#	END OF TRANSMISSION BLOCK
+0x18	0x0018	#	CANCEL
+0x19	0x0019	#	END OF MEDIUM
+0x1A	0x001A	#	SUBSTITUTE
+0x1B	0x001B	#	ESCAPE
+0x1C	0x001C	#	FILE SEPARATOR
+0x1D	0x001D	#	GROUP SEPARATOR
+0x1E	0x001E	#	RECORD SEPARATOR
+0x1F	0x001F	#	UNIT SEPARATOR
+0x20	0x0020	#	SPACE
+0x21	0x0021	#	EXCLAMATION MARK
+0x22	0x0022	#	QUOTATION MARK
+0x23	0x0023	#	NUMBER SIGN
+0x24	0x0024	#	DOLLAR SIGN
+0x25	0x0025	#	PERCENT SIGN
+0x26	0x0026	#	AMPERSAND
+0x27	0x0027	#	APOSTROPHE
+0x28	0x0028	#	LEFT PARENTHESIS
+0x29	0x0029	#	RIGHT PARENTHESIS
+0x2A	0x002A	#	ASTERISK
+0x2B	0x002B	#	PLUS SIGN
+0x2C	0x002C	#	COMMA
+0x2D	0x002D	#	HYPHEN-MINUS
+0x2E	0x002E	#	FULL STOP
+0x2F	0x002F	#	SOLIDUS
+0x30	0x0030	#	DIGIT ZERO
+0x31	0x0031	#	DIGIT ONE
+0x32	0x0032	#	DIGIT TWO
+0x33	0x0033	#	DIGIT THREE
+0x34	0x0034	#	DIGIT FOUR
+0x35	0x0035	#	DIGIT FIVE
+0x36	0x0036	#	DIGIT SIX
+0x37	0x0037	#	DIGIT SEVEN
+0x38	0x0038	#	DIGIT EIGHT
+0x39	0x0039	#	DIGIT NINE
+0x3A	0x003A	#	COLON
+0x3B	0x003B	#	SEMICOLON
+0x3C	0x003C	#	LESS-THAN SIGN
+0x3D	0x003D	#	EQUALS SIGN
+0x3E	0x003E	#	GREATER-THAN SIGN
+0x3F	0x003F	#	QUESTION MARK
+0x40	0x0040	#	COMMERCIAL AT
+0x41	0x0041	#	LATIN CAPITAL LETTER A
+0x42	0x0042	#	LATIN CAPITAL LETTER B
+0x43	0x0043	#	LATIN CAPITAL LETTER C
+0x44	0x0044	#	LATIN CAPITAL LETTER D
+0x45	0x0045	#	LATIN CAPITAL LETTER E
+0x46	0x0046	#	LATIN CAPITAL LETTER F
+0x47	0x0047	#	LATIN CAPITAL LETTER G
+0x48	0x0048	#	LATIN CAPITAL LETTER H
+0x49	0x0049	#	LATIN CAPITAL LETTER I
+0x4A	0x004A	#	LATIN CAPITAL LETTER J
+0x4B	0x004B	#	LATIN CAPITAL LETTER K
+0x4C	0x004C	#	LATIN CAPITAL LETTER L
+0x4D	0x004D	#	LATIN CAPITAL LETTER M
+0x4E	0x004E	#	LATIN CAPITAL LETTER N
+0x4F	0x004F	#	LATIN CAPITAL LETTER O
+0x50	0x0050	#	LATIN CAPITAL LETTER P
+0x51	0x0051	#	LATIN CAPITAL LETTER Q
+0x52	0x0052	#	LATIN CAPITAL LETTER R
+0x53	0x0053	#	LATIN CAPITAL LETTER S
+0x54	0x0054	#	LATIN CAPITAL LETTER T
+0x55	0x0055	#	LATIN CAPITAL LETTER U
+0x56	0x0056	#	LATIN CAPITAL LETTER V
+0x57	0x0057	#	LATIN CAPITAL LETTER W
+0x58	0x0058	#	LATIN CAPITAL LETTER X
+0x59	0x0059	#	LATIN CAPITAL LETTER Y
+0x5A	0x005A	#	LATIN CAPITAL LETTER Z
+0x5B	0x005B	#	LEFT SQUARE BRACKET
+0x5C	0x005C	#	REVERSE SOLIDUS
+0x5D	0x005D	#	RIGHT SQUARE BRACKET
+0x5E	0x005E	#	CIRCUMFLEX ACCENT
+0x5F	0x005F	#	LOW LINE
+0x60	0x0060	#	GRAVE ACCENT
+0x61	0x0061	#	LATIN SMALL LETTER A
+0x62	0x0062	#	LATIN SMALL LETTER B
+0x63	0x0063	#	LATIN SMALL LETTER C
+0x64	0x0064	#	LATIN SMALL LETTER D
+0x65	0x0065	#	LATIN SMALL LETTER E
+0x66	0x0066	#	LATIN SMALL LETTER F
+0x67	0x0067	#	LATIN SMALL LETTER G
+0x68	0x0068	#	LATIN SMALL LETTER H
+0x69	0x0069	#	LATIN SMALL LETTER I
+0x6A	0x006A	#	LATIN SMALL LETTER J
+0x6B	0x006B	#	LATIN SMALL LETTER K
+0x6C	0x006C	#	LATIN SMALL LETTER L
+0x6D	0x006D	#	LATIN SMALL LETTER M
+0x6E	0x006E	#	LATIN SMALL LETTER N
+0x6F	0x006F	#	LATIN SMALL LETTER O
+0x70	0x0070	#	LATIN SMALL LETTER P
+0x71	0x0071	#	LATIN SMALL LETTER Q
+0x72	0x0072	#	LATIN SMALL LETTER R
+0x73	0x0073	#	LATIN SMALL LETTER S
+0x74	0x0074	#	LATIN SMALL LETTER T
+0x75	0x0075	#	LATIN SMALL LETTER U
+0x76	0x0076	#	LATIN SMALL LETTER V
+0x77	0x0077	#	LATIN SMALL LETTER W
+0x78	0x0078	#	LATIN SMALL LETTER X
+0x79	0x0079	#	LATIN SMALL LETTER Y
+0x7A	0x007A	#	LATIN SMALL LETTER Z
+0x7B	0x007B	#	LEFT CURLY BRACKET
+0x7C	0x007C	#	VERTICAL LINE
+0x7D	0x007D	#	RIGHT CURLY BRACKET
+0x7E	0x007E	#	TILDE
+0x7F	0x007F	#	DELETE
+0x80	0x0080	#	<control>
+0x81	0x0081	#	<control>
+0x82	0x0082	#	<control>
+0x83	0x0083	#	<control>
+0x84	0x0084	#	<control>
+0x85	0x0085	#	<control>
+0x86	0x0086	#	<control>
+0x87	0x0087	#	<control>
+0x88	0x0088	#	<control>
+0x89	0x0089	#	<control>
+0x8A	0x008A	#	<control>
+0x8B	0x008B	#	<control>
+0x8C	0x008C	#	<control>
+0x8D	0x008D	#	<control>
+0x8E	0x008E	#	<control>
+0x8F	0x008F	#	<control>
+0x90	0x0090	#	<control>
+0x91	0x0091	#	<control>
+0x92	0x0092	#	<control>
+0x93	0x0093	#	<control>
+0x94	0x0094	#	<control>
+0x95	0x0095	#	<control>
+0x96	0x0096	#	<control>
+0x97	0x0097	#	<control>
+0x98	0x0098	#	<control>
+0x99	0x0099	#	<control>
+0x9A	0x009A	#	<control>
+0x9B	0x009B	#	<control>
+0x9C	0x009C	#	<control>
+0x9D	0x009D	#	<control>
+0x9E	0x009E	#	<control>
+0x9F	0x009F	#	<control>
+0xA0	0x00A0	#	NO-BREAK SPACE
+0xA1	0x0104	#	LATIN CAPITAL LETTER A WITH OGONEK
+0xA2	0x0138	#	LATIN SMALL LETTER KRA
+0xA3	0x0156	#	LATIN CAPITAL LETTER R WITH CEDILLA
+0xA4	0x00A4	#	CURRENCY SIGN
+0xA5	0x0128	#	LATIN CAPITAL LETTER I WITH TILDE
+0xA6	0x013B	#	LATIN CAPITAL LETTER L WITH CEDILLA
+0xA7	0x00A7	#	SECTION SIGN
+0xA8	0x00A8	#	DIAERESIS
+0xA9	0x0160	#	LATIN CAPITAL LETTER S WITH CARON
+0xAA	0x0112	#	LATIN CAPITAL LETTER E WITH MACRON
+0xAB	0x0122	#	LATIN CAPITAL LETTER G WITH CEDILLA
+0xAC	0x0166	#	LATIN CAPITAL LETTER T WITH STROKE
+0xAD	0x00AD	#	SOFT HYPHEN
+0xAE	0x017D	#	LATIN CAPITAL LETTER Z WITH CARON
+0xAF	0x00AF	#	MACRON
+0xB0	0x00B0	#	DEGREE SIGN
+0xB1	0x0105	#	LATIN SMALL LETTER A WITH OGONEK
+0xB2	0x02DB	#	OGONEK
+0xB3	0x0157	#	LATIN SMALL LETTER R WITH CEDILLA
+0xB4	0x00B4	#	ACUTE ACCENT
+0xB5	0x0129	#	LATIN SMALL LETTER I WITH TILDE
+0xB6	0x013C	#	LATIN SMALL LETTER L WITH CEDILLA
+0xB7	0x02C7	#	CARON
+0xB8	0x00B8	#	CEDILLA
+0xB9	0x0161	#	LATIN SMALL LETTER S WITH CARON
+0xBA	0x0113	#	LATIN SMALL LETTER E WITH MACRON
+0xBB	0x0123	#	LATIN SMALL LETTER G WITH CEDILLA
+0xBC	0x0167	#	LATIN SMALL LETTER T WITH STROKE
+0xBD	0x014A	#	LATIN CAPITAL LETTER ENG
+0xBE	0x017E	#	LATIN SMALL LETTER Z WITH CARON
+0xBF	0x014B	#	LATIN SMALL LETTER ENG
+0xC0	0x0100	#	LATIN CAPITAL LETTER A WITH MACRON
+0xC1	0x00C1	#	LATIN CAPITAL LETTER A WITH ACUTE
+0xC2	0x00C2	#	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0xC3	0x00C3	#	LATIN CAPITAL LETTER A WITH TILDE
+0xC4	0x00C4	#	LATIN CAPITAL LETTER A WITH DIAERESIS
+0xC5	0x00C5	#	LATIN CAPITAL LETTER A WITH RING ABOVE
+0xC6	0x00C6	#	LATIN CAPITAL LETTER AE
+0xC7	0x012E	#	LATIN CAPITAL LETTER I WITH OGONEK
+0xC8	0x010C	#	LATIN CAPITAL LETTER C WITH CARON
+0xC9	0x00C9	#	LATIN CAPITAL LETTER E WITH ACUTE
+0xCA	0x0118	#	LATIN CAPITAL LETTER E WITH OGONEK
+0xCB	0x00CB	#	LATIN CAPITAL LETTER E WITH DIAERESIS
+0xCC	0x0116	#	LATIN CAPITAL LETTER E WITH DOT ABOVE
+0xCD	0x00CD	#	LATIN CAPITAL LETTER I WITH ACUTE
+0xCE	0x00CE	#	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0xCF	0x012A	#	LATIN CAPITAL LETTER I WITH MACRON
+0xD0	0x0110	#	LATIN CAPITAL LETTER D WITH STROKE
+0xD1	0x0145	#	LATIN CAPITAL LETTER N WITH CEDILLA
+0xD2	0x014C	#	LATIN CAPITAL LETTER O WITH MACRON
+0xD3	0x0136	#	LATIN CAPITAL LETTER K WITH CEDILLA
+0xD4	0x00D4	#	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xD5	0x00D5	#	LATIN CAPITAL LETTER O WITH TILDE
+0xD6	0x00D6	#	LATIN CAPITAL LETTER O WITH DIAERESIS
+0xD7	0x00D7	#	MULTIPLICATION SIGN
+0xD8	0x00D8	#	LATIN CAPITAL LETTER O WITH STROKE
+0xD9	0x0172	#	LATIN CAPITAL LETTER U WITH OGONEK
+0xDA	0x00DA	#	LATIN CAPITAL LETTER U WITH ACUTE
+0xDB	0x00DB	#	LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+0xDC	0x00DC	#	LATIN CAPITAL LETTER U WITH DIAERESIS
+0xDD	0x0168	#	LATIN CAPITAL LETTER U WITH TILDE
+0xDE	0x016A	#	LATIN CAPITAL LETTER U WITH MACRON
+0xDF	0x00DF	#	LATIN SMALL LETTER SHARP S
+0xE0	0x0101	#	LATIN SMALL LETTER A WITH MACRON
+0xE1	0x00E1	#	LATIN SMALL LETTER A WITH ACUTE
+0xE2	0x00E2	#	LATIN SMALL LETTER A WITH CIRCUMFLEX
+0xE3	0x00E3	#	LATIN SMALL LETTER A WITH TILDE
+0xE4	0x00E4	#	LATIN SMALL LETTER A WITH DIAERESIS
+0xE5	0x00E5	#	LATIN SMALL LETTER A WITH RING ABOVE
+0xE6	0x00E6	#	LATIN SMALL LETTER AE
+0xE7	0x012F	#	LATIN SMALL LETTER I WITH OGONEK
+0xE8	0x010D	#	LATIN SMALL LETTER C WITH CARON
+0xE9	0x00E9	#	LATIN SMALL LETTER E WITH ACUTE
+0xEA	0x0119	#	LATIN SMALL LETTER E WITH OGONEK
+0xEB	0x00EB	#	LATIN SMALL LETTER E WITH DIAERESIS
+0xEC	0x0117	#	LATIN SMALL LETTER E WITH DOT ABOVE
+0xED	0x00ED	#	LATIN SMALL LETTER I WITH ACUTE
+0xEE	0x00EE	#	LATIN SMALL LETTER I WITH CIRCUMFLEX
+0xEF	0x012B	#	LATIN SMALL LETTER I WITH MACRON
+0xF0	0x0111	#	LATIN SMALL LETTER D WITH STROKE
+0xF1	0x0146	#	LATIN SMALL LETTER N WITH CEDILLA
+0xF2	0x014D	#	LATIN SMALL LETTER O WITH MACRON
+0xF3	0x0137	#	LATIN SMALL LETTER K WITH CEDILLA
+0xF4	0x00F4	#	LATIN SMALL LETTER O WITH CIRCUMFLEX
+0xF5	0x00F5	#	LATIN SMALL LETTER O WITH TILDE
+0xF6	0x00F6	#	LATIN SMALL LETTER O WITH DIAERESIS
+0xF7	0x00F7	#	DIVISION SIGN
+0xF8	0x00F8	#	LATIN SMALL LETTER O WITH STROKE
+0xF9	0x0173	#	LATIN SMALL LETTER U WITH OGONEK
+0xFA	0x00FA	#	LATIN SMALL LETTER U WITH ACUTE
+0xFB	0x00FB	#	LATIN SMALL LETTER U WITH CIRCUMFLEX
+0xFC	0x00FC	#	LATIN SMALL LETTER U WITH DIAERESIS
+0xFD	0x0169	#	LATIN SMALL LETTER U WITH TILDE
+0xFE	0x016B	#	LATIN SMALL LETTER U WITH MACRON
+0xFF	0x02D9	#	DOT ABOVE
diff --git a/externals/figlet/fonts/8859-5.flc b/externals/figlet/fonts/8859-5.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/8859-5.flc
@@ -0,0 +1,303 @@
+#
+#	Name:             ISO 8859-5:1999 to Unicode
+#	Unicode version:  3.0
+#	Table version:    1.0
+#	Table format:     Format A
+#	Date:             1999 July 27
+#	Authors:          Ken Whistler <kenw@sybase.com>
+#
+#	Copyright (c) 1991-1999 Unicode, Inc.  All Rights reserved.
+#
+#	This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+#	No claims are made as to fitness for any particular purpose.  No
+#	warranties of any kind are expressed or implied.  The recipient
+#	agrees to determine applicability of information provided.  If this
+#	file has been provided on optical media by Unicode, Inc., the sole
+#	remedy for any claim will be exchange of defective media within 90
+#	days of receipt.
+#
+#	Unicode, Inc. hereby grants the right to freely use the information
+#	supplied in this file in the creation of products supporting the
+#	Unicode Standard, and to make copies of this file in any form for
+#	internal or external distribution as long as this notice remains
+#	attached.
+#
+#	General notes:
+#
+#	This table contains the data the Unicode Consortium has on how
+#       ISO/IEC 8859-5:1999 characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the ISO/IEC 8859-5 code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in ISO/IEC 8859-5 order.
+#
+#	Version history
+#	1.0 version updates 0.1 version by adding mappings for all
+#	control characters.
+#
+#	Updated versions of this file may be found in:
+#		<ftp://ftp.unicode.org/Public/MAPPINGS/>
+#
+#	Any comments or problems, contact <errata@unicode.org>
+#	Please note that <errata@unicode.org> is an archival address;
+#	notices will be checked, but do not expect an immediate response.
+#
+0x00	0x0000	#	NULL
+0x01	0x0001	#	START OF HEADING
+0x02	0x0002	#	START OF TEXT
+0x03	0x0003	#	END OF TEXT
+0x04	0x0004	#	END OF TRANSMISSION
+0x05	0x0005	#	ENQUIRY
+0x06	0x0006	#	ACKNOWLEDGE
+0x07	0x0007	#	BELL
+0x08	0x0008	#	BACKSPACE
+0x09	0x0009	#	HORIZONTAL TABULATION
+0x0A	0x000A	#	LINE FEED
+0x0B	0x000B	#	VERTICAL TABULATION
+0x0C	0x000C	#	FORM FEED
+0x0D	0x000D	#	CARRIAGE RETURN
+0x0E	0x000E	#	SHIFT OUT
+0x0F	0x000F	#	SHIFT IN
+0x10	0x0010	#	DATA LINK ESCAPE
+0x11	0x0011	#	DEVICE CONTROL ONE
+0x12	0x0012	#	DEVICE CONTROL TWO
+0x13	0x0013	#	DEVICE CONTROL THREE
+0x14	0x0014	#	DEVICE CONTROL FOUR
+0x15	0x0015	#	NEGATIVE ACKNOWLEDGE
+0x16	0x0016	#	SYNCHRONOUS IDLE
+0x17	0x0017	#	END OF TRANSMISSION BLOCK
+0x18	0x0018	#	CANCEL
+0x19	0x0019	#	END OF MEDIUM
+0x1A	0x001A	#	SUBSTITUTE
+0x1B	0x001B	#	ESCAPE
+0x1C	0x001C	#	FILE SEPARATOR
+0x1D	0x001D	#	GROUP SEPARATOR
+0x1E	0x001E	#	RECORD SEPARATOR
+0x1F	0x001F	#	UNIT SEPARATOR
+0x20	0x0020	#	SPACE
+0x21	0x0021	#	EXCLAMATION MARK
+0x22	0x0022	#	QUOTATION MARK
+0x23	0x0023	#	NUMBER SIGN
+0x24	0x0024	#	DOLLAR SIGN
+0x25	0x0025	#	PERCENT SIGN
+0x26	0x0026	#	AMPERSAND
+0x27	0x0027	#	APOSTROPHE
+0x28	0x0028	#	LEFT PARENTHESIS
+0x29	0x0029	#	RIGHT PARENTHESIS
+0x2A	0x002A	#	ASTERISK
+0x2B	0x002B	#	PLUS SIGN
+0x2C	0x002C	#	COMMA
+0x2D	0x002D	#	HYPHEN-MINUS
+0x2E	0x002E	#	FULL STOP
+0x2F	0x002F	#	SOLIDUS
+0x30	0x0030	#	DIGIT ZERO
+0x31	0x0031	#	DIGIT ONE
+0x32	0x0032	#	DIGIT TWO
+0x33	0x0033	#	DIGIT THREE
+0x34	0x0034	#	DIGIT FOUR
+0x35	0x0035	#	DIGIT FIVE
+0x36	0x0036	#	DIGIT SIX
+0x37	0x0037	#	DIGIT SEVEN
+0x38	0x0038	#	DIGIT EIGHT
+0x39	0x0039	#	DIGIT NINE
+0x3A	0x003A	#	COLON
+0x3B	0x003B	#	SEMICOLON
+0x3C	0x003C	#	LESS-THAN SIGN
+0x3D	0x003D	#	EQUALS SIGN
+0x3E	0x003E	#	GREATER-THAN SIGN
+0x3F	0x003F	#	QUESTION MARK
+0x40	0x0040	#	COMMERCIAL AT
+0x41	0x0041	#	LATIN CAPITAL LETTER A
+0x42	0x0042	#	LATIN CAPITAL LETTER B
+0x43	0x0043	#	LATIN CAPITAL LETTER C
+0x44	0x0044	#	LATIN CAPITAL LETTER D
+0x45	0x0045	#	LATIN CAPITAL LETTER E
+0x46	0x0046	#	LATIN CAPITAL LETTER F
+0x47	0x0047	#	LATIN CAPITAL LETTER G
+0x48	0x0048	#	LATIN CAPITAL LETTER H
+0x49	0x0049	#	LATIN CAPITAL LETTER I
+0x4A	0x004A	#	LATIN CAPITAL LETTER J
+0x4B	0x004B	#	LATIN CAPITAL LETTER K
+0x4C	0x004C	#	LATIN CAPITAL LETTER L
+0x4D	0x004D	#	LATIN CAPITAL LETTER M
+0x4E	0x004E	#	LATIN CAPITAL LETTER N
+0x4F	0x004F	#	LATIN CAPITAL LETTER O
+0x50	0x0050	#	LATIN CAPITAL LETTER P
+0x51	0x0051	#	LATIN CAPITAL LETTER Q
+0x52	0x0052	#	LATIN CAPITAL LETTER R
+0x53	0x0053	#	LATIN CAPITAL LETTER S
+0x54	0x0054	#	LATIN CAPITAL LETTER T
+0x55	0x0055	#	LATIN CAPITAL LETTER U
+0x56	0x0056	#	LATIN CAPITAL LETTER V
+0x57	0x0057	#	LATIN CAPITAL LETTER W
+0x58	0x0058	#	LATIN CAPITAL LETTER X
+0x59	0x0059	#	LATIN CAPITAL LETTER Y
+0x5A	0x005A	#	LATIN CAPITAL LETTER Z
+0x5B	0x005B	#	LEFT SQUARE BRACKET
+0x5C	0x005C	#	REVERSE SOLIDUS
+0x5D	0x005D	#	RIGHT SQUARE BRACKET
+0x5E	0x005E	#	CIRCUMFLEX ACCENT
+0x5F	0x005F	#	LOW LINE
+0x60	0x0060	#	GRAVE ACCENT
+0x61	0x0061	#	LATIN SMALL LETTER A
+0x62	0x0062	#	LATIN SMALL LETTER B
+0x63	0x0063	#	LATIN SMALL LETTER C
+0x64	0x0064	#	LATIN SMALL LETTER D
+0x65	0x0065	#	LATIN SMALL LETTER E
+0x66	0x0066	#	LATIN SMALL LETTER F
+0x67	0x0067	#	LATIN SMALL LETTER G
+0x68	0x0068	#	LATIN SMALL LETTER H
+0x69	0x0069	#	LATIN SMALL LETTER I
+0x6A	0x006A	#	LATIN SMALL LETTER J
+0x6B	0x006B	#	LATIN SMALL LETTER K
+0x6C	0x006C	#	LATIN SMALL LETTER L
+0x6D	0x006D	#	LATIN SMALL LETTER M
+0x6E	0x006E	#	LATIN SMALL LETTER N
+0x6F	0x006F	#	LATIN SMALL LETTER O
+0x70	0x0070	#	LATIN SMALL LETTER P
+0x71	0x0071	#	LATIN SMALL LETTER Q
+0x72	0x0072	#	LATIN SMALL LETTER R
+0x73	0x0073	#	LATIN SMALL LETTER S
+0x74	0x0074	#	LATIN SMALL LETTER T
+0x75	0x0075	#	LATIN SMALL LETTER U
+0x76	0x0076	#	LATIN SMALL LETTER V
+0x77	0x0077	#	LATIN SMALL LETTER W
+0x78	0x0078	#	LATIN SMALL LETTER X
+0x79	0x0079	#	LATIN SMALL LETTER Y
+0x7A	0x007A	#	LATIN SMALL LETTER Z
+0x7B	0x007B	#	LEFT CURLY BRACKET
+0x7C	0x007C	#	VERTICAL LINE
+0x7D	0x007D	#	RIGHT CURLY BRACKET
+0x7E	0x007E	#	TILDE
+0x7F	0x007F	#	DELETE
+0x80	0x0080	#	<control>
+0x81	0x0081	#	<control>
+0x82	0x0082	#	<control>
+0x83	0x0083	#	<control>
+0x84	0x0084	#	<control>
+0x85	0x0085	#	<control>
+0x86	0x0086	#	<control>
+0x87	0x0087	#	<control>
+0x88	0x0088	#	<control>
+0x89	0x0089	#	<control>
+0x8A	0x008A	#	<control>
+0x8B	0x008B	#	<control>
+0x8C	0x008C	#	<control>
+0x8D	0x008D	#	<control>
+0x8E	0x008E	#	<control>
+0x8F	0x008F	#	<control>
+0x90	0x0090	#	<control>
+0x91	0x0091	#	<control>
+0x92	0x0092	#	<control>
+0x93	0x0093	#	<control>
+0x94	0x0094	#	<control>
+0x95	0x0095	#	<control>
+0x96	0x0096	#	<control>
+0x97	0x0097	#	<control>
+0x98	0x0098	#	<control>
+0x99	0x0099	#	<control>
+0x9A	0x009A	#	<control>
+0x9B	0x009B	#	<control>
+0x9C	0x009C	#	<control>
+0x9D	0x009D	#	<control>
+0x9E	0x009E	#	<control>
+0x9F	0x009F	#	<control>
+0xA0	0x00A0	#	NO-BREAK SPACE
+0xA1	0x0401	#	CYRILLIC CAPITAL LETTER IO
+0xA2	0x0402	#	CYRILLIC CAPITAL LETTER DJE
+0xA3	0x0403	#	CYRILLIC CAPITAL LETTER GJE
+0xA4	0x0404	#	CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0xA5	0x0405	#	CYRILLIC CAPITAL LETTER DZE
+0xA6	0x0406	#	CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+0xA7	0x0407	#	CYRILLIC CAPITAL LETTER YI
+0xA8	0x0408	#	CYRILLIC CAPITAL LETTER JE
+0xA9	0x0409	#	CYRILLIC CAPITAL LETTER LJE
+0xAA	0x040A	#	CYRILLIC CAPITAL LETTER NJE
+0xAB	0x040B	#	CYRILLIC CAPITAL LETTER TSHE
+0xAC	0x040C	#	CYRILLIC CAPITAL LETTER KJE
+0xAD	0x00AD	#	SOFT HYPHEN
+0xAE	0x040E	#	CYRILLIC CAPITAL LETTER SHORT U
+0xAF	0x040F	#	CYRILLIC CAPITAL LETTER DZHE
+0xB0	0x0410	#	CYRILLIC CAPITAL LETTER A
+0xB1	0x0411	#	CYRILLIC CAPITAL LETTER BE
+0xB2	0x0412	#	CYRILLIC CAPITAL LETTER VE
+0xB3	0x0413	#	CYRILLIC CAPITAL LETTER GHE
+0xB4	0x0414	#	CYRILLIC CAPITAL LETTER DE
+0xB5	0x0415	#	CYRILLIC CAPITAL LETTER IE
+0xB6	0x0416	#	CYRILLIC CAPITAL LETTER ZHE
+0xB7	0x0417	#	CYRILLIC CAPITAL LETTER ZE
+0xB8	0x0418	#	CYRILLIC CAPITAL LETTER I
+0xB9	0x0419	#	CYRILLIC CAPITAL LETTER SHORT I
+0xBA	0x041A	#	CYRILLIC CAPITAL LETTER KA
+0xBB	0x041B	#	CYRILLIC CAPITAL LETTER EL
+0xBC	0x041C	#	CYRILLIC CAPITAL LETTER EM
+0xBD	0x041D	#	CYRILLIC CAPITAL LETTER EN
+0xBE	0x041E	#	CYRILLIC CAPITAL LETTER O
+0xBF	0x041F	#	CYRILLIC CAPITAL LETTER PE
+0xC0	0x0420	#	CYRILLIC CAPITAL LETTER ER
+0xC1	0x0421	#	CYRILLIC CAPITAL LETTER ES
+0xC2	0x0422	#	CYRILLIC CAPITAL LETTER TE
+0xC3	0x0423	#	CYRILLIC CAPITAL LETTER U
+0xC4	0x0424	#	CYRILLIC CAPITAL LETTER EF
+0xC5	0x0425	#	CYRILLIC CAPITAL LETTER HA
+0xC6	0x0426	#	CYRILLIC CAPITAL LETTER TSE
+0xC7	0x0427	#	CYRILLIC CAPITAL LETTER CHE
+0xC8	0x0428	#	CYRILLIC CAPITAL LETTER SHA
+0xC9	0x0429	#	CYRILLIC CAPITAL LETTER SHCHA
+0xCA	0x042A	#	CYRILLIC CAPITAL LETTER HARD SIGN
+0xCB	0x042B	#	CYRILLIC CAPITAL LETTER YERU
+0xCC	0x042C	#	CYRILLIC CAPITAL LETTER SOFT SIGN
+0xCD	0x042D	#	CYRILLIC CAPITAL LETTER E
+0xCE	0x042E	#	CYRILLIC CAPITAL LETTER YU
+0xCF	0x042F	#	CYRILLIC CAPITAL LETTER YA
+0xD0	0x0430	#	CYRILLIC SMALL LETTER A
+0xD1	0x0431	#	CYRILLIC SMALL LETTER BE
+0xD2	0x0432	#	CYRILLIC SMALL LETTER VE
+0xD3	0x0433	#	CYRILLIC SMALL LETTER GHE
+0xD4	0x0434	#	CYRILLIC SMALL LETTER DE
+0xD5	0x0435	#	CYRILLIC SMALL LETTER IE
+0xD6	0x0436	#	CYRILLIC SMALL LETTER ZHE
+0xD7	0x0437	#	CYRILLIC SMALL LETTER ZE
+0xD8	0x0438	#	CYRILLIC SMALL LETTER I
+0xD9	0x0439	#	CYRILLIC SMALL LETTER SHORT I
+0xDA	0x043A	#	CYRILLIC SMALL LETTER KA
+0xDB	0x043B	#	CYRILLIC SMALL LETTER EL
+0xDC	0x043C	#	CYRILLIC SMALL LETTER EM
+0xDD	0x043D	#	CYRILLIC SMALL LETTER EN
+0xDE	0x043E	#	CYRILLIC SMALL LETTER O
+0xDF	0x043F	#	CYRILLIC SMALL LETTER PE
+0xE0	0x0440	#	CYRILLIC SMALL LETTER ER
+0xE1	0x0441	#	CYRILLIC SMALL LETTER ES
+0xE2	0x0442	#	CYRILLIC SMALL LETTER TE
+0xE3	0x0443	#	CYRILLIC SMALL LETTER U
+0xE4	0x0444	#	CYRILLIC SMALL LETTER EF
+0xE5	0x0445	#	CYRILLIC SMALL LETTER HA
+0xE6	0x0446	#	CYRILLIC SMALL LETTER TSE
+0xE7	0x0447	#	CYRILLIC SMALL LETTER CHE
+0xE8	0x0448	#	CYRILLIC SMALL LETTER SHA
+0xE9	0x0449	#	CYRILLIC SMALL LETTER SHCHA
+0xEA	0x044A	#	CYRILLIC SMALL LETTER HARD SIGN
+0xEB	0x044B	#	CYRILLIC SMALL LETTER YERU
+0xEC	0x044C	#	CYRILLIC SMALL LETTER SOFT SIGN
+0xED	0x044D	#	CYRILLIC SMALL LETTER E
+0xEE	0x044E	#	CYRILLIC SMALL LETTER YU
+0xEF	0x044F	#	CYRILLIC SMALL LETTER YA
+0xF0	0x2116	#	NUMERO SIGN
+0xF1	0x0451	#	CYRILLIC SMALL LETTER IO
+0xF2	0x0452	#	CYRILLIC SMALL LETTER DJE
+0xF3	0x0453	#	CYRILLIC SMALL LETTER GJE
+0xF4	0x0454	#	CYRILLIC SMALL LETTER UKRAINIAN IE
+0xF5	0x0455	#	CYRILLIC SMALL LETTER DZE
+0xF6	0x0456	#	CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+0xF7	0x0457	#	CYRILLIC SMALL LETTER YI
+0xF8	0x0458	#	CYRILLIC SMALL LETTER JE
+0xF9	0x0459	#	CYRILLIC SMALL LETTER LJE
+0xFA	0x045A	#	CYRILLIC SMALL LETTER NJE
+0xFB	0x045B	#	CYRILLIC SMALL LETTER TSHE
+0xFC	0x045C	#	CYRILLIC SMALL LETTER KJE
+0xFD	0x00A7	#	SECTION SIGN
+0xFE	0x045E	#	CYRILLIC SMALL LETTER SHORT U
+0xFF	0x045F	#	CYRILLIC SMALL LETTER DZHE
diff --git a/externals/figlet/fonts/8859-7.flc b/externals/figlet/fonts/8859-7.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/8859-7.flc
@@ -0,0 +1,308 @@
+#
+#	Name:             ISO 8859-7:2003 to Unicode
+#	Unicode version:  4.0
+#	Table version:    2.0
+#	Table format:     Format A
+#	Date:             2003-Nov-12
+#	Authors:          Ken Whistler <kenw@sybase.com>
+#
+#	Copyright (c) 1991-2003 Unicode, Inc.  All Rights reserved.
+#
+#	This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+#	No claims are made as to fitness for any particular purpose.  No
+#	warranties of any kind are expressed or implied.  The recipient
+#	agrees to determine applicability of information provided.  If this
+#	file has been provided on optical media by Unicode, Inc., the sole
+#	remedy for any claim will be exchange of defective media within 90
+#	days of receipt.
+#
+#	Unicode, Inc. hereby grants the right to freely use the information
+#	supplied in this file in the creation of products supporting the
+#	Unicode Standard, and to make copies of this file in any form for
+#	internal or external distribution as long as this notice remains
+#	attached.
+#
+#	General notes:
+#
+#	This table contains the data the Unicode Consortium has on how
+#       ISO 8859-7:2003 characters map into Unicode.
+#
+#	ISO 8859-7:1987 is equivalent to ISO-IR-126, ELOT 928,
+#	and ECMA 118. ISO 8859-7:2003 adds two currency signs 
+#	and one other character not in the earlier standard.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the ISO 8859-7 code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in ISO 8859-7 order.
+#
+#	Version history
+#	1.0 version updates 0.1 version by adding mappings for all
+#	control characters.
+#	Remap 0xA1 to U+2018 (instead of 0x02BD) to match text of 8859-7
+#	Remap 0xA2 to U+2019 (instead of 0x02BC) to match text of 8859-7
+#
+#	2.0 version updates 1.0 version by adding mappings for the
+#	three newly added characters 0xA4, 0xA5, 0xAA.
+#
+#	Updated versions of this file may be found in:
+#		<http://www.unicode.org/Public/MAPPINGS/>
+#
+#	Any comments or problems, contact the Unicode Consortium at:
+#	        <http://www.unicode.org/reporting.html>
+#
+0x00	0x0000	#	NULL
+0x01	0x0001	#	START OF HEADING
+0x02	0x0002	#	START OF TEXT
+0x03	0x0003	#	END OF TEXT
+0x04	0x0004	#	END OF TRANSMISSION
+0x05	0x0005	#	ENQUIRY
+0x06	0x0006	#	ACKNOWLEDGE
+0x07	0x0007	#	BELL
+0x08	0x0008	#	BACKSPACE
+0x09	0x0009	#	HORIZONTAL TABULATION
+0x0A	0x000A	#	LINE FEED
+0x0B	0x000B	#	VERTICAL TABULATION
+0x0C	0x000C	#	FORM FEED
+0x0D	0x000D	#	CARRIAGE RETURN
+0x0E	0x000E	#	SHIFT OUT
+0x0F	0x000F	#	SHIFT IN
+0x10	0x0010	#	DATA LINK ESCAPE
+0x11	0x0011	#	DEVICE CONTROL ONE
+0x12	0x0012	#	DEVICE CONTROL TWO
+0x13	0x0013	#	DEVICE CONTROL THREE
+0x14	0x0014	#	DEVICE CONTROL FOUR
+0x15	0x0015	#	NEGATIVE ACKNOWLEDGE
+0x16	0x0016	#	SYNCHRONOUS IDLE
+0x17	0x0017	#	END OF TRANSMISSION BLOCK
+0x18	0x0018	#	CANCEL
+0x19	0x0019	#	END OF MEDIUM
+0x1A	0x001A	#	SUBSTITUTE
+0x1B	0x001B	#	ESCAPE
+0x1C	0x001C	#	FILE SEPARATOR
+0x1D	0x001D	#	GROUP SEPARATOR
+0x1E	0x001E	#	RECORD SEPARATOR
+0x1F	0x001F	#	UNIT SEPARATOR
+0x20	0x0020	#	SPACE
+0x21	0x0021	#	EXCLAMATION MARK
+0x22	0x0022	#	QUOTATION MARK
+0x23	0x0023	#	NUMBER SIGN
+0x24	0x0024	#	DOLLAR SIGN
+0x25	0x0025	#	PERCENT SIGN
+0x26	0x0026	#	AMPERSAND
+0x27	0x0027	#	APOSTROPHE
+0x28	0x0028	#	LEFT PARENTHESIS
+0x29	0x0029	#	RIGHT PARENTHESIS
+0x2A	0x002A	#	ASTERISK
+0x2B	0x002B	#	PLUS SIGN
+0x2C	0x002C	#	COMMA
+0x2D	0x002D	#	HYPHEN-MINUS
+0x2E	0x002E	#	FULL STOP
+0x2F	0x002F	#	SOLIDUS
+0x30	0x0030	#	DIGIT ZERO
+0x31	0x0031	#	DIGIT ONE
+0x32	0x0032	#	DIGIT TWO
+0x33	0x0033	#	DIGIT THREE
+0x34	0x0034	#	DIGIT FOUR
+0x35	0x0035	#	DIGIT FIVE
+0x36	0x0036	#	DIGIT SIX
+0x37	0x0037	#	DIGIT SEVEN
+0x38	0x0038	#	DIGIT EIGHT
+0x39	0x0039	#	DIGIT NINE
+0x3A	0x003A	#	COLON
+0x3B	0x003B	#	SEMICOLON
+0x3C	0x003C	#	LESS-THAN SIGN
+0x3D	0x003D	#	EQUALS SIGN
+0x3E	0x003E	#	GREATER-THAN SIGN
+0x3F	0x003F	#	QUESTION MARK
+0x40	0x0040	#	COMMERCIAL AT
+0x41	0x0041	#	LATIN CAPITAL LETTER A
+0x42	0x0042	#	LATIN CAPITAL LETTER B
+0x43	0x0043	#	LATIN CAPITAL LETTER C
+0x44	0x0044	#	LATIN CAPITAL LETTER D
+0x45	0x0045	#	LATIN CAPITAL LETTER E
+0x46	0x0046	#	LATIN CAPITAL LETTER F
+0x47	0x0047	#	LATIN CAPITAL LETTER G
+0x48	0x0048	#	LATIN CAPITAL LETTER H
+0x49	0x0049	#	LATIN CAPITAL LETTER I
+0x4A	0x004A	#	LATIN CAPITAL LETTER J
+0x4B	0x004B	#	LATIN CAPITAL LETTER K
+0x4C	0x004C	#	LATIN CAPITAL LETTER L
+0x4D	0x004D	#	LATIN CAPITAL LETTER M
+0x4E	0x004E	#	LATIN CAPITAL LETTER N
+0x4F	0x004F	#	LATIN CAPITAL LETTER O
+0x50	0x0050	#	LATIN CAPITAL LETTER P
+0x51	0x0051	#	LATIN CAPITAL LETTER Q
+0x52	0x0052	#	LATIN CAPITAL LETTER R
+0x53	0x0053	#	LATIN CAPITAL LETTER S
+0x54	0x0054	#	LATIN CAPITAL LETTER T
+0x55	0x0055	#	LATIN CAPITAL LETTER U
+0x56	0x0056	#	LATIN CAPITAL LETTER V
+0x57	0x0057	#	LATIN CAPITAL LETTER W
+0x58	0x0058	#	LATIN CAPITAL LETTER X
+0x59	0x0059	#	LATIN CAPITAL LETTER Y
+0x5A	0x005A	#	LATIN CAPITAL LETTER Z
+0x5B	0x005B	#	LEFT SQUARE BRACKET
+0x5C	0x005C	#	REVERSE SOLIDUS
+0x5D	0x005D	#	RIGHT SQUARE BRACKET
+0x5E	0x005E	#	CIRCUMFLEX ACCENT
+0x5F	0x005F	#	LOW LINE
+0x60	0x0060	#	GRAVE ACCENT
+0x61	0x0061	#	LATIN SMALL LETTER A
+0x62	0x0062	#	LATIN SMALL LETTER B
+0x63	0x0063	#	LATIN SMALL LETTER C
+0x64	0x0064	#	LATIN SMALL LETTER D
+0x65	0x0065	#	LATIN SMALL LETTER E
+0x66	0x0066	#	LATIN SMALL LETTER F
+0x67	0x0067	#	LATIN SMALL LETTER G
+0x68	0x0068	#	LATIN SMALL LETTER H
+0x69	0x0069	#	LATIN SMALL LETTER I
+0x6A	0x006A	#	LATIN SMALL LETTER J
+0x6B	0x006B	#	LATIN SMALL LETTER K
+0x6C	0x006C	#	LATIN SMALL LETTER L
+0x6D	0x006D	#	LATIN SMALL LETTER M
+0x6E	0x006E	#	LATIN SMALL LETTER N
+0x6F	0x006F	#	LATIN SMALL LETTER O
+0x70	0x0070	#	LATIN SMALL LETTER P
+0x71	0x0071	#	LATIN SMALL LETTER Q
+0x72	0x0072	#	LATIN SMALL LETTER R
+0x73	0x0073	#	LATIN SMALL LETTER S
+0x74	0x0074	#	LATIN SMALL LETTER T
+0x75	0x0075	#	LATIN SMALL LETTER U
+0x76	0x0076	#	LATIN SMALL LETTER V
+0x77	0x0077	#	LATIN SMALL LETTER W
+0x78	0x0078	#	LATIN SMALL LETTER X
+0x79	0x0079	#	LATIN SMALL LETTER Y
+0x7A	0x007A	#	LATIN SMALL LETTER Z
+0x7B	0x007B	#	LEFT CURLY BRACKET
+0x7C	0x007C	#	VERTICAL LINE
+0x7D	0x007D	#	RIGHT CURLY BRACKET
+0x7E	0x007E	#	TILDE
+0x7F	0x007F	#	DELETE
+0x80	0x0080	#	<control>
+0x81	0x0081	#	<control>
+0x82	0x0082	#	<control>
+0x83	0x0083	#	<control>
+0x84	0x0084	#	<control>
+0x85	0x0085	#	<control>
+0x86	0x0086	#	<control>
+0x87	0x0087	#	<control>
+0x88	0x0088	#	<control>
+0x89	0x0089	#	<control>
+0x8A	0x008A	#	<control>
+0x8B	0x008B	#	<control>
+0x8C	0x008C	#	<control>
+0x8D	0x008D	#	<control>
+0x8E	0x008E	#	<control>
+0x8F	0x008F	#	<control>
+0x90	0x0090	#	<control>
+0x91	0x0091	#	<control>
+0x92	0x0092	#	<control>
+0x93	0x0093	#	<control>
+0x94	0x0094	#	<control>
+0x95	0x0095	#	<control>
+0x96	0x0096	#	<control>
+0x97	0x0097	#	<control>
+0x98	0x0098	#	<control>
+0x99	0x0099	#	<control>
+0x9A	0x009A	#	<control>
+0x9B	0x009B	#	<control>
+0x9C	0x009C	#	<control>
+0x9D	0x009D	#	<control>
+0x9E	0x009E	#	<control>
+0x9F	0x009F	#	<control>
+0xA0	0x00A0	#	NO-BREAK SPACE
+0xA1	0x2018	#	LEFT SINGLE QUOTATION MARK
+0xA2	0x2019	#	RIGHT SINGLE QUOTATION MARK
+0xA3	0x00A3	#	POUND SIGN
+0xA4	0x20AC	#	EURO SIGN
+0xA5	0x20AF	#	DRACHMA SIGN
+0xA6	0x00A6	#	BROKEN BAR
+0xA7	0x00A7	#	SECTION SIGN
+0xA8	0x00A8	#	DIAERESIS
+0xA9	0x00A9	#	COPYRIGHT SIGN
+0xAA	0x037A	#	GREEK YPOGEGRAMMENI
+0xAB	0x00AB	#	LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xAC	0x00AC	#	NOT SIGN
+0xAD	0x00AD	#	SOFT HYPHEN
+0xAF	0x2015	#	HORIZONTAL BAR
+0xB0	0x00B0	#	DEGREE SIGN
+0xB1	0x00B1	#	PLUS-MINUS SIGN
+0xB2	0x00B2	#	SUPERSCRIPT TWO
+0xB3	0x00B3	#	SUPERSCRIPT THREE
+0xB4	0x0384	#	GREEK TONOS
+0xB5	0x0385	#	GREEK DIALYTIKA TONOS
+0xB6	0x0386	#	GREEK CAPITAL LETTER ALPHA WITH TONOS
+0xB7	0x00B7	#	MIDDLE DOT
+0xB8	0x0388	#	GREEK CAPITAL LETTER EPSILON WITH TONOS
+0xB9	0x0389	#	GREEK CAPITAL LETTER ETA WITH TONOS
+0xBA	0x038A	#	GREEK CAPITAL LETTER IOTA WITH TONOS
+0xBB	0x00BB	#	RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xBC	0x038C	#	GREEK CAPITAL LETTER OMICRON WITH TONOS
+0xBD	0x00BD	#	VULGAR FRACTION ONE HALF
+0xBE	0x038E	#	GREEK CAPITAL LETTER UPSILON WITH TONOS
+0xBF	0x038F	#	GREEK CAPITAL LETTER OMEGA WITH TONOS
+0xC0	0x0390	#	GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+0xC1	0x0391	#	GREEK CAPITAL LETTER ALPHA
+0xC2	0x0392	#	GREEK CAPITAL LETTER BETA
+0xC3	0x0393	#	GREEK CAPITAL LETTER GAMMA
+0xC4	0x0394	#	GREEK CAPITAL LETTER DELTA
+0xC5	0x0395	#	GREEK CAPITAL LETTER EPSILON
+0xC6	0x0396	#	GREEK CAPITAL LETTER ZETA
+0xC7	0x0397	#	GREEK CAPITAL LETTER ETA
+0xC8	0x0398	#	GREEK CAPITAL LETTER THETA
+0xC9	0x0399	#	GREEK CAPITAL LETTER IOTA
+0xCA	0x039A	#	GREEK CAPITAL LETTER KAPPA
+0xCB	0x039B	#	GREEK CAPITAL LETTER LAMDA
+0xCC	0x039C	#	GREEK CAPITAL LETTER MU
+0xCD	0x039D	#	GREEK CAPITAL LETTER NU
+0xCE	0x039E	#	GREEK CAPITAL LETTER XI
+0xCF	0x039F	#	GREEK CAPITAL LETTER OMICRON
+0xD0	0x03A0	#	GREEK CAPITAL LETTER PI
+0xD1	0x03A1	#	GREEK CAPITAL LETTER RHO
+0xD3	0x03A3	#	GREEK CAPITAL LETTER SIGMA
+0xD4	0x03A4	#	GREEK CAPITAL LETTER TAU
+0xD5	0x03A5	#	GREEK CAPITAL LETTER UPSILON
+0xD6	0x03A6	#	GREEK CAPITAL LETTER PHI
+0xD7	0x03A7	#	GREEK CAPITAL LETTER CHI
+0xD8	0x03A8	#	GREEK CAPITAL LETTER PSI
+0xD9	0x03A9	#	GREEK CAPITAL LETTER OMEGA
+0xDA	0x03AA	#	GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+0xDB	0x03AB	#	GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+0xDC	0x03AC	#	GREEK SMALL LETTER ALPHA WITH TONOS
+0xDD	0x03AD	#	GREEK SMALL LETTER EPSILON WITH TONOS
+0xDE	0x03AE	#	GREEK SMALL LETTER ETA WITH TONOS
+0xDF	0x03AF	#	GREEK SMALL LETTER IOTA WITH TONOS
+0xE0	0x03B0	#	GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+0xE1	0x03B1	#	GREEK SMALL LETTER ALPHA
+0xE2	0x03B2	#	GREEK SMALL LETTER BETA
+0xE3	0x03B3	#	GREEK SMALL LETTER GAMMA
+0xE4	0x03B4	#	GREEK SMALL LETTER DELTA
+0xE5	0x03B5	#	GREEK SMALL LETTER EPSILON
+0xE6	0x03B6	#	GREEK SMALL LETTER ZETA
+0xE7	0x03B7	#	GREEK SMALL LETTER ETA
+0xE8	0x03B8	#	GREEK SMALL LETTER THETA
+0xE9	0x03B9	#	GREEK SMALL LETTER IOTA
+0xEA	0x03BA	#	GREEK SMALL LETTER KAPPA
+0xEB	0x03BB	#	GREEK SMALL LETTER LAMDA
+0xEC	0x03BC	#	GREEK SMALL LETTER MU
+0xED	0x03BD	#	GREEK SMALL LETTER NU
+0xEE	0x03BE	#	GREEK SMALL LETTER XI
+0xEF	0x03BF	#	GREEK SMALL LETTER OMICRON
+0xF0	0x03C0	#	GREEK SMALL LETTER PI
+0xF1	0x03C1	#	GREEK SMALL LETTER RHO
+0xF2	0x03C2	#	GREEK SMALL LETTER FINAL SIGMA
+0xF3	0x03C3	#	GREEK SMALL LETTER SIGMA
+0xF4	0x03C4	#	GREEK SMALL LETTER TAU
+0xF5	0x03C5	#	GREEK SMALL LETTER UPSILON
+0xF6	0x03C6	#	GREEK SMALL LETTER PHI
+0xF7	0x03C7	#	GREEK SMALL LETTER CHI
+0xF8	0x03C8	#	GREEK SMALL LETTER PSI
+0xF9	0x03C9	#	GREEK SMALL LETTER OMEGA
+0xFA	0x03CA	#	GREEK SMALL LETTER IOTA WITH DIALYTIKA
+0xFB	0x03CB	#	GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+0xFC	0x03CC	#	GREEK SMALL LETTER OMICRON WITH TONOS
+0xFD	0x03CD	#	GREEK SMALL LETTER UPSILON WITH TONOS
+0xFE	0x03CE	#	GREEK SMALL LETTER OMEGA WITH TONOS
diff --git a/externals/figlet/fonts/8859-8.flc b/externals/figlet/fonts/8859-8.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/8859-8.flc
@@ -0,0 +1,270 @@
+#
+#	Name:             ISO/IEC 8859-8:1999 to Unicode
+#	Unicode version:  3.0
+#	Table version:    1.1
+#	Table format:     Format A
+#	Date:             2000-Jan-03
+#	Authors:          Ken Whistler <kenw@sybase.com>
+#
+#	Copyright (c) 1991-1999 Unicode, Inc.  All Rights reserved.
+#
+#	This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+#	No claims are made as to fitness for any particular purpose.  No
+#	warranties of any kind are expressed or implied.  The recipient
+#	agrees to determine applicability of information provided.  If this
+#	file has been provided on optical media by Unicode, Inc., the sole
+#	remedy for any claim will be exchange of defective media within 90
+#	days of receipt.
+#
+#	Unicode, Inc. hereby grants the right to freely use the information
+#	supplied in this file in the creation of products supporting the
+#	Unicode Standard, and to make copies of this file in any form for
+#	internal or external distribution as long as this notice remains
+#	attached.
+#
+#	General notes:
+#
+#	This table contains the data the Unicode Consortium has on how
+#       ISO/IEC 8859-8:1999 characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the ISO/IEC 8859-8 code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in ISO/IEC 8859-8 order.
+#
+#	Version history
+#	1.0 version updates 0.1 version by adding mappings for all
+#	control characters.
+#       1.1 version updates to the published 8859-8:1999, correcting
+#          the mapping of 0xAF and adding mappings for LRM and RLM.
+#
+#	Updated versions of this file may be found in:
+#		<ftp://ftp.unicode.org/Public/MAPPINGS/>
+#
+#	Any comments or problems, contact <errata@unicode.org>
+#	Please note that <errata@unicode.org> is an archival address;
+#	notices will be checked, but do not expect an immediate response.
+#
+0x00	0x0000	#	NULL
+0x01	0x0001	#	START OF HEADING
+0x02	0x0002	#	START OF TEXT
+0x03	0x0003	#	END OF TEXT
+0x04	0x0004	#	END OF TRANSMISSION
+0x05	0x0005	#	ENQUIRY
+0x06	0x0006	#	ACKNOWLEDGE
+0x07	0x0007	#	BELL
+0x08	0x0008	#	BACKSPACE
+0x09	0x0009	#	HORIZONTAL TABULATION
+0x0A	0x000A	#	LINE FEED
+0x0B	0x000B	#	VERTICAL TABULATION
+0x0C	0x000C	#	FORM FEED
+0x0D	0x000D	#	CARRIAGE RETURN
+0x0E	0x000E	#	SHIFT OUT
+0x0F	0x000F	#	SHIFT IN
+0x10	0x0010	#	DATA LINK ESCAPE
+0x11	0x0011	#	DEVICE CONTROL ONE
+0x12	0x0012	#	DEVICE CONTROL TWO
+0x13	0x0013	#	DEVICE CONTROL THREE
+0x14	0x0014	#	DEVICE CONTROL FOUR
+0x15	0x0015	#	NEGATIVE ACKNOWLEDGE
+0x16	0x0016	#	SYNCHRONOUS IDLE
+0x17	0x0017	#	END OF TRANSMISSION BLOCK
+0x18	0x0018	#	CANCEL
+0x19	0x0019	#	END OF MEDIUM
+0x1A	0x001A	#	SUBSTITUTE
+0x1B	0x001B	#	ESCAPE
+0x1C	0x001C	#	FILE SEPARATOR
+0x1D	0x001D	#	GROUP SEPARATOR
+0x1E	0x001E	#	RECORD SEPARATOR
+0x1F	0x001F	#	UNIT SEPARATOR
+0x20	0x0020	#	SPACE
+0x21	0x0021	#	EXCLAMATION MARK
+0x22	0x0022	#	QUOTATION MARK
+0x23	0x0023	#	NUMBER SIGN
+0x24	0x0024	#	DOLLAR SIGN
+0x25	0x0025	#	PERCENT SIGN
+0x26	0x0026	#	AMPERSAND
+0x27	0x0027	#	APOSTROPHE
+0x28	0x0028	#	LEFT PARENTHESIS
+0x29	0x0029	#	RIGHT PARENTHESIS
+0x2A	0x002A	#	ASTERISK
+0x2B	0x002B	#	PLUS SIGN
+0x2C	0x002C	#	COMMA
+0x2D	0x002D	#	HYPHEN-MINUS
+0x2E	0x002E	#	FULL STOP
+0x2F	0x002F	#	SOLIDUS
+0x30	0x0030	#	DIGIT ZERO
+0x31	0x0031	#	DIGIT ONE
+0x32	0x0032	#	DIGIT TWO
+0x33	0x0033	#	DIGIT THREE
+0x34	0x0034	#	DIGIT FOUR
+0x35	0x0035	#	DIGIT FIVE
+0x36	0x0036	#	DIGIT SIX
+0x37	0x0037	#	DIGIT SEVEN
+0x38	0x0038	#	DIGIT EIGHT
+0x39	0x0039	#	DIGIT NINE
+0x3A	0x003A	#	COLON
+0x3B	0x003B	#	SEMICOLON
+0x3C	0x003C	#	LESS-THAN SIGN
+0x3D	0x003D	#	EQUALS SIGN
+0x3E	0x003E	#	GREATER-THAN SIGN
+0x3F	0x003F	#	QUESTION MARK
+0x40	0x0040	#	COMMERCIAL AT
+0x41	0x0041	#	LATIN CAPITAL LETTER A
+0x42	0x0042	#	LATIN CAPITAL LETTER B
+0x43	0x0043	#	LATIN CAPITAL LETTER C
+0x44	0x0044	#	LATIN CAPITAL LETTER D
+0x45	0x0045	#	LATIN CAPITAL LETTER E
+0x46	0x0046	#	LATIN CAPITAL LETTER F
+0x47	0x0047	#	LATIN CAPITAL LETTER G
+0x48	0x0048	#	LATIN CAPITAL LETTER H
+0x49	0x0049	#	LATIN CAPITAL LETTER I
+0x4A	0x004A	#	LATIN CAPITAL LETTER J
+0x4B	0x004B	#	LATIN CAPITAL LETTER K
+0x4C	0x004C	#	LATIN CAPITAL LETTER L
+0x4D	0x004D	#	LATIN CAPITAL LETTER M
+0x4E	0x004E	#	LATIN CAPITAL LETTER N
+0x4F	0x004F	#	LATIN CAPITAL LETTER O
+0x50	0x0050	#	LATIN CAPITAL LETTER P
+0x51	0x0051	#	LATIN CAPITAL LETTER Q
+0x52	0x0052	#	LATIN CAPITAL LETTER R
+0x53	0x0053	#	LATIN CAPITAL LETTER S
+0x54	0x0054	#	LATIN CAPITAL LETTER T
+0x55	0x0055	#	LATIN CAPITAL LETTER U
+0x56	0x0056	#	LATIN CAPITAL LETTER V
+0x57	0x0057	#	LATIN CAPITAL LETTER W
+0x58	0x0058	#	LATIN CAPITAL LETTER X
+0x59	0x0059	#	LATIN CAPITAL LETTER Y
+0x5A	0x005A	#	LATIN CAPITAL LETTER Z
+0x5B	0x005B	#	LEFT SQUARE BRACKET
+0x5C	0x005C	#	REVERSE SOLIDUS
+0x5D	0x005D	#	RIGHT SQUARE BRACKET
+0x5E	0x005E	#	CIRCUMFLEX ACCENT
+0x5F	0x005F	#	LOW LINE
+0x60	0x0060	#	GRAVE ACCENT
+0x61	0x0061	#	LATIN SMALL LETTER A
+0x62	0x0062	#	LATIN SMALL LETTER B
+0x63	0x0063	#	LATIN SMALL LETTER C
+0x64	0x0064	#	LATIN SMALL LETTER D
+0x65	0x0065	#	LATIN SMALL LETTER E
+0x66	0x0066	#	LATIN SMALL LETTER F
+0x67	0x0067	#	LATIN SMALL LETTER G
+0x68	0x0068	#	LATIN SMALL LETTER H
+0x69	0x0069	#	LATIN SMALL LETTER I
+0x6A	0x006A	#	LATIN SMALL LETTER J
+0x6B	0x006B	#	LATIN SMALL LETTER K
+0x6C	0x006C	#	LATIN SMALL LETTER L
+0x6D	0x006D	#	LATIN SMALL LETTER M
+0x6E	0x006E	#	LATIN SMALL LETTER N
+0x6F	0x006F	#	LATIN SMALL LETTER O
+0x70	0x0070	#	LATIN SMALL LETTER P
+0x71	0x0071	#	LATIN SMALL LETTER Q
+0x72	0x0072	#	LATIN SMALL LETTER R
+0x73	0x0073	#	LATIN SMALL LETTER S
+0x74	0x0074	#	LATIN SMALL LETTER T
+0x75	0x0075	#	LATIN SMALL LETTER U
+0x76	0x0076	#	LATIN SMALL LETTER V
+0x77	0x0077	#	LATIN SMALL LETTER W
+0x78	0x0078	#	LATIN SMALL LETTER X
+0x79	0x0079	#	LATIN SMALL LETTER Y
+0x7A	0x007A	#	LATIN SMALL LETTER Z
+0x7B	0x007B	#	LEFT CURLY BRACKET
+0x7C	0x007C	#	VERTICAL LINE
+0x7D	0x007D	#	RIGHT CURLY BRACKET
+0x7E	0x007E	#	TILDE
+0x7F	0x007F	#	DELETE
+0x80	0x0080	#	<control>
+0x81	0x0081	#	<control>
+0x82	0x0082	#	<control>
+0x83	0x0083	#	<control>
+0x84	0x0084	#	<control>
+0x85	0x0085	#	<control>
+0x86	0x0086	#	<control>
+0x87	0x0087	#	<control>
+0x88	0x0088	#	<control>
+0x89	0x0089	#	<control>
+0x8A	0x008A	#	<control>
+0x8B	0x008B	#	<control>
+0x8C	0x008C	#	<control>
+0x8D	0x008D	#	<control>
+0x8E	0x008E	#	<control>
+0x8F	0x008F	#	<control>
+0x90	0x0090	#	<control>
+0x91	0x0091	#	<control>
+0x92	0x0092	#	<control>
+0x93	0x0093	#	<control>
+0x94	0x0094	#	<control>
+0x95	0x0095	#	<control>
+0x96	0x0096	#	<control>
+0x97	0x0097	#	<control>
+0x98	0x0098	#	<control>
+0x99	0x0099	#	<control>
+0x9A	0x009A	#	<control>
+0x9B	0x009B	#	<control>
+0x9C	0x009C	#	<control>
+0x9D	0x009D	#	<control>
+0x9E	0x009E	#	<control>
+0x9F	0x009F	#	<control>
+0xA0	0x00A0	#	NO-BREAK SPACE
+0xA2	0x00A2	#	CENT SIGN
+0xA3	0x00A3	#	POUND SIGN
+0xA4	0x00A4	#	CURRENCY SIGN
+0xA5	0x00A5	#	YEN SIGN
+0xA6	0x00A6	#	BROKEN BAR
+0xA7	0x00A7	#	SECTION SIGN
+0xA8	0x00A8	#	DIAERESIS
+0xA9	0x00A9	#	COPYRIGHT SIGN
+0xAA	0x00D7	#	MULTIPLICATION SIGN
+0xAB	0x00AB	#	LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xAC	0x00AC	#	NOT SIGN
+0xAD	0x00AD	#	SOFT HYPHEN
+0xAE	0x00AE	#	REGISTERED SIGN
+0xAF	0x00AF	#	MACRON
+0xB0	0x00B0	#	DEGREE SIGN
+0xB1	0x00B1	#	PLUS-MINUS SIGN
+0xB2	0x00B2	#	SUPERSCRIPT TWO
+0xB3	0x00B3	#	SUPERSCRIPT THREE
+0xB4	0x00B4	#	ACUTE ACCENT
+0xB5	0x00B5	#	MICRO SIGN
+0xB6	0x00B6	#	PILCROW SIGN
+0xB7	0x00B7	#	MIDDLE DOT
+0xB8	0x00B8	#	CEDILLA
+0xB9	0x00B9	#	SUPERSCRIPT ONE
+0xBA	0x00F7	#	DIVISION SIGN
+0xBB	0x00BB	#	RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xBC	0x00BC	#	VULGAR FRACTION ONE QUARTER
+0xBD	0x00BD	#	VULGAR FRACTION ONE HALF
+0xBE	0x00BE	#	VULGAR FRACTION THREE QUARTERS
+0xDF	0x2017	#	DOUBLE LOW LINE
+0xE0	0x05D0	#	HEBREW LETTER ALEF
+0xE1	0x05D1	#	HEBREW LETTER BET
+0xE2	0x05D2	#	HEBREW LETTER GIMEL
+0xE3	0x05D3	#	HEBREW LETTER DALET
+0xE4	0x05D4	#	HEBREW LETTER HE
+0xE5	0x05D5	#	HEBREW LETTER VAV
+0xE6	0x05D6	#	HEBREW LETTER ZAYIN
+0xE7	0x05D7	#	HEBREW LETTER HET
+0xE8	0x05D8	#	HEBREW LETTER TET
+0xE9	0x05D9	#	HEBREW LETTER YOD
+0xEA	0x05DA	#	HEBREW LETTER FINAL KAF
+0xEB	0x05DB	#	HEBREW LETTER KAF
+0xEC	0x05DC	#	HEBREW LETTER LAMED
+0xED	0x05DD	#	HEBREW LETTER FINAL MEM
+0xEE	0x05DE	#	HEBREW LETTER MEM
+0xEF	0x05DF	#	HEBREW LETTER FINAL NUN
+0xF0	0x05E0	#	HEBREW LETTER NUN
+0xF1	0x05E1	#	HEBREW LETTER SAMEKH
+0xF2	0x05E2	#	HEBREW LETTER AYIN
+0xF3	0x05E3	#	HEBREW LETTER FINAL PE
+0xF4	0x05E4	#	HEBREW LETTER PE
+0xF5	0x05E5	#	HEBREW LETTER FINAL TSADI
+0xF6	0x05E6	#	HEBREW LETTER TSADI
+0xF7	0x05E7	#	HEBREW LETTER QOF
+0xF8	0x05E8	#	HEBREW LETTER RESH
+0xF9	0x05E9	#	HEBREW LETTER SHIN
+0xFA	0x05EA	#	HEBREW LETTER TAV
+0xFD	0x200E	#	LEFT-TO-RIGHT MARK
+0xFE	0x200F	#	RIGHT-TO-LEFT MARK
+
diff --git a/externals/figlet/fonts/8859-9.flc b/externals/figlet/fonts/8859-9.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/8859-9.flc
@@ -0,0 +1,307 @@
+#
+#	Name:             ISO/IEC 8859-9:1999 to Unicode
+#	Unicode version:  3.0
+#	Table version:    1.0
+#	Table format:     Format A
+#	Date:             1999 July 27
+#	Authors:          Ken Whistler <kenw@sybase.com>
+#
+#	Copyright (c) 1991-1999 Unicode, Inc.  All Rights reserved.
+#
+#	This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+#	No claims are made as to fitness for any particular purpose.  No
+#	warranties of any kind are expressed or implied.  The recipient
+#	agrees to determine applicability of information provided.  If this
+#	file has been provided on magnetic media by Unicode, Inc., the sole
+#	remedy for any claim will be exchange of defective media within 90
+#	days of receipt.
+#
+#	Unicode, Inc. hereby grants the right to freely use the information
+#	supplied in this file in the creation of products supporting the
+#	Unicode Standard, and to make copies of this file in any form for
+#	internal or external distribution as long as this notice remains
+#	attached.
+#
+#	General notes:
+#
+#	This table contains the data the Unicode Consortium has on how
+#       ISO/IEC 8859-9:1999 characters map into Unicode.
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the ISO/IEC 8859-9 code (in hex as 0xXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#
+#	The entries are in ISO/IEC 8859-9 order.
+#
+#	ISO/IEC 8859-9 is also equivalent to ISO-IR-148.
+#
+#	Version history
+#	1.0 version updates 0.1 version by adding mappings for all
+#	control characters.
+#
+#	Updated versions of this file may be found in:
+#		<ftp://ftp.unicode.org/Public/MAPPINGS/>
+#
+#	Any comments or problems, contact <errata@unicode.org>
+#	Please note that <errata@unicode.org> is an archival address;
+#	notices will be checked, but do not expect an immediate response.
+#
+0x00	0x0000	#	NULL
+0x01	0x0001	#	START OF HEADING
+0x02	0x0002	#	START OF TEXT
+0x03	0x0003	#	END OF TEXT
+0x04	0x0004	#	END OF TRANSMISSION
+0x05	0x0005	#	ENQUIRY
+0x06	0x0006	#	ACKNOWLEDGE
+0x07	0x0007	#	BELL
+0x08	0x0008	#	BACKSPACE
+0x09	0x0009	#	HORIZONTAL TABULATION
+0x0A	0x000A	#	LINE FEED
+0x0B	0x000B	#	VERTICAL TABULATION
+0x0C	0x000C	#	FORM FEED
+0x0D	0x000D	#	CARRIAGE RETURN
+0x0E	0x000E	#	SHIFT OUT
+0x0F	0x000F	#	SHIFT IN
+0x10	0x0010	#	DATA LINK ESCAPE
+0x11	0x0011	#	DEVICE CONTROL ONE
+0x12	0x0012	#	DEVICE CONTROL TWO
+0x13	0x0013	#	DEVICE CONTROL THREE
+0x14	0x0014	#	DEVICE CONTROL FOUR
+0x15	0x0015	#	NEGATIVE ACKNOWLEDGE
+0x16	0x0016	#	SYNCHRONOUS IDLE
+0x17	0x0017	#	END OF TRANSMISSION BLOCK
+0x18	0x0018	#	CANCEL
+0x19	0x0019	#	END OF MEDIUM
+0x1A	0x001A	#	SUBSTITUTE
+0x1B	0x001B	#	ESCAPE
+0x1C	0x001C	#	FILE SEPARATOR
+0x1D	0x001D	#	GROUP SEPARATOR
+0x1E	0x001E	#	RECORD SEPARATOR
+0x1F	0x001F	#	UNIT SEPARATOR
+0x20	0x0020	#	SPACE
+0x21	0x0021	#	EXCLAMATION MARK
+0x22	0x0022	#	QUOTATION MARK
+0x23	0x0023	#	NUMBER SIGN
+0x24	0x0024	#	DOLLAR SIGN
+0x25	0x0025	#	PERCENT SIGN
+0x26	0x0026	#	AMPERSAND
+0x27	0x0027	#	APOSTROPHE
+0x28	0x0028	#	LEFT PARENTHESIS
+0x29	0x0029	#	RIGHT PARENTHESIS
+0x2A	0x002A	#	ASTERISK
+0x2B	0x002B	#	PLUS SIGN
+0x2C	0x002C	#	COMMA
+0x2D	0x002D	#	HYPHEN-MINUS
+0x2E	0x002E	#	FULL STOP
+0x2F	0x002F	#	SOLIDUS
+0x30	0x0030	#	DIGIT ZERO
+0x31	0x0031	#	DIGIT ONE
+0x32	0x0032	#	DIGIT TWO
+0x33	0x0033	#	DIGIT THREE
+0x34	0x0034	#	DIGIT FOUR
+0x35	0x0035	#	DIGIT FIVE
+0x36	0x0036	#	DIGIT SIX
+0x37	0x0037	#	DIGIT SEVEN
+0x38	0x0038	#	DIGIT EIGHT
+0x39	0x0039	#	DIGIT NINE
+0x3A	0x003A	#	COLON
+0x3B	0x003B	#	SEMICOLON
+0x3C	0x003C	#	LESS-THAN SIGN
+0x3D	0x003D	#	EQUALS SIGN
+0x3E	0x003E	#	GREATER-THAN SIGN
+0x3F	0x003F	#	QUESTION MARK
+0x40	0x0040	#	COMMERCIAL AT
+0x41	0x0041	#	LATIN CAPITAL LETTER A
+0x42	0x0042	#	LATIN CAPITAL LETTER B
+0x43	0x0043	#	LATIN CAPITAL LETTER C
+0x44	0x0044	#	LATIN CAPITAL LETTER D
+0x45	0x0045	#	LATIN CAPITAL LETTER E
+0x46	0x0046	#	LATIN CAPITAL LETTER F
+0x47	0x0047	#	LATIN CAPITAL LETTER G
+0x48	0x0048	#	LATIN CAPITAL LETTER H
+0x49	0x0049	#	LATIN CAPITAL LETTER I
+0x4A	0x004A	#	LATIN CAPITAL LETTER J
+0x4B	0x004B	#	LATIN CAPITAL LETTER K
+0x4C	0x004C	#	LATIN CAPITAL LETTER L
+0x4D	0x004D	#	LATIN CAPITAL LETTER M
+0x4E	0x004E	#	LATIN CAPITAL LETTER N
+0x4F	0x004F	#	LATIN CAPITAL LETTER O
+0x50	0x0050	#	LATIN CAPITAL LETTER P
+0x51	0x0051	#	LATIN CAPITAL LETTER Q
+0x52	0x0052	#	LATIN CAPITAL LETTER R
+0x53	0x0053	#	LATIN CAPITAL LETTER S
+0x54	0x0054	#	LATIN CAPITAL LETTER T
+0x55	0x0055	#	LATIN CAPITAL LETTER U
+0x56	0x0056	#	LATIN CAPITAL LETTER V
+0x57	0x0057	#	LATIN CAPITAL LETTER W
+0x58	0x0058	#	LATIN CAPITAL LETTER X
+0x59	0x0059	#	LATIN CAPITAL LETTER Y
+0x5A	0x005A	#	LATIN CAPITAL LETTER Z
+0x5B	0x005B	#	LEFT SQUARE BRACKET
+0x5C	0x005C	#	REVERSE SOLIDUS
+0x5D	0x005D	#	RIGHT SQUARE BRACKET
+0x5E	0x005E	#	CIRCUMFLEX ACCENT
+0x5F	0x005F	#	LOW LINE
+0x60	0x0060	#	GRAVE ACCENT
+0x61	0x0061	#	LATIN SMALL LETTER A
+0x62	0x0062	#	LATIN SMALL LETTER B
+0x63	0x0063	#	LATIN SMALL LETTER C
+0x64	0x0064	#	LATIN SMALL LETTER D
+0x65	0x0065	#	LATIN SMALL LETTER E
+0x66	0x0066	#	LATIN SMALL LETTER F
+0x67	0x0067	#	LATIN SMALL LETTER G
+0x68	0x0068	#	LATIN SMALL LETTER H
+0x69	0x0069	#	LATIN SMALL LETTER I
+0x6A	0x006A	#	LATIN SMALL LETTER J
+0x6B	0x006B	#	LATIN SMALL LETTER K
+0x6C	0x006C	#	LATIN SMALL LETTER L
+0x6D	0x006D	#	LATIN SMALL LETTER M
+0x6E	0x006E	#	LATIN SMALL LETTER N
+0x6F	0x006F	#	LATIN SMALL LETTER O
+0x70	0x0070	#	LATIN SMALL LETTER P
+0x71	0x0071	#	LATIN SMALL LETTER Q
+0x72	0x0072	#	LATIN SMALL LETTER R
+0x73	0x0073	#	LATIN SMALL LETTER S
+0x74	0x0074	#	LATIN SMALL LETTER T
+0x75	0x0075	#	LATIN SMALL LETTER U
+0x76	0x0076	#	LATIN SMALL LETTER V
+0x77	0x0077	#	LATIN SMALL LETTER W
+0x78	0x0078	#	LATIN SMALL LETTER X
+0x79	0x0079	#	LATIN SMALL LETTER Y
+0x7A	0x007A	#	LATIN SMALL LETTER Z
+0x7B	0x007B	#	LEFT CURLY BRACKET
+0x7C	0x007C	#	VERTICAL LINE
+0x7D	0x007D	#	RIGHT CURLY BRACKET
+0x7E	0x007E	#	TILDE
+0x7F	0x007F	#	DELETE
+0x80	0x0080	#	<control>
+0x81	0x0081	#	<control>
+0x82	0x0082	#	<control>
+0x83	0x0083	#	<control>
+0x84	0x0084	#	<control>
+0x85	0x0085	#	<control>
+0x86	0x0086	#	<control>
+0x87	0x0087	#	<control>
+0x88	0x0088	#	<control>
+0x89	0x0089	#	<control>
+0x8A	0x008A	#	<control>
+0x8B	0x008B	#	<control>
+0x8C	0x008C	#	<control>
+0x8D	0x008D	#	<control>
+0x8E	0x008E	#	<control>
+0x8F	0x008F	#	<control>
+0x90	0x0090	#	<control>
+0x91	0x0091	#	<control>
+0x92	0x0092	#	<control>
+0x93	0x0093	#	<control>
+0x94	0x0094	#	<control>
+0x95	0x0095	#	<control>
+0x96	0x0096	#	<control>
+0x97	0x0097	#	<control>
+0x98	0x0098	#	<control>
+0x99	0x0099	#	<control>
+0x9A	0x009A	#	<control>
+0x9B	0x009B	#	<control>
+0x9C	0x009C	#	<control>
+0x9D	0x009D	#	<control>
+0x9E	0x009E	#	<control>
+0x9F	0x009F	#	<control>
+0xA0	0x00A0	#	NO-BREAK SPACE
+0xA1	0x00A1	#	INVERTED EXCLAMATION MARK
+0xA2	0x00A2	#	CENT SIGN
+0xA3	0x00A3	#	POUND SIGN
+0xA4	0x00A4	#	CURRENCY SIGN
+0xA5	0x00A5	#	YEN SIGN
+0xA6	0x00A6	#	BROKEN BAR
+0xA7	0x00A7	#	SECTION SIGN
+0xA8	0x00A8	#	DIAERESIS
+0xA9	0x00A9	#	COPYRIGHT SIGN
+0xAA	0x00AA	#	FEMININE ORDINAL INDICATOR
+0xAB	0x00AB	#	LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xAC	0x00AC	#	NOT SIGN
+0xAD	0x00AD	#	SOFT HYPHEN
+0xAE	0x00AE	#	REGISTERED SIGN
+0xAF	0x00AF	#	MACRON
+0xB0	0x00B0	#	DEGREE SIGN
+0xB1	0x00B1	#	PLUS-MINUS SIGN
+0xB2	0x00B2	#	SUPERSCRIPT TWO
+0xB3	0x00B3	#	SUPERSCRIPT THREE
+0xB4	0x00B4	#	ACUTE ACCENT
+0xB5	0x00B5	#	MICRO SIGN
+0xB6	0x00B6	#	PILCROW SIGN
+0xB7	0x00B7	#	MIDDLE DOT
+0xB8	0x00B8	#	CEDILLA
+0xB9	0x00B9	#	SUPERSCRIPT ONE
+0xBA	0x00BA	#	MASCULINE ORDINAL INDICATOR
+0xBB	0x00BB	#	RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xBC	0x00BC	#	VULGAR FRACTION ONE QUARTER
+0xBD	0x00BD	#	VULGAR FRACTION ONE HALF
+0xBE	0x00BE	#	VULGAR FRACTION THREE QUARTERS
+0xBF	0x00BF	#	INVERTED QUESTION MARK
+0xC0	0x00C0	#	LATIN CAPITAL LETTER A WITH GRAVE
+0xC1	0x00C1	#	LATIN CAPITAL LETTER A WITH ACUTE
+0xC2	0x00C2	#	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0xC3	0x00C3	#	LATIN CAPITAL LETTER A WITH TILDE
+0xC4	0x00C4	#	LATIN CAPITAL LETTER A WITH DIAERESIS
+0xC5	0x00C5	#	LATIN CAPITAL LETTER A WITH RING ABOVE
+0xC6	0x00C6	#	LATIN CAPITAL LETTER AE
+0xC7	0x00C7	#	LATIN CAPITAL LETTER C WITH CEDILLA
+0xC8	0x00C8	#	LATIN CAPITAL LETTER E WITH GRAVE
+0xC9	0x00C9	#	LATIN CAPITAL LETTER E WITH ACUTE
+0xCA	0x00CA	#	LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+0xCB	0x00CB	#	LATIN CAPITAL LETTER E WITH DIAERESIS
+0xCC	0x00CC	#	LATIN CAPITAL LETTER I WITH GRAVE
+0xCD	0x00CD	#	LATIN CAPITAL LETTER I WITH ACUTE
+0xCE	0x00CE	#	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0xCF	0x00CF	#	LATIN CAPITAL LETTER I WITH DIAERESIS
+0xD0	0x011E	#	LATIN CAPITAL LETTER G WITH BREVE
+0xD1	0x00D1	#	LATIN CAPITAL LETTER N WITH TILDE
+0xD2	0x00D2	#	LATIN CAPITAL LETTER O WITH GRAVE
+0xD3	0x00D3	#	LATIN CAPITAL LETTER O WITH ACUTE
+0xD4	0x00D4	#	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xD5	0x00D5	#	LATIN CAPITAL LETTER O WITH TILDE
+0xD6	0x00D6	#	LATIN CAPITAL LETTER O WITH DIAERESIS
+0xD7	0x00D7	#	MULTIPLICATION SIGN
+0xD8	0x00D8	#	LATIN CAPITAL LETTER O WITH STROKE
+0xD9	0x00D9	#	LATIN CAPITAL LETTER U WITH GRAVE
+0xDA	0x00DA	#	LATIN CAPITAL LETTER U WITH ACUTE
+0xDB	0x00DB	#	LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+0xDC	0x00DC	#	LATIN CAPITAL LETTER U WITH DIAERESIS
+0xDD	0x0130	#	LATIN CAPITAL LETTER I WITH DOT ABOVE
+0xDE	0x015E	#	LATIN CAPITAL LETTER S WITH CEDILLA
+0xDF	0x00DF	#	LATIN SMALL LETTER SHARP S
+0xE0	0x00E0	#	LATIN SMALL LETTER A WITH GRAVE
+0xE1	0x00E1	#	LATIN SMALL LETTER A WITH ACUTE
+0xE2	0x00E2	#	LATIN SMALL LETTER A WITH CIRCUMFLEX
+0xE3	0x00E3	#	LATIN SMALL LETTER A WITH TILDE
+0xE4	0x00E4	#	LATIN SMALL LETTER A WITH DIAERESIS
+0xE5	0x00E5	#	LATIN SMALL LETTER A WITH RING ABOVE
+0xE6	0x00E6	#	LATIN SMALL LETTER AE
+0xE7	0x00E7	#	LATIN SMALL LETTER C WITH CEDILLA
+0xE8	0x00E8	#	LATIN SMALL LETTER E WITH GRAVE
+0xE9	0x00E9	#	LATIN SMALL LETTER E WITH ACUTE
+0xEA	0x00EA	#	LATIN SMALL LETTER E WITH CIRCUMFLEX
+0xEB	0x00EB	#	LATIN SMALL LETTER E WITH DIAERESIS
+0xEC	0x00EC	#	LATIN SMALL LETTER I WITH GRAVE
+0xED	0x00ED	#	LATIN SMALL LETTER I WITH ACUTE
+0xEE	0x00EE	#	LATIN SMALL LETTER I WITH CIRCUMFLEX
+0xEF	0x00EF	#	LATIN SMALL LETTER I WITH DIAERESIS
+0xF0	0x011F	#	LATIN SMALL LETTER G WITH BREVE
+0xF1	0x00F1	#	LATIN SMALL LETTER N WITH TILDE
+0xF2	0x00F2	#	LATIN SMALL LETTER O WITH GRAVE
+0xF3	0x00F3	#	LATIN SMALL LETTER O WITH ACUTE
+0xF4	0x00F4	#	LATIN SMALL LETTER O WITH CIRCUMFLEX
+0xF5	0x00F5	#	LATIN SMALL LETTER O WITH TILDE
+0xF6	0x00F6	#	LATIN SMALL LETTER O WITH DIAERESIS
+0xF7	0x00F7	#	DIVISION SIGN
+0xF8	0x00F8	#	LATIN SMALL LETTER O WITH STROKE
+0xF9	0x00F9	#	LATIN SMALL LETTER U WITH GRAVE
+0xFA	0x00FA	#	LATIN SMALL LETTER U WITH ACUTE
+0xFB	0x00FB	#	LATIN SMALL LETTER U WITH CIRCUMFLEX
+0xFC	0x00FC	#	LATIN SMALL LETTER U WITH DIAERESIS
+0xFD	0x0131	#	LATIN SMALL LETTER DOTLESS I
+0xFE	0x015F	#	LATIN SMALL LETTER S WITH CEDILLA
+0xFF	0x00FF	#	LATIN SMALL LETTER Y WITH DIAERESIS
+
+
diff --git a/externals/figlet/fonts/banner.flf b/externals/figlet/fonts/banner.flf
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/banner.flf
@@ -0,0 +1,2494 @@
+flf2a$ 8 7 54 0 12 0 64 185
+banner.flf version 2 by Ryan Youck (youck@cs.uregina.ca)
+(From a unix program called banner)
+I am not responsible for use of this font  
+Thanks to Glenn Chappell for his help
+Katakana characters by Vinney Thai <ssfiit@eris.cs.umb.edu>
+Cyrillic characters from "koi8x8" BDF font.
+Date: August 11, 1994
+
+Merged by John Cowan <cowan@ccil.org>
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin.  May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ $ $@@
+ ###$@
+ ###$@
+ ###$@
+  # $@
+    $@
+ ###$@
+ ###$@
+    $@@
+ ### ###$@
+ ### ###$@
+  #   # $@
+ $      $@
+ $      $@
+        $@
+        $@
+        $@@
+   # #  $@
+   # #  $@
+ #######$@
+   # #  $@
+ #######$@
+   # #  $@
+   # #  $@
+        $@@
+  ##### $@
+ #  #  #$@
+ #  #   $@
+  ##### $@
+    #  #$@
+ #  #  #$@
+  ##### $@
+        $@@
+ ###   #$@
+ # #  # $@
+ ### #  $@
+    #   $@
+   # ###$@
+  #  # #$@
+ #   ###$@
+        $@@
+   ##   $@
+  #  #  $@
+   ##   $@
+  ###   $@
+ #   # #$@
+ #    # $@
+  ###  #$@
+        $@@
+ ###$@
+ ###$@
+  # $@
+ #  $@
+    $@
+    $@
+    $@
+    $@@
+   ##$@
+  #  $@
+ #   $@
+ #   $@
+ #   $@
+  #  $@
+   ##$@
+     $@@
+ ##  $@
+   # $@
+    #$@
+    #$@
+    #$@
+   # $@
+ ##  $@
+     $@@
+        $@
+  #   # $@
+   # #  $@
+ #######$@
+   # #  $@
+  #   # $@
+        $@
+        $@@
+      $@
+   #  $@
+   #  $@
+ #####$@
+   #  $@
+   #  $@
+      $@
+      $@@
+    $@
+    $@
+    $@
+    $@
+ ###$@
+ ###$@
+  # $@
+ #  $@@
+      $@
+      $@
+      $@
+ #####$@
+      $@
+      $@
+      $@
+      $@@
+    $@
+    $@
+    $@
+    $@
+ ###$@
+ ###$@
+ ###$@
+    $@@
+       #$@
+      # $@
+     #  $@
+    #   $@
+   #    $@
+  #     $@
+ #      $@
+        $@@
+   ###  $@
+  #   # $@
+ #     #$@
+ #     #$@
+ #     #$@
+  #   # $@
+   ###  $@
+        $@@
+   #  $@
+  ##  $@
+ # #  $@
+   #  $@
+   #  $@
+   #  $@
+ #####$@
+      $@@
+  ##### $@
+ #     #$@
+       #$@
+  ##### $@
+ #      $@
+ #      $@
+ #######$@
+        $@@
+  ##### $@
+ #     #$@
+       #$@
+  ##### $@
+       #$@
+ #     #$@
+  ##### $@
+        $@@
+ #      $@
+ #    # $@
+ #    # $@
+ #    # $@
+ #######$@
+      # $@
+      # $@
+        $@@
+ #######$@
+ #      $@
+ #      $@
+ ###### $@
+       #$@
+ #     #$@
+  ##### $@
+        $@@
+  ##### $@
+ #     #$@
+ #      $@
+ ###### $@
+ #     #$@
+ #     #$@
+  ##### $@
+        $@@
+ #######$@
+ #    # $@
+     #  $@
+    #   $@
+   #    $@
+   #    $@
+   #    $@
+        $@@
+  ##### $@
+ #     #$@
+ #     #$@
+  ##### $@
+ #     #$@
+ #     #$@
+  ##### $@
+        $@@
+  ##### $@
+ #     #$@
+ #     #$@
+  ######$@
+       #$@
+ #     #$@
+  ##### $@
+        $@@
+  # $@
+ ###$@
+  # $@
+    $@
+  # $@
+ ###$@
+  # $@
+    $@@
+    $@
+ ###$@
+ ###$@
+    $@
+ ###$@
+ ###$@
+  # $@
+ #  $@@
+    #$@
+   # $@
+  #  $@
+ #   $@
+  #  $@
+   # $@
+    #$@
+     $@@
+      $@
+      $@
+ #####$@
+      $@
+ #####$@
+      $@
+      $@
+      $@@
+ #   $@
+  #  $@
+   # $@
+    #$@
+   # $@
+  #  $@
+ #   $@
+     $@@
+  ##### $@
+ #     #$@
+       #$@
+    ### $@
+    #   $@
+        $@
+    #   $@
+        $@@
+  ##### $@
+ #     #$@
+ # ### #$@
+ # ### #$@
+ # #### $@
+ #      $@
+  ##### $@
+        $@@
+    #   $@
+   # #  $@
+  #   # $@
+ #     #$@
+ #######$@
+ #     #$@
+ #     #$@
+        $@@
+ ###### $@
+ #     #$@
+ #     #$@
+ ###### $@
+ #     #$@
+ #     #$@
+ ###### $@
+        $@@
+  ##### $@
+ #     #$@
+ #      $@
+ #      $@
+ #      $@
+ #     #$@
+  ##### $@
+        $@@
+ ###### $@
+ #     #$@
+ #     #$@
+ #     #$@
+ #     #$@
+ #     #$@
+ ###### $@
+        $@@
+ #######$@
+ #      $@
+ #      $@
+ #####  $@
+ #      $@
+ #      $@
+ #######$@
+        $@@
+ #######$@
+ #      $@
+ #      $@
+ #####  $@
+ #      $@
+ #      $@
+ #      $@
+        $@@
+  ##### $@
+ #     #$@
+ #      $@
+ #  ####$@
+ #     #$@
+ #     #$@
+  ##### $@
+        $@@
+ #     #$@
+ #     #$@
+ #     #$@
+ #######$@
+ #     #$@
+ #     #$@
+ #     #$@
+        $@@
+ ###$@
+  # $@
+  # $@
+  # $@
+  # $@
+  # $@
+ ###$@
+    $@@
+       #$@
+       #$@
+       #$@
+       #$@
+ #     #$@
+ #     #$@
+  ##### $@
+        $@@
+ #    #$@
+ #   # $@
+ #  #  $@
+ ###   $@
+ #  #  $@
+ #   # $@
+ #    #$@
+       $@@
+ #      $@
+ #      $@
+ #      $@
+ #      $@
+ #      $@
+ #      $@
+ #######$@
+        $@@
+ #     #$@
+ ##   ##$@
+ # # # #$@
+ #  #  #$@
+ #     #$@
+ #     #$@
+ #     #$@
+        $@@
+ #     #$@
+ ##    #$@
+ # #   #$@
+ #  #  #$@
+ #   # #$@
+ #    ##$@
+ #     #$@
+        $@@
+ #######$@
+ #     #$@
+ #     #$@
+ #     #$@
+ #     #$@
+ #     #$@
+ #######$@
+        $@@
+ ###### $@
+ #     #$@
+ #     #$@
+ ###### $@
+ #      $@
+ #      $@
+ #      $@
+        $@@
+  ##### $@
+ #     #$@
+ #     #$@
+ #     #$@
+ #   # #$@
+ #    # $@
+  #### #$@
+        $@@
+ ###### $@
+ #     #$@
+ #     #$@
+ ###### $@
+ #   #  $@
+ #    # $@
+ #     #$@
+        $@@
+  ##### $@
+ #     #$@
+ #      $@
+  ##### $@
+       #$@
+ #     #$@
+  ##### $@
+        $@@
+ #######$@
+    #   $@
+    #   $@
+    #   $@
+    #   $@
+    #   $@
+    #   $@
+        $@@
+ #     #$@
+ #     #$@
+ #     #$@
+ #     #$@
+ #     #$@
+ #     #$@
+  ##### $@
+        $@@
+ #     #$@
+ #     #$@
+ #     #$@
+ #     #$@
+  #   # $@
+   # #  $@
+    #   $@
+        $@@
+ #     #$@
+ #  #  #$@
+ #  #  #$@
+ #  #  #$@
+ #  #  #$@
+ #  #  #$@
+  ## ## $@
+        $@@
+ #     #$@
+  #   # $@
+   # #  $@
+    #   $@
+   # #  $@
+  #   # $@
+ #     #$@
+        $@@
+ #     #$@
+  #   # $@
+   # #  $@
+    #   $@
+    #   $@
+    #   $@
+    #   $@
+        $@@
+ #######$@
+      # $@
+     #  $@
+    #   $@
+   #    $@
+  #     $@
+ #######$@
+        $@@
+ #####$@
+ #    $@
+ #    $@
+ #    $@
+ #    $@
+ #    $@
+ #####$@
+      $@@
+ #      $@
+  #     $@
+   #    $@
+    #   $@
+     #  $@
+      # $@
+       #$@
+        $@@
+ #####$@
+     #$@
+     #$@
+     #$@
+     #$@
+     #$@
+ #####$@
+      $@@
+   #  $@
+  # # $@
+ #   #$@
+      $@
+      $@
+      $@
+      $@
+      $@@
+        $@
+        $@
+        $@
+        $@
+        $@
+        $@
+        $@
+ #######$@@
+ ###$@
+ ###$@
+  # $@
+   #$@
+    $@
+    $@
+    $@
+    $@@
+       $@
+   ##  $@
+  #  # $@
+ #    #$@
+ ######$@
+ #    #$@
+ #    #$@
+       $@@
+       $@
+ ##### $@
+ #    #$@
+ ##### $@
+ #    #$@
+ #    #$@
+ ##### $@
+       $@@
+       $@
+  #### $@
+ #    #$@
+ #     $@
+ #     $@
+ #    #$@
+  #### $@
+       $@@
+       $@
+ ##### $@
+ #    #$@
+ #    #$@
+ #    #$@
+ #    #$@
+ ##### $@
+       $@@
+       $@
+ ######$@
+ #     $@
+ ##### $@
+ #     $@
+ #     $@
+ ######$@
+       $@@
+       $@
+ ######$@
+ #     $@
+ ##### $@
+ #     $@
+ #     $@
+ #     $@
+       $@@
+       $@
+  #### $@
+ #    #$@
+ #     $@
+ #  ###$@
+ #    #$@
+  #### $@
+       $@@
+       $@
+ #    #$@
+ #    #$@
+ ######$@
+ #    #$@
+ #    #$@
+ #    #$@
+       $@@
+  $@
+ #$@
+ #$@
+ #$@
+ #$@
+ #$@
+ #$@
+  $@@
+       $@
+      #$@
+      #$@
+      #$@
+      #$@
+ #    #$@
+  #### $@
+       $@@
+       $@
+ #    #$@
+ #   # $@
+ ####  $@
+ #  #  $@
+ #   # $@
+ #    #$@
+       $@@
+       $@
+ #     $@
+ #     $@
+ #     $@
+ #     $@
+ #     $@
+ ######$@
+       $@@
+       $@
+ #    #$@
+ ##  ##$@
+ # ## #$@
+ #    #$@
+ #    #$@
+ #    #$@
+       $@@
+       $@
+ #    #$@
+ ##   #$@
+ # #  #$@
+ #  # #$@
+ #   ##$@
+ #    #$@
+       $@@
+       $@
+  #### $@
+ #    #$@
+ #    #$@
+ #    #$@
+ #    #$@
+  #### $@
+       $@@
+       $@
+ ##### $@
+ #    #$@
+ #    #$@
+ ##### $@
+ #     $@
+ #     $@
+       $@@
+       $@
+  #### $@
+ #    #$@
+ #    #$@
+ #  # #$@
+ #   # $@
+  ### #$@
+       $@@
+       $@
+ ##### $@
+ #    #$@
+ #    #$@
+ ##### $@
+ #   # $@
+ #    #$@
+       $@@
+       $@
+  #### $@
+ #     $@
+  #### $@
+      #$@
+ #    #$@
+  #### $@
+       $@@
+      $@
+ #####$@
+   #  $@
+   #  $@
+   #  $@
+   #  $@
+   #  $@
+      $@@
+       $@
+ #    #$@
+ #    #$@
+ #    #$@
+ #    #$@
+ #    #$@
+  #### $@
+       $@@
+       $@
+ #    #$@
+ #    #$@
+ #    #$@
+ #    #$@
+  #  # $@
+   ##  $@
+       $@@
+       $@
+ #    #$@
+ #    #$@
+ #    #$@
+ # ## #$@
+ ##  ##$@
+ #    #$@
+       $@@
+       $@
+ #    #$@
+  #  # $@
+   ##  $@
+   ##  $@
+  #  # $@
+ #    #$@
+       $@@
+      $@
+ #   #$@
+  # # $@
+   #  $@
+   #  $@
+   #  $@
+   #  $@
+      $@@
+       $@
+ ######$@
+     # $@
+    #  $@
+   #   $@
+  #    $@
+ ######$@
+       $@@
+   ###$@
+  #   $@
+  #   $@
+ ##   $@
+  #   $@
+  #   $@
+   ###$@
+      $@@
+ #$@
+ #$@
+ #$@
+  $@
+ #$@
+ #$@
+ #$@
+  $@@
+ ###  $@
+    # $@
+    # $@
+    ##$@
+    # $@
+    # $@
+ ###  $@
+      $@@
+  ##    $@
+ #  #  #$@
+     ## $@
+        $@
+        $@
+        $@
+        $@
+        $@@
+ #  #  #$@
+   # #  $@
+  #   # $@
+ #     #$@
+ #######$@
+ #     #$@
+ #     #$@
+        $@@
+ #     #$@
+  ##### $@
+ #     #$@
+ #     #$@
+ #     #$@
+ #     #$@
+  ##### $@
+        $@@
+ #     #$@
+        $@
+ #     #$@
+ #     #$@
+ #     #$@
+ #     #$@
+  ##### $@
+        $@@
+       $@
+ #    #$@
+  #### $@
+ #    #$@
+ ######$@
+ #    #$@
+ #    #$@
+       $@@
+       $@
+ #    #$@
+  #### $@
+ #    #$@
+ #    #$@
+ #    #$@
+  #### $@
+       $@@
+       $@
+ #    #$@
+       $@
+ #    #$@
+ #    #$@
+ #    #$@
+  #### $@
+       $@@
+ ###### $@
+ #     #$@
+ #     #$@
+ ###### $@
+ #     #$@
+ #     #$@
+ ###### $@
+ #      $@@
+160  NO-BREAK SPACE
+         $@
+         $@
+         $@
+         $@
+ ########$@
+    ##   $@
+    ##   $@
+    ##   $@@
+169  COPYRIGHT SIGN
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@@
+176  DEGREE SIGN
+         $@
+         $@
+         $@
+         $@
+ ########$@
+         $@
+         $@
+         $@@
+178  SUPERSCRIPT TWO
+    ##   $@
+    ##   $@
+    ##   $@
+    ##   $@
+ ########$@
+    ##   $@
+    ##   $@
+    ##   $@@
+183  MIDDLE DOT
+ ##   $@
+ ##   $@
+ #####$@
+ ##   $@
+ #####$@
+ ##   $@
+ ##   $@
+ ##   $@@
+196  LATIN CAPITAL LETTER A WITH DIAERESIS
+ #  #  #$@
+   # #  $@
+  #   # $@
+ #     #$@
+ #######$@
+ #     #$@
+ #     #$@
+        $@@
+214  LATIN CAPITAL LETTER O WITH DIAERESIS
+ #     #$@
+  ##### $@
+ #     #$@
+ #     #$@
+ #     #$@
+ #     #$@
+  ##### $@
+        $@@
+220  LATIN CAPITAL LETTER U WITH DIAERESIS
+ #     #$@
+        $@
+ #     #$@
+ #     #$@
+ #     #$@
+ #     #$@
+  ##### $@
+        $@@
+223  LATIN SMALL LETTER SHARP S
+ ###### $@
+ #     #$@
+ #     #$@
+ ###### $@
+ #     #$@
+ #     #$@
+ ###### $@
+ #      $@@
+228  LATIN SMALL LETTER A WITH DIAERESIS
+       $@
+ #    #$@
+  #### $@
+ #    #$@
+ ######$@
+ #    #$@
+ #    #$@
+       $@@
+246  LATIN SMALL LETTER O WITH DIAERESIS
+       $@
+ #    #$@
+  #### $@
+ #    #$@
+ #    #$@
+ #    #$@
+  #### $@
+       $@@
+247  DIVISION SIGN
+ #### $@
+ #### $@
+ #### $@
+ #### $@
+ #####$@
+ #### $@
+ #### $@
+ #### $@@
+252  LATIN SMALL LETTER U WITH DIAERESIS
+       $@
+ #    #$@
+       $@
+ #    #$@
+ #    #$@
+ #    #$@
+  #### $@
+       $@@
+0x0401  CYRILLIC CAPITAL LETTER IO
+ ########$@
+ ########$@
+ ########$@
+ ########$@
+ ########$@
+ ########$@
+ ########$@
+ ########$@@
+0x0410  CYRILLIC CAPITAL LETTER A
+    ####$@
+   ## ##$@
+  ##  ##$@
+ ##   ##$@
+ #######$@
+ ##   ##$@
+ ##   ##$@
+        $@@
+0x0411  CYRILLIC CAPITAL LETTER BE
+ #######$@
+ ##     $@
+ ##     $@
+ ###### $@
+ ##   ##$@
+ ##   ##$@
+ ###### $@
+        $@@
+0x0412  CYRILLIC CAPITAL LETTER VE
+ ###### $@
+ ##   ##$@
+ ##   ##$@
+ ###### $@
+ ##   ##$@
+ ##   ##$@
+ ###### $@
+        $@@
+0x0413  CYRILLIC CAPITAL LETTER GHE
+ #######$@
+ ##     $@
+ ##     $@
+ ##     $@
+ ##     $@
+ ##     $@
+ ##     $@
+        $@@
+0x0414  CYRILLIC CAPITAL LETTER DE
+   #### $@
+  ## ## $@
+  ## ## $@
+  ## ## $@
+  ## ## $@
+ #######$@
+ ##   ##$@
+        $@@
+0x0415  CYRILLIC CAPITAL LETTER IE
+ #######$@
+ ##     $@
+ ##     $@
+ ###### $@
+ ##     $@
+ ##     $@
+ #######$@
+        $@@
+0x0416  CYRILLIC CAPITAL LETTER ZHE
+ ## # ##$@
+  # # # $@
+   ###  $@
+   ###  $@
+  # # # $@
+  # # # $@
+ ## # ##$@
+        $@@
+0x0417  CYRILLIC CAPITAL LETTER ZE
+  ##### $@
+ ##   ##$@
+      ##$@
+    ##  $@
+      ##$@
+ ##   ##$@
+  ##### $@
+        $@@
+0x0418  CYRILLIC CAPITAL LETTER I
+ ##   ##$@
+ ##  ###$@
+ ##  ###$@
+ ## # ##$@
+ ###  ##$@
+ ##   ##$@
+ ##   ##$@
+        $@@
+0x0419  CYRILLIC CAPITAL LETTER SHORT I
+ ## ## #$@
+ ##   ##$@
+ ##  ###$@
+ ## # ##$@
+ ###  ##$@
+ ##   ##$@
+ ##   ##$@
+        $@@
+0x041A  CYRILLIC CAPITAL LETTER KA
+ ##   ##$@
+ ##  ## $@
+ ## ##  $@
+ #####  $@
+ ##  ## $@
+ ##   ##$@
+ ##   ##$@
+        $@@
+0x041B  CYRILLIC CAPITAL LETTER EL
+   #####$@
+  ##  ##$@
+  ##  ##$@
+  ##  ##$@
+  ##  ##$@
+  ##  ##$@
+ ##   ##$@
+        $@@
+0x041C  CYRILLIC CAPITAL LETTER EM
+ ##   ##$@
+ ##   ##$@
+ ### ###$@
+ ## # ##$@
+ ##   ##$@
+ ##   ##$@
+ ##   ##$@
+        $@@
+0x041D  CYRILLIC CAPITAL LETTER EN
+ ##   ##$@
+ ##   ##$@
+ ##   ##$@
+ #######$@
+ ##   ##$@
+ ##   ##$@
+ ##   ##$@
+        $@@
+0x041E  CYRILLIC CAPITAL LETTER O
+  ##### $@
+ ##   ##$@
+ ##   ##$@
+ ##   ##$@
+ ##   ##$@
+ ##   ##$@
+  ##### $@
+        $@@
+0x041F  CYRILLIC CAPITAL LETTER PE
+ #######$@
+ ##   ##$@
+ ##   ##$@
+ ##   ##$@
+ ##   ##$@
+ ##   ##$@
+ ##   ##$@
+        $@@
+0x0420  CYRILLIC CAPITAL LETTER ER
+ ###### $@
+ ##   ##$@
+ ##   ##$@
+ ###### $@
+ ##     $@
+ ##     $@
+ ##     $@
+        $@@
+0x0421  CYRILLIC CAPITAL LETTER ES
+  ##### $@
+ ##   ##$@
+ ##     $@
+ ##     $@
+ ##     $@
+ ##   ##$@
+  ##### $@
+        $@@
+0x0422  CYRILLIC CAPITAL LETTER TE
+ ###### $@
+   ##   $@
+   ##   $@
+   ##   $@
+   ##   $@
+   ##   $@
+   ##   $@
+        $@@
+0x0423  CYRILLIC CAPITAL LETTER U
+ ##   ##$@
+ ##   ##$@
+ ##   ##$@
+  ######$@
+      ##$@
+ ##   ##$@
+  ##### $@
+        $@@
+0x0424  CYRILLIC CAPITAL LETTER EF
+    #   $@
+  ##### $@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+  ##### $@
+    #   $@
+        $@@
+0x0425  CYRILLIC CAPITAL LETTER HA
+ ##   ##$@
+  ## ## $@
+   ###  $@
+   ###  $@
+   ###  $@
+  ## ## $@
+ ##   ##$@
+        $@@
+0x0426  CYRILLIC CAPITAL LETTER TSE
+ ##  ## $@
+ ##  ## $@
+ ##  ## $@
+ ##  ## $@
+ ##  ## $@
+ ##  ## $@
+ #######$@
+       #$@@
+0x0427  CYRILLIC CAPITAL LETTER CHE
+ ##   ##$@
+ ##   ##$@
+ ##   ##$@
+  ######$@
+      ##$@
+      ##$@
+      ##$@
+        $@@
+0x0428  CYRILLIC CAPITAL LETTER SHA
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ #######$@
+        $@@
+0x0429  CYRILLIC CAPITAL LETTER SHCHA
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ #######$@
+       #$@@
+0x042A  CYRILLIC CAPITAL LETTER HARD SIGN
+ ###    $@
+ ###    $@
+  ##    $@
+  ##### $@
+  ##  ##$@
+  ##  ##$@
+  ##### $@
+        $@@
+0x042B  CYRILLIC CAPITAL LETTER YERU
+ ##   ##$@
+ ##   ##$@
+ ##   ##$@
+ ####  #$@
+ ##  # #$@
+ ##  # #$@
+ ####  #$@
+        $@@
+0x042C  CYRILLIC CAPITAL LETTER SOFT SIGN
+ ##     $@
+ ##     $@
+ ##     $@
+ ###### $@
+ ##   ##$@
+ ##   ##$@
+ ###### $@
+        $@@
+0x042D  CYRILLIC CAPITAL LETTER E
+  ##### $@
+ ##   ##$@
+      ##$@
+   #####$@
+      ##$@
+ ##   ##$@
+  ##### $@
+        $@@
+0x042E  CYRILLIC CAPITAL LETTER YU
+ ##  ## $@
+ ## # ##$@
+ ## # ##$@
+ #### ##$@
+ ## # ##$@
+ ## # ##$@
+ ##  ## $@
+        $@@
+0x042F  CYRILLIC CAPITAL LETTER YA
+   #####$@
+  ##  ##$@
+  ##  ##$@
+   #####$@
+   ## ##$@
+  ##  ##$@
+ ##   ##$@
+        $@@
+0x0430  CYRILLIC SMALL LETTER A
+        $@
+        $@
+  ####  $@
+     ## $@
+  ##### $@
+ ##  ## $@
+  ######$@
+        $@@
+0x0431  CYRILLIC SMALL LETTER BE
+        $@
+     ## $@
+  ####  $@
+ ##     $@
+ ###### $@
+ ##   ##$@
+  ##### $@
+        $@@
+0x0432  CYRILLIC SMALL LETTER VE
+        $@
+        $@
+ #####  $@
+ ##  ## $@
+ ###### $@
+ ##   ##$@
+ ###### $@
+        $@@
+0x0433  CYRILLIC SMALL LETTER GHE
+        $@
+        $@
+  ##### $@
+      ##$@
+  ##### $@
+ ##     $@
+  ######$@
+        $@@
+0x0434  CYRILLIC SMALL LETTER DE
+        $@
+   #### $@
+      ##$@
+   #####$@
+  ##  ##$@
+ ##   ##$@
+  ##### $@
+        $@@
+0x0435  CYRILLIC SMALL LETTER IE
+        $@
+        $@
+  ##### $@
+ ##   ##$@
+ ###### $@
+ ##     $@
+  ##### $@
+        $@@
+0x0436  CYRILLIC SMALL LETTER ZHE
+        $@
+        $@
+ ## # ##$@
+  # # # $@
+   ###  $@
+  # # # $@
+ ## # ##$@
+        $@@
+0x0437  CYRILLIC SMALL LETTER ZE
+        $@
+        $@
+  ##### $@
+ ##   ##$@
+    ### $@
+ ##   ##$@
+  ##### $@
+        $@@
+0x0438  CYRILLIC SMALL LETTER I
+        $@
+        $@
+ ##   ##$@
+ ##  ###$@
+ ## # ##$@
+ ###  ##$@
+ ##   ##$@
+        $@@
+0x0439  CYRILLIC SMALL LETTER SHORT I
+        $@
+    ##  $@
+ ##   ##$@
+ ##  ###$@
+ ## # ##$@
+ ###  ##$@
+ ##   ##$@
+        $@@
+0x043A  CYRILLIC SMALL LETTER KA
+        $@
+        $@
+ ##   ##$@
+ ##  ## $@
+ #####  $@
+ ##  ## $@
+ ##   ##$@
+        $@@
+0x043B  CYRILLIC SMALL LETTER EL
+        $@
+        $@
+   #####$@
+  ##  ##$@
+  ##  ##$@
+  ##  ##$@
+ ##   ##$@
+        $@@
+0x043C  CYRILLIC SMALL LETTER EM
+        $@
+        $@
+ ##   ##$@
+ ### ###$@
+ ## # ##$@
+ ##   ##$@
+ ##   ##$@
+        $@@
+0x043D  CYRILLIC SMALL LETTER EN
+        $@
+        $@
+ ##   ##$@
+ ##   ##$@
+ #######$@
+ ##   ##$@
+ ##   ##$@
+        $@@
+0x043E  CYRILLIC SMALL LETTER O
+        $@
+        $@
+  ##### $@
+ ##   ##$@
+ ##   ##$@
+ ##   ##$@
+  ##### $@
+        $@@
+0x043F  CYRILLIC SMALL LETTER PE
+        $@
+        $@
+ ###### $@
+ ##   ##$@
+ ##   ##$@
+ ##   ##$@
+ ##   ##$@
+        $@@
+0x0440  CYRILLIC SMALL LETTER ER
+        $@
+        $@
+ ###### $@
+ ##   ##$@
+ ###### $@
+ ##     $@
+ ##     $@
+        $@@
+0x0441  CYRILLIC SMALL LETTER ES
+        $@
+        $@
+  ##### $@
+ ##     $@
+ ##     $@
+ ##     $@
+  ##### $@
+        $@@
+0x0442  CYRILLIC SMALL LETTER TE
+        $@
+        $@
+ ###### $@
+   ##   $@
+   ##   $@
+   ##   $@
+   ##   $@
+        $@@
+0x0443  CYRILLIC SMALL LETTER U
+        $@
+        $@
+ ##   ##$@
+ ##   ##$@
+ ##   ##$@
+  ######$@
+      ##$@
+  ##### $@@
+0x0444  CYRILLIC SMALL LETTER EF
+        $@
+    #   $@
+  ##### $@
+ ## # ##$@
+ ## # ##$@
+  ##### $@
+    #   $@
+        $@@
+0x0445  CYRILLIC SMALL LETTER HA
+        $@
+        $@
+ ##   ##$@
+  ## ## $@
+   ###  $@
+  ## ## $@
+ ##   ##$@
+        $@@
+0x0446  CYRILLIC SMALL LETTER TSE
+        $@
+        $@
+ ##   ##$@
+ ##   ##$@
+ ##   ##$@
+ ##  ## $@
+  ### ##$@
+       #$@@
+0x0447  CYRILLIC SMALL LETTER CHE
+        $@
+        $@
+ ##   ##$@
+ ##   ##$@
+  ######$@
+      ##$@
+      ##$@
+        $@@
+0x0448  CYRILLIC SMALL LETTER SHA
+        $@
+        $@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ #######$@
+        $@@
+0x0449  CYRILLIC SMALL LETTER SHCHA
+        $@
+        $@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ ## # ##$@
+ #######$@
+       #$@@
+0x044A  CYRILLIC SMALL LETTER HARD SIGN
+        $@
+        $@
+ ###    $@
+  ##    $@
+  ##### $@
+  ##  ##$@
+  ##### $@
+        $@@
+0x044B  CYRILLIC SMALL LETTER YERU
+        $@
+        $@
+ ##   ##$@
+ ##   ##$@
+ ####  #$@
+ ##  # #$@
+ ####  #$@
+        $@@
+0x044C  CYRILLIC SMALL LETTER SOFT SIGN
+        $@
+        $@
+ ##     $@
+ ##     $@
+ ###### $@
+ ##   ##$@
+ ###### $@
+        $@@
+0x044D  CYRILLIC SMALL LETTER E
+        $@
+        $@
+ ###### $@
+      ##$@
+   #####$@
+      ##$@
+ ###### $@
+        $@@
+0x044E  CYRILLIC SMALL LETTER YU
+        $@
+        $@
+ #  ### $@
+ # ## ##$@
+ #### ##$@
+ # ## ##$@
+ #  ### $@
+        $@@
+0x044F  CYRILLIC SMALL LETTER YA
+        $@
+        $@
+   #####$@
+  ##  ##$@
+   #####$@
+  ##  ##$@
+ ##   ##$@
+        $@@
+0x0451  CYRILLIC SMALL LETTER IO
+         $@
+         $@
+ ########$@
+         $@
+ #### ###$@
+   ## ## $@
+   ## ## $@
+   ## ## $@@
+0x2219  BULLET OPERATOR
+   ## ##$@
+   ## ##$@
+   ## ##$@
+   ## ##$@
+ #######$@
+        $@
+        $@
+        $@@
+0x221A  SQUARE ROOT
+    ## $@
+    ## $@
+ ##### $@
+    ## $@
+ ##### $@
+       $@
+       $@
+       $@@
+0x2248  ALMOST EQUAL TO
+       $@
+       $@
+       $@
+       $@
+ ##### $@
+    ## $@
+    ## $@
+    ## $@@
+0x2264  LESS-THAN OR EQUAL TO
+ ##   $@
+ ##   $@
+ ##   $@
+ ##   $@
+ #####$@
+      $@
+      $@
+      $@@
+0x2265  GREATER-THAN OR EQUAL TO
+    ##   $@
+    ##   $@
+    ##   $@
+    ##   $@
+ ########$@
+         $@
+         $@
+         $@@
+0x2320  TOP HALF INTEGRAL
+        $@
+        $@
+ #######$@
+      ##$@
+ #### ##$@
+   ## ##$@
+   ## ##$@
+   ## ##$@@
+0x2321  BOTTOM HALF INTEGRAL
+ ##   $@
+ ##   $@
+ ##   $@
+ ##   $@
+ #####$@
+ ##   $@
+ ##   $@
+ ##   $@@
+0x2500  BOX DRAWINGS LIGHT HORIZONTAL
+   ##  $@
+       $@
+   ##  $@
+  ##   $@
+ ##    $@
+ ##  ##$@
+  #### $@
+       $@@
+0x2502  BOX DRAWINGS LIGHT VERTICAL
+       $@
+       $@
+       $@
+ ######$@
+ ##    $@
+ ##    $@
+       $@
+       $@@
+0x250C  BOX DRAWINGS LIGHT DOWN AND RIGHT
+       $@
+       $@
+       $@
+ ######$@
+     ##$@
+     ##$@
+       $@
+       $@@
+0x2510  BOX DRAWINGS LIGHT DOWN AND LEFT
+ ##    ##$@
+ ##   ## $@
+ ##  ##  $@
+ ## #### $@
+   ##  ##$@
+  ##  ## $@
+ ##  ##  $@
+     ####$@@
+0x2514  BOX DRAWINGS LIGHT UP AND RIGHT
+ ##    ##$@
+ ##   ## $@
+ ##  ##  $@
+ ## ## ##$@
+   ## ###$@
+  ## ####$@
+ ##  ####$@
+       ##$@@
+0x2518  BOX DRAWINGS LIGHT UP AND LEFT
+ ## $@
+ ## $@
+    $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+    $@@
+0x251C  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+         $@
+   ##  ##$@
+  ##  ## $@
+ ##  ##  $@
+  ##  ## $@
+   ##  ##$@
+         $@
+         $@@
+0x2524  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+         $@
+ ##  ##  $@
+  ##  ## $@
+   ##  ##$@
+  ##  ## $@
+ ##  ##  $@
+         $@
+         $@@
+0x252C  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+  # #$@
+ # # $@
+  # #$@
+ # # $@
+  # #$@
+ # # $@
+  # #$@
+ # # $@@
+0x2534  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+  # # # #$@
+ # # # # $@
+  # # # #$@
+ # # # # $@
+  # # # #$@
+ # # # # $@
+  # # # #$@
+ # # # # $@@
+0x253C  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+ ## ## ##$@
+  ### ###$@
+ ## ## ##$@
+ ### ### $@
+ ## ## ##$@
+  ### ###$@
+ ## ## ##$@
+ ### ### $@@
+0x2550  BOX DRAWINGS DOUBLE HORIZONTAL
+ ## ## $@
+ ## ## $@
+ ## ###$@
+ ##    $@
+ ######$@
+       $@
+       $@
+       $@@
+0x2551  BOX DRAWINGS DOUBLE VERTICAL
+       $@
+       $@
+ ######$@
+ ##    $@
+ ## ###$@
+ ## ## $@
+ ## ## $@
+ ## ## $@@
+0x2552  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+   ## ## $@
+   ## ## $@
+ #### ###$@
+         $@
+ ########$@
+         $@
+         $@
+         $@@
+0x2553  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+ #### $@
+ #### $@
+ #####$@
+ ##   $@
+ #####$@
+ #### $@
+ #### $@
+ #### $@@
+0x2554  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+         $@
+         $@
+ ########$@
+         $@
+ ########$@
+         $@
+         $@
+         $@@
+0x2555  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+   #### $@
+   #### $@
+ #######$@
+        $@
+ #######$@
+   #### $@
+   #### $@
+   #### $@@
+0x2556  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    ##   $@
+    ##   $@
+ ########$@
+         $@
+ ########$@
+         $@
+         $@
+         $@@
+0x2557  BOX DRAWINGS DOUBLE DOWN AND LEFT
+   ## ## $@
+   ## ## $@
+   ## ## $@
+   ## ## $@
+ ########$@
+         $@
+         $@
+         $@@
+0x2558  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+         $@
+         $@
+ ########$@
+         $@
+ ########$@
+    ##   $@
+    ##   $@
+    ##   $@@
+0x2559  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+         $@
+         $@
+         $@
+         $@
+ ########$@
+   ## ## $@
+   ## ## $@
+   ## ## $@@
+0x255A  BOX DRAWINGS DOUBLE UP AND RIGHT
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ######$@
+       $@
+       $@
+       $@@
+0x255B  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+ ##   $@
+ ##   $@
+ #####$@
+ ##   $@
+ #####$@
+      $@
+      $@
+      $@@
+0x255C  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+      $@
+      $@
+ #####$@
+ ##   $@
+ #####$@
+ ##   $@
+ ##   $@
+ ##   $@@
+0x255D  BOX DRAWINGS DOUBLE UP AND LEFT
+       $@
+       $@
+       $@
+       $@
+ ######$@
+ ## ## $@
+ ## ## $@
+ ## ## $@@
+0x255E  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+   ## ## $@
+   ## ## $@
+   ## ## $@
+   ## ## $@
+ ########$@
+   ## ## $@
+   ## ## $@
+   ## ## $@@
+0x255F  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    ##   $@
+    ##   $@
+ ########$@
+    ##   $@
+ ########$@
+    ##   $@
+    ##   $@
+    ##   $@@
+0x2560  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    ## $@
+    ## $@
+    ## $@
+    ## $@
+ ##### $@
+       $@
+       $@
+       $@@
+0x2561  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+      $@
+      $@
+      $@
+      $@
+ #####$@
+ ##   $@
+ ##   $@
+ ##   $@@
+0x2562  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+         $@
+         $@
+         $@
+         $@
+ ########$@
+ ########$@
+ ########$@
+ ########$@@
+0x2563  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+ ####  $@
+ ####  $@
+ ####  $@
+ ####  $@
+ ####  $@
+ ####  $@
+ ####  $@
+ ####  $@@
+0x2564  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@@
+0x2565  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+ ########$@
+ ########$@
+ ########$@
+ ########$@
+         $@
+         $@
+         $@
+         $@@
+0x2566  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+  ###  $@
+ ## ## $@
+ ## ## $@
+  ###  $@
+       $@
+       $@
+       $@
+       $@@
+0x2567  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    $@
+    $@
+    $@
+ ## $@
+ ## $@
+    $@
+    $@
+    $@@
+0x2568  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    $@
+    $@
+    $@
+    $@
+ ## $@
+    $@
+    $@
+    $@@
+0x2569  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+     ####$@
+     ##  $@
+     ##  $@
+     ##  $@
+ ### ##  $@
+  ## ##  $@
+   ####  $@
+    ###  $@@
+0x256A  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+ ####  $@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+ ## ## $@
+       $@
+       $@
+       $@@
+0x256B  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+ ###  $@
+   ## $@
+  ##  $@
+ ##   $@
+ #### $@
+      $@
+      $@
+      $@@
+0x256C  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+      $@
+      $@
+ #### $@
+ #### $@
+ #### $@
+ #### $@
+      $@
+      $@@
+0x2580  UPPER HALF BLOCK
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@
+ ## $@@
+0x2584  LOWER HALF BLOCK
+    ## $@
+    ## $@
+    ## $@
+    ## $@
+ ##### $@
+    ## $@
+    ## $@
+    ## $@@
+0x2588  FULL BLOCK
+    ## $@
+    ## $@
+ ##### $@
+    ## $@
+ ##### $@
+    ## $@
+    ## $@
+    ## $@@
+0x258C  LEFT HALF BLOCK
+   ####$@
+   ####$@
+   ####$@
+   ####$@
+ ######$@
+   ####$@
+   ####$@
+   ####$@@
+0x2590  RIGHT HALF BLOCK
+        $@
+        $@
+        $@
+        $@
+ #######$@
+   ## ##$@
+   ## ##$@
+   ## ##$@@
+0x2591  LIGHT SHADE
+       $@
+       $@
+ ##### $@
+    ## $@
+ ##### $@
+    ## $@
+    ## $@
+    ## $@@
+0x2592  MEDIUM SHADE
+   ####$@
+   ####$@
+ ######$@
+     ##$@
+ ######$@
+   ####$@
+   ####$@
+   ####$@@
+0x2593  DARK SHADE
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@
+ ####$@@
+0x25A0  BLACK SQUARE
+   ## ##$@
+   ## ##$@
+ #### ##$@
+      ##$@
+ #######$@
+        $@
+        $@
+        $@@
+0x30A2  A
+ ##########$@
+       ### $@
+      #    $@
+     #     $@
+    #      $@
+   #       $@
+  #        $@
+           $@@
+0x30A4  I
+       ##$@
+     ##  $@
+   ## #  $@
+ ##   #  $@
+      #  $@
+      #  $@
+      #  $@
+         $@@
+0x30A6  U
+     #     $@
+ ##########$@
+ #        #$@
+        ## $@
+      ##   $@
+    ##     $@
+  ##       $@
+           $@@
+0x30A8  E
+           $@
+   ####### $@
+      #    $@
+      #    $@
+      #    $@
+      #    $@
+ ##########$@
+           $@@
+0x30AA  O
+        #  $@
+ ##########$@
+       ##  $@
+     ## #  $@
+   ##   #  $@
+ ##    ##  $@
+        #  $@
+           $@@
+0x30AB  KA
+      #    $@
+ ##########$@
+     #    #$@
+     #    #$@
+    #     #$@
+   #   # # $@
+  #     #  $@
+           $@@
+0x30AD  KI
+ # #    $@
+  #   # $@
+ # # #  $@
+    #   $@
+   # #  $@
+  #   # $@
+       #$@
+        $@@
+0x30AF  KU
+    #      $@
+   ########$@
+  #       #$@
+ #      ## $@
+      ##   $@
+    ##     $@
+  ##       $@
+           $@@
+0x30B1  KE
+    #      $@
+   ########$@
+  #    #   $@
+ #    #    $@
+     #     $@
+    #      $@
+   #       $@
+           $@@
+0x30B3  KO
+           $@
+ ##########$@
+          #$@
+          #$@
+          #$@
+          #$@
+ ######### $@
+           $@@
+0x30B5  SA
+   #    #  $@
+ ##########$@
+   #    #  $@
+        #  $@
+       #   $@
+      #    $@
+    #      $@
+           $@@
+0x30B7  SI (SHI)
+   #       #$@
+ #  #     # $@
+  #      #  $@
+       ##   $@
+     ##     $@
+   ##       $@
+ ##         $@
+            $@@
+0x30B9  SU
+ ########$@
+        #$@
+       # $@
+     ##  $@
+   ## #  $@
+  ##   # $@
+ #      #$@
+         $@@
+0x30BB  SE
+   #       $@
+   #       $@
+ ##########$@
+   #     # $@
+   #       $@
+   #       $@
+    ###### $@
+           $@@
+0x30BD  SO
+ #       #$@
+ #       #$@
+        # $@
+       #  $@
+     ##   $@
+   ##     $@
+ ##       $@
+          $@@
+0x30BF  TA
+    #     $@
+   #######$@
+  #     # $@
+ # #   #  $@
+    ###   $@
+   ##     $@
+ ##       $@
+          $@@
+0x30C1  TI (CHI)
+        ## $@
+  ######   $@
+      #    $@
+ ##########$@
+      #    $@
+      #    $@
+    ##     $@
+           $@@
+0x30C4  TU (TSU)
+ # #     #$@
+ # #     #$@
+        # $@
+       #  $@
+     ##   $@
+   ##     $@
+ ##       $@
+          $@@
+0x30C6  TE
+   ######  $@
+           $@
+ ##########$@
+      #    $@
+      #    $@
+     #     $@
+   ##      $@
+           $@@
+0x30C8  TO
+ #   $@
+ #   $@
+ ##  $@
+ # # $@
+ #  #$@
+ #   $@
+ #   $@
+     $@@
+0x30CA  NA
+      #    $@
+ ##########$@
+      #    $@
+      #    $@
+     #     $@
+    #      $@
+  ##       $@
+           $@@
+0x30CB  NI
+           $@
+           $@
+   ######  $@
+           $@
+           $@
+ ##########$@
+           $@
+           $@@
+0x30CC  NU
+ ##########$@
+          #$@
+    #    # $@
+     # ##  $@
+     ##    $@
+   ##  #   $@
+ ##     #  $@
+           $@@
+0x30CD  NE
+      #    $@
+ ##########$@
+         # $@
+      ###  $@
+   ######  $@
+ ##   #  ##$@
+      #    $@
+           $@@
+0x30CE  NO
+         #$@
+         #$@
+        # $@
+       #  $@
+     ##   $@
+   ##     $@
+ ##       $@
+          $@@
+0x30CF  HA
+          $@
+          $@
+    #  #  $@
+   #    # $@
+  #      #$@
+ #        $@
+          $@
+          $@@
+0x30D2  HI
+ #       $@
+ #   ### $@
+ ####    $@
+ #       $@
+ #       $@
+ #       $@
+  #######$@
+         $@@
+0x30D5  HU (FU)
+ ########$@
+        #$@
+        #$@
+       # $@
+     ##  $@
+   ##    $@
+ ##      $@
+         $@@
+0x30D8  HE
+           $@
+           $@
+   ##      $@
+  #  ##    $@
+ #     ##  $@
+         ##$@
+           $@
+           $@@
+0x30DB  HO
+      #    $@
+ ##########$@
+      #    $@
+   #  # #  $@
+  #   #  # $@
+ #   ##   #$@
+      #    $@
+           $@@
+0x30DE  MA
+           $@
+ ##########$@
+         # $@
+        #  $@
+     # #   $@
+      #    $@
+       #   $@
+           $@@
+0x30DF  MI
+ ####  $@
+     ##$@
+ ###   $@
+    ###$@
+       $@
+ ###   $@
+    ###$@
+       $@@
+0x30E0  MU
+      #    $@
+     #     $@
+    #      $@
+   #       $@
+  #     #  $@
+ ######### $@
+          #$@
+           $@@
+0x30E1  ME
+         #$@
+        # $@
+   #   #  $@
+    # #   $@
+     #    $@
+   ## #   $@
+ ##    #  $@
+          $@@
+0x30E2  MO
+   ######  $@
+     #     $@
+ ##########$@
+     #     $@
+     #     $@
+     #     $@
+      #### $@
+           $@@
+0x30E4  YA
+ #     ##  $@
+  #  ## #  $@
+  ###      $@
+ #  #      $@
+     #     $@
+      #    $@
+       #   $@
+           $@@
+0x30E6  YU
+           $@
+   ######  $@
+        #  $@
+        #  $@
+        #  $@
+ ##########$@
+           $@
+           $@@
+0x30E8  YO
+           $@
+   ######  $@
+       #   $@
+      #    $@
+      #    $@
+ ##########$@
+           $@
+           $@@
+0x30E9  RA
+   ######  $@
+           $@
+ ##########$@
+ #        #$@
+        ## $@
+      ##   $@
+    ##     $@
+           $@@
+0x30EA  RI
+ #   #$@
+ #   #$@
+ #   #$@
+ #   #$@
+    # $@
+   #  $@
+ ##   $@
+      $@@
+0x30EB  RU
+    # #    $@
+    # #    $@
+    # #    $@
+    # #   #$@
+   #  #  # $@
+  #   # #  $@
+ #    ##   $@
+           $@@
+0x30EC  RE
+ #       $@
+ #       $@
+ #       $@
+ #     ##$@
+ #   ##  $@
+ # ##    $@
+ ##      $@
+         $@@
+0x30ED  RO
+          $@
+ #########$@
+ #       #$@
+ #       #$@
+ #       #$@
+ #########$@
+          $@
+          $@@
+0x30EF  WA
+ ##########$@
+ #        #$@
+         # $@
+        #  $@
+       #   $@
+     ##    $@
+   ##      $@
+           $@@
+0x30F0  WI
+      #    $@
+   ####### $@
+    # #    $@
+    # #    $@
+ ##########$@
+      #    $@
+      #    $@
+           $@@
+0x30F1  WE
+ #########$@
+         #$@
+         #$@
+ ######## $@
+        # $@
+        # $@
+ ######## $@
+          $@@
+0x30F2  WO
+ ##########$@
+          #$@
+         # $@
+ ########  $@
+     ##    $@
+   ##      $@
+ ##        $@
+           $@@
+0x30F3  N
+         #$@
+ #       #$@
+  #     # $@
+       #  $@
+     ##   $@
+   ##     $@
+ ##       $@
+          $@@
+-0x0004  KATAMAP
+                                                    @
+a-A i-B u-C e-D o-E ka-F ki-G ku-H ke-I ko-J        @
+sa-K shi-L su-M se-N so-O ta-P chi-Q tsu-R te-S to-T@
+na-U ni-V nu-W ne-X no-Y ha-Z hi-a fu-b he-c ho-d   @
+ma-e mi-f mu-g me-h mo-i ya-j yu-k we-l yo-m        @
+ra-n ri-o ru-p re-q ro-r wa-s wi-t wo-u             @
+n-v                                                 @
+                                                    @@
+-0x0006  MOSCOWMAP
+a-a, b-b, v-v, g-g, d-d, e-e, zh-j, z-z, i-i@
+short i->, k-k, l-l, m-m, n-n, o-o, p-p, r-r@
+s-s, t-t, u-u, f-f, kh-h, ts-q, ch-c, sh-w  @
+shch-x, hard-\, yeru-|, soft-/, reverse e-~ @
+yu-`, ya-y                                  @
+Capitals use Latin capital letters, except: @
+Reverse E-<, Yu-@                           @
+No caps for short i, hard, yeru, soft.      @@
diff --git a/externals/figlet/fonts/big.flf b/externals/figlet/fonts/big.flf
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/big.flf
@@ -0,0 +1,2204 @@
+flf2a$ 8 6 59 15 10 0 24463 153
+Big by Glenn Chappell 4/93 -- based on Standard
+Includes ISO Latin-1
+Greek characters by Bruce Jakeway <pbjakeway@neumann.uwaterloo.ca>
+figlet release 2.2 -- November 1996
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin.  May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@@
+  _ @
+ | |@
+ | |@
+ | |@
+ |_|@
+ (_)@
+    @
+    @@
+  _ _ @
+ ( | )@
+  V V @
+   $  @
+   $  @
+   $  @
+      @
+      @@
+    _  _   @
+  _| || |_ @
+ |_  __  _|@
+  _| || |_ @
+ |_  __  _|@
+   |_||_|  @
+           @
+           @@
+   _  @
+  | | @
+ / __)@
+ \__ \@
+ (   /@
+  |_| @
+      @
+      @@
+  _   __@
+ (_) / /@
+    / / @
+   / /  @
+  / / _ @
+ /_/ (_)@
+        @
+        @@
+         @
+   ___   @
+  ( _ )  @
+  / _ \/\@
+ | (_>  <@
+  \___/\/@
+         @
+         @@
+  _ @
+ ( )@
+ |/ @
+  $ @
+  $ @
+  $ @
+    @
+    @@
+   __@
+  / /@
+ | | @
+ | | @
+ | | @
+ | | @
+  \_\@
+     @@
+ __  @
+ \ \ @
+  | |@
+  | |@
+  | |@
+  | |@
+ /_/ @
+     @@
+     _    @
+  /\| |/\ @
+  \ ` ' / @
+ |_     _|@
+  / , . \ @
+  \/|_|\/ @
+          @
+          @@
+        @
+    _   @
+  _| |_ @
+ |_   _|@
+   |_|  @
+    $   @
+        @
+        @@
+    @
+    @
+    @
+    @
+  _ @
+ ( )@
+ |/ @
+    @@
+         @
+         @
+  ______ @
+ |______|@
+     $   @
+     $   @
+         @
+         @@
+    @
+    @
+    @
+    @
+  _ @
+ (_)@
+    @
+    @@
+      __@
+     / /@
+    / / @
+   / /  @
+  / /   @
+ /_/    @
+        @
+        @@
+   ___  @
+  / _ \ @
+ | | | |@
+ | | | |@
+ | |_| |@
+  \___/ @
+        @
+        @@
+  __ @
+ /_ |@
+  | |@
+  | |@
+  | |@
+  |_|@
+     @
+     @@
+  ___  @
+ |__ \ @
+   $) |@
+   / / @
+  / /_ @
+ |____|@
+       @
+       @@
+  ____  @
+ |___ \ @
+   __) |@
+  |__ < @
+  ___) |@
+ |____/ @
+        @
+        @@
+  _  _   @
+ | || |  @
+ | || |_ @
+ |__   _|@
+    | |  @
+    |_|  @
+         @
+         @@
+  _____ @
+ | ____|@
+ | |__  @
+ |___ \ @
+  ___) |@
+ |____/ @
+        @
+        @@
+    __  @
+   / /  @
+  / /_  @
+ | '_ \ @
+ | (_) |@
+  \___/ @
+        @
+        @@
+  ______ @
+ |____  |@
+    $/ / @
+    / /  @
+   / /   @
+  /_/    @
+         @
+         @@
+   ___  @
+  / _ \ @
+ | (_) |@
+  > _ < @
+ | (_) |@
+  \___/ @
+        @
+        @@
+   ___  @
+  / _ \ @
+ | (_) |@
+  \__, |@
+    / / @
+   /_/  @
+        @
+        @@
+    @
+  _ @
+ (_)@
+  $ @
+  _ @
+ (_)@
+    @
+    @@
+    @
+  _ @
+ (_)@
+  $ @
+  _ @
+ ( )@
+ |/ @
+    @@
+    __@
+   / /@
+  / / @
+ < <  @
+  \ \ @
+   \_\@
+      @
+      @@
+         @
+  ______ @
+ |______|@
+  ______ @
+ |______|@
+         @
+         @
+         @@
+ __   @
+ \ \  @
+  \ \ @
+   > >@
+  / / @
+ /_/  @
+      @
+      @@
+  ___  @
+ |__ \ @
+    ) |@
+   / / @
+  |_|  @
+  (_)  @
+       @
+       @@
+          @
+    ____  @
+   / __ \ @
+  / / _` |@
+ | | (_| |@
+  \ \__,_|@
+   \____/ @
+          @@
+           @
+     /\    @
+    /  \   @
+   / /\ \  @
+  / ____ \ @
+ /_/    \_\@
+           @
+           @@
+  ____  @
+ |  _ \ @
+ | |_) |@
+ |  _ < @
+ | |_) |@
+ |____/ @
+        @
+        @@
+   _____ @
+  / ____|@
+ | | $   @
+ | | $   @
+ | |____ @
+  \_____|@
+         @
+         @@
+  _____  @
+ |  __ \ @
+ | |  | |@
+ | |  | |@
+ | |__| |@
+ |_____/ @
+         @
+         @@
+  ______ @
+ |  ____|@
+ | |__   @
+ |  __|  @
+ | |____ @
+ |______|@
+         @
+         @@
+  ______ @
+ |  ____|@
+ | |__   @
+ |  __|  @
+ | |     @
+ |_|     @
+         @
+         @@
+   _____ @
+  / ____|@
+ | |  __ @
+ | | |_ |@
+ | |__| |@
+  \_____|@
+         @
+         @@
+  _    _ @
+ | |  | |@
+ | |__| |@
+ |  __  |@
+ | |  | |@
+ |_|  |_|@
+         @
+         @@
+  _____ @
+ |_   _|@
+   | |  @
+   | |  @
+  _| |_ @
+ |_____|@
+        @
+        @@
+       _ @
+      | |@
+      | |@
+  _   | |@
+ | |__| |@
+  \____/ @
+         @
+         @@
+  _  __@
+ | |/ /@
+ | ' / @
+ |  <  @
+ | . \ @
+ |_|\_\@
+       @
+       @@
+  _      @
+ | |     @
+ | |     @
+ | |     @
+ | |____ @
+ |______|@
+         @
+         @@
+  __  __ @
+ |  \/  |@
+ | \  / |@
+ | |\/| |@
+ | |  | |@
+ |_|  |_|@
+         @
+         @@
+  _   _ @
+ | \ | |@
+ |  \| |@
+ | . ` |@
+ | |\  |@
+ |_| \_|@
+        @
+        @@
+   ____  @
+  / __ \ @
+ | |  | |@
+ | |  | |@
+ | |__| |@
+  \____/ @
+         @
+         @@
+  _____  @
+ |  __ \ @
+ | |__) |@
+ |  ___/ @
+ | |     @
+ |_|     @
+         @
+         @@
+   ____  @
+  / __ \ @
+ | |  | |@
+ | |  | |@
+ | |__| |@
+  \___\_\@
+         @
+         @@
+  _____  @
+ |  __ \ @
+ | |__) |@
+ |  _  / @
+ | | \ \ @
+ |_|  \_\@
+         @
+         @@
+   _____ @
+  / ____|@
+ | (___  @
+  \___ \ @
+  ____) |@
+ |_____/ @
+         @
+         @@
+  _______ @
+ |__   __|@
+    | |   @
+    | |   @
+    | |   @
+    |_|   @
+          @
+          @@
+  _    _ @
+ | |  | |@
+ | |  | |@
+ | |  | |@
+ | |__| |@
+  \____/ @
+         @
+         @@
+ __      __@
+ \ \    / /@
+  \ \  / / @
+   \ \/ /  @
+    \  /   @
+     \/    @
+           @
+           @@
+ __          __@
+ \ \        / /@
+  \ \  /\  / / @
+   \ \/  \/ /  @
+    \  /\  /   @
+     \/  \/    @
+               @
+               @@
+ __   __@
+ \ \ / /@
+  \ V / @
+   > <  @
+  / . \ @
+ /_/ \_\@
+        @
+        @@
+ __     __@
+ \ \   / /@
+  \ \_/ / @
+   \   /  @
+    | |   @
+    |_|   @
+          @
+          @@
+  ______@
+ |___  /@
+   $/ / @
+   / /  @
+  / /__ @
+ /_____|@
+        @
+        @@
+  ___ @
+ |  _|@
+ | |  @
+ | |  @
+ | |  @
+ | |_ @
+ |___|@
+      @@
+ __     @
+ \ \    @
+  \ \   @
+   \ \  @
+    \ \ @
+     \_\@
+        @
+        @@
+  ___ @
+ |_  |@
+   | |@
+   | |@
+   | |@
+  _| |@
+ |___|@
+      @@
+  /\ @
+ |/\|@
+   $ @
+   $ @
+   $ @
+   $ @
+     @
+     @@
+         @
+         @
+         @
+         @
+         @
+     $   @
+  ______ @
+ |______|@@
+  _ @
+ ( )@
+  \|@
+  $ @
+  $ @
+  $ @
+    @
+    @@
+        @
+        @
+   __ _ @
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @
+        @@
+  _     @
+ | |    @
+ | |__  @
+ | '_ \ @
+ | |_) |@
+ |_.__/ @
+        @
+        @@
+       @
+       @
+   ___ @
+  / __|@
+ | (__ @
+  \___|@
+       @
+       @@
+      _ @
+     | |@
+   __| |@
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @
+        @@
+       @
+       @
+   ___ @
+  / _ \@
+ |  __/@
+  \___|@
+       @
+       @@
+   __ @
+  / _|@
+ | |_ @
+ |  _|@
+ | |  @
+ |_|  @
+      @
+      @@
+        @
+        @
+   __ _ @
+  / _` |@
+ | (_| |@
+  \__, |@
+   __/ |@
+  |___/ @@
+  _     @
+ | |    @
+ | |__  @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+        @
+        @@
+  _ @
+ (_)@
+  _ @
+ | |@
+ | |@
+ |_|@
+    @
+    @@
+    _ @
+   (_)@
+    _ @
+   | |@
+   | |@
+   | |@
+  _/ |@
+ |__/ @@
+  _    @
+ | |   @
+ | | __@
+ | |/ /@
+ |   < @
+ |_|\_\@
+       @
+       @@
+  _ @
+ | |@
+ | |@
+ | |@
+ | |@
+ |_|@
+    @
+    @@
+            @
+            @
+  _ __ ___  @
+ | '_ ` _ \ @
+ | | | | | |@
+ |_| |_| |_|@
+            @
+            @@
+        @
+        @
+  _ __  @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+        @
+        @@
+        @
+        @
+   ___  @
+  / _ \ @
+ | (_) |@
+  \___/ @
+        @
+        @@
+        @
+        @
+  _ __  @
+ | '_ \ @
+ | |_) |@
+ | .__/ @
+ | |    @
+ |_|    @@
+        @
+        @
+   __ _ @
+  / _` |@
+ | (_| |@
+  \__, |@
+     | |@
+     |_|@@
+       @
+       @
+  _ __ @
+ | '__|@
+ | |   @
+ |_|   @
+       @
+       @@
+      @
+      @
+  ___ @
+ / __|@
+ \__ \@
+ |___/@
+      @
+      @@
+  _   @
+ | |  @
+ | |_ @
+ | __|@
+ | |_ @
+  \__|@
+      @
+      @@
+        @
+        @
+  _   _ @
+ | | | |@
+ | |_| |@
+  \__,_|@
+        @
+        @@
+        @
+        @
+ __   __@
+ \ \ / /@
+  \ V / @
+   \_/  @
+        @
+        @@
+           @
+           @
+ __      __@
+ \ \ /\ / /@
+  \ V  V / @
+   \_/\_/  @
+           @
+           @@
+       @
+       @
+ __  __@
+ \ \/ /@
+  >  < @
+ /_/\_\@
+       @
+       @@
+        @
+        @
+  _   _ @
+ | | | |@
+ | |_| |@
+  \__, |@
+   __/ |@
+  |___/ @@
+      @
+      @
+  ____@
+ |_  /@
+  / / @
+ /___|@
+      @
+      @@
+    __@
+   / /@
+  | | @
+ / /  @
+ \ \  @
+  | | @
+   \_\@
+      @@
+  _ @
+ | |@
+ | |@
+ | |@
+ | |@
+ | |@
+ | |@
+ |_|@@
+ __   @
+ \ \  @
+  | | @
+   \ \@
+   / /@
+  | | @
+ /_/  @
+      @@
+  /\/|@
+ |/\/ @
+   $  @
+   $  @
+   $  @
+   $  @
+      @
+      @@
+   _   _  @
+  (_)_(_) @
+    / \   @
+   / _ \  @
+  / ___ \ @
+ /_/   \_\@
+          @
+          @@
+  _   _ @
+ (_)_(_)@
+  / _ \ @
+ | | | |@
+ | |_| |@
+  \___/ @
+        @
+        @@
+  _   _ @
+ (_) (_)@
+ | | | |@
+ | | | |@
+ | |_| |@
+  \___/ @
+        @
+        @@
+  _   _ @
+ (_) (_)@
+   __ _ @
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @
+        @@
+  _   _ @
+ (_) (_)@
+   ___  @
+  / _ \ @
+ | (_) |@
+  \___/ @
+        @
+        @@
+  _   _ @
+ (_) (_)@
+  _   _ @
+ | | | |@
+ | |_| |@
+  \__,_|@
+        @
+        @@
+   ___  @
+  / _ \ @
+ | | ) |@
+ | |< < @
+ | | ) |@
+ | ||_/ @
+ |_|    @
+        @@
+160  NO-BREAK SPACE
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@@
+161  INVERTED EXCLAMATION MARK
+  _ @
+ (_)@
+ | |@
+ | |@
+ | |@
+ |_|@
+    @
+    @@
+162  CENT SIGN
+       @
+    _  @
+   | | @
+  / __)@
+ | (__ @
+  \   )@
+   |_| @
+       @@
+163  POUND SIGN
+     ___   @
+    / ,_\  @
+  _| |_    @
+ |__ __|   @
+   | |____ @
+  (_,_____|@
+           @
+           @@
+164  CURRENCY SIGN
+        @
+ /\___/\@
+ \  _  /@
+ | (_) |@
+ / ___ \@
+ \/   \/@
+        @
+        @@
+165  YEN SIGN
+  __   __ @
+  \ \ / / @
+  _\ V /_ @
+ |___ ___|@
+ |___ ___|@
+    |_|   @
+          @
+          @@
+166  BROKEN BAR
+  _ @
+ | |@
+ | |@
+ |_|@
+  _ @
+ | |@
+ | |@
+ |_|@@
+167  SECTION SIGN
+    __ @
+  _/ _)@
+ / \ \ @
+ \ \\ \@
+  \ \_/@
+ (__/  @
+       @
+       @@
+168  DIAERESIS
+  _   _ @
+ (_) (_)@
+  $   $ @
+  $   $ @
+  $   $ @
+  $   $ @
+        @
+        @@
+169  COPYRIGHT SIGN
+    ________   @
+   /  ____  \  @
+  /  / ___|  \ @
+ |  | |       |@
+ |  | |___    |@
+  \  \____|  / @
+   \________/  @
+               @@
+170  FEMININE ORDINAL INDICATOR
+   __ _ @
+  / _` |@
+ | (_| |@
+  \__,_|@
+ |_____|@
+    $   @
+        @
+        @@
+171  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    ____@
+   / / /@
+  / / / @
+ < < <  @
+  \ \ \ @
+   \_\_\@
+        @
+        @@
+172  NOT SIGN
+         @
+         @
+  ______ @
+ |____  |@
+      |_|@
+     $   @
+         @
+         @@
+173  SOFT HYPHEN
+        @
+        @
+  _____ @
+ |_____|@
+    $   @
+    $   @
+        @
+        @@
+174  REGISTERED SIGN
+    ________   @
+   /  ____  \  @
+  /  |  _ \  \ @
+ |   | |_) |  |@
+ |   |  _ <   |@
+  \  |_| \_\ / @
+   \________/  @
+               @@
+175  MACRON
+  ______ @
+ |______|@
+     $   @
+     $   @
+     $   @
+     $   @
+         @
+         @@
+176  DEGREE SIGN
+   __  @
+  /  \ @
+ | () |@
+  \__/ @
+    $  @
+    $  @
+       @
+       @@
+177  PLUS-MINUS SIGN
+    _   @
+  _| |_ @
+ |_   _|@
+   |_|  @
+  _____ @
+ |_____|@
+        @
+        @@
+178  SUPERSCRIPT TWO
+  ___ @
+ |_  )@
+  / / @
+ /___|@
+   $  @
+   $  @
+      @
+      @@
+179  SUPERSCRIPT THREE
+  ____@
+ |__ /@
+  |_ \@
+ |___/@
+   $  @
+   $  @
+      @
+      @@
+180  ACUTE ACCENT
+  __@
+ /_/@
+  $ @
+  $ @
+  $ @
+  $ @
+    @
+    @@
+181  MICRO SIGN
+        @
+        @
+  _   _ @
+ | | | |@
+ | |_| |@
+ | ._,_|@
+ | |    @
+ |_|    @@
+182  PILCROW SIGN
+   ______ @
+  /      |@
+ | (| || |@
+  \__ || |@
+    | || |@
+    |_||_|@
+          @
+          @@
+183  MIDDLE DOT
+    @
+    @
+  _ @
+ (_)@
+  $ @
+  $ @
+    @
+    @@
+184  CEDILLA
+    @
+    @
+    @
+    @
+    @
+  _ @
+ )_)@
+    @@
+185  SUPERSCRIPT ONE
+  _ @
+ / |@
+ | |@
+ |_|@
+  $ @
+  $ @
+    @
+    @@
+186  MASCULINE ORDINAL INDICATOR
+   ___  @
+  / _ \ @
+ | (_) |@
+  \___/ @
+ |_____|@
+    $   @
+        @
+        @@
+187  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ ____   @
+ \ \ \  @
+  \ \ \ @
+   > > >@
+  / / / @
+ /_/_/  @
+        @
+        @@
+188  VULGAR FRACTION ONE QUARTER
+  _   __   @
+ / | / /   @
+ | |/ / _  @
+ |_/ / | | @
+  / /|_  _|@
+ /_/   |_| @
+           @
+           @@
+189  VULGAR FRACTION ONE HALF
+  _   __  @
+ / | / /  @
+ | |/ /__ @
+ |_/ /_  )@
+  / / / / @
+ /_/ /___|@
+          @
+          @@
+190  VULGAR FRACTION THREE QUARTERS
+  ____  __   @
+ |__ / / /   @
+  |_ \/ / _  @
+ |___/ / | | @
+    / /|_  _|@
+   /_/   |_| @
+             @
+             @@
+191  INVERTED QUESTION MARK
+    _  @
+   (_) @
+   | | @
+  / /  @
+ | (__ @
+  \___|@
+       @
+       @@
+192  LATIN CAPITAL LETTER A WITH GRAVE
+    __    @
+    \_\   @
+    / \   @
+   / _ \  @
+  / ___ \ @
+ /_/   \_\@
+          @
+          @@
+193  LATIN CAPITAL LETTER A WITH ACUTE
+     __   @
+    /_/   @
+    / \   @
+   / _ \  @
+  / ___ \ @
+ /_/   \_\@
+          @
+          @@
+194  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    //\   @
+   |/_\|  @
+    / \   @
+   / _ \  @
+  / ___ \ @
+ /_/   \_\@
+          @
+          @@
+195  LATIN CAPITAL LETTER A WITH TILDE
+    /\/|  @
+   |/\/   @
+    / \   @
+   / _ \  @
+  / ___ \ @
+ /_/   \_\@
+          @
+          @@
+196  LATIN CAPITAL LETTER A WITH DIAERESIS
+   _   _  @
+  (_)_(_) @
+    / \   @
+   / _ \  @
+  / ___ \ @
+ /_/   \_\@
+          @
+          @@
+197  LATIN CAPITAL LETTER A WITH RING ABOVE
+     _    @
+    (o)   @
+    / \   @
+   / _ \  @
+  / ___ \ @
+ /_/   \_\@
+          @
+          @@
+198  LATIN CAPITAL LETTER AE
+      _______ @
+     /   ____|@
+    /   |__   @
+   / /|  __|  @
+  / ___ |____ @
+ /_/  |______|@
+              @
+              @@
+199  LATIN CAPITAL LETTER C WITH CEDILLA
+   _____ @
+  / ____|@
+ | | $   @
+ | | $   @
+ | |____ @
+  \_____|@
+    )_)  @
+         @@
+200  LATIN CAPITAL LETTER E WITH GRAVE
+   __   @
+  _\_\_ @
+ | ____|@
+ |  _|  @
+ | |___ @
+ |_____|@
+        @
+        @@
+201  LATIN CAPITAL LETTER E WITH ACUTE
+    __  @
+  _/_/_ @
+ | ____|@
+ |  _|  @
+ | |___ @
+ |_____|@
+        @
+        @@
+202  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+   //\  @
+  |/ \| @
+ | ____|@
+ |  _|  @
+ | |___ @
+ |_____|@
+        @
+        @@
+203  LATIN CAPITAL LETTER E WITH DIAERESIS
+  _   _ @
+ (_) (_)@
+ | ____|@
+ |  _|  @
+ | |___ @
+ |_____|@
+        @
+        @@
+204  LATIN CAPITAL LETTER I WITH GRAVE
+  __  @
+  \_\ @
+ |_ _|@
+  | | @
+  | | @
+ |___|@
+      @
+      @@
+205  LATIN CAPITAL LETTER I WITH ACUTE
+   __ @
+  /_/ @
+ |_ _|@
+  | | @
+  | | @
+ |___|@
+      @
+      @@
+206  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+  //\ @
+ |/_\|@
+ |_ _|@
+  | | @
+  | | @
+ |___|@
+      @
+      @@
+207  LATIN CAPITAL LETTER I WITH DIAERESIS
+  _   _ @
+ (_)_(_)@
+  |_ _| @
+   | |  @
+   | |  @
+  |___| @
+        @
+        @@
+208  LATIN CAPITAL LETTER ETH
+    _____  @
+   |  __ \ @
+  _| |_ | |@
+ |__ __|| |@
+   | |__| |@
+   |_____/ @
+           @
+           @@
+209  LATIN CAPITAL LETTER N WITH TILDE
+   /\/| @
+  |/\/_ @
+ | \ | |@
+ |  \| |@
+ | |\  |@
+ |_| \_|@
+        @
+        @@
+210  LATIN CAPITAL LETTER O WITH GRAVE
+   __   @
+   \_\  @
+  / _ \ @
+ | | | |@
+ | |_| |@
+  \___/ @
+        @
+        @@
+211  LATIN CAPITAL LETTER O WITH ACUTE
+    __  @
+   /_/  @
+  / _ \ @
+ | | | |@
+ | |_| |@
+  \___/ @
+        @
+        @@
+212  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+   //\  @
+  |/_\| @
+  / _ \ @
+ | | | |@
+ | |_| |@
+  \___/ @
+        @
+        @@
+213  LATIN CAPITAL LETTER O WITH TILDE
+   /\/| @
+  |/\/  @
+  / _ \ @
+ | | | |@
+ | |_| |@
+  \___/ @
+        @
+        @@
+214  LATIN CAPITAL LETTER O WITH DIAERESIS
+  _   _ @
+ (_)_(_)@
+  / _ \ @
+ | | | |@
+ | |_| |@
+  \___/ @
+        @
+        @@
+215  MULTIPLICATION SIGN
+     @
+     @
+ /\/\@
+ >  <@
+ \/\/@
+   $ @
+     @
+     @@
+216  LATIN CAPITAL LETTER O WITH STROKE
+   _____ @
+  / __// @
+ | | // |@
+ | |//| |@
+ | //_| |@
+  //___/ @
+         @
+         @@
+217  LATIN CAPITAL LETTER U WITH GRAVE
+   __   @
+  _\_\_ @
+ | | | |@
+ | | | |@
+ | |_| |@
+  \___/ @
+        @
+        @@
+218  LATIN CAPITAL LETTER U WITH ACUTE
+    __  @
+  _/_/_ @
+ | | | |@
+ | | | |@
+ | |_| |@
+  \___/ @
+        @
+        @@
+219  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+   //\  @
+  |/ \| @
+ | | | |@
+ | | | |@
+ | |_| |@
+  \___/ @
+        @
+        @@
+220  LATIN CAPITAL LETTER U WITH DIAERESIS
+  _   _ @
+ (_) (_)@
+ | | | |@
+ | | | |@
+ | |_| |@
+  \___/ @
+        @
+        @@
+221  LATIN CAPITAL LETTER Y WITH ACUTE
+    __  @
+ __/_/__@
+ \ \ / /@
+  \ V / @
+   | |  @
+   |_|  @
+        @
+        @@
+222  LATIN CAPITAL LETTER THORN
+  _      @
+ | |___  @
+ |  __ \ @
+ | |__) |@
+ |  ___/ @
+ |_|     @
+         @
+         @@
+223  LATIN SMALL LETTER SHARP S
+   ___  @
+  / _ \ @
+ | | ) |@
+ | |< < @
+ | | ) |@
+ | ||_/ @
+ |_|    @
+        @@
+224  LATIN SMALL LETTER A WITH GRAVE
+   __   @
+   \_\  @
+   __ _ @
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @
+        @@
+225  LATIN SMALL LETTER A WITH ACUTE
+    __  @
+   /_/  @
+   __ _ @
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @
+        @@
+226  LATIN SMALL LETTER A WITH CIRCUMFLEX
+   //\  @
+  |/ \| @
+   __ _ @
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @
+        @@
+227  LATIN SMALL LETTER A WITH TILDE
+   /\/| @
+  |/\/  @
+   __ _ @
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @
+        @@
+228  LATIN SMALL LETTER A WITH DIAERESIS
+  _   _ @
+ (_) (_)@
+   __ _ @
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @
+        @@
+229  LATIN SMALL LETTER A WITH RING ABOVE
+    __  @
+   (()) @
+   __ _ @
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @
+        @@
+230  LATIN SMALL LETTER AE
+           @
+           @
+   __ ____ @
+  / _`  _ \@
+ | (_|  __/@
+  \__,____|@
+           @
+           @@
+231  LATIN SMALL LETTER C WITH CEDILLA
+       @
+       @
+   ___ @
+  / __|@
+ | (__ @
+  \___|@
+   )_) @
+       @@
+232  LATIN SMALL LETTER E WITH GRAVE
+   __  @
+   \_\ @
+   ___ @
+  / _ \@
+ |  __/@
+  \___|@
+       @
+       @@
+233  LATIN SMALL LETTER E WITH ACUTE
+    __ @
+   /_/ @
+   ___ @
+  / _ \@
+ |  __/@
+  \___|@
+       @
+       @@
+234  LATIN SMALL LETTER E WITH CIRCUMFLEX
+   //\ @
+  |/ \|@
+   ___ @
+  / _ \@
+ |  __/@
+  \___|@
+       @
+       @@
+235  LATIN SMALL LETTER E WITH DIAERESIS
+  _   _ @
+ (_) (_)@
+   ___  @
+  / _ \ @
+ |  __/ @
+  \___| @
+        @
+        @@
+236  LATIN SMALL LETTER I WITH GRAVE
+ __ @
+ \_\@
+  _ @
+ | |@
+ | |@
+ |_|@
+    @
+    @@
+237  LATIN SMALL LETTER I WITH ACUTE
+  __@
+ /_/@
+  _ @
+ | |@
+ | |@
+ |_|@
+    @
+    @@
+238  LATIN SMALL LETTER I WITH CIRCUMFLEX
+  //\ @
+ |/ \|@
+   _  @
+  | | @
+  | | @
+  |_| @
+      @
+      @@
+239  LATIN SMALL LETTER I WITH DIAERESIS
+  _   _ @
+ (_) (_)@
+    _   @
+   | |  @
+   | |  @
+   |_|  @
+        @
+        @@
+240  LATIN SMALL LETTER ETH
+  /\/\  @
+  >  <  @
+  \/\ \ @
+  / _` |@
+ | (_) |@
+  \___/ @
+        @
+        @@
+241  LATIN SMALL LETTER N WITH TILDE
+   /\/| @
+  |/\/  @
+  _ __  @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+        @
+        @@
+242  LATIN SMALL LETTER O WITH GRAVE
+   __   @
+   \_\  @
+   ___  @
+  / _ \ @
+ | (_) |@
+  \___/ @
+        @
+        @@
+243  LATIN SMALL LETTER O WITH ACUTE
+    __  @
+   /_/  @
+   ___  @
+  / _ \ @
+ | (_) |@
+  \___/ @
+        @
+        @@
+244  LATIN SMALL LETTER O WITH CIRCUMFLEX
+   //\  @
+  |/ \| @
+   ___  @
+  / _ \ @
+ | (_) |@
+  \___/ @
+        @
+        @@
+245  LATIN SMALL LETTER O WITH TILDE
+   /\/| @
+  |/\/  @
+   ___  @
+  / _ \ @
+ | (_) |@
+  \___/ @
+        @
+        @@
+246  LATIN SMALL LETTER O WITH DIAERESIS
+  _   _ @
+ (_) (_)@
+   ___  @
+  / _ \ @
+ | (_) |@
+  \___/ @
+        @
+        @@
+247  DIVISION SIGN
+     _    @
+    (_)   @
+  _______ @
+ |_______|@
+     _    @
+    (_)   @
+          @
+          @@
+248  LATIN SMALL LETTER O WITH STROKE
+         @
+         @
+   ____  @
+  / _//\ @
+ | (//) |@
+  \//__/ @
+         @
+         @@
+249  LATIN SMALL LETTER U WITH GRAVE
+   __   @
+   \_\  @
+  _   _ @
+ | | | |@
+ | |_| |@
+  \__,_|@
+        @
+        @@
+250  LATIN SMALL LETTER U WITH ACUTE
+    __  @
+   /_/  @
+  _   _ @
+ | | | |@
+ | |_| |@
+  \__,_|@
+        @
+        @@
+251  LATIN SMALL LETTER U WITH CIRCUMFLEX
+   //\  @
+  |/ \| @
+  _   _ @
+ | | | |@
+ | |_| |@
+  \__,_|@
+        @
+        @@
+252  LATIN SMALL LETTER U WITH DIAERESIS
+  _   _ @
+ (_) (_)@
+  _   _ @
+ | | | |@
+ | |_| |@
+  \__,_|@
+        @
+        @@
+253  LATIN SMALL LETTER Y WITH ACUTE
+    __  @
+   /_/  @
+  _   _ @
+ | | | |@
+ | |_| |@
+  \__, |@
+   __/ |@
+  |___/ @@
+254  LATIN SMALL LETTER THORN
+  _     @
+ | |    @
+ | |__  @
+ | '_ \ @
+ | |_) |@
+ | .__/ @
+ | |    @
+ |_|    @@
+255  LATIN SMALL LETTER Y WITH DIAERESIS
+  _   _ @
+ (_) (_)@
+  _   _ @
+ | | | |@
+ | |_| |@
+  \__, |@
+   __/ |@
+  |___/ @@
+0x02BC  MODIFIER LETTER APOSTROPHE
+   @
+   @
+ ))@
+   @
+   @
+   @
+   @
+   @@
+0x02BD  MODIFIER LETTER REVERSED COMMA
+   @
+   @
+ ((@
+   @
+   @
+   @
+   @
+   @@
+0x037A  GREEK YPOGEGRAMMENI
+   @
+   @
+   @
+   @
+   @
+   @
+   @
+ ||@@
+0x0387  GREEK ANO TELEIA
+    @
+  $ @
+  _ @
+ (_)@
+    @
+  $ @
+    @
+    @@
+0x0391  GREEK CAPITAL LETTER ALPHA
+   ___  @
+  / _ \ @
+ | |_| |@
+ |  _  |@
+ | | | |@
+ |_| |_|@
+        @
+        @@
+0x0392  GREEK CAPITAL LETTER BETA
+  ____  @
+ |  _ \ @
+ | |_) )@
+ |  _ ( @
+ | |_) )@
+ |____/ @
+        @
+        @@
+0x0393  GREEK CAPITAL LETTER GAMMA
+  _____ @
+ |  ___)@
+ | |$   @
+ | |$   @
+ | |    @
+ |_|    @
+        @
+        @@
+0x0394  GREEK CAPITAL LETTER DELTA
+           @
+     /\    @
+    /  \   @
+   / /\ \  @
+  / /__\ \ @
+ /________\@
+           @
+           @@
+0x0395  GREEK CAPITAL LETTER EPSILON
+  _____ @
+ |  ___)@
+ | |_   @
+ |  _)  @
+ | |___ @
+ |_____)@
+        @
+        @@
+0x0396  GREEK CAPITAL LETTER ZETA
+  ______@
+ (___  /@
+    / / @
+   / /  @
+  / /__ @
+ /_____)@
+        @
+        @@
+0x0397  GREEK CAPITAL LETTER ETA
+  _   _ @
+ | | | |@
+ | |_| |@
+ |  _  |@
+ | | | |@
+ |_| |_|@
+        @
+        @@
+0x0398  GREEK CAPITAL LETTER THETA
+   ____  @
+  / __ \ @
+ | |__| |@
+ |  __  |@
+ | |__| |@
+  \____/ @
+         @
+         @@
+0x0399  GREEK CAPITAL LETTER IOTA
+  ___ @
+ (   )@
+  | | @
+  | | @
+  | | @
+ (___)@
+      @
+      @@
+0x039A  GREEK CAPITAL LETTER KAPPA
+  _   __@
+ | | / /@
+ | |/ / @
+ |   <  @
+ | |\ \ @
+ |_| \_\@
+        @
+        @@
+0x039B  GREEK CAPITAL LETTER LAMDA
+           @
+     /\    @
+    /  \   @
+   / /\ \  @
+  / /  \ \ @
+ /_/    \_\@
+           @
+           @@
+0x039C  GREEK CAPITAL LETTER MU
+  __   __ @
+ |  \ /  |@
+ |   v   |@
+ | |\_/| |@
+ | |   | |@
+ |_|   |_|@
+          @
+          @@
+0x039D  GREEK CAPITAL LETTER NU
+  _   _ @
+ | \ | |@
+ |  \| |@
+ |     |@
+ | |\  |@
+ |_| \_|@
+        @
+        @@
+0x039E  GREEK CAPITAL LETTER XI
+  _____ @
+ (_____)@
+   ___  @
+  (___) @
+  _____ @
+ (_____)@
+        @
+        @@
+0x039F  GREEK CAPITAL LETTER OMICRON
+   ___  @
+  / _ \ @
+ | | | |@
+ | | | |@
+ | |_| |@
+  \___/ @
+        @
+        @@
+0x03A0  GREEK CAPITAL LETTER PI
+  _______ @
+ (   _   )@
+  | | | | @
+  | | | | @
+  | | | | @
+  |_| |_| @
+          @
+          @@
+0x03A1  GREEK CAPITAL LETTER RHO
+  ____  @
+ |  _ \ @
+ | |_) )@
+ |  __/ @
+ | |    @
+ |_|    @
+        @
+        @@
+0x03A3  GREEK CAPITAL LETTER SIGMA
+ ______ @
+ \  ___)@
+  \ \   @
+   > >  @
+  / /__ @
+ /_____)@
+        @
+        @@
+0x03A4  GREEK CAPITAL LETTER TAU
+  _____ @
+ (_   _)@
+   | |  @
+   | |  @
+   | |  @
+   |_|  @
+        @
+        @@
+0x03A5  GREEK CAPITAL LETTER UPSILON
+  __   __ @
+ (_ \ / _)@
+   \ v /  @
+    | |   @
+    | |   @
+    |_|   @
+          @
+          @@
+0x03A6  GREEK CAPITAL LETTER PHI
+     _    @
+   _| |_  @
+  /     \ @
+ ( (| |) )@
+  \_   _/ @
+    |_|   @
+          @
+          @@
+0x03A7  GREEK CAPITAL LETTER CHI
+ __   __@
+ \ \ / /@
+  \ v / @
+   > <  @
+  / ^ \ @
+ /_/ \_\@
+        @
+        @@
+0x03A8  GREEK CAPITAL LETTER PSI
+  _  _  _ @
+ | || || |@
+ | \| |/ |@
+  \_   _/ @
+    | |   @
+    |_|   @
+          @
+          @@
+0x03A9  GREEK CAPITAL LETTER OMEGA
+    ____   @
+   / __ \  @
+  | |  | | @
+  | |  | | @
+  _\ \/ /_ @
+ (___||___)@
+           @
+           @@
+0x03B1  GREEK SMALL LETTER ALPHA
+         @
+         @
+   __  __@
+  /  \/ /@
+ ( ()  < @
+  \__/\_\@
+         @
+         @@
+0x03B2  GREEK SMALL LETTER BETA
+   ___  @
+  / _ \ @
+ | |_) )@
+ |  _ < @
+ | |_) )@
+ |  __/ @
+ | |    @
+ |_|    @@
+0x03B3  GREEK SMALL LETTER GAMMA
+        @
+        @
+  _   _ @
+ ( \ / )@
+  \ v / @
+   | |  @
+   | |  @
+   |_|  @@
+0x03B4  GREEK SMALL LETTER DELTA
+    __  @
+   / _) @
+   \ \  @
+  / _ \ @
+ ( (_) )@
+  \___/ @
+        @
+        @@
+0x03B5  GREEK SMALL LETTER EPSILON
+      @
+      @
+  ___ @
+ / __)@
+ > _) @
+ \___)@
+      @
+      @@
+0x03B6  GREEK SMALL LETTER ZETA
+ _____  @
+ \__  ) @
+   / /  @
+  / /   @
+ | |__  @
+  \__ \ @
+     ) )@
+    (_/ @@
+0x03B7  GREEK SMALL LETTER ETA
+        @
+        @
+  _ __  @
+ | '_ \ @
+ | | | |@
+ |_| | |@
+     | |@
+     |_|@@
+0x03B8  GREEK SMALL LETTER THETA
+   ___  @
+  / _ \ @
+ | |_| |@
+ |  _  |@
+ | |_| |@
+  \___/ @
+        @
+        @@
+0x03B9  GREEK SMALL LETTER IOTA
+     @
+     @
+  _  @
+ | | @
+ | | @
+  \_)@
+     @
+     @@
+0x03BA  GREEK SMALL LETTER KAPPA
+       @
+       @
+  _  __@
+ | |/ /@
+ |   < @
+ |_|\_\@
+       @
+       @@
+0x03BB  GREEK SMALL LETTER LAMDA
+ __     @
+ \ \    @
+  \ \   @
+   > \  @
+  / ^ \ @
+ /_/ \_\@
+        @
+        @@
+0x03BC  GREEK SMALL LETTER MU
+        @
+        @
+  _   _ @
+ | | | |@
+ | |_| |@
+ | ._,_|@
+ | |    @
+ |_|    @@
+0x03BD  GREEK SMALL LETTER NU
+       @
+       @
+  _  __@
+ | |/ /@
+ | / / @
+ |__/  @
+       @
+       @@
+0x03BE  GREEK SMALL LETTER XI
+ \=\__  @
+  > __) @
+ ( (_   @
+  > _)  @
+ ( (__  @
+  \__ \ @
+     ) )@
+    (_/ @@
+0x03BF  GREEK SMALL LETTER OMICRON
+        @
+        @
+   ___  @
+  / _ \ @
+ ( (_) )@
+  \___/ @
+        @
+        @@
+0x03C0  GREEK SMALL LETTER PI
+         @
+         @
+  ______ @
+ (  __  )@
+  | || | @
+  |_||_| @
+         @
+         @@
+0x03C1  GREEK SMALL LETTER RHO
+        @
+        @
+   ___  @
+  / _ \ @
+ | |_) )@
+ |  __/ @
+ | |    @
+ |_|    @@
+0x03C2  GREEK SMALL LETTER FINAL SIGMA
+        @
+        @
+   ____ @
+  / ___)@
+ ( (__  @
+  \__ \ @
+    _) )@
+   (__/ @@
+0x03C3  GREEK SMALL LETTER SIGMA
+        @
+        @
+   ____ @
+  /  ._)@
+ ( () ) @
+  \__/  @
+        @
+        @@
+0x03C4  GREEK SMALL LETTER TAU
+      @
+      @
+  ___ @
+ (   )@
+  | | @
+   \_)@
+      @
+      @@
+0x03C5  GREEK SMALL LETTER UPSILON
+        @
+        @
+  _   _ @
+ | | | |@
+ | |_| |@
+  \___/ @
+        @
+        @@
+0x03C6  GREEK SMALL LETTER PHI
+     _    @
+    | |   @
+   _| |_  @
+  /     \ @
+ ( (| |) )@
+  \_   _/ @
+    | |   @
+    |_|   @@
+0x03C7  GREEK SMALL LETTER CHI
+        @
+        @
+ __   __@
+ \ \ / /@
+  \ v / @
+   > <  @
+  / ^ \ @
+ /_/ \_\@@
+0x03C8  GREEK SMALL LETTER PSI
+          @
+          @
+  _  _  _ @
+ | || || |@
+ | \| |/ |@
+  \_   _/ @
+    | |   @
+    |_|   @@
+0x03C9  GREEK SMALL LETTER OMEGA
+            @
+            @
+   __   __  @
+  / / _ \ \ @
+ | |_/ \_| |@
+  \___^___/ @
+            @
+            @@
+0x03D1  GREEK THETA SYMBOL
+     ___    @
+    / _ \   @
+   ( (_| |_ @
+  _ \ _   _)@
+ | |___| |  @
+  \_____/   @
+            @
+            @@
+0x03D5  GREEK PHI SYMBOL
+          @
+          @
+  _   __  @
+ | | /  \ @
+ | || || )@
+  \_   _/ @
+    | |   @
+    |_|   @@
+0x03D6  GREEK PI SYMBOL
+            @
+            @
+  _________ @
+ (  _____  )@
+ | |_/ \_| |@
+  \___^___/ @
+            @
+            @@
+-0x0005  
+alpha = a, beta = b, gamma = g, delta = d, epsilon = e   @
+zeta = z, eta = h, theta = q, iota = i, lamda = l, mu = m@
+nu = n, xi = x, omicron = o, pi = p, rho = r, sigma = s  @
+phi = f, chi = c, psi = y, omega = w, final sigma = V    @
+     pi symbol = v, theta symbol = J, phi symbol = j     @
+     middle dot = :, ypogegrammeni = _                   @
+     rough breathing = (, smooth breathing = )           @
+     acute accent = ', grave accent = `, dialytika = ^   @@
diff --git a/externals/figlet/fonts/block.flf b/externals/figlet/fonts/block.flf
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/block.flf
@@ -0,0 +1,1691 @@
+flf2a$ 8 6 27 0 10 0 576 96
+Block by Glenn Chappell 4/93 -- straight version of Lean
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin.  May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+$  $@
+$  $@
+$  $@
+$  $@
+$  $@
+$  $@
+$  $@
+$  $@@
+   $$@
+ _| $@
+ _| $@
+ _| $@
+   $$@
+ _| $@
+   $$@
+     @@
+ _|  _| $@
+ _|  _| $@
+       $$@
+   $$    @
+   $$    @
+   $$    @
+         @
+         @@
+         $$  @
+   _|  _|   $@
+ _|_|_|_|_| $@
+   _|  _|   $@
+ _|_|_|_|_| $@
+   _|  _|   $@
+         $$  @
+             @@
+     $$  @
+   _|   $@
+ _|_|_| $@
+ _|_|   $@
+   _|_| $@
+ _|_|_| $@
+   _|   $@
+     $$  @@
+           $$@
+ _|_|    _| $@
+ _|_|  _|   $@
+     _|     $@
+   _|  _|_| $@
+ _|    _|_| $@
+           $$@
+             @@
+     $$      @
+   _|   $    @
+ _|  _|     $@
+   _|_|  _| $@
+ _|    _|   $@
+   _|_|  _| $@
+           $$@
+             @@
+   _| $@
+ _|   $@
+   $$  @
+ $$    @
+ $$    @
+ $$    @
+       @
+       @@
+   _| $@
+ _|   $@
+ _| $  @
+ _| $  @
+ _| $  @
+ _|   $@
+   _| $@
+     $$@@
+ _|   $@
+   _| $@
+   _| $@
+   _| $@
+   _| $@
+   _| $@
+ _|   $@
+   $$  @@
+           $$@
+ _|  _|  _| $@
+   _|_|_|   $@
+ _|_|_|_|_| $@
+   _|_|_|   $@
+ _|  _|  _| $@
+           $$@
+             @@
+       $$    @
+     _| $    @
+     _|     $@
+ _|_|_|_|_| $@
+     _|     $@
+     _| $    @
+       $$    @
+             @@
+       @
+       @
+       @
+       @
+     $$@
+   _| $@
+ _|   $@
+   $$  @@
+             @
+             @
+           $$@
+ _|_|_|_|_| $@
+           $$@
+             @
+             @
+             @@
+     @
+     @
+     @
+     @
+   $$@
+ _| $@
+   $$@
+     @@
+           $$@
+         _| $@
+       _|   $@
+     _|   $  @
+   _|   $    @
+ _|   $      @
+   $$        @
+             @@
+     $$  @
+   _|   $@
+ _|  _| $@
+ _|  _| $@
+ _|  _| $@
+   _|   $@
+     $$  @
+         @@
+     $$@
+   _| $@
+ _|_| $@
+   _| $@
+   _| $@
+   _| $@
+     $$@
+       @@
+       $$  @
+   _|_|   $@
+ _|    _| $@
+     _|   $@
+   _|     $@
+ _|_|_|_| $@
+         $$@
+           @@
+       $$  @
+ _|_|_|   $@
+       _| $@
+   _|_|   $@
+       _| $@
+ _|_|_|   $@
+       $$  @
+           @@
+       $$  @
+ _|  _| $  @
+ _|  _|   $@
+ _|_|_|_| $@
+     _|   $@
+     _| $  @
+       $$  @
+           @@
+         $$@
+ _|_|_|_| $@
+ _|       $@
+ _|_|_|   $@
+       _| $@
+ _|_|_|   $@
+       $$  @
+           @@
+         $$@
+   _|_|_| $@
+ _|       $@
+ _|_|_|   $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+           $$@
+ _|_|_|_|_| $@
+         _| $@
+       _|   $@
+     _|   $  @
+   _|   $    @
+     $$      @
+             @@
+       $$  @
+   _|_|   $@
+ _|    _| $@
+   _|_|   $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+       $$  @
+   _|_|   $@
+ _|    _| $@
+   _|_|_| $@
+       _| $@
+ _|_|_|   $@
+       $$  @
+           @@
+     @
+   $$@
+ _| $@
+   $$@
+   $$@
+ _| $@
+   $$@
+     @@
+       @
+     $$@
+   _| $@
+     $$@
+     $$@
+   _| $@
+ _|   $@
+   $$  @@
+       $$@
+     _| $@
+   _|   $@
+ _|   $  @
+   _|   $@
+     _| $@
+       $$@
+         @@
+             @
+           $$@
+ _|_|_|_|_| $@
+           $$@
+ _|_|_|_|_| $@
+           $$@
+             @
+             @@
+   $$    @
+ _|   $  @
+   _|   $@
+     _| $@
+   _|   $@
+ _|   $  @
+   $$    @
+         @@
+     $$  @
+ _|_|   $@
+     _| $@
+ _|_|   $@
+     $$  @
+ _| $    @
+   $$    @
+         @@
+               $$  @
+     _|_|_|_|_|   $@
+   _|          _| $@
+ _|    _|_|_|  _| $@
+ _|  _|    _|  _| $@
+ _|    _|_|_|_|   $@
+   _|             $@
+     _|_|_|_|_|_| $@@
+       $$  @
+   _|_|   $@
+ _|    _| $@
+ _|_|_|_| $@
+ _|    _| $@
+ _|    _| $@
+         $$@
+           @@
+       $$  @
+ _|_|_|   $@
+ _|    _| $@
+ _|_|_|   $@
+ _|    _| $@
+ _|_|_|   $@
+       $$  @
+           @@
+         $$@
+   _|_|_| $@
+ _|       $@
+ _|   $    @
+ _|       $@
+   _|_|_| $@
+         $$@
+           @@
+       $$  @
+ _|_|_|   $@
+ _|    _| $@
+ _|    _| $@
+ _|    _| $@
+ _|_|_|   $@
+       $$  @
+           @@
+         $$@
+ _|_|_|_| $@
+ _|       $@
+ _|_|_| $  @
+ _|       $@
+ _|_|_|_| $@
+         $$@
+           @@
+         $$@
+ _|_|_|_| $@
+ _|       $@
+ _|_|_| $  @
+ _|     $  @
+ _| $      @
+   $$      @
+           @@
+         $$@
+   _|_|_| $@
+ _|       $@
+ _|  _|_| $@
+ _|    _| $@
+   _|_|_| $@
+         $$@
+           @@
+         $$@
+ _|    _| $@
+ _|    _| $@
+ _|_|_|_| $@
+ _|    _| $@
+ _|    _| $@
+         $$@
+           @@
+       $$@
+ _|_|_| $@
+   _|   $@
+   _| $  @
+   _|   $@
+ _|_|_| $@
+       $$@
+         @@
+         $$@
+       _| $@
+       _| $@
+       _| $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+         $$@
+ _|    _| $@
+ _|  _|   $@
+ _|_|   $  @
+ _|  _|   $@
+ _|    _| $@
+         $$@
+           @@
+   $$      @
+ _| $      @
+ _| $      @
+ _| $      @
+ _|       $@
+ _|_|_|_| $@
+         $$@
+           @@
+           $$@
+ _|      _| $@
+ _|_|  _|_| $@
+ _|  _|  _| $@
+ _|      _| $@
+ _|      _| $@
+           $$@
+             @@
+           $$@
+ _|      _| $@
+ _|_|    _| $@
+ _|  _|  _| $@
+ _|    _|_| $@
+ _|      _| $@
+           $$@
+             @@
+       $$  @
+   _|_|   $@
+ _|    _| $@
+ _|    _| $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+       $$  @
+ _|_|_|   $@
+ _|    _| $@
+ _|_|_|   $@
+ _|     $  @
+ _| $      @
+   $$      @
+           @@
+       $$    @
+   _|_|   $  @
+ _|    _| $  @
+ _|  _|_| $  @
+ _|    _|   $@
+   _|_|  _| $@
+           $$@
+             @@
+       $$  @
+ _|_|_|   $@
+ _|    _| $@
+ _|_|_|   $@
+ _|    _| $@
+ _|    _| $@
+         $$@
+           @@
+         $$@
+   _|_|_| $@
+ _|       $@
+   _|_|   $@
+       _| $@
+ _|_|_|   $@
+       $$  @
+           @@
+           $$@
+ _|_|_|_|_| $@
+     _|     $@
+     _| $    @
+     _| $    @
+     _| $    @
+       $$    @
+             @@
+         $$@
+ _|    _| $@
+ _|    _| $@
+ _|    _| $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+           $$@
+ _|      _| $@
+ _|      _| $@
+ _|      _| $@
+   _|  _|   $@
+     _|   $  @
+       $$    @
+             @@
+               $$@
+ _|          _| $@
+ _|          _| $@
+ _|    _|    _| $@
+   _|  _|  _|   $@
+     _|  _|   $  @
+           $$    @
+                 @@
+           $$@
+ _|      _| $@
+   _|  _|   $@
+     _|   $  @
+   _|  _|   $@
+ _|      _| $@
+           $$@
+             @@
+           $$@
+ _|      _| $@
+   _|  _|   $@
+     _|   $  @
+     _| $    @
+     _| $    @
+       $$    @
+             @@
+           $$@
+ _|_|_|_|_| $@
+       _|   $@
+     _|   $  @
+   _|       $@
+ _|_|_|_|_| $@
+           $$@
+             @@
+ _|_| $@
+ _|   $@
+ _| $  @
+ _| $  @
+ _| $  @
+ _|   $@
+ _|_| $@
+     $$@@
+   $$        @
+ _|   $      @
+   _|   $    @
+     _|   $  @
+       _|   $@
+         _| $@
+           $$@
+             @@
+ _|_| $@
+   _| $@
+   _| $@
+   _| $@
+   _| $@
+   _| $@
+ _|_| $@
+     $$@@
+   _|   $@
+ _|  _| $@
+       $$@
+   $$    @
+   $$    @
+   $$    @
+         @
+         @@
+             @
+             @
+     $$      @
+     $$      @
+     $$      @
+     $$      @
+           $$@
+ _|_|_|_|_| $@@
+ _|   $@
+   _| $@
+     $$@
+   $$  @
+   $$  @
+   $$  @
+       @
+       @@
+           @
+         $$@
+   _|_|_| $@
+ _|    _| $@
+ _|    _| $@
+   _|_|_| $@
+         $$@
+           @@
+   $$      @
+ _|     $  @
+ _|_|_|   $@
+ _|    _| $@
+ _|    _| $@
+ _|_|_|   $@
+       $$  @
+           @@
+           @
+         $$@
+   _|_|_| $@
+ _|       $@
+ _|       $@
+   _|_|_| $@
+         $$@
+           @@
+         $$@
+       _| $@
+   _|_|_| $@
+ _|    _| $@
+ _|    _| $@
+   _|_|_| $@
+         $$@
+           @@
+           @
+       $$  @
+   _|_|   $@
+ _|_|_|_| $@
+ _|       $@
+   _|_|_| $@
+         $$@
+           @@
+         $$@
+     _|_| $@
+   _|     $@
+ _|_|_|_| $@
+   _|     $@
+   _| $    @
+     $$    @
+           @@
+           @
+         $$@
+   _|_|_| $@
+ _|    _| $@
+ _|    _| $@
+   _|_|_| $@
+       _| $@
+   _|_|   $@@
+   $$      @
+ _|     $  @
+ _|_|_|   $@
+ _|    _| $@
+ _|    _| $@
+ _|    _| $@
+         $$@
+           @@
+   $$@
+ _| $@
+   $$@
+ _| $@
+ _| $@
+ _| $@
+   $$@
+     @@
+     $$@
+   _| $@
+     $$@
+   _| $@
+   _| $@
+   _| $@
+   _| $@
+ _|   $@@
+   $$      @
+ _|     $  @
+ _|  _| $  @
+ _|_|   $  @
+ _|  _|   $@
+ _|    _| $@
+         $$@
+           @@
+   $$@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+   $$@
+     @@
+                 @
+             $$  @
+ _|_|_|  _|_|   $@
+ _|    _|    _| $@
+ _|    _|    _| $@
+ _|    _|    _| $@
+               $$@
+                 @@
+           @
+       $$  @
+ _|_|_|   $@
+ _|    _| $@
+ _|    _| $@
+ _|    _| $@
+         $$@
+           @@
+           @
+       $$  @
+   _|_|   $@
+ _|    _| $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+           @
+       $$  @
+ _|_|_|   $@
+ _|    _| $@
+ _|    _| $@
+ _|_|_|   $@
+ _|     $  @
+ _| $      @@
+           @
+         $$@
+   _|_|_| $@
+ _|    _| $@
+ _|    _| $@
+   _|_|_| $@
+       _| $@
+       _| $@@
+           @
+         $$@
+ _|  _|_| $@
+ _|_|     $@
+ _|   $    @
+ _| $      @
+   $$      @
+           @@
+           @
+         $$@
+   _|_|_| $@
+ _|_|     $@
+     _|_| $@
+ _|_|_|   $@
+       $$  @
+           @@
+     $$    @
+   _|     $@
+ _|_|_|_|  @
+   _|     $@
+   _|     $@
+     _|_| $@
+         $$@
+           @@
+           @
+         $$@
+ _|    _| $@
+ _|    _| $@
+ _|    _| $@
+   _|_|_| $@
+         $$@
+           @@
+             @
+           $$@
+ _|      _| $@
+ _|      _| $@
+   _|  _|   $@
+     _|   $  @
+       $$    @
+             @@
+                     @
+                   $$@
+ _|      _|      _| $@
+ _|      _|      _| $@
+   _|  _|  _|  _|   $@
+     _|      _|   $  @
+               $$    @
+                     @@
+           @
+         $$@
+ _|    _| $@
+   _|_|   $@
+ _|    _| $@
+ _|    _| $@
+         $$@
+           @@
+           @
+         $$@
+ _|    _| $@
+ _|    _| $@
+ _|    _| $@
+   _|_|_| $@
+       _| $@
+   _|_|   $@@
+           @
+         $$@
+ _|_|_|_| $@
+     _|   $@
+   _|     $@
+ _|_|_|_| $@
+         $$@
+           @@
+     _| $@
+   _|   $@
+   _|   $@
+ _|   $  @
+   _|   $@
+   _|   $@
+     _| $@
+       $$@@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@
+ _| $@@
+ _|   $  @
+   _|   $@
+   _|   $@
+     _| $@
+   _|   $@
+   _|   $@
+ _|   $  @
+   $$    @@
+   _|  _| $@
+ _|  _|   $@
+       $$  @
+     $$    @
+     $$    @
+     $$    @
+           @
+           @@
+ _|    _| $@
+         $$@
+   _|_|   $@
+ _|    _| $@
+ _|_|_|_| $@
+ _|    _| $@
+         $$@
+           @@
+ _|    _| $@
+         $$@
+   _|_|   $@
+ _|    _| $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+ _|    _| $@
+         $$@
+ _|    _| $@
+ _|    _| $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+ _|    _| $@
+         $$@
+   _|_|_| $@
+ _|    _| $@
+ _|    _| $@
+   _|_|_| $@
+         $$@
+           @@
+ _|    _| $@
+         $$@
+   _|_|   $@
+ _|    _| $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+ _|    _| $@
+         $$@
+ _|    _| $@
+ _|    _| $@
+ _|    _| $@
+   _|_|_| $@
+         $$@
+           @@
+       $$  @
+   _|_|   $@
+ _|    _| $@
+ _|  _|   $@
+ _|    _| $@
+ _|  _|   $@
+ _|     $  @
+   $$      @@
+160  NO-BREAK SPACE
+ $  $@
+ $  $@
+ $  $@
+ $  $@
+ $  $@
+ $  $@
+ $  $@
+ $  $@@
+161  INVERTED EXCLAMATION MARK
+   $$@
+ _| $@
+   $$@
+ _| $@
+ _| $@
+ _| $@
+   $$@
+     @@
+162  CENT SIGN
+       $$  @
+     _|   $@
+   _|_|_| $@
+ _|  _|   $@
+ _|  _|   $@
+   _|_|_| $@
+     _|   $@
+       $$  @@
+163  POUND SIGN
+         $$    @
+     _|_|   $  @
+   _|    _| $  @
+ _|_|_|     $  @
+   _|         $@
+ _|_|_|    _| $@
+ _|_|  _|_|   $@
+               @@
+164  CURRENCY SIGN
+             $$@
+ _|        _| $@
+   _|_|_|_|   $@
+   _|    _| $  @
+   _|    _| $  @
+   _|_|_|_|   $@
+ _|        _| $@
+             $$@@
+165  YEN SIGN
+           $$@
+ _|      _| $@
+   _|  _|   $@
+ _|_|_|_|_| $@
+     _|     $@
+ _|_|_|_|_| $@
+     _|     $@
+       $$    @@
+166  BROKEN BAR
+ _| $@
+ _| $@
+ _| $@
+   $$@
+   $$@
+ _| $@
+ _| $@
+ _| $@@
+167  SECTION SIGN
+   _|_| $@
+ _|     $@
+   _|   $@
+ _|  _| $@
+   _|   $@
+     _| $@
+ _|_|   $@
+     $$  @@
+168  DIAERESIS
+ _|    _| $@
+         $$@
+ $      $  @
+ $      $  @
+ $      $  @
+ $      $  @
+           @
+           @@
+169  COPYRIGHT SIGN
+     _|_|_|_|   $  @
+   _|        _|   $@
+ _|    _|_|_|  _| $@
+ _|  _|        _| $@
+ _|  _|        _| $@
+ _|    _|_|_|  _| $@
+   _|        _|   $@
+     _|_|_|_|   $  @@
+170  FEMININE ORDINAL INDICATOR
+         $$@
+   _|_|_| $@
+ _|    _| $@
+   _|_|_| $@
+         $$@
+ _|_|_|_| $@
+           @
+           @@
+171  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+           $$@
+     _|  _| $@
+   _|  _|   $@
+ _|  _|   $  @
+   _|  _|   $@
+     _|  _| $@
+           $$@
+             @@
+172  NOT SIGN
+             @
+             @
+           $$@
+ _|_|_|_|_| $@
+         _| $@
+           $$@
+             @
+             @@
+173  SOFT HYPHEN
+           @
+           @
+         $$@
+ _|_|_|_| $@
+         $$@
+     $$    @
+           @
+           @@
+174  REGISTERED SIGN
+     _|_|_|_|   $  @
+   _|        _|   $@
+ _|  _|_|_|    _| $@
+ _|  _|    _|  _| $@
+ _|  _|_|_|    _| $@
+ _|  _|    _|  _| $@
+   _|        _|   $@
+     _|_|_|_|   $  @@
+175  MACRON
+ _|_|_|_|_| $@
+           $$@
+     $$      @
+     $$      @
+     $$      @
+     $$      @
+             @
+             @@
+176  DEGREE SIGN
+   _|   $@
+ _|  _| $@
+   _|   $@
+     $$  @
+   $$    @
+   $$    @
+         @
+         @@
+177  PLUS-MINUS SIGN
+       $$    @
+     _| $    @
+     _|     $@
+ _|_|_|_|_| $@
+     _|     $@
+ _|_|_|_|_| $@
+           $$@
+             @@
+178  SUPERSCRIPT TWO
+     $$  @
+ _|_|   $@
+     _| $@
+   _|   $@
+ _|_|_| $@
+       $$@
+         @
+         @@
+179  SUPERSCRIPT THREE
+       $$@
+ _|_|_| $@
+   _|   $@
+     _| $@
+ _|_|   $@
+     $$  @
+         @
+         @@
+180  ACUTE ACCENT
+   _| $@
+ _|   $@
+   $$  @
+ $$    @
+ $$    @
+ $$    @
+       @
+       @@
+181  MICRO SIGN
+           @
+         $$@
+ _|    _| $@
+ _|    _| $@
+ _|    _| $@
+ _|_|_|_| $@
+ _|       $@
+ _| $      @@
+182  PILCROW SIGN
+           $$@
+   _|_|_|_| $@
+ _|_|_|  _| $@
+   _|_|  _| $@
+     _|  _| $@
+     _|  _| $@
+           $$@
+             @@
+183  MIDDLE DOT
+     @
+     @
+   $$@
+ _| $@
+   $$@
+ $$  @
+     @
+     @@
+184  CEDILLA
+       @
+       @
+       @
+       @
+       @
+     $$@
+   _| $@
+ _|_| $@@
+185  SUPERSCRIPT ONE
+     $$@
+   _| $@
+ _|_| $@
+   _| $@
+   _| $@
+     $$@
+       @
+       @@
+186  MASCULINE ORDINAL INDICATOR
+       $$  @
+   _|_|   $@
+ _|    _| $@
+   _|_|   $@
+         $$@
+ _|_|_|_| $@
+           @
+           @@
+187  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+       $$    @
+ _|  _|   $  @
+   _|  _|   $@
+     _|  _| $@
+   _|  _|   $@
+ _|  _|   $  @
+       $$    @
+             @@
+188  VULGAR FRACTION ONE QUARTER
+               $$        @
+   _|        _|       $  @
+ _|_|      _|  _|  _| $  @
+   _|    _|    _|  _|   $@
+   _|  _|      _|_|_|_| $@
+     _|            _|   $@
+                     $$  @
+                         @@
+189  VULGAR FRACTION ONE HALF
+               $$      @
+   _|        _|     $  @
+ _|_|      _|  _|_|   $@
+   _|    _|        _| $@
+   _|  _|        _|   $@
+     _|        _|_|_| $@
+                     $$@
+                       @@
+190  VULGAR FRACTION THREE QUARTERS
+               $$        @
+ _|_|_|      _|       $  @
+   _|      _|  _|  _| $  @
+     _|  _|    _|  _|   $@
+ _|_|  _|      _|_|_|_| $@
+     _|            _|   $@
+                     $$  @
+                         @@
+191  INVERTED QUESTION MARK
+       $$@
+     _| $@
+       $$@
+   _|_| $@
+ _|     $@
+   _|_| $@
+       $$@
+         @@
+192  LATIN CAPITAL LETTER A WITH GRAVE
+   _|   $  @
+     _| $  @
+   _|_|   $@
+ _|    _| $@
+ _|_|_|_| $@
+ _|    _| $@
+         $$@
+           @@
+193  LATIN CAPITAL LETTER A WITH ACUTE
+     _| $  @
+   _|   $  @
+   _|_|   $@
+ _|    _| $@
+ _|_|_|_| $@
+ _|    _| $@
+         $$@
+           @@
+194  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+   _|_|   $@
+ _|    _| $@
+         $$@
+   _|_|   $@
+ _|_|_|_| $@
+ _|    _| $@
+         $$@
+           @@
+195  LATIN CAPITAL LETTER A WITH TILDE
+   _|  _| $@
+ _|  _|   $@
+       $$  @
+   _|_|   $@
+ _|_|_|_| $@
+ _|    _| $@
+         $$@
+           @@
+196  LATIN CAPITAL LETTER A WITH DIAERESIS
+ _|    _| $@
+         $$@
+   _|_|   $@
+ _|    _| $@
+ _|_|_|_| $@
+ _|    _| $@
+         $$@
+           @@
+197  LATIN CAPITAL LETTER A WITH RING ABOVE
+   _|_|   $@
+ _|    _| $@
+   _|_|   $@
+ _|    _| $@
+ _|_|_|_| $@
+ _|    _| $@
+         $$@
+           @@
+198  LATIN CAPITAL LETTER AE
+               $$@
+   _|_|_|_|_|_| $@
+ _|    _|       $@
+ _|_|_|_|_|_| $  @
+ _|    _|       $@
+ _|    _|_|_|_| $@
+               $$@
+                 @@
+199  LATIN CAPITAL LETTER C WITH CEDILLA
+         $$@
+   _|_|_| $@
+ _|       $@
+ _|   $    @
+ _|       $@
+   _|_|_| $@
+     _|   $@
+   _|_| $  @@
+200  LATIN CAPITAL LETTER E WITH GRAVE
+   _|   $  @
+     _|   $@
+ _|_|_|_| $@
+ _|_|_| $  @
+ _|       $@
+ _|_|_|_| $@
+         $$@
+           @@
+201  LATIN CAPITAL LETTER E WITH ACUTE
+     _| $  @
+   _|     $@
+ _|_|_|_| $@
+ _|_|_| $  @
+ _|       $@
+ _|_|_|_| $@
+         $$@
+           @@
+202  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+   _|_|   $@
+ _|    _| $@
+ _|_|_|_| $@
+ _|_|_| $  @
+ _|       $@
+ _|_|_|_| $@
+         $$@
+           @@
+203  LATIN CAPITAL LETTER E WITH DIAERESIS
+ _|    _| $@
+         $$@
+ _|_|_|_| $@
+ _|_|_| $  @
+ _|       $@
+ _|_|_|_| $@
+         $$@
+           @@
+204  LATIN CAPITAL LETTER I WITH GRAVE
+ _|   $  @
+   _|   $@
+ _|_|_| $@
+   _|   $@
+   _|   $@
+ _|_|_| $@
+       $$@
+         @@
+205  LATIN CAPITAL LETTER I WITH ACUTE
+     _| $@
+   _|   $@
+ _|_|_| $@
+   _|   $@
+   _|   $@
+ _|_|_| $@
+       $$@
+         @@
+206  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+   _|   $@
+ _|  _| $@
+ _|_|_| $@
+   _|   $@
+   _|   $@
+ _|_|_| $@
+       $$@
+         @@
+207  LATIN CAPITAL LETTER I WITH DIAERESIS
+ _|  _| $@
+       $$@
+ _|_|_| $@
+   _|   $@
+   _|   $@
+ _|_|_| $@
+       $$@
+         @@
+208  LATIN CAPITAL LETTER ETH
+         $$  @
+   _|_|_|   $@
+   _|    _| $@
+ _|_|_|  _| $@
+   _|    _| $@
+   _|_|_|   $@
+         $$  @
+             @@
+209  LATIN CAPITAL LETTER N WITH TILDE
+   _|  _| $@
+ _|  _|   $@
+ _|    _| $@
+ _|_|  _| $@
+ _|  _|_| $@
+ _|    _| $@
+         $$@
+           @@
+210  LATIN CAPITAL LETTER O WITH GRAVE
+   _|   $  @
+     _| $  @
+   _|_|   $@
+ _|    _| $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+211  LATIN CAPITAL LETTER O WITH ACUTE
+     _| $  @
+   _|   $  @
+   _|_|   $@
+ _|    _| $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+212  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+   _|_|   $@
+ _|    _| $@
+   _|_|   $@
+ _|    _| $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+213  LATIN CAPITAL LETTER O WITH TILDE
+   _|  _| $@
+ _|  _|   $@
+   _|_|   $@
+ _|    _| $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+214  LATIN CAPITAL LETTER O WITH DIAERESIS
+ _|    _| $@
+         $$@
+   _|_|   $@
+ _|    _| $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+215  MULTIPLICATION SIGN
+         @
+       $$@
+ _|  _| $@
+   _|   $@
+ _|  _| $@
+       $$@
+         @
+         @@
+216  LATIN CAPITAL LETTER O WITH STROKE
+           $$@
+   _|_|_|_| $@
+ _|    _|_| $@
+ _|  _|  _| $@
+ _|_|    _| $@
+ _|_|_|_|   $@
+         $$  @
+             @@
+217  LATIN CAPITAL LETTER U WITH GRAVE
+   _|   $  @
+     _| $  @
+         $$@
+ _|    _| $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+218  LATIN CAPITAL LETTER U WITH ACUTE
+     _| $  @
+   _|   $  @
+         $$@
+ _|    _| $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+219  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+   _|_|   $@
+ _|    _| $@
+         $$@
+ _|    _| $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+220  LATIN CAPITAL LETTER U WITH DIAERESIS
+ _|    _| $@
+         $$@
+ _|    _| $@
+ _|    _| $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+221  LATIN CAPITAL LETTER Y WITH ACUTE
+       _| $  @
+     _|     $@
+ _|      _| $@
+   _|  _|   $@
+     _|   $  @
+     _| $    @
+       $$    @
+             @@
+222  LATIN CAPITAL LETTER THORN
+   $$      @
+ _|     $  @
+ _|_|_|   $@
+ _|    _| $@
+ _|_|_|   $@
+ _|     $  @
+   $$      @
+           @@
+223  LATIN SMALL LETTER SHARP S
+       $$  @
+   _|_|   $@
+ _|    _| $@
+ _|  _|   $@
+ _|    _| $@
+ _|  _|   $@
+ _|     $  @
+   $$      @@
+224  LATIN SMALL LETTER A WITH GRAVE
+   _|   $  @
+     _| $  @
+         $$@
+   _|_|_| $@
+ _|    _| $@
+   _|_|_| $@
+         $$@
+           @@
+225  LATIN SMALL LETTER A WITH ACUTE
+       _| $@
+     _|   $@
+         $$@
+   _|_|_| $@
+ _|    _| $@
+   _|_|_| $@
+         $$@
+           @@
+226  LATIN SMALL LETTER A WITH CIRCUMFLEX
+     _|   $@
+   _|  _| $@
+         $$@
+   _|_|_| $@
+ _|    _| $@
+   _|_|_| $@
+         $$@
+           @@
+227  LATIN SMALL LETTER A WITH TILDE
+   _|  _| $@
+ _|  _|   $@
+         $$@
+   _|_|_| $@
+ _|    _| $@
+   _|_|_| $@
+         $$@
+           @@
+228  LATIN SMALL LETTER A WITH DIAERESIS
+ _|    _| $@
+         $$@
+   _|_|_| $@
+ _|    _| $@
+ _|    _| $@
+   _|_|_| $@
+         $$@
+           @@
+229  LATIN SMALL LETTER A WITH RING ABOVE
+     _|   $@
+   _|  _| $@
+     _|   $@
+   _|_|_| $@
+ _|    _| $@
+   _|_|_| $@
+         $$@
+           @@
+230  LATIN SMALL LETTER AE
+                   @
+               $$  @
+   _|_|_|  _|_|   $@
+ _|    _|_|_|_|_| $@
+ _|    _|_|       $@
+   _|_|_|  _|_|_| $@
+                 $$@
+                   @@
+231  LATIN SMALL LETTER C WITH CEDILLA
+           @
+         $$@
+   _|_|_| $@
+ _|       $@
+ _|       $@
+   _|_|_| $@
+     _|   $@
+   _|_| $  @@
+232  LATIN SMALL LETTER E WITH GRAVE
+   _|     $@
+     _| $  @
+   _|_|   $@
+ _|_|_|_| $@
+ _|       $@
+   _|_|_| $@
+         $$@
+           @@
+233  LATIN SMALL LETTER E WITH ACUTE
+       _| $@
+     _|   $@
+   _|_|   $@
+ _|_|_|_| $@
+ _|       $@
+   _|_|_| $@
+         $$@
+           @@
+234  LATIN SMALL LETTER E WITH CIRCUMFLEX
+   _|_|   $@
+ _|    _| $@
+   _|_|   $@
+ _|_|_|_| $@
+ _|       $@
+   _|_|_| $@
+         $$@
+           @@
+235  LATIN SMALL LETTER E WITH DIAERESIS
+ _|    _| $@
+         $$@
+   _|_|   $@
+ _|_|_|_| $@
+ _|       $@
+   _|_|_| $@
+         $$@
+           @@
+236  LATIN SMALL LETTER I WITH GRAVE
+ _|   $@
+   _| $@
+     $$@
+   _| $@
+   _| $@
+   _| $@
+     $$@
+       @@
+237  LATIN SMALL LETTER I WITH ACUTE
+   _| $@
+ _|   $@
+   $$  @
+ _| $  @
+ _| $  @
+ _| $  @
+   $$  @
+       @@
+238  LATIN SMALL LETTER I WITH CIRCUMFLEX
+   _|   $@
+ _|  _| $@
+       $$@
+   _| $  @
+   _| $  @
+   _| $  @
+     $$  @
+         @@
+239  LATIN SMALL LETTER I WITH DIAERESIS
+ _|  _| $@
+       $$@
+   _| $  @
+   _| $  @
+   _| $  @
+   _| $  @
+     $$  @
+         @@
+240  LATIN SMALL LETTER ETH
+ _|  _| $  @
+   _|   $  @
+ _|  _|   $@
+   _|_|_| $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+241  LATIN SMALL LETTER N WITH TILDE
+   _|  _| $@
+ _|  _|   $@
+       $$  @
+ _|_|_|   $@
+ _|    _| $@
+ _|    _| $@
+         $$@
+           @@
+242  LATIN SMALL LETTER O WITH GRAVE
+   _|   $  @
+     _| $  @
+       $$  @
+   _|_|   $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+243  LATIN SMALL LETTER O WITH ACUTE
+     _| $  @
+   _|   $  @
+       $$  @
+   _|_|   $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+244  LATIN SMALL LETTER O WITH CIRCUMFLEX
+   _|_|   $@
+ _|    _| $@
+         $$@
+   _|_|   $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+245  LATIN SMALL LETTER O WITH TILDE
+   _|_|_| $@
+ _|  _|   $@
+       $$  @
+   _|_|   $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+246  LATIN SMALL LETTER O WITH DIAERESIS
+ _|    _| $@
+         $$@
+   _|_|   $@
+ _|    _| $@
+ _|    _| $@
+   _|_|   $@
+       $$  @
+           @@
+247  DIVISION SIGN
+       $$    @
+     _| $    @
+           $$@
+ _|_|_|_|_| $@
+           $$@
+     _| $    @
+       $$    @
+             @@
+248  LATIN SMALL LETTER O WITH STROKE
+           @
+         $$@
+   _|_|_| $@
+ _|  _|_| $@
+ _|_|  _| $@
+ _|_|_|   $@
+       $$  @
+           @@
+249  LATIN SMALL LETTER U WITH GRAVE
+ _|   $    @
+   _| $    @
+         $$@
+ _|    _| $@
+ _|    _| $@
+   _|_|_| $@
+         $$@
+           @@
+250  LATIN SMALL LETTER U WITH ACUTE
+       _| $@
+     _|   $@
+         $$@
+ _|    _| $@
+ _|    _| $@
+   _|_|_| $@
+         $$@
+           @@
+251  LATIN SMALL LETTER U WITH CIRCUMFLEX
+   _|_|   $@
+ _|    _| $@
+         $$@
+ _|    _| $@
+ _|    _| $@
+   _|_|_| $@
+         $$@
+           @@
+252  LATIN SMALL LETTER U WITH DIAERESIS
+ _|    _| $@
+         $$@
+ _|    _| $@
+ _|    _| $@
+ _|    _| $@
+   _|_|_| $@
+         $$@
+           @@
+253  LATIN SMALL LETTER Y WITH ACUTE
+     _| $  @
+   _|   $  @
+         $$@
+ _|    _| $@
+ _|    _| $@
+   _|_|_| $@
+       _| $@
+   _|_|   $@@
+254  LATIN SMALL LETTER THORN
+   $$      @
+ _|     $  @
+ _|_|_|   $@
+ _|    _| $@
+ _|    _| $@
+ _|_|_|   $@
+ _|     $  @
+ _| $      @@
+255  LATIN SMALL LETTER Y WITH DIAERESIS
+ _|    _| $@
+         $$@
+ _|    _| $@
+ _|    _| $@
+ _|    _| $@
+   _|_|_| $@
+       _| $@
+   _|_|   $@@
diff --git a/externals/figlet/fonts/bubble.flf b/externals/figlet/fonts/bubble.flf
new file mode 100644
index 0000000000000000000000000000000000000000..efd0a7196472c12887d2f02b4f219946adf5bebd
GIT binary patch
literal 19926
zc$}S^`JY==8ODE~zv8$8+F7zswAS89?qqH!b8mWc({^gLW@hfp#AcE)OH18w-}ilA
zKu{JzKtOgB1Vofg5M)(W5oHquS@dMu0(sB--sgV&p_9(1&-=}}?|II9-gA;JH<y$3
z<5XIu)TByeR3f1!RAM5L%&BBLIWpB>SZIc7;h-ut!&XZbR_p8QVY8{y<N4Hx(^_oy
zm%^@ET&;KNi@mVZRf*)}Xfl%-v0JP4)?&D%mfIawuJ;<P(d4Goru2Zdt-Y#I?F03e
z+PpY;*}AycXpXfzD_cf3q%Q+iH|%v)x4*vL?({UR-D)0Gjb(MP-PixN*a^dyeuq|1
zEw#h$$Z}()8TM2sY=-r2sFGtzH9D%?_Wp2fL9-J1e0HP~cGeo*Zlm2&jjmb^JE0!Y
zN@KqU_1bE!z0_DfsCujV-v-=Gs@_%2c57wu+FK1rHUy2Zb5vKg>TBVEvEHmNZVXM;
z)na>XE!4wlHd^7>$jICw_0r&}EA@U;P4zoHE!^B~H~T$3hOJ?}(_7W*ePgY#w?(IK
zJf9s5q;V*>sudnk>pB^0q0Yw0%ZbpyX{R)J+Inkg@YkJ<)|gUr^@FP3?6%cHsJhL@
z%4$#NYwgG=26M3x_6B+Fcf*nP@&<mn-)xQ^Xe{+s$M=Pu)_8ZV-(A%dEo<r7*dKN`
zsfE5yak#7>p{LsY-n#x(Ke_7#gQ;q*giB*1>bR}1{G)#;wO6UZ>$uu8cs*LZN*y!!
zeb3%;#S31I1g}AY*CN5|kl^)5a1;_8jReOa!5fg^jYzNw2}Y4%3<<`OU;+seNRUK=
z6cVJ7AcF*1B*-DbBogG2;7v&IW+d2*1aCotElBWIB-n}s77|P$K>-PhNMIwuG!m4M
zU<L^sB-n-ovq(@zf;l8`k-$TO3KDEb0v`#gNDv@F4GDH2!A>ODg#`0Rup0^9h6H<%
z;O$884kXx%1n)$GIua}(!6FhYAwh@)%Sf<-1gl8UK!SH6!9FBtBEcFGw2+{U1nWrf
zZY1a+K^F;nNYF=u{YY>C364dAgGlfmBzP|pyblT9j|3k;f-8{V79_X>3GPFJr;*@!
zB)EG>pwGjc=z~O*=R_YG7NsUQ(T9mB!HGUXL`hEcQ6frlqK^?#niGATh%%h$6GW8d
zM4u$094Gn|5wRKnG!d~G|IDx`&1U?wM8szNb40{u{PRS_X8a38#Af`9M8szNOGLzG
z{L4hdX8bEe#Af`fM8szNYr~=poAIv`5u5RE5D}a4ZxRuk@oy0koAGZG5u5Sv5D}a4
z?-CK4@$V54oAK`x5u5QJ42!Z8O1a+Xly6(Js#>uMHW&0m5|mKNad+5$U>B9Wt5CM)
ztibVHHD~#=T>Otnd{U``?FOpqlw3}KJkh6=s(3ZGC<dHB0@C^oYQAr~g?TaN$0R1B
z)V%GA@)L<XtJIY5&FY9L%jW`4A^|z2s&-)`Pttq*goI2gRdg)dx2sN-)Blv{^ZK#9
z%DnHCX5{3aJRFqM4w$y*9M^Ge<@rU&waR*Si%!7`Jodp(Apq@$vOOJ)Ry@ZI9Ji#3
zUTvyuE6XkEpWAC*5bcgr2`{NOt`?>7pGM@`993^RP&4zD8Jmsx8Hv#D@a>XQ4RmH@
zPn}Mpv_Iyog72~7Gl*EbqiC0W+ZORZClT5nm2#~*s%N5B6{F51QQ9HZTE+IO1>dOz
zD%k09QD>2;Jc*jo1Lfk*9*&#TR<R1TKu>L9uztCaUyu-OjyXqXO?;wrNPwRGic{7R
zJH?Q5Nl0q&9>t<IThU_&bsh;Aln1-$l*<;U{v}aohO_0lY_85HQQ3iAs)brP_PV-&
z5VRvUR`UP7ur4G(ZI&Iia>?@5v~L}%MEYSg$kLUZ9nwXFkmm_AR(YBWzj!!2KVgP%
zc<;y%*dlicfxL3_*<Q1&ktw*81Z#Jdb<$i_uqsZVXQXTg`i+&Pb~?d~D*4t9c6Ki#
zoK!StW0i26UlC3^np1H6LTzrkZ13V=zb3FuG%Rq+MRrh^6HYdo6S*Z_L0GwHmOrqy
zHRbVH{|$jnN-#G1N)nwHq6>#}EmwrAhDgbY34vq-7hO#_iD-`KqTdpZ<Z3&Pi>@Is
z$=Y^|+5a73N%nR?qOK(z$=MD_)b9yLa<&sEQGXyX$=XhgL|sQ%lC$k#h6}%*giF?T
z!OFj3n3Ir<?Sc8ak#Hnqdtkn9A{@!sUYz;*BY{cA_CS(uCLGDsUW|Fag|G%qWvv`I
zmGYo3h&mhmi9||PK0JzQFgToWpj!z@vT+T}`E7(FS-1w~{Lh3VdASy6&Tk)vB_%`G
zV$9VYge94J9z5Wkgd>?cnDKme>hB_emyBGUv&t`pS7$80qSz<7n*h=*0QErk5K1PB
zB4*<+gp!S-L{Ii#2`U$b5|{VAgfbaLi8Rc8gp`jWMRz{;52I2OJc^BdfW#))SlsnI
zNH|HBgL<Ba2!%H<>UjP}D7=GX^*av}6mR1=-Ok?$iMKN9bsixU-o>cX`3Ir!E{@gb
z{F9(~8^`H#9vvp7c^3;k&SNB)w=wE)9w!vu#Hhb{f>3x9qweNOLg7sutGD?VLGdO=
zoy}8(!W%eFU-L8}<pwvGJDh4%NAqtI!&?^iGtUqVZ&%dKJUdLu@K!~=%zp@l_iU_A
z<~f4mjT@(rd7hAX^P(>11w!G?EA}uil5pOz^D!RhzeA*nV<!^gdHnEJD_`4QX0rGx
zgQR;*61Z!c@@?LVmzyYl$`I&Y69n#?ypreIF+RfCU`6(SGU-f{B%Ngnz>`;+D1P@u
zpa)Elbet)~S-i}^__7p>#*EI29$nE3;@+xl;HIJm7YV!HgcU&MEMW;<ZK8^iNs~Yi
znIKyjQxTx9Gf~s*m=Neu10-Iy6w!`%y~*OM79>4plE7V}TmerpS&_ZIOuE1%NfpA5
zVbN<%9A72kz#cJS;@uspgx8oXzDhvS!zM|p5H>I>lP$hFAP|!&sWOz}RKZ(K9$y|}
z(Vj7BQjI8qZT3_X#n%V~y3hcL_gAGDR=wH8@ns?o>?so_Rf;3|mv0u#j0tyI7{%mF
z>Tzb`_~Im!$M-q0Xy=+Vsglj0T5Wb<!i5(knH^YCs$mW|L7r%$BCiWX&^abZs$dS<
zKg>-#$(JxlGI#ByR3#i#qpvbqe3^ix2Mtn6suNC(rG2uA6WR$cDBIPlayZKQCPi9^
z+u|&p(@Y+}5M$9UGHKF6oP{;#CKJZ5M2vdUMDf=kvpyStycsWjeo_W!AoEy|ve=;@
zka;9XO+}9>B0*+7P8Fg?6@fB~ajFQ$CG|FD*-P1xqmn>o*-J|wGnG+UKfz@2mqw6u
zwn>scJavH?ZZJ{&%@G1UZi1w51-Q@(%&7RgPmE&5C4Hjm0yErbqWEHfKu?$;@i^d?
zIKssyK{y5Q@t2zMQuFVjO_)gw-}pn4nU{>TaUQw!KKzY4$(3f0E!_FW<e6=DM%qPv
zuwcx)P2tiNfy}GTjI?+9aJiU8D#P!c7-d$ejMT>ZV8NJY%M9PfB9M8k%t$M*3es-w
zd>MWTB9OW7Wu&!OjnhlrW%Bs-7>o9zNt0UaDzt=o2bJM_Y>YB5p|Vn~r~*@%4R)3<
z5(s4W*je$*B=7;vY0UD6aEvnNFe_E906e03HIU`276O?U16iqR1*jh~&mvjAXhD*B
z4#|S=O^GMwJ55yNN1r0-1rsFItQy*38B_5^3z8U5NmZ)`?$ww~@dXQkm`q8vsut&4
zKDU`XzFftkJ!{Z%QpKvp>qc%jiIJaZBi?f+PpV%vbO~bSF2|QINMiCPouPMwt=23Q
zIsOcdKxUoDNoVNYF|K&dFme1TIu6Y2?Q_yOdN(N2r<*AL9F0JiP*Ad<E3_y-&yW`<
nmAvkaTb5)|J0vnm#<vubMLmJC3C}Y1MK!dbBL36W@M-OT6KuyK

literal 0
Hc$@<O00001

diff --git a/externals/figlet/fonts/digital.flf b/externals/figlet/fonts/digital.flf
new file mode 100644
index 0000000000000000000000000000000000000000..6b7a1cabbf93476e2a9585be94eda4845499c39a
GIT binary patch
literal 15139
zc$}4*>3<t%5y#)_uXs2MBz7#xk}N18YiTWQENhkBRT76&w%3-3EEye14S{ms_kABJ
zE%czJEp6#tptPkFdePF-6M9k#y=ZCa#Um%#ot<O-;YA$hr};kn%ri63JkKi2?d4SC
zM3q)4l~qZVOsWZ$%x02Wm`o*#t(DfG(N+uVs?_#79aU&H*4F%XTP3&UC)L=PT4?nB
zCDrYy>EXgc+fP`X#rAN?@2kaTqt{p*_`SYLrl!VHnM}g$G#i~oZNA*?sY+we>Wrnf
zrngRxhTqw3>e0Ig8y$80;^?m(i;J!Hc(=E*J+WaL4ygM6ps)JFwY6?<u<`Krx@s+}
z_3luAw%GIij($RCpq9FRKe60eY5N1!^V`0js!ENgM$@i#5BRGKdaPtVpH0;K-fFAg
zZ)rDLebw}PzMj!a>wq3;&{eD5rPlJg8Z`B1qj9&YMqjnNot4qwgQlO@FlhO`<NB)8
zSoKF^thF19N7kjG7Q3sfzMf9I)$zv@iMb=zOCzsqjbU4_TyLNakMDQe!-1Z|4!_YG
zG`02q@s2;(u9t6HK0BI7>&V)wj(<?C>BU&}^=c%-h0p`eSf!D-jn2~O*FCMyxKeYC
zb=7G1yK2E#{dQ}mIne91dTbV>SS<L1(Yg-%exkd)G5qqd-5xvGS{gLB?e}|~ZT;0@
zzo|#jW*r@k1Ac$2S{Ujj_LsE_1JxZ4*7QHM=T+Mqg{rgSFO4VEi93${(Lc6~ZP7mu
zz2eZ(-$Ut@RC*PaUQMOfQ0cW)I*v-OqtffC^ad(zq0&|=jZtZwO53P3L8T;>QdCM)
zX_87ADrKpZqtX<W@>F^wmEJ_9<Eiv!Ds89ITd1^yN(PmtsZ^j+kxC|&W~fx6QkhB?
zm3C5TmP!>W%~7dJC7Vh$D(#|@LnW6=9+m1;+D)ZBRN70Wc`EIr(p#zYHY&ZHO7Ec3
zJE`<8DmAFIK&3@0Em6s*(lV7+sMMrVi%RdN(tawnskBO^4wbr8TBFi?sMMoUpGpHN
z4XJd1N(ZTQ0+rUO^j<2xk4lHA^nNORfJ#?V=~gP;Nu~R#^bD0=pwc~|q)%ai{6Q$^
z1NlQhPEQ2#hoPJd<c~l(704fjaypPd2Ia{>{y3B~f&2+5X9M|@P|gMNr=T2q`DrMJ
zUVaA1lcATNg>vZS=b#*V`FSXZUVZ_}p_gBTa_Hrkpd5PnWhjSUeg(>*mtTc)=;had
zoC&@BI+Q~%zX9dY%WpzC^zvI!4!!&~ltVAS1Le@m??O5B@_SGYz5G6uLoa^-<m`mf
zr_Zrz$24Y@TQdq~VD>|3mQ>2B?lv9IEGlzvp<>J#o@H0noZ-v{#E&46QmSB9J>^=Z
zYG82~TBMb#+4X8MYH|`Znbd>S9mlK|=A%|WhE^G+=FMu<;ACi!RchL?XSL0=;RGh9
zK$DzOu36adDKgGapwX04MawW9)3w~d;-}CeuP1ER<{hh4My{U<%yN3wXUsXPYE?~T
zJ4LH%RP_25t%Bj%;RH{Eh>k$TobkqLwpI14YDpFC`gFxqMzy4W?yB1!6Oq&52r0F3
z(TL3I3}~PO;@UHwD$m!-W@z&>Xrm+Im?g{g^eUjpoeAx9Oy-P&V}~D~1wYmiDVin6
zG^0cO9NOrR)GBp%Os`YjjoO_J?Q~S!dd+m)f@9S@<?XQpyK|sj9@&-k;{(fcf#sAA
zk5Q<5dT|S*91e_r0gZG(<}B@DbY|y46TRX!tD<f8M2*geM(NQw#i9;k(GDMV0W=wv
zfmyUF6(jikm+<pU)HAyp`gI|+%Z`HL7V4Gwyt@c8Itm-v{Qo81#c&86pxyOK$#B$+
zV;re5Jw=TgdOrytdkJLnJX1C*GXZcZ0P+(Q*og44$AkrY8N}emwySQs)RoJjxsGT>
zyIWNSqh@(}^(v;P2UmvLV|is&a*W;K+Ft?5bUe9{Zvpu$NKVF+1<NVa=VmJA-T?nK
z#53`@XH|;fgMS0bY&=P~!Yd)2i>IAYDjCx@Sg+qgd`iMY`>UXRUa&75T_sdMSBGqB
zVnSd|E~?i+G8s=sqxw5YN||JeQN0%8QaYJZY<>@EDWxpV;p-qNWs}7@{0B%%*<^_h
z{}JL+I$4s#*F##$Ceteizzq<P(y7W-&5eLeO37q%YkLzUrDU?XwY?dVQZm`%+WraR
zQZm_`v$sG}N+er~%B_$d9TMsl&#F~M9f+L0{tRuU^f~$@*Bc%10`xYBN~u%lB62$<
zrL?JY5%~)wrTnRj5xE24DJhBS(z@OWX(^HBxoO`8Nhy)Mvh9R{xf>!u^0;$GB>>#A
z;nY+(zk47u$s%kIy%%zsI4<hdUm=%`<CswV4Z^uNI9eL_L2fFJqXE1hviUfc>6{M$
zI6c9`q4k5%I>}lKUGpJGrdX2gnGZvbPZ+ji{vC3B*2w+x5eW0CBX-MwK$cG*wpTt1
zIX-jPPWeyB@tGs{$$vqZPaUyKJ_guHK67A?d>oqdsl#^2Cm_cs4%;7}gdCqZY<GML
za(v>*z46}=<`akQj88+3Pa3f=J_Fg@=sm-3%OxH0KhTO#6TTll3qd|b*lze7;4*xA
zu)XlVkmK`2?u5@nm`@h55553dK4I7{_#))^go*aRmmt6=$-FelmqT{qgo&hh|2Vqg
zqZcVxAevuZp1l{bo7`uo9dkE(IoyEx<z><P5W2~o)-LJGKKo*EgN{81Aogs;O6SM|
zmlanbnBUP^^g)D5N6CU%2KeE8*~&bgfe}B0qV37|@r?nd<0e4y2M}J^WCaYEsMjF4
z80&lleHfvp@Z2H?UytA!_PH$jSQHg6f<<<Rz5&sERrBoQh~4Df0@@Q!Lv-x<46zp>
zR;n&jN|Ni)0DOgs_@f9H@A>TBa4n+w3gg*F5Gz%e$)yVRny)Mt#U4vlRTB4w+t3Jn
zY03Pvh?nZC#5ID`5zN;Yi(VW>#XE9IN|syD0DOsw_|piNs_fXxp}Q0ET(~z2F!o*Q
zpJg#>r=St|9xC(aBVMZXGP^^e4lZ1(c@}l>lvLvucP2j>!Liq)D0&`3r3$y$oe?#X
z6kp;zi#kb4sxXV)nXX1OUt&D_P?SweHD*agaw-}?Xk)flF<n<#0e2zdqy*n7Cg>Sx
z1U|uK{u0DX2|mkL=*<Y{GhBe5LNI@|n{`6sFe0S)jTP=}iVk*ZgMA!}qC;JJI{vxX
zQM3!C3vo}zFxrCB#Z8_a>6>UHNSm=wj-Y5Gn3P_xR@m+9Bt-KUTAn=@vC@nBDi^97
z5zOCeS@a2nO5gfa`9R?(^Y20g7(ZKjdtc>3brXX5LSoS;5h@<&s-=Lr6fwd%4iJ|k
zLOQ<LY-7Og@kckFMgC<r`JU?7xBQX3Kqn~S%}(41=n$2W_IZa(OZ4VLc<sWX=*34y
z+T9&KDNzw;_}yKAQ59#T1B}C^B|5EV_yY`!qJw%y%4nBcFtk%=_|#@mv`=TG9CyWD
zd^Z|_&vTi73Gvba%H;!wZp0b>1SP=eN}QGI%;iFcj!#*>z*rQWpt9mudHl4|l4tqr
zi2$SZ&PrA7aT7-uqby(5EQ+p0S*fZ$w!5MeW0o&!o<*m{>?Yq7M{gE)AvpGhd=z~V
zp;ArP*&cv{%ojD!;uuR+UFYuZ*kit+SrmIL)pA|@cJy{M0$<KD|6G*MZT96n*Z1x~
zW5j+Z!jAAf8bPY>I(xB0Ymnp1n`g2A(p_U8*9=gR<@mb>i=rCKNq3EX(q;54Gys3w
z5OH)?%Src*ecaY`CW86<28&)6K~n|2FGUS5h#C~96snoS$UsMoy7w|N(#wkie-5%J
Osz_?${~ilY!~X-{{W5X@

literal 0
Hc$@<O00001

diff --git a/externals/figlet/fonts/frango.flc b/externals/figlet/fonts/frango.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/frango.flc
@@ -0,0 +1,65 @@
+flc2a
+# This file can be used with a Unicode-Greek FIGfont
+# to convert "frangovlakhika" (Greek written in Latin
+# letters) into real Greek.
+#
+# The mapping is the same as that used by the "ntgreek" FIGfont.
+
+t ( \0x02BD
+t ) \0x02BC
+t : \0x0387
+t A \0x0391
+t B \0x0392
+t C \0x03A7
+t D \0x0394
+t E \0x0395
+t F \0x03A6
+t G \0x0393
+t H \0x0397
+t I \0x0399
+t J \0x03D1
+t K \0x039A
+t L \0x039B
+t M \0x039C
+t N \0x039D
+t O \0x039F
+t P \0x03A0
+t Q \0x0398
+t R \0x03A1
+t S \0x03A3
+t T \0x03A4
+t U \0x03A5
+t V \0x03C2 sigma
+t W \0x03A9
+t X \0x039E
+t Y \0x03A8
+t Z \0x0396
+t _ \0x037A
+t a \0x03b1
+t b \0x03b2
+t c \0x03C7
+t d \0x03B4
+t e \0x03B5
+t f \0x03C6
+t g \0x03B3
+t h \0x03B7
+t i \0x03B9
+t j \0x03D5
+t k \0x03BA
+t l \0x03BB
+t m \0x03BC
+t n \0x03BD
+t o \0x03BF
+t p \0x03C0
+t q \0x03B8
+t r \0x03C1
+t s \0x03C3
+t t \0x03C4
+t u \0x03C5
+t v \0x03D6
+t w \0x03C9
+t x \0x03BE
+t y \0x03C8
+t z \0x03B6
+t ' \0x00A8
+t ~ \-5
diff --git a/externals/figlet/fonts/hz.flc b/externals/figlet/fonts/hz.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/hz.flc
@@ -0,0 +1,4 @@
+flc2a
+# Set HZ input mode (a 7-bit encoding of GB Chinese text)
+# Meaningful only to FIGlet 2.2 beta 4 or better
+h
diff --git a/externals/figlet/fonts/ilhebrew.flc b/externals/figlet/fonts/ilhebrew.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/ilhebrew.flc
@@ -0,0 +1,38 @@
+flc2a
+# implements a natural mapping from the Hebrew keyboard
+# to Hebrew letters in the Ivrit font.
+# Note that capital letters remain unchanged.
+
+t t \0x05d0
+t c \0x05d1
+t d \0x05d2
+t s \0x05d3
+t v \0x05d4
+t u \0x05d5
+t z \0x05d6
+t j \0x05d7
+t y \0x05d8
+t h \0x05d9
+t f \0x05db
+t l \0x05da
+t k \0x05dc
+t n \0x05de
+t o \0x05dd
+t b \0x05e0
+t i \0x05df
+t x \0x05e1
+t g \0x05e2
+t p \0x05e3
+t ; \0x05e4
+t m \0x05e6
+t . \0x05e5
+t e \0x05e7
+t r \0x05e8
+t a \0x05e9
+t , \0x05ea
+t ' ,
+t / .
+t ` ;
+t q /
+t w '
+t ~ \-2
diff --git a/externals/figlet/fonts/ivrit.flf b/externals/figlet/fonts/ivrit.flf
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/ivrit.flf
@@ -0,0 +1,900 @@
+flf2a$ 6 5 76 15 14 1 16271 39
+Ivrit (Hebrew) Unicode font assembled by John Cowan <cowan@ccil.org>
+Latin chars from  Standard by G. Chappell & Ian Chai
+Hebrew chars from Jerusalem by Gedaliah Friedenberg <gfrieden@nyx.cs.du.edu>
+        Use "ilhebrew.flc" for Hebrew keyboard mapping
+        Use "ushebrew.flc" for U.S.-style keyboard mapping ("febrew" script)
+        Use "8859-8.flc" for ISO 8859-8 text
+        Or use UTF-8
+WARNING! FIGfonts aren't bidirectional; this is strictly right-to-left 
+        (by default) even for the Latin characters.
+figlet release 2.2 -- November 1996
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin.  May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@@
+  _ @
+ | |@
+ | |@
+ |_|@
+ (_)@
+    @@
+  _ _ @
+ ( | )@
+  V V @
+   $  @
+   $  @
+      @@
+    _  _   @
+  _| || |_ @
+ |_  ..  _|@
+ |_      _|@
+   |_||_|  @
+           @@
+   _  @
+  | | @
+ / __)@
+ \__ \@
+ (   /@
+  |_| @@
+  _  __@
+ (_)/ /@
+   / / @
+  / /_ @
+ /_/(_)@
+       @@
+   ___   @
+  ( _ )  @
+  / _ \/\@
+ | (_>  <@
+  \___/\/@
+         @@
+  _ @
+ ( )@
+ |/ @
+  $ @
+  $ @
+    @@
+   __@
+  / /@
+ | | @
+ | | @
+ | | @
+  \_\@@
+ __  @
+ \ \ @
+  | |@
+  | |@
+  | |@
+ /_/ @@
+       @
+ __/\__@
+ \    /@
+ /_  _\@
+   \/  @
+       @@
+        @
+    _   @
+  _| |_ @
+ |_   _|@
+   |_|  @
+        @@
+    @
+    @
+    @
+  _ @
+ ( )@
+ |/ @@
+        @
+        @
+  _____ @
+ |_____|@
+    $   @
+        @@
+    @
+    @
+    @
+  _ @
+ (_)@
+    @@
+     __@
+    / /@
+   / / @
+  / /  @
+ /_/   @
+       @@
+   ___  @
+  / _ \ @
+ | | | |@
+ | |_| |@
+  \___/ @
+        @@
+  _ @
+ / |@
+ | |@
+ | |@
+ |_|@
+    @@
+  ____  @
+ |___ \ @
+   __) |@
+  / __/ @
+ |_____|@
+        @@
+  _____ @
+ |___ / @
+   |_ \ @
+  ___) |@
+ |____/ @
+        @@
+  _  _   @
+ | || |  @
+ | || |_ @
+ |__   _|@
+    |_|  @
+         @@
+  ____  @
+ | ___| @
+ |___ \ @
+  ___) |@
+ |____/ @
+        @@
+   __   @
+  / /_  @
+ | '_ \ @
+ | (_) |@
+  \___/ @
+        @@
+  _____ @
+ |___  |@
+    / / @
+   / /  @
+  /_/   @
+        @@
+   ___  @
+  ( _ ) @
+  / _ \ @
+ | (_) |@
+  \___/ @
+        @@
+   ___  @
+  / _ \ @
+ | (_) |@
+  \__, |@
+    /_/ @
+        @@
+    @
+  _ @
+ (_)@
+  _ @
+ (_)@
+    @@
+    @
+  _ @
+ (_)@
+  _ @
+ ( )@
+ |/ @@
+   __@
+  / /@
+ / / @
+ \ \ @
+  \_\@
+     @@
+        @
+  _____ @
+ |_____|@
+ |_____|@
+    $   @
+        @@
+ __  @
+ \ \ @
+  \ \@
+  / /@
+ /_/ @
+     @@
+  ___ @
+ |__ \@
+   / /@
+  |_| @
+  (_) @
+      @@
+    ____  @
+   / __ \ @
+  / / _` |@
+ | | (_| |@
+  \ \__,_|@
+   \____/ @@
+     _    @
+    / \   @
+   / _ \  @
+  / ___ \ @
+ /_/   \_\@
+          @@
+  ____  @
+ | __ ) @
+ |  _ \ @
+ | |_) |@
+ |____/ @
+        @@
+   ____ @
+  / ___|@
+ | |    @
+ | |___ @
+  \____|@
+        @@
+  ____  @
+ |  _ \ @
+ | | | |@
+ | |_| |@
+ |____/ @
+        @@
+  _____ @
+ | ____|@
+ |  _|  @
+ | |___ @
+ |_____|@
+        @@
+  _____ @
+ |  ___|@
+ | |_   @
+ |  _|  @
+ |_|    @
+        @@
+   ____ @
+  / ___|@
+ | |  _ @
+ | |_| |@
+  \____|@
+        @@
+  _   _ @
+ | | | |@
+ | |_| |@
+ |  _  |@
+ |_| |_|@
+        @@
+  ___ @
+ |_ _|@
+  | | @
+  | | @
+ |___|@
+      @@
+      _ @
+     | |@
+  _  | |@
+ | |_| |@
+  \___/ @
+        @@
+  _  __@
+ | |/ /@
+ | ' / @
+ | . \ @
+ |_|\_\@
+       @@
+  _     @
+ | |    @
+ | |    @
+ | |___ @
+ |_____|@
+        @@
+  __  __ @
+ |  \/  |@
+ | |\/| |@
+ | |  | |@
+ |_|  |_|@
+         @@
+  _   _ @
+ | \ | |@
+ |  \| |@
+ | |\  |@
+ |_| \_|@
+        @@
+   ___  @
+  / _ \ @
+ | | | |@
+ | |_| |@
+  \___/ @
+        @@
+  ____  @
+ |  _ \ @
+ | |_) |@
+ |  __/ @
+ |_|    @
+        @@
+   ___  @
+  / _ \ @
+ | | | |@
+ | |_| |@
+  \__\_\@
+        @@
+  ____  @
+ |  _ \ @
+ | |_) |@
+ |  _ < @
+ |_| \_\@
+        @@
+  ____  @
+ / ___| @
+ \___ \ @
+  ___) |@
+ |____/ @
+        @@
+  _____ @
+ |_   _|@
+   | |  @
+   | |  @
+   |_|  @
+        @@
+  _   _ @
+ | | | |@
+ | | | |@
+ | |_| |@
+  \___/ @
+        @@
+ __     __@
+ \ \   / /@
+  \ \ / / @
+   \ V /  @
+    \_/   @
+          @@
+ __        __@
+ \ \      / /@
+  \ \ /\ / / @
+   \ V  V /  @
+    \_/\_/   @
+             @@
+ __  __@
+ \ \/ /@
+  \  / @
+  /  \ @
+ /_/\_\@
+       @@
+ __   __@
+ \ \ / /@
+  \ V / @
+   | |  @
+   |_|  @
+        @@
+  _____@
+ |__  /@
+   / / @
+  / /_ @
+ /____|@
+       @@
+  __ @
+ | _|@
+ | | @
+ | | @
+ | | @
+ |__|@@
+ __    @
+ \ \   @
+  \ \  @
+   \ \ @
+    \_\@
+       @@
+  __ @
+ |_ |@
+  | |@
+  | |@
+  | |@
+ |__|@@
+  /\ @
+ |/\|@
+   $ @
+   $ @
+   $ @
+     @@
+        @
+        @
+        @
+        @
+  _____ @
+ |_____|@@
+  _ @
+ ( )@
+  \|@
+  $ @
+  $ @
+    @@
+        @
+   __ _ @
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @@
+  _     @
+ | |__  @
+ | '_ \ @
+ | |_) |@
+ |_.__/ @
+        @@
+       @
+   ___ @
+  / __|@
+ | (__ @
+  \___|@
+       @@
+      _ @
+   __| |@
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @@
+       @
+   ___ @
+  / _ \@
+ |  __/@
+  \___|@
+       @@
+   __ @
+  / _|@
+ | |_ @
+ |  _|@
+ |_|  @
+      @@
+        @
+   __ _ @
+  / _` |@
+ | (_| |@
+  \__, |@
+  |___/ @@
+  _     @
+ | |__  @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+        @@
+  _ @
+ (_)@
+ | |@
+ | |@
+ |_|@
+    @@
+    _ @
+   (_)@
+   | |@
+   | |@
+  _/ |@
+ |__/ @@
+  _    @
+ | | __@
+ | |/ /@
+ |   < @
+ |_|\_\@
+       @@
+  _ @
+ | |@
+ | |@
+ | |@
+ |_|@
+    @@
+            @
+  _ __ ___  @
+ | '_ ` _ \ @
+ | | | | | |@
+ |_| |_| |_|@
+            @@
+        @
+  _ __  @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+        @@
+        @
+   ___  @
+  / _ \ @
+ | (_) |@
+  \___/ @
+        @@
+        @
+  _ __  @
+ | '_ \ @
+ | |_) |@
+ | .__/ @
+ |_|    @@
+        @
+   __ _ @
+  / _` |@
+ | (_| |@
+  \__, |@
+     |_|@@
+       @
+  _ __ @
+ | '__|@
+ | |   @
+ |_|   @
+       @@
+      @
+  ___ @
+ / __|@
+ \__ \@
+ |___/@
+      @@
+  _   @
+ | |_ @
+ | __|@
+ | |_ @
+  \__|@
+      @@
+        @
+  _   _ @
+ | | | |@
+ | |_| |@
+  \__,_|@
+        @@
+        @
+ __   __@
+ \ \ / /@
+  \ V / @
+   \_/  @
+        @@
+           @
+ __      __@
+ \ \ /\ / /@
+  \ V  V / @
+   \_/\_/  @
+           @@
+       @
+ __  __@
+ \ \/ /@
+  >  < @
+ /_/\_\@
+       @@
+        @
+  _   _ @
+ | | | |@
+ | |_| |@
+  \__, |@
+  |___/ @@
+      @
+  ____@
+ |_  /@
+  / / @
+ /___|@
+      @@
+    __@
+   / /@
+  | | @
+ < <  @
+  | | @
+   \_\@@
+  _ @
+ | |@
+ | |@
+ | |@
+ | |@
+ |_|@@
+ __   @
+ \ \  @
+  | | @
+   > >@
+  | | @
+ /_/  @@
+  /\/|@
+ |/\/ @
+   $  @
+   $  @
+   $  @
+      @@
+  _   _ @
+ (_)_(_)@
+   /_\  @
+  / _ \ @
+ /_/ \_\@
+        @@
+  _   _ @
+ (_)_(_)@
+  / _ \ @
+ | |_| |@
+  \___/ @
+        @@
+  _   _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+  \___/ @
+        @@
+  _   _ @
+ (_)_(_)@
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @@
+  _   _ @
+ (_)_(_)@
+  / _ \ @
+ | (_) |@
+  \___/ @
+        @@
+  _   _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+  \__,_|@
+        @@
+   ___ @
+  / _ \@
+ | |/ /@
+ | |\ \@
+ | ||_/@
+ |_|   @@
+160  NO-BREAK SPACE
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@@
+173  SOFT HYPHEN
+        @
+        @
+  _____ @
+ |_____|@
+    $   @
+        @@
+196  LATIN CAPITAL LETTER A WITH DIAERESIS
+  _   _ @
+ (_)_(_)@
+   /_\  @
+  / _ \ @
+ /_/ \_\@
+        @@
+214  LATIN CAPITAL LETTER O WITH DIAERESIS
+  _   _ @
+ (_)_(_)@
+  / _ \ @
+ | |_| |@
+  \___/ @
+        @@
+220  LATIN CAPITAL LETTER U WITH DIAERESIS
+  _   _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+  \___/ @
+        @@
+223  LATIN SMALL LETTER SHARP S
+   ___ @
+  / _ \@
+ | |/ /@
+ | |\ \@
+ | ||_/@
+ |_|   @@
+228  LATIN SMALL LETTER A WITH DIAERESIS
+  _   _ @
+ (_)_(_)@
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @@
+246  LATIN SMALL LETTER O WITH DIAERESIS
+  _   _ @
+ (_)_(_)@
+  / _ \ @
+ | (_) |@
+  \___/ @
+        @@
+252  LATIN SMALL LETTER U WITH DIAERESIS
+  _   _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+  \__,_|@
+        @@
+0x05D0  HEBREW LETTER ALEF
+ __   __@
+ \ \ / /@
+ |  V / @
+ | |\ \ @
+ |_| \_\@
+        @@
+0x05D1  HEBREW LETTER BET
+   ______  @
+  |____  | @
+       | | @
+  _____| |_@
+ /________/@
+           @@
+0x05D2  HEBREW LETTER GIMEL
+    ____  @
+   |__  | @
+      | | @
+  ____| | @
+ /____/\_\@
+          @@
+0x05D3  HEBREW LETTER DALET
+  _______ @
+ |____   |@
+      | | @
+      | | @
+      |_| @
+          @@
+0x05D4  HEBREW LETTER HE
+  _______ @
+ |_____  |@
+   _   | |@
+  | |  | |@
+  |_|  |_|@
+          @@
+0x05D5  HEBREW LETTER VAV
+  ___ @
+ |_  |@
+   | |@
+   | |@
+   |_|@
+      @@
+0x05D6  HEBREW LETTER ZAYIN
+ ________ @
+ \__   __\@
+    | |   @
+    | |   @
+    |_|   @
+          @@
+0x05D7  HEBREW LETTER HET
+  _______ @
+ |.  __  |@
+  | |  | |@
+  | |  | |@
+  |_|  |_|@
+          @@
+0x05D8  HEBREW LETTER TET
+  __   ___ @
+ |. | /_  |@
+  | |   | |@
+  | |___| |@
+  |_______|@
+           @@
+0x05D9  HEBREW LETTER YOD
+  ___ @
+ |_  |@
+   |_|@
+    $ @
+    $ @
+      @@
+0x05DA  HEBREW LETTER FINAL KAF
+  _______ @
+ |____  .|@
+      | | @
+      | | @
+      | | @
+      |_| @@
+0x05DB  HEBREW LETTER KAF
+  _____  @
+ |____ \ @
+      | |@
+  ____| |@
+ |_____/ @
+         @@
+0x05DC  HEBREW LETTER LAMED
+ |=|____ @
+ |____  |@
+     / / @
+    / /  @
+   /_/   @
+         @@
+0x05DD  HEBREW LETTER FINAL MEM
+  ________ @
+ |.  ___  |@
+  | |   | |@
+  | |___| |@
+  |_______|@
+           @@
+0x05DE  HEBREW LETTER MEM
+  _______ @
+ |.  __  |@
+  | |  | |@
+  | | _| |@
+  |_||___|@
+          @@
+0x05DF  HEBREW LETTER FINAL NUN
+  ___ @
+ |_  |@
+   | |@
+   | |@
+   | |@
+   |_|@@
+0x05E0  HEBREW LETTER NUN
+   ___ @
+  |_  |@
+    | |@
+  __| |@
+ |____|@
+       @@
+0x05E1  HEBREW LETTER SAMEKH
+  _______ @
+ |.  __  |@
+  | |  | |@
+  | |__/ |@
+  |_____/ @
+          @@
+0x05E2  HEBREW LETTER AYIN
+  __   _ @
+  \ \ | |@
+   \ \| |@
+  __\ ` |@
+ |______|@
+         @@
+0x05E3  HEBREW LETTER FINAL PE
+  ______ @
+ |  __  |@
+ | |_ | |@
+ |___|| |@
+      | |@
+      |_|@@
+0x05E4  HEBREW LETTER PE
+  _______ @
+ |  ___  |@
+  \_\  | |@
+  _____| |@
+ |_______|@
+          @@
+0x05E5  HEBREW LETTER FINAL TSADI
+  __   _ @
+ |. | | |@
+  | | // @
+  | |//  @
+  | |    @
+  |_|    @@
+0x05E6  HEBREW LETTER TSADI
+   __   __.@
+   \ \ / / @
+    \ V /  @
+  ___\  \  @
+ |______|  @
+           @@
+0x05E7  HEBREW LETTER QOF
+  ______ @
+ |____  |@
+   _  | |@
+  | | |_|@
+  | |    @
+  |_|    @@
+0x05E8  HEBREW LETTER RESH
+  ______ @
+ |____  |@
+      | |@
+      | |@
+      |_|@
+         @@
+0x05E9  HEBREW LETTER SHIN
+  _   _   _ @
+ | | | | | |@
+ | | | | | |@
+ | |/ /_/ / @
+ |_______/  @
+            @@
+0x05EA  HEBREW LETTER TAV
+    ______ @
+   |  __  |@
+   | |  | |@
+  _| |  | |@
+ |___|  |_|@
+           @@
+0x2721  STAR OF DAVID
+       @
+ __/\__@
+ \    /@
+ /_  _\@
+   \/  @
+       @@
+-0x0002  
+aleph = t, bet/vet = c, gimel = d, dalet = s, he = v, vav = u, zayin = z  @
+het = j, tet = y, yod = h, kaf/chaf = f, final kaf = l, lamed = k, mem = n@
+final mem = o, nun = b, final nun = i, samekh = x, ayin = g, pe/fe = p,   @
+final pe = ;, tsadi = m, final tsadi = ., qof = e, resh = r, shin/sin = a @
+tav = , comma = ', period = /, semicolon = `, slash = q, apostrophe = w   @
+Star of David = *                                                         @@
+-0x0003  
+aleph = a, bet/vet = b, gimel = g, dalet = d, he = h, vav = v, zayin = z  @
+het = c, tet = t, yod = y, kaf/chaf = k, final kaf = f, lamed = l, mem = m@
+final mem = o, nun = n, final nun = i, samekh = e, ayin = _, pe/fe = p,   @
+final pe = u, tsadi = j, final tsadi = w, qof = q, resh = r, shin/sin = s @
+tav = x                                                                   @
+Star of David = *                                                         @@
diff --git a/externals/figlet/fonts/jis0201.flc b/externals/figlet/fonts/jis0201.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/jis0201.flc
@@ -0,0 +1,249 @@
+# JIS X 0201 (1976) mappings for ISO 2022 usage.
+
+# Invoke JIS Roman in G0/GL, and JIS Katakana ("halfwidth" katakana, but
+# we map it to fullwidth for compatibility with existing fonts) in
+# G1/GR.
+#
+# This means that the Katakana is available in the high bytes, or you
+# can use SHIFT OUT (0x1E) to cause the low-value bytes (in the ASCII
+# code value range) to invoke Katakana characters (using SHIFT IN (0x1F)
+# to switch back). Of course, this being ISO 2022, you can also use the
+# escape sequences ESC ( I and ESC ( J to shift it in and out.
+
+g 0 94 J
+g 1 94 I
+g L 0
+g R 1
+
+# JIS Roman: ISO 646 variant just like ASCII, but with <Yen> for
+# <backslash>, and <overline> for <tilde>.
+
+0x4A0020    0x20
+0x4A0021    0x21
+0x4A0022    0x22
+0x4A0023    0x23
+0x4A0024    0x24
+0x4A0025    0x25
+0x4A0026    0x26
+0x4A0027    0x27
+0x4A0028    0x28
+0x4A0029    0x29
+0x4A002A    0x2A
+0x4A002B    0x2B
+0x4A002C    0x2C
+0x4A002D    0x2D
+0x4A002E    0x2E
+0x4A002F    0x2F
+0x4A0030    0x30
+0x4A0031    0x31
+0x4A0032    0x32
+0x4A0033    0x33
+0x4A0034    0x34
+0x4A0035    0x35
+0x4A0036    0x36
+0x4A0037    0x37
+0x4A0038    0x38
+0x4A0039    0x39
+0x4A003A    0x3A
+0x4A003B    0x3B
+0x4A003C    0x3C
+0x4A003D    0x3D
+0x4A003E    0x3E
+0x4A003F    0x3F
+0x4A0040    0x40
+0x4A0041    0x41
+0x4A0042    0x42
+0x4A0043    0x43
+0x4A0044    0x44
+0x4A0045    0x45
+0x4A0046    0x46
+0x4A0047    0x47
+0x4A0048    0x48
+0x4A0049    0x49
+0x4A004A    0x4A
+0x4A004B    0x4B
+0x4A004C    0x4C
+0x4A004D    0x4D
+0x4A004E    0x4E
+0x4A004F    0x4F
+0x4A0050    0x50
+0x4A0051    0x51
+0x4A0052    0x52
+0x4A0053    0x53
+0x4A0054    0x54
+0x4A0055    0x55
+0x4A0056    0x56
+0x4A0057    0x57
+0x4A0058    0x58
+0x4A0059    0x59
+0x4A005A    0x5A
+0x4A005B    0x5B
+0x4A005C    0xA5    # \ -> Yen
+0x4A005D    0x5D
+0x4A005E    0x5E
+0x4A005F    0x5F
+0x4A0060    0x60
+0x4A0061    0x61
+0x4A0062    0x62
+0x4A0063    0x63
+0x4A0064    0x64
+0x4A0065    0x65
+0x4A0066    0x66
+0x4A0067    0x67
+0x4A0068    0x68
+0x4A0069    0x69
+0x4A006A    0x6A
+0x4A006B    0x6B
+0x4A006C    0x6C
+0x4A006D    0x6D
+0x4A006E    0x6E
+0x4A006F    0x6F
+0x4A0070    0x70
+0x4A0071    0x71
+0x4A0072    0x72
+0x4A0073    0x73
+0x4A0074    0x74
+0x4A0075    0x75
+0x4A0076    0x76
+0x4A0077    0x77
+0x4A0078    0x78
+0x4A0079    0x79
+0x4A007A    0x7A
+0x4A007B    0x7B
+0x4A007C    0x7C
+0x4A007D    0x7D
+0x4A007E    0x203E
+
+
+# Mappings for JIS Katakana.
+
+0x490021    0x3002
+0x490022    0x300C
+0x490023    0x300D
+0x490024    0x3001
+0x490025    0x30FB
+0x490026    0x30F2
+0x490027    0x30A1
+0x490028    0x30A3
+0x490029    0x30A5
+0x49002A    0x30A7
+0x49002B    0x30A9
+0x49002C    0x30E3
+0x49002D    0x30E5
+0x49002E    0x30E7
+0x49002F    0x30C3
+0x490030    0x30FC
+0x490031    0x30A2
+0x490032    0x30A4
+0x490033    0x30A6
+0x490034    0x30A8
+0x490035    0x30AA
+0x490036    0x30AB
+0x490037    0x30AD
+0x490038    0x30AF
+0x490039    0x30B1
+0x49003A    0x30B3
+0x49003B    0x30B5
+0x49003C    0x30B7
+0x49003D    0x30B9
+0x49003E    0x30BB
+0x49003F    0x30BD
+0x490040    0x30BF
+0x490041    0x30C1
+0x490042    0x30C4
+0x490043    0x30C6
+0x490044    0x30C8
+0x490045    0x30CA
+0x490046    0x30CB
+0x490047    0x30CC
+0x490048    0x30CD
+0x490049    0x30CE
+0x49004A    0x30CF
+0x49004B    0x30D2
+0x49004C    0x30D5
+0x49004D    0x30D8
+0x49004E    0x30DB
+0x49004F    0x30DE
+0x490050    0x30DF
+0x490051    0x30E0
+0x490052    0x30E1
+0x490053    0x30E2
+0x490054    0x30E4
+0x490055    0x30E6
+0x490056    0x30E8
+0x490057    0x30E9
+0x490058    0x30EA
+0x490059    0x30EB
+0x49005A    0x30EC
+0x49005B    0x30ED
+0x49005C    0x30EF
+0x49005D    0x30F3
+0x49005E    0x309B
+0x49005F    0x309C
+
+# For reference, here's what they'd map to if we were mapping to
+# halfwidth Katakana.
+#
+# 0x490021   0xFF61
+# 0x490022   0xFF62
+# 0x490023   0xFF63
+# 0x490024   0xFF64
+# 0x490025   0xFF65
+# 0x490026   0xFF66
+# 0x490027   0xFF67
+# 0x490028   0xFF68
+# 0x490029   0xFF69
+# 0x49002A   0xFF6A
+# 0x49002B   0xFF6B
+# 0x49002C   0xFF6C
+# 0x49002D   0xFF6D
+# 0x49002E   0xFF6E
+# 0x49002F   0xFF6F
+# 0x490030   0xFF70
+# 0x490031   0xFF71
+# 0x490032   0xFF72
+# 0x490033   0xFF73
+# 0x490034   0xFF74
+# 0x490035   0xFF75
+# 0x490036   0xFF76
+# 0x490037   0xFF77
+# 0x490038   0xFF78
+# 0x490039   0xFF79
+# 0x49003A   0xFF7A
+# 0x49003B   0xFF7B
+# 0x49003C   0xFF7C
+# 0x49003D   0xFF7D
+# 0x49003E   0xFF7E
+# 0x49003F   0xFF7F
+# 0x490040   0xFF80
+# 0x490041   0xFF81
+# 0x490042   0xFF82
+# 0x490043   0xFF83
+# 0x490044   0xFF84
+# 0x490045   0xFF85
+# 0x490046   0xFF86
+# 0x490047   0xFF87
+# 0x490048   0xFF88
+# 0x490049   0xFF89
+# 0x49004A   0xFF8A
+# 0x49004B   0xFF8B
+# 0x49004C   0xFF8C
+# 0x49004D   0xFF8D
+# 0x49004E   0xFF8E
+# 0x49004F   0xFF8F
+# 0x490050   0xFF90
+# 0x490051   0xFF91
+# 0x490052   0xFF92
+# 0x490053   0xFF93
+# 0x490054   0xFF94
+# 0x490055   0xFF95
+# 0x490056   0xFF96
+# 0x490057   0xFF97
+# 0x490058   0xFF98
+# 0x490059   0xFF99
+# 0x49005A   0xFF9A
+# 0x49005B   0xFF9B
+# 0x49005C   0xFF9C
+# 0x49005D   0xFF9D
+# 0x49005E   0xFF9E
+# 0x49005F   0xFF9F
diff --git a/externals/figlet/fonts/koi8r.flc b/externals/figlet/fonts/koi8r.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/koi8r.flc
@@ -0,0 +1,128 @@
+t \0x80 \0x2500
+t \0x81 \0x2502
+t \0x82 \0x250c
+t \0x83 \0x2510
+t \0x84 \0x2514
+t \0x85 \0x2518
+t \0x86 \0x251c
+t \0x87 \0x2524
+t \0x88 \0x252c
+t \0x89 \0x2534
+t \0x8a \0x253c
+t \0x8b \0x2580
+t \0x8c \0x2584
+t \0x8d \0x2588
+t \0x8e \0x258c
+t \0x8f \0x2590
+t \0x90 \0x2591
+t \0x91 \0x2592
+t \0x92 \0x2593
+t \0x93 \0x2320
+t \0x94 \0x25a0
+t \0x95 \0x2219
+t \0x96 \0x221a
+t \0x97 \0x2248
+t \0x98 \0x2264
+t \0x99 \0x2265
+t \0x9a \0x00a0
+t \0x9b \0x2321
+t \0x9c \0x00b0
+t \0x9d \0x00b2
+t \0x9e \0x00b7
+t \0x9f \0x00f7
+t \0xa0 \0x2550
+t \0xa1 \0x2551
+t \0xa2 \0x2552
+t \0xa3 \0x0451
+t \0xa4 \0x2553
+t \0xa5 \0x2554
+t \0xa6 \0x2555
+t \0xa7 \0x2556
+t \0xa8 \0x2557
+t \0xa9 \0x2558
+t \0xaa \0x2559
+t \0xab \0x255a
+t \0xac \0x255b
+t \0xad \0x255c
+t \0xae \0x255d
+t \0xaf \0x255e
+t \0xb0 \0x255f
+t \0xb1 \0x2560
+t \0xb2 \0x2561
+t \0xb3 \0x0401
+t \0xb4 \0x2562
+t \0xb5 \0x2563
+t \0xb6 \0x2564
+t \0xb7 \0x2565
+t \0xb8 \0x2566
+t \0xb9 \0x2567
+t \0xba \0x2568
+t \0xbb \0x2569
+t \0xbc \0x256a
+t \0xbd \0x256b
+t \0xbe \0x256c
+t \0xbf \0x00a9
+t \0xc0 \0x044e
+t \0xc1 \0x0430
+t \0xc2 \0x0431
+t \0xc3 \0x0446
+t \0xc4 \0x0434
+t \0xc5 \0x0435
+t \0xc6 \0x0444
+t \0xc7 \0x0433
+t \0xc8 \0x0445
+t \0xc9 \0x0438
+t \0xca \0x0439
+t \0xcb \0x043a
+t \0xcc \0x043b
+t \0xcd \0x043c
+t \0xce \0x043d
+t \0xcf \0x043e
+t \0xd0 \0x043f
+t \0xd1 \0x044f
+t \0xd2 \0x0440
+t \0xd3 \0x0441
+t \0xd4 \0x0442
+t \0xd5 \0x0443
+t \0xd6 \0x0436
+t \0xd7 \0x0432
+t \0xd8 \0x044c
+t \0xd9 \0x044b
+t \0xda \0x0437
+t \0xdb \0x0448
+t \0xdc \0x044d
+t \0xdd \0x0449
+t \0xde \0x0447
+t \0xdf \0x044a
+t \0xe0 \0x042e
+t \0xe1 \0x0410
+t \0xe2 \0x0411
+t \0xe3 \0x0426
+t \0xe4 \0x0414
+t \0xe5 \0x0415
+t \0xe6 \0x0424
+t \0xe7 \0x0413
+t \0xe8 \0x0425
+t \0xe9 \0x0418
+t \0xea \0x0419
+t \0xeb \0x041a
+t \0xec \0x041b
+t \0xed \0x041c
+t \0xee \0x041d
+t \0xef \0x041e
+t \0xf0 \0x041f
+t \0xf1 \0x042f
+t \0xf2 \0x0420
+t \0xf3 \0x0421
+t \0xf4 \0x0422
+t \0xf5 \0x0423
+t \0xf6 \0x0416
+t \0xf7 \0x0412
+t \0xf8 \0x042c
+t \0xf9 \0x042b
+t \0xfa \0x0417
+t \0xfb \0x0428
+t \0xfc \0x042d
+t \0xfd \0x0429
+t \0xfe \0x0427
+t \0xff \0x042a
diff --git a/externals/figlet/fonts/lean.flf b/externals/figlet/fonts/lean.flf
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/lean.flf
@@ -0,0 +1,1691 @@
+flf2a$ 8 6 27 0 10 0 576 96
+Lean by Glenn Chappell 4/93 -- based on various .sig's
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin.  May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+       $  $@
+      $  $ @
+     $  $  @
+    $  $   @
+   $  $    @
+  $  $     @
+ $  $      @
+$  $       @@
+       $$@
+    _/ $ @
+   _/ $  @
+  _/ $   @
+   $$    @
+_/ $     @
+ $$      @
+         @@
+   _/  _/ $@
+  _/  _/ $ @
+       $$  @
+  $$       @
+ $$        @
+$$         @
+           @
+           @@
+            $$ @
+     _/  _/   $@
+  _/_/_/_/_/ $ @
+   _/  _/   $  @
+_/_/_/_/_/ $   @
+ _/  _/   $    @
+      $$       @
+               @@
+         $$ @
+      _/   $@
+   _/_/_/ $ @
+  _/_/   $  @
+   _/_/ $   @
+_/_/_/ $    @
+ _/   $     @
+  $$        @@
+               $$@
+    _/_/    _/ $ @
+   _/_/  _/   $  @
+      _/     $   @
+   _/  _/_/ $    @
+_/    _/_/ $     @
+         $$      @
+                 @@
+        $$    @
+     _/   $   @
+  _/  _/     $@
+   _/_/  _/ $ @
+_/    _/   $  @
+ _/_/  _/ $   @
+        $$    @
+              @@
+       _/ $@
+    _/   $ @
+     $$    @
+  $$       @
+ $$        @
+$$         @
+           @
+           @@
+       _/ $@
+    _/   $ @
+   _/ $    @
+  _/ $     @
+ _/ $      @
+_/   $     @
+ _/ $      @
+  $$       @@
+      _/   $@
+       _/ $ @
+      _/ $  @
+     _/ $   @
+    _/ $    @
+   _/ $     @
+_/   $      @
+ $$         @@
+               $$@
+    _/  _/  _/ $ @
+     _/_/_/   $  @
+  _/_/_/_/_/ $   @
+   _/_/_/   $    @
+_/  _/  _/ $     @
+         $$      @
+                 @@
+         $$  @
+      _/ $   @
+     _/     $@
+_/_/_/_/_/ $ @
+   _/     $  @
+  _/ $       @
+   $$        @
+             @@
+        @
+        @
+        @
+        @
+      $$@
+   _/ $ @
+_/   $  @
+ $$     @@
+             @
+             @
+           $$@
+_/_/_/_/_/ $ @
+         $$  @
+             @
+             @
+             @@
+     @
+     @
+     @
+     @
+   $$@
+_/ $ @
+ $$  @
+     @@
+               $$@
+            _/ $ @
+         _/   $  @
+      _/   $     @
+   _/   $        @
+_/   $           @
+ $$              @
+                 @@
+        $$ @
+     _/   $@
+  _/  _/ $ @
+ _/  _/ $  @
+_/  _/ $   @
+ _/   $    @
+  $$       @
+           @@
+       $$@
+    _/ $ @
+ _/_/ $  @
+  _/ $   @
+ _/ $    @
+_/ $     @
+ $$      @
+         @@
+           $$ @
+      _/_/   $@
+   _/    _/ $ @
+      _/   $  @
+   _/     $   @
+_/_/_/_/ $    @
+       $$     @
+              @@
+           $$ @
+    _/_/_/   $@
+         _/ $ @
+    _/_/   $  @
+       _/ $   @
+_/_/_/   $    @
+     $$       @
+              @@
+         $$@
+  _/  _/ $ @
+ _/  _/   $@
+_/_/_/_/ $ @
+   _/   $  @
+  _/ $     @
+   $$      @
+           @@
+             $$@
+    _/_/_/_/ $ @
+   _/       $  @
+  _/_/_/   $   @
+       _/ $    @
+_/_/_/   $     @
+     $$        @
+               @@
+            $$@
+     _/_/_/ $ @
+  _/       $  @
+ _/_/_/   $   @
+_/    _/ $    @
+ _/_/   $     @
+    $$        @
+              @@
+             $$@
+  _/_/_/_/_/ $ @
+         _/ $  @
+      _/   $   @
+   _/   $      @
+_/   $         @
+ $$            @
+               @@
+          $$ @
+     _/_/   $@
+  _/    _/ $ @
+   _/_/   $  @
+_/    _/ $   @
+ _/_/   $    @
+    $$       @
+             @@
+           $$ @
+      _/_/   $@
+   _/    _/ $ @
+    _/_/_/ $  @
+       _/ $   @
+_/_/_/   $    @
+     $$       @
+              @@
+        @
+      $$@
+   _/ $ @
+    $$  @
+   $$   @
+_/ $    @
+ $$     @
+        @@
+           @
+         $$@
+      _/ $ @
+       $$  @
+      $$   @
+   _/ $    @
+_/   $     @
+ $$        @@
+         $$@
+      _/ $ @
+   _/   $  @
+_/   $     @
+ _/   $    @
+  _/ $     @
+   $$      @
+           @@
+               @
+             $$@
+  _/_/_/_/_/ $ @
+           $$  @
+_/_/_/_/_/ $   @
+         $$    @
+               @
+               @@
+       $$  @
+    _/   $ @
+     _/   $@
+      _/ $ @
+   _/   $  @
+_/   $     @
+ $$        @
+           @@
+         $$ @
+    _/_/   $@
+       _/ $ @
+  _/_/   $  @
+     $$     @
+_/ $        @
+ $$         @
+            @@
+                   $$ @
+        _/_/_/_/_/   $@
+     _/          _/ $ @
+  _/    _/_/_/  _/ $  @
+ _/  _/    _/  _/ $   @
+_/    _/_/_/_/   $    @
+ _/             $     @
+  _/_/_/_/_/_/ $      @@
+           $$ @
+      _/_/   $@
+   _/    _/ $ @
+  _/_/_/_/ $  @
+ _/    _/ $   @
+_/    _/ $    @
+       $$     @
+              @@
+           $$ @
+    _/_/_/   $@
+   _/    _/ $ @
+  _/_/_/   $  @
+ _/    _/ $   @
+_/_/_/   $    @
+     $$       @
+              @@
+            $$@
+     _/_/_/ $ @
+  _/       $  @
+ _/   $       @
+_/       $    @
+ _/_/_/ $     @
+      $$      @
+              @@
+           $$ @
+    _/_/_/   $@
+   _/    _/ $ @
+  _/    _/ $  @
+ _/    _/ $   @
+_/_/_/   $    @
+     $$       @
+              @@
+             $$@
+    _/_/_/_/ $ @
+   _/       $  @
+  _/_/_/ $     @
+ _/       $    @
+_/_/_/_/ $     @
+       $$      @
+               @@
+             $$@
+    _/_/_/_/ $ @
+   _/       $  @
+  _/_/_/ $     @
+ _/     $      @
+_/ $           @
+ $$            @
+               @@
+            $$@
+     _/_/_/ $ @
+  _/       $  @
+ _/  _/_/ $   @
+_/    _/ $    @
+ _/_/_/ $     @
+      $$      @
+              @@
+             $$@
+    _/    _/ $ @
+   _/    _/ $  @
+  _/_/_/_/ $   @
+ _/    _/ $    @
+_/    _/ $     @
+       $$      @
+               @@
+           $$@
+    _/_/_/ $ @
+     _/   $  @
+    _/ $     @
+   _/   $    @
+_/_/_/ $     @
+     $$      @
+             @@
+            $$@
+         _/ $ @
+        _/ $  @
+       _/ $   @
+_/    _/ $    @
+ _/_/   $     @
+    $$        @
+              @@
+             $$@
+    _/    _/ $ @
+   _/  _/   $  @
+  _/_/   $     @
+ _/  _/   $    @
+_/    _/ $     @
+       $$      @
+               @@
+       $$  @
+    _/ $   @
+   _/ $    @
+  _/ $     @
+ _/       $@
+_/_/_/_/ $ @
+       $$  @
+           @@
+               $$@
+    _/      _/ $ @
+   _/_/  _/_/ $  @
+  _/  _/  _/ $   @
+ _/      _/ $    @
+_/      _/ $     @
+         $$      @
+                 @@
+               $$@
+    _/      _/ $ @
+   _/_/    _/ $  @
+  _/  _/  _/ $   @
+ _/    _/_/ $    @
+_/      _/ $     @
+         $$      @
+                 @@
+          $$ @
+     _/_/   $@
+  _/    _/ $ @
+ _/    _/ $  @
+_/    _/ $   @
+ _/_/   $    @
+    $$       @
+             @@
+           $$ @
+    _/_/_/   $@
+   _/    _/ $ @
+  _/_/_/   $  @
+ _/     $     @
+_/ $          @
+ $$           @
+              @@
+          $$ @
+     _/_/   $@
+  _/    _/ $ @
+ _/  _/_/ $  @
+_/    _/   $ @
+ _/_/  _/ $  @
+        $$   @
+             @@
+           $$ @
+    _/_/_/   $@
+   _/    _/ $ @
+  _/_/_/   $  @
+ _/    _/ $   @
+_/    _/ $    @
+       $$     @
+              @@
+             $$@
+      _/_/_/ $ @
+   _/       $  @
+    _/_/   $   @
+       _/ $    @
+_/_/_/   $     @
+     $$        @
+               @@
+           $$@
+_/_/_/_/_/ $ @
+   _/     $  @
+  _/ $       @
+ _/ $        @
+_/ $         @
+ $$          @
+             @@
+            $$@
+   _/    _/ $ @
+  _/    _/ $  @
+ _/    _/ $   @
+_/    _/ $    @
+ _/_/   $     @
+    $$        @
+              @@
+             $$@
+  _/      _/ $ @
+ _/      _/ $  @
+_/      _/ $   @
+ _/  _/   $    @
+  _/   $       @
+   $$          @
+               @@
+                 $$@
+  _/          _/ $ @
+ _/          _/ $  @
+_/    _/    _/ $   @
+ _/  _/  _/   $    @
+  _/  _/   $       @
+       $$          @
+                   @@
+               $$@
+    _/      _/ $ @
+     _/  _/   $  @
+      _/   $     @
+   _/  _/   $    @
+_/      _/ $     @
+         $$      @
+                 @@
+           $$@
+_/      _/ $ @
+ _/  _/   $  @
+  _/   $     @
+ _/ $        @
+_/ $         @
+ $$          @
+             @@
+               $$@
+    _/_/_/_/_/ $ @
+         _/   $  @
+      _/   $     @
+   _/       $    @
+_/_/_/_/_/ $     @
+         $$      @
+                 @@
+      _/_/ $@
+     _/   $ @
+    _/ $    @
+   _/ $     @
+  _/ $      @
+ _/   $     @
+_/_/ $      @
+   $$       @@
+   $$    @
+_/   $   @
+ _/   $  @
+  _/   $ @
+   _/   $@
+    _/ $ @
+     $$  @
+         @@
+      _/_/ $@
+       _/ $ @
+      _/ $  @
+     _/ $   @
+    _/ $    @
+   _/ $     @
+_/_/ $      @
+   $$       @@
+     _/   $@
+  _/  _/ $ @
+       $$  @
+  $$       @
+ $$        @
+$$         @
+           @
+           @@
+             @
+             @
+             @
+             @
+             @
+      $$     @
+           $$@
+_/_/_/_/_/ $ @@
+   _/   $@
+    _/ $ @
+     $$  @
+  $$     @
+ $$      @
+$$       @
+         @
+         @@
+             @
+           $$@
+    _/_/_/ $ @
+ _/    _/ $  @
+_/    _/ $   @
+ _/_/_/ $    @
+      $$     @
+             @@
+       $$    @
+    _/     $ @
+   _/_/_/   $@
+  _/    _/ $ @
+ _/    _/ $  @
+_/_/_/   $   @
+     $$      @
+             @@
+             @
+           $$@
+    _/_/_/ $ @
+ _/       $  @
+_/       $   @
+ _/_/_/ $    @
+      $$     @
+             @@
+            $$@
+         _/ $ @
+    _/_/_/ $  @
+ _/    _/ $   @
+_/    _/ $    @
+ _/_/_/ $     @
+      $$      @
+              @@
+            @
+         $$ @
+    _/_/   $@
+ _/_/_/_/ $ @
+_/       $  @
+ _/_/_/ $   @
+      $$    @
+            @@
+           $$@
+      _/_/ $ @
+   _/     $  @
+_/_/_/_/     @
+ _/     $    @
+_/ $         @
+ $$          @
+             @@
+              @
+            $$@
+     _/_/_/ $ @
+  _/    _/ $  @
+ _/    _/ $   @
+  _/_/_/ $    @
+     _/ $     @
+_/_/   $      @@
+       $$    @
+    _/     $ @
+   _/_/_/   $@
+  _/    _/ $ @
+ _/    _/ $  @
+_/    _/ $   @
+       $$    @
+             @@
+       $$@
+    _/ $ @
+     $$  @
+  _/ $   @
+ _/ $    @
+_/ $     @
+ $$      @
+         @@
+           $$@
+        _/ $ @
+         $$  @
+      _/ $   @
+     _/ $    @
+    _/ $     @
+   _/ $      @
+_/   $       @@
+       $$   @
+    _/     $@
+   _/  _/ $ @
+  _/_/   $  @
+ _/  _/   $ @
+_/    _/ $  @
+       $$   @
+            @@
+       $$@
+    _/ $ @
+   _/ $  @
+  _/ $   @
+ _/ $    @
+_/ $     @
+ $$      @
+         @@
+                   @
+                $$ @
+   _/_/_/  _/_/   $@
+  _/    _/    _/ $ @
+ _/    _/    _/ $  @
+_/    _/    _/ $   @
+             $$    @
+                   @@
+             @
+          $$ @
+   _/_/_/   $@
+  _/    _/ $ @
+ _/    _/ $  @
+_/    _/ $   @
+       $$    @
+             @@
+            @
+         $$ @
+    _/_/   $@
+ _/    _/ $ @
+_/    _/ $  @
+ _/_/   $   @
+    $$      @
+            @@
+               @
+            $$ @
+     _/_/_/   $@
+    _/    _/ $ @
+   _/    _/ $  @
+  _/_/_/   $   @
+ _/     $      @
+_/ $           @@
+             @
+           $$@
+    _/_/_/ $ @
+ _/    _/ $  @
+_/    _/ $   @
+ _/_/_/ $    @
+    _/ $     @
+   _/ $      @@
+              @
+            $$@
+   _/  _/_/ $ @
+  _/_/     $  @
+ _/   $       @
+_/ $          @
+ $$           @
+              @@
+              @
+            $$@
+     _/_/_/ $ @
+  _/_/     $  @
+     _/_/ $   @
+_/_/_/   $    @
+     $$       @
+              @@
+      $$   @
+   _/     $@
+_/_/_/_/   @
+ _/     $  @
+_/     $   @
+ _/_/ $    @
+    $$     @
+           @@
+             @
+           $$@
+  _/    _/ $ @
+ _/    _/ $  @
+_/    _/ $   @
+ _/_/_/ $    @
+      $$     @
+             @@
+              @
+            $$@
+ _/      _/ $ @
+_/      _/ $  @
+ _/  _/   $   @
+  _/   $      @
+   $$         @
+              @@
+                      @
+                    $$@
+ _/      _/      _/ $ @
+_/      _/      _/ $  @
+ _/  _/  _/  _/   $   @
+  _/      _/   $      @
+           $$         @
+                      @@
+              @
+            $$@
+   _/    _/ $ @
+    _/_/   $  @
+ _/    _/ $   @
+_/    _/ $    @
+       $$     @
+              @@
+              @
+            $$@
+   _/    _/ $ @
+  _/    _/ $  @
+ _/    _/ $   @
+  _/_/_/ $    @
+     _/ $     @
+_/_/   $      @@
+              @
+            $$@
+   _/_/_/_/ $ @
+      _/   $  @
+   _/     $   @
+_/_/_/_/ $    @
+       $$     @
+              @@
+       _/ $@
+    _/   $ @
+   _/   $  @
+_/   $     @
+ _/   $    @
+_/   $     @
+ _/ $      @
+  $$       @@
+       _/ $@
+      _/ $ @
+     _/ $  @
+    _/ $   @
+   _/ $    @
+  _/ $     @
+ _/ $      @
+_/ $       @@
+      _/   $ @
+       _/   $@
+      _/   $ @
+       _/ $  @
+    _/   $   @
+   _/   $    @
+_/   $       @
+ $$          @@
+   _/  _/ $@
+_/  _/   $ @
+     $$    @
+  $$       @
+ $$        @
+$$         @
+           @
+           @@
+     _/    _/ $@
+            $$ @
+     _/_/   $  @
+  _/    _/ $   @
+ _/_/_/_/ $    @
+_/    _/ $     @
+       $$      @
+               @@
+    _/    _/ $@
+           $$ @
+    _/_/   $  @
+ _/    _/ $   @
+_/    _/ $    @
+ _/_/   $     @
+    $$        @
+              @@
+    _/    _/ $@
+           $$ @
+  _/    _/ $  @
+ _/    _/ $   @
+_/    _/ $    @
+ _/_/   $     @
+    $$        @
+              @@
+    _/    _/ $@
+           $$ @
+    _/_/_/ $  @
+ _/    _/ $   @
+_/    _/ $    @
+ _/_/_/ $     @
+      $$      @
+              @@
+    _/    _/ $@
+           $$ @
+    _/_/   $  @
+ _/    _/ $   @
+_/    _/ $    @
+ _/_/   $     @
+    $$        @
+              @@
+    _/    _/ $@
+           $$ @
+  _/    _/ $  @
+ _/    _/ $   @
+_/    _/ $    @
+ _/_/_/ $     @
+      $$      @
+              @@
+            $$ @
+       _/_/   $@
+    _/    _/ $ @
+   _/  _/   $  @
+  _/    _/ $   @
+ _/  _/   $    @
+_/     $       @
+ $$            @@
+160  NO-BREAK SPACE
+       $  $@
+      $  $ @
+     $  $  @
+    $  $   @
+   $  $    @
+  $  $     @
+ $  $      @
+$  $       @@
+161  INVERTED EXCLAMATION MARK
+       $$@
+    _/ $ @
+     $$  @
+  _/ $   @
+ _/ $    @
+_/ $     @
+ $$      @
+         @@
+162  CENT SIGN
+          $$ @
+       _/   $@
+    _/_/_/ $ @
+ _/  _/   $  @
+_/  _/   $   @
+ _/_/_/ $    @
+  _/   $     @
+   $$        @@
+163  POUND SIGN
+              $$ @
+         _/_/   $@
+      _/    _/ $ @
+   _/_/_/     $  @
+    _/         $ @
+ _/_/_/    _/ $  @
+_/_/  _/_/   $   @
+                 @@
+164  CURRENCY SIGN
+                  $$@
+     _/        _/ $ @
+      _/_/_/_/   $  @
+     _/    _/ $     @
+    _/    _/ $      @
+   _/_/_/_/   $     @
+_/        _/ $      @
+           $$       @@
+165  YEN SIGN
+               $$@
+    _/      _/ $ @
+     _/  _/   $  @
+  _/_/_/_/_/ $   @
+     _/     $    @
+_/_/_/_/_/ $     @
+   _/     $      @
+    $$           @@
+166  BROKEN BAR
+       _/ $@
+      _/ $ @
+     _/ $  @
+      $$   @
+     $$    @
+  _/ $     @
+ _/ $      @
+_/ $       @@
+167  SECTION SIGN
+        _/_/ $@
+     _/     $ @
+      _/   $  @
+   _/  _/ $   @
+    _/   $    @
+     _/ $     @
+_/_/   $      @
+   $$         @@
+168  DIAERESIS
+     _/    _/ $@
+            $$ @
+   $      $    @
+  $      $     @
+ $      $      @
+$      $       @
+               @
+               @@
+169  COPYRIGHT SIGN
+         _/_/_/_/   $ @
+      _/        _/   $@
+   _/    _/_/_/  _/ $ @
+  _/  _/        _/ $  @
+ _/  _/        _/ $   @
+_/    _/_/_/  _/ $    @
+ _/        _/   $     @
+  _/_/_/_/   $        @@
+170  FEMININE ORDINAL INDICATOR
+             $$@
+      _/_/_/ $ @
+   _/    _/ $  @
+    _/_/_/ $   @
+         $$    @
+_/_/_/_/ $     @
+               @
+               @@
+171  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+             $$@
+      _/  _/ $ @
+   _/  _/   $  @
+_/  _/   $     @
+ _/  _/   $    @
+  _/  _/ $     @
+       $$      @
+               @@
+172  NOT SIGN
+             @
+             @
+           $$@
+_/_/_/_/_/ $ @
+       _/ $  @
+        $$   @
+             @
+             @@
+173  SOFT HYPHEN
+           @
+           @
+         $$@
+_/_/_/_/ $ @
+       $$  @
+  $$       @
+           @
+           @@
+174  REGISTERED SIGN
+         _/_/_/_/   $ @
+      _/        _/   $@
+   _/  _/_/_/    _/ $ @
+  _/  _/    _/  _/ $  @
+ _/  _/_/_/    _/ $   @
+_/  _/    _/  _/ $    @
+ _/        _/   $     @
+  _/_/_/_/   $        @@
+175  MACRON
+ _/_/_/_/_/ $@
+          $$ @
+   $$        @
+  $$         @
+ $$          @
+$$           @
+             @
+             @@
+176  DEGREE SIGN
+     _/   $@
+  _/  _/ $ @
+   _/   $  @
+    $$     @
+ $$        @
+$$         @
+           @
+           @@
+177  PLUS-MINUS SIGN
+           $$  @
+        _/ $   @
+       _/     $@
+  _/_/_/_/_/ $ @
+     _/     $  @
+_/_/_/_/_/ $   @
+         $$    @
+               @@
+178  SUPERSCRIPT TWO
+        $$ @
+   _/_/   $@
+      _/ $ @
+   _/   $  @
+_/_/_/ $   @
+     $$    @
+           @
+           @@
+179  SUPERSCRIPT THREE
+          $$@
+   _/_/_/ $ @
+    _/   $  @
+     _/ $   @
+_/_/   $    @
+   $$       @
+            @
+            @@
+180  ACUTE ACCENT
+       _/ $@
+    _/   $ @
+     $$    @
+  $$       @
+ $$        @
+$$         @
+           @
+           @@
+181  MICRO SIGN
+                @
+              $$@
+     _/    _/ $ @
+    _/    _/ $  @
+   _/    _/ $   @
+  _/_/_/_/ $    @
+ _/       $     @
+_/ $            @@
+182  PILCROW SIGN
+            $$@
+   _/_/_/_/ $ @
+_/_/_/  _/ $  @
+ _/_/  _/ $   @
+  _/  _/ $    @
+ _/  _/ $     @
+      $$      @
+              @@
+183  MIDDLE DOT
+       @
+       @
+     $$@
+  _/ $ @
+   $$  @
+$$     @
+       @
+       @@
+184  CEDILLA
+        @
+        @
+        @
+        @
+        @
+      $$@
+   _/ $ @
+_/_/ $  @@
+185  SUPERSCRIPT ONE
+      $$@
+   _/ $ @
+_/_/ $  @
+ _/ $   @
+_/ $    @
+ $$     @
+        @
+        @@
+186  MASCULINE ORDINAL INDICATOR
+           $$ @
+      _/_/   $@
+   _/    _/ $ @
+    _/_/   $  @
+         $$   @
+_/_/_/_/ $    @
+              @
+              @@
+187  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+           $$  @
+    _/  _/   $ @
+     _/  _/   $@
+      _/  _/ $ @
+   _/  _/   $  @
+_/  _/   $     @
+     $$        @
+               @@
+188  VULGAR FRACTION ONE QUARTER
+                $$     @
+   _/        _/       $@
+_/_/      _/  _/  _/ $ @
+ _/    _/    _/  _/   $@
+_/  _/      _/_/_/_/ $ @
+ _/            _/   $  @
+                $$     @
+                       @@
+189  VULGAR FRACTION ONE HALF
+                $$    @
+   _/        _/     $ @
+_/_/      _/  _/_/   $@
+ _/    _/        _/ $ @
+_/  _/        _/   $  @
+ _/        _/_/_/ $   @
+                $$    @
+                      @@
+190  VULGAR FRACTION THREE QUARTERS
+                  $$     @
+   _/_/_/      _/       $@
+    _/      _/  _/  _/ $ @
+     _/  _/    _/  _/   $@
+_/_/  _/      _/_/_/_/ $ @
+   _/            _/   $  @
+                  $$     @
+                         @@
+191  INVERTED QUESTION MARK
+          $$@
+       _/ $ @
+        $$  @
+   _/_/ $   @
+_/     $    @
+ _/_/ $     @
+    $$      @
+            @@
+192  LATIN CAPITAL LETTER A WITH GRAVE
+       _/   $@
+        _/ $ @
+     _/_/   $@
+  _/    _/ $ @
+ _/_/_/_/ $  @
+_/    _/ $   @
+       $$    @
+             @@
+193  LATIN CAPITAL LETTER A WITH ACUTE
+         _/ $@
+      _/   $ @
+     _/_/   $@
+  _/    _/ $ @
+ _/_/_/_/ $  @
+_/    _/ $   @
+       $$    @
+             @@
+194  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+       _/_/   $@
+    _/    _/ $ @
+           $$  @
+    _/_/   $   @
+ _/_/_/_/ $    @
+_/    _/ $     @
+       $$      @
+               @@
+195  LATIN CAPITAL LETTER A WITH TILDE
+       _/  _/ $@
+    _/  _/   $ @
+         $$    @
+    _/_/   $   @
+ _/_/_/_/ $    @
+_/    _/ $     @
+       $$      @
+               @@
+196  LATIN CAPITAL LETTER A WITH DIAERESIS
+     _/    _/ $@
+            $$ @
+     _/_/   $  @
+  _/    _/ $   @
+ _/_/_/_/ $    @
+_/    _/ $     @
+       $$      @
+               @@
+197  LATIN CAPITAL LETTER A WITH RING ABOVE
+       _/_/   $@
+    _/    _/ $ @
+     _/_/   $  @
+  _/    _/ $   @
+ _/_/_/_/ $    @
+_/    _/ $     @
+       $$      @
+               @@
+198  LATIN CAPITAL LETTER AE
+                   $$@
+      _/_/_/_/_/_/ $ @
+   _/    _/       $  @
+  _/_/_/_/_/_/ $     @
+ _/    _/       $    @
+_/    _/_/_/_/ $     @
+             $$      @
+                     @@
+199  LATIN CAPITAL LETTER C WITH CEDILLA
+             $$@
+      _/_/_/ $ @
+   _/       $  @
+  _/   $       @
+ _/       $    @
+  _/_/_/ $     @
+   _/   $      @
+_/_/ $         @@
+200  LATIN CAPITAL LETTER E WITH GRAVE
+       _/   $ @
+        _/   $@
+   _/_/_/_/ $ @
+  _/_/_/ $    @
+ _/       $   @
+_/_/_/_/ $    @
+       $$     @
+              @@
+201  LATIN CAPITAL LETTER E WITH ACUTE
+         _/ $ @
+      _/     $@
+   _/_/_/_/ $ @
+  _/_/_/ $    @
+ _/       $   @
+_/_/_/_/ $    @
+       $$     @
+              @@
+202  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+       _/_/   $@
+    _/    _/ $ @
+   _/_/_/_/ $  @
+  _/_/_/ $     @
+ _/       $    @
+_/_/_/_/ $     @
+       $$      @
+               @@
+203  LATIN CAPITAL LETTER E WITH DIAERESIS
+     _/    _/ $@
+            $$ @
+   _/_/_/_/ $  @
+  _/_/_/ $     @
+ _/       $    @
+_/_/_/_/ $     @
+       $$      @
+               @@
+204  LATIN CAPITAL LETTER I WITH GRAVE
+     _/   $ @
+      _/   $@
+   _/_/_/ $ @
+    _/   $  @
+   _/   $   @
+_/_/_/ $    @
+     $$     @
+            @@
+205  LATIN CAPITAL LETTER I WITH ACUTE
+         _/ $@
+      _/   $ @
+   _/_/_/ $  @
+    _/   $   @
+   _/   $    @
+_/_/_/ $     @
+     $$      @
+             @@
+206  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+       _/   $@
+    _/  _/ $ @
+   _/_/_/ $  @
+    _/   $   @
+   _/   $    @
+_/_/_/ $     @
+     $$      @
+             @@
+207  LATIN CAPITAL LETTER I WITH DIAERESIS
+     _/  _/ $@
+          $$ @
+   _/_/_/ $  @
+    _/   $   @
+   _/   $    @
+_/_/_/ $     @
+     $$      @
+             @@
+208  LATIN CAPITAL LETTER ETH
+           $$ @
+    _/_/_/   $@
+   _/    _/ $ @
+_/_/_/  _/ $  @
+ _/    _/ $   @
+_/_/_/   $    @
+     $$       @
+              @@
+209  LATIN CAPITAL LETTER N WITH TILDE
+       _/  _/ $@
+    _/  _/   $ @
+   _/    _/ $  @
+  _/_/  _/ $   @
+ _/  _/_/ $    @
+_/    _/ $     @
+       $$      @
+               @@
+210  LATIN CAPITAL LETTER O WITH GRAVE
+      _/   $@
+       _/ $ @
+    _/_/   $@
+ _/    _/ $ @
+_/    _/ $  @
+ _/_/   $   @
+    $$      @
+            @@
+211  LATIN CAPITAL LETTER O WITH ACUTE
+        _/ $@
+     _/   $ @
+    _/_/   $@
+ _/    _/ $ @
+_/    _/ $  @
+ _/_/   $   @
+    $$      @
+            @@
+212  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+      _/_/   $@
+   _/    _/ $ @
+    _/_/   $  @
+ _/    _/ $   @
+_/    _/ $    @
+ _/_/   $     @
+    $$        @
+              @@
+213  LATIN CAPITAL LETTER O WITH TILDE
+      _/  _/ $@
+   _/  _/   $ @
+    _/_/   $  @
+ _/    _/ $   @
+_/    _/ $    @
+ _/_/   $     @
+    $$        @
+              @@
+214  LATIN CAPITAL LETTER O WITH DIAERESIS
+    _/    _/ $@
+           $$ @
+    _/_/   $  @
+ _/    _/ $   @
+_/    _/ $    @
+ _/_/   $     @
+    $$        @
+              @@
+215  MULTIPLICATION SIGN
+           @
+         $$@
+  _/  _/ $ @
+   _/   $  @
+_/  _/ $   @
+     $$    @
+           @
+           @@
+216  LATIN CAPITAL LETTER O WITH STROKE
+               $$@
+      _/_/_/_/ $ @
+   _/    _/_/ $  @
+  _/  _/  _/ $   @
+ _/_/    _/ $    @
+_/_/_/_/   $     @
+       $$        @
+                 @@
+217  LATIN CAPITAL LETTER U WITH GRAVE
+      _/   $@
+       _/ $ @
+          $$@
+ _/    _/ $ @
+_/    _/ $  @
+ _/_/   $   @
+    $$      @
+            @@
+218  LATIN CAPITAL LETTER U WITH ACUTE
+        _/ $@
+     _/   $ @
+          $$@
+ _/    _/ $ @
+_/    _/ $  @
+ _/_/   $   @
+    $$      @
+            @@
+219  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+      _/_/   $@
+   _/    _/ $ @
+          $$  @
+ _/    _/ $   @
+_/    _/ $    @
+ _/_/   $     @
+    $$        @
+              @@
+220  LATIN CAPITAL LETTER U WITH DIAERESIS
+    _/    _/ $@
+           $$ @
+  _/    _/ $  @
+ _/    _/ $   @
+_/    _/ $    @
+ _/_/   $     @
+    $$        @
+              @@
+221  LATIN CAPITAL LETTER Y WITH ACUTE
+        _/ $ @
+     _/     $@
+_/      _/ $ @
+ _/  _/   $  @
+  _/   $     @
+ _/ $        @
+  $$         @
+             @@
+222  LATIN CAPITAL LETTER THORN
+       $$    @
+    _/     $ @
+   _/_/_/   $@
+  _/    _/ $ @
+ _/_/_/   $  @
+_/     $     @
+ $$          @
+             @@
+223  LATIN SMALL LETTER SHARP S
+            $$ @
+       _/_/   $@
+    _/    _/ $ @
+   _/  _/   $  @
+  _/    _/ $   @
+ _/  _/   $    @
+_/     $       @
+ $$            @@
+224  LATIN SMALL LETTER A WITH GRAVE
+      _/   $@
+       _/ $ @
+          $$@
+   _/_/_/ $ @
+_/    _/ $  @
+ _/_/_/ $   @
+      $$    @
+            @@
+225  LATIN SMALL LETTER A WITH ACUTE
+          _/ $@
+       _/   $ @
+          $$  @
+   _/_/_/ $   @
+_/    _/ $    @
+ _/_/_/ $     @
+      $$      @
+              @@
+226  LATIN SMALL LETTER A WITH CIRCUMFLEX
+        _/   $@
+     _/  _/ $ @
+          $$  @
+   _/_/_/ $   @
+_/    _/ $    @
+ _/_/_/ $     @
+      $$      @
+              @@
+227  LATIN SMALL LETTER A WITH TILDE
+      _/  _/ $@
+   _/  _/   $ @
+          $$  @
+   _/_/_/ $   @
+_/    _/ $    @
+ _/_/_/ $     @
+      $$      @
+              @@
+228  LATIN SMALL LETTER A WITH DIAERESIS
+    _/    _/ $@
+           $$ @
+    _/_/_/ $  @
+ _/    _/ $   @
+_/    _/ $    @
+ _/_/_/ $     @
+      $$      @
+              @@
+229  LATIN SMALL LETTER A WITH RING ABOVE
+        _/   $@
+     _/  _/ $ @
+      _/   $  @
+   _/_/_/ $   @
+_/    _/ $    @
+ _/_/_/ $     @
+      $$      @
+              @@
+230  LATIN SMALL LETTER AE
+                    @
+                 $$ @
+    _/_/_/  _/_/   $@
+ _/    _/_/_/_/_/ $ @
+_/    _/_/       $  @
+ _/_/_/  _/_/_/ $   @
+              $$    @
+                    @@
+231  LATIN SMALL LETTER C WITH CEDILLA
+              @
+            $$@
+     _/_/_/ $ @
+  _/       $  @
+ _/       $   @
+  _/_/_/ $    @
+   _/   $     @
+_/_/ $        @@
+232  LATIN SMALL LETTER E WITH GRAVE
+      _/     $@
+       _/ $   @
+    _/_/   $  @
+ _/_/_/_/ $   @
+_/       $    @
+ _/_/_/ $     @
+      $$      @
+              @@
+233  LATIN SMALL LETTER E WITH ACUTE
+          _/ $@
+       _/   $ @
+    _/_/   $  @
+ _/_/_/_/ $   @
+_/       $    @
+ _/_/_/ $     @
+      $$      @
+              @@
+234  LATIN SMALL LETTER E WITH CIRCUMFLEX
+      _/_/   $@
+   _/    _/ $ @
+    _/_/   $  @
+ _/_/_/_/ $   @
+_/       $    @
+ _/_/_/ $     @
+      $$      @
+              @@
+235  LATIN SMALL LETTER E WITH DIAERESIS
+    _/    _/ $@
+           $$ @
+    _/_/   $  @
+ _/_/_/_/ $   @
+_/       $    @
+ _/_/_/ $     @
+      $$      @
+              @@
+236  LATIN SMALL LETTER I WITH GRAVE
+   _/   $@
+    _/ $ @
+     $$  @
+  _/ $   @
+ _/ $    @
+_/ $     @
+ $$      @
+         @@
+237  LATIN SMALL LETTER I WITH ACUTE
+       _/ $@
+    _/   $ @
+     $$    @
+  _/ $     @
+ _/ $      @
+_/ $       @
+ $$        @
+           @@
+238  LATIN SMALL LETTER I WITH CIRCUMFLEX
+     _/   $@
+  _/  _/ $ @
+       $$  @
+  _/ $     @
+ _/ $      @
+_/ $       @
+ $$        @
+           @@
+239  LATIN SMALL LETTER I WITH DIAERESIS
+   _/  _/ $@
+        $$ @
+   _/ $    @
+  _/ $     @
+ _/ $      @
+_/ $       @
+ $$        @
+           @@
+240  LATIN SMALL LETTER ETH
+    _/  _/ $@
+     _/   $ @
+  _/  _/   $@
+   _/_/_/ $ @
+_/    _/ $  @
+ _/_/   $   @
+    $$      @
+            @@
+241  LATIN SMALL LETTER N WITH TILDE
+       _/  _/ $@
+    _/  _/   $ @
+         $$    @
+  _/_/_/   $   @
+ _/    _/ $    @
+_/    _/ $     @
+       $$      @
+               @@
+242  LATIN SMALL LETTER O WITH GRAVE
+      _/   $@
+       _/ $ @
+        $$  @
+   _/_/   $ @
+_/    _/ $  @
+ _/_/   $   @
+    $$      @
+            @@
+243  LATIN SMALL LETTER O WITH ACUTE
+        _/ $@
+     _/   $ @
+        $$  @
+   _/_/   $ @
+_/    _/ $  @
+ _/_/   $   @
+    $$      @
+            @@
+244  LATIN SMALL LETTER O WITH CIRCUMFLEX
+      _/_/   $@
+   _/    _/ $ @
+          $$  @
+   _/_/   $   @
+_/    _/ $    @
+ _/_/   $     @
+    $$        @
+              @@
+245  LATIN SMALL LETTER O WITH TILDE
+      _/_/_/ $@
+   _/  _/   $ @
+        $$    @
+   _/_/   $   @
+_/    _/ $    @
+ _/_/   $     @
+    $$        @
+              @@
+246  LATIN SMALL LETTER O WITH DIAERESIS
+    _/    _/ $@
+           $$ @
+    _/_/   $  @
+ _/    _/ $   @
+_/    _/ $    @
+ _/_/   $     @
+    $$        @
+              @@
+247  DIVISION SIGN
+         $$  @
+      _/ $   @
+           $$@
+_/_/_/_/_/ $ @
+         $$  @
+  _/ $       @
+   $$        @
+             @@
+248  LATIN SMALL LETTER O WITH STROKE
+              @
+            $$@
+     _/_/_/ $ @
+  _/  _/_/ $  @
+ _/_/  _/ $   @
+_/_/_/   $    @
+     $$       @
+              @@
+249  LATIN SMALL LETTER U WITH GRAVE
+    _/   $  @
+     _/ $   @
+          $$@
+ _/    _/ $ @
+_/    _/ $  @
+ _/_/_/ $   @
+      $$    @
+            @@
+250  LATIN SMALL LETTER U WITH ACUTE
+          _/ $@
+       _/   $ @
+          $$  @
+ _/    _/ $   @
+_/    _/ $    @
+ _/_/_/ $     @
+      $$      @
+              @@
+251  LATIN SMALL LETTER U WITH CIRCUMFLEX
+      _/_/   $@
+   _/    _/ $ @
+          $$  @
+ _/    _/ $   @
+_/    _/ $    @
+ _/_/_/ $     @
+      $$      @
+              @@
+252  LATIN SMALL LETTER U WITH DIAERESIS
+    _/    _/ $@
+           $$ @
+  _/    _/ $  @
+ _/    _/ $   @
+_/    _/ $    @
+ _/_/_/ $     @
+      $$      @
+              @@
+253  LATIN SMALL LETTER Y WITH ACUTE
+         _/ $@
+      _/   $ @
+           $$@
+  _/    _/ $ @
+ _/    _/ $  @
+  _/_/_/ $   @
+     _/ $    @
+_/_/   $     @@
+254  LATIN SMALL LETTER THORN
+         $$    @
+      _/     $ @
+     _/_/_/   $@
+    _/    _/ $ @
+   _/    _/ $  @
+  _/_/_/   $   @
+ _/     $      @
+_/ $           @@
+255  LATIN SMALL LETTER Y WITH DIAERESIS
+     _/    _/ $@
+            $$ @
+   _/    _/ $  @
+  _/    _/ $   @
+ _/    _/ $    @
+  _/_/_/ $     @
+     _/ $      @
+_/_/   $       @@
diff --git a/externals/figlet/fonts/mini.flf b/externals/figlet/fonts/mini.flf
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/mini.flf
@@ -0,0 +1,899 @@
+flf2a$ 4 3 10 0 10 0 1920 96
+Mini by Glenn Chappell 4/93
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin.  May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+$$@
+$$@
+$$@
+$$@@
+   @
+ |$@
+ o$@
+   @@
+    @
+ ||$@
+    @
+    @@
+       @
+ -|-|-$@
+ -|-|-$@
+       @@
+   _$@
+ (|$ @
+ _|)$@
+     @@
+    @
+ O/$@
+ /O$@
+    @@
+     @
+ ()$ @
+ (_X$@
+     @@
+   @
+ /$@
+   @
+   @@
+    @
+  /$@
+ |$ @
+  \$@@
+    @
+ \$ @
+  |$@
+ /$ @@
+     @
+ \|/$@
+ /|\$@
+     @@
+     @
+ _|_$@
+  |$ @
+     @@
+   @
+   @
+ o$@
+ /$@@
+    @
+ __$@
+    @
+    @@
+   @
+   @
+ o$@
+   @@
+    @
+  /$@
+ /$ @
+    @@
+  _$ @
+ / \$@
+ \_/$@
+     @@
+    @
+ /|$@
+  |$@
+    @@
+ _$ @
+  )$@
+ /_$@
+    @@
+ _$ @
+ _)$@
+ _)$@
+    @@
+      @
+ |_|_$@
+   |$ @
+      @@
+  _$ @
+ |_$ @
+  _)$@
+     @@
+  _$ @
+ |_$ @
+ |_)$@
+     @@
+ __$@
+  /$@
+ /$ @
+    @@
+  _$ @
+ (_)$@
+ (_)$@
+     @@
+  _$ @
+ (_|$@
+   |$@
+     @@
+   @
+ o$@
+ o$@
+   @@
+   @
+ o$@
+ o$@
+ /$@@
+   @
+ /$@
+ \$@
+   @@
+    @
+ --$@
+ --$@
+    @@
+   @
+ \$@
+ /$@
+   @@
+ _$ @
+  )$@
+ o$ @
+    @@
+   __$ @
+  /  \$@
+ | (|/$@
+  \__$ @@
+      @
+  /\$ @
+ /--\$@
+      @@
+  _$ @
+ |_)$@
+ |_)$@
+     @@
+  _$@
+ /$ @
+ \_$@
+    @@
+  _$ @
+ | \$@
+ |_/$@
+     @@
+  _$@
+ |_$@
+ |_$@
+    @@
+  _$@
+ |_$@
+ |$ @
+    @@
+  __$@
+ /__$@
+ \_|$@
+     @@
+     @
+ |_|$@
+ | |$@
+     @@
+ ___$@
+  |$ @
+ _|_$@
+     @@
+     @
+   |$@
+ \_|$@
+     @@
+    @
+ |/$@
+ |\$@
+    @@
+    @
+ |$ @
+ |_$@
+    @@
+      @
+ |\/|$@
+ |  |$@
+      @@
+      @
+ |\ |$@
+ | \|$@
+      @@
+  _$ @
+ / \$@
+ \_/$@
+     @@
+  _$ @
+ |_)$@
+ |$  @
+     @@
+  _$ @
+ / \$@
+ \_X$@
+     @@
+  _$ @
+ |_)$@
+ | \$@
+     @@
+  __$@
+ (_$ @
+ __)$@
+     @@
+ ___$@
+  |$ @
+  |$ @
+     @@
+     @
+ | |$@
+ |_|$@
+     @@
+      @
+ \  /$@
+  \/$ @
+      @@
+        @
+ \    /$@
+  \/\/$ @
+        @@
+    @
+ \/$@
+ /\$@
+    @@
+     @
+ \_/$@
+  |$ @
+     @@
+ __$@
+  /$@
+ /_$@
+    @@
+  _$@
+ |$ @
+ |_$@
+    @@
+    @
+ \$ @
+  \$@
+    @@
+ _$ @
+  |$@
+ _|$@
+    @@
+ /\$@
+    @
+    @
+    @@
+    @
+    @
+    @
+ __$@@
+   @
+ \$@
+   @
+   @@
+     @
+  _.$@
+ (_|$@
+     @@
+     @
+ |_$ @
+ |_)$@
+     @@
+    @
+  _$@
+ (_$@
+    @@
+     @
+  _|$@
+ (_|$@
+     @@
+     @
+  _$ @
+ (/_$@
+     @@
+   _$@
+ _|_$@
+  |$ @
+     @@
+     @
+  _$ @
+ (_|$@
+  _|$@@
+     @
+ |_$ @
+ | |$@
+     @@
+   @
+ o$@
+ |$@
+   @@
+    @
+  o$@
+  |$@
+ _|$@@
+    @
+ |$ @
+ |<$@
+    @@
+   @
+ |$@
+ |$@
+   @@
+       @
+ ._ _$ @
+ | | |$@
+       @@
+     @
+ ._$ @
+ | |$@
+     @@
+     @
+  _$ @
+ (_)$@
+     @@
+     @
+ ._$ @
+ |_)$@
+ |$  @@
+     @
+  _.$@
+ (_|$@
+   |$@@
+    @
+ ._$@
+ |$ @
+    @@
+    @
+  _$@
+ _>$@
+    @@
+     @
+ _|_$@
+  |_$@
+     @@
+     @
+     @
+ |_|$@
+     @@
+    @
+    @
+ \/$@
+    @@
+      @
+      @
+ \/\/$@
+      @@
+    @
+    @
+ ><$@
+    @@
+    @
+    @
+ \/$@
+ /$ @@
+    @
+ _$ @
+ /_$@
+    @@
+  ,-$@
+ _|$ @
+  |$ @
+  `-$@@
+ |$@
+ |$@
+ |$@
+ |$@@
+ -.$ @
+  |_$@
+  |$ @
+ -'$ @@
+ /\/$@
+     @
+     @
+     @@
+ o  o$@
+  /\$ @
+ /--\$@
+      @@
+ o_o$@
+ / \$@
+ \_/$@
+     @@
+ o o$@
+ | |$@
+ |_|$@
+     @@
+ o o$@
+  _.$@
+ (_|$@
+     @@
+ o o$@
+  _$ @
+ (_)$@
+     @@
+ o o$@
+     @
+ |_|$@
+     @@
+  _$ @
+ | )$@
+ | )$@
+ |$  @@
+160  NO-BREAK SPACE
+ $$@
+ $$@
+ $$@
+ $$@@
+161  INVERTED EXCLAMATION MARK
+   @
+ o$@
+ |$@
+   @@
+162  CENT SIGN
+     @
+  |_$@
+ (__$@
+  |$ @@
+163  POUND SIGN
+    _$  @
+  _/_`$ @
+   |___$@
+        @@
+164  CURRENCY SIGN
+     @
+ `o'$@
+ ' `$@
+     @@
+165  YEN SIGN
+       @
+ _\_/_$@
+ --|--$@
+       @@
+166  BROKEN BAR
+ |$@
+ |$@
+ |$@
+ |$@@
+167  SECTION SIGN
+  _$@
+ ($ @
+ ()$@
+ _)$@@
+168  DIAERESIS
+ o o$@
+     @
+     @
+     @@
+169  COPYRIGHT SIGN
+  _$ @
+ |C|$@
+ `-'$@
+     @@
+170  FEMININE ORDINAL INDICATOR
+  _.$@
+ (_|$@
+ ---$@
+     @@
+171  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    @
+ //$@
+ \\$@
+    @@
+172  NOT SIGN
+     @
+ __$ @
+   |$@
+     @@
+173  SOFT HYPHEN
+   @
+ _$@
+   @
+   @@
+174  REGISTERED SIGN
+  _$ @
+ |R|$@
+ `-'$@
+     @@
+175  MACRON
+ __$@
+    @
+    @
+    @@
+176  DEGREE SIGN
+ O$@
+   @
+   @
+   @@
+177  PLUS-MINUS SIGN
+     @
+ _|_$@
+ _|_$@
+     @@
+178  SUPERSCRIPT TWO
+ 2$@
+   @
+   @
+   @@
+179  SUPERSCRIPT THREE
+ 3$@
+   @
+   @
+   @@
+180  ACUTE ACCENT
+ /$@
+   @
+   @
+   @@
+181  MICRO SIGN
+     @
+     @
+ |_|$@
+ |$  @@
+182  PILCROW SIGN
+  __$ @
+ (| |$@
+  | |$@
+      @@
+183  MIDDLE DOT
+   @
+ o$@
+   @
+   @@
+184  CEDILLA
+   @
+   @
+   @
+ S$@@
+185  SUPERSCRIPT ONE
+ 1$@
+   @
+   @
+   @@
+186  MASCULINE ORDINAL INDICATOR
+  _$ @
+ (_)$@
+ ---$@
+     @@
+187  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    @
+ \\$@
+ //$@
+    @@
+188  VULGAR FRACTION ONE QUARTER
+    @
+ 1/$@
+ /4$@
+    @@
+189  VULGAR FRACTION ONE HALF
+    @
+ 1/$@
+ /2$@
+    @@
+190  VULGAR FRACTION THREE QUARTERS
+    @
+ 3/$@
+ /4$@
+    @@
+191  INVERTED QUESTION MARK
+    @
+  o$@
+ (_$@
+    @@
+192  LATIN CAPITAL LETTER A WITH GRAVE
+   \$ @
+  /\$ @
+ /--\$@
+      @@
+193  LATIN CAPITAL LETTER A WITH ACUTE
+  /$  @
+  /\$ @
+ /--\$@
+      @@
+194  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+  /\$ @
+  /\$ @
+ /--\$@
+      @@
+195  LATIN CAPITAL LETTER A WITH TILDE
+  /\/$@
+  /\$ @
+ /--\$@
+      @@
+196  LATIN CAPITAL LETTER A WITH DIAERESIS
+ o  o$@
+  /\$ @
+ /--\$@
+      @@
+197  LATIN CAPITAL LETTER A WITH RING ABOVE
+   O$  @
+  / \$ @
+ /---\$@
+       @@
+198  LATIN CAPITAL LETTER AE
+    _$@
+  /|_$@
+ /-|_$@
+      @@
+199  LATIN CAPITAL LETTER C WITH CEDILLA
+  _$@
+ /$ @
+ \_$@
+  S$@@
+200  LATIN CAPITAL LETTER E WITH GRAVE
+ \_$@
+ |_$@
+ |_$@
+    @@
+201  LATIN CAPITAL LETTER E WITH ACUTE
+  _/$@
+ |_$ @
+ |_$ @
+     @@
+202  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+  /\$@
+ |_$ @
+ |_$ @
+     @@
+203  LATIN CAPITAL LETTER E WITH DIAERESIS
+ o_o$@
+ |_$ @
+ |_$ @
+     @@
+204  LATIN CAPITAL LETTER I WITH GRAVE
+ \__$@
+  |$ @
+ _|_$@
+     @@
+205  LATIN CAPITAL LETTER I WITH ACUTE
+ __/$@
+  |$ @
+ _|_$@
+     @@
+206  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+  /\$@
+ ___$@
+ _|_$@
+     @@
+207  LATIN CAPITAL LETTER I WITH DIAERESIS
+ o_o$@
+  |$ @
+ _|_$@
+     @@
+208  LATIN CAPITAL LETTER ETH
+   _$ @
+ _|_\$@
+  |_/$@
+      @@
+209  LATIN CAPITAL LETTER N WITH TILDE
+  /\/$@
+ |\ |$@
+ | \|$@
+      @@
+210  LATIN CAPITAL LETTER O WITH GRAVE
+  \$ @
+ / \$@
+ \_/$@
+     @@
+211  LATIN CAPITAL LETTER O WITH ACUTE
+  /$ @
+ / \$@
+ \_/$@
+     @@
+212  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+  /\$@
+ / \$@
+ \_/$@
+     @@
+213  LATIN CAPITAL LETTER O WITH TILDE
+ /\/$@
+ / \$@
+ \_/$@
+     @@
+214  LATIN CAPITAL LETTER O WITH DIAERESIS
+ o_o$@
+ / \$@
+ \_/$@
+     @@
+215  MULTIPLICATION SIGN
+   @
+   @
+ X$@
+   @@
+216  LATIN CAPITAL LETTER O WITH STROKE
+  __$ @
+ / /\$@
+ \/_/$@
+      @@
+217  LATIN CAPITAL LETTER U WITH GRAVE
+  \$ @
+ | |$@
+ |_|$@
+     @@
+218  LATIN CAPITAL LETTER U WITH ACUTE
+  /$ @
+ | |$@
+ |_|$@
+     @@
+219  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+  /\$@
+ | |$@
+ |_|$@
+     @@
+220  LATIN CAPITAL LETTER U WITH DIAERESIS
+ o o$@
+ | |$@
+ |_|$@
+     @@
+221  LATIN CAPITAL LETTER Y WITH ACUTE
+  /$ @
+ \_/$@
+  |$ @
+     @@
+222  LATIN CAPITAL LETTER THORN
+ |_$ @
+ |_)$@
+ |$  @
+     @@
+223  LATIN SMALL LETTER SHARP S
+  _$ @
+ | )$@
+ | )$@
+ |$  @@
+224  LATIN SMALL LETTER A WITH GRAVE
+  \$ @
+  _.$@
+ (_|$@
+     @@
+225  LATIN SMALL LETTER A WITH ACUTE
+  /$ @
+  _.$@
+ (_|$@
+     @@
+226  LATIN SMALL LETTER A WITH CIRCUMFLEX
+  /\$@
+  _.$@
+ (_|$@
+     @@
+227  LATIN SMALL LETTER A WITH TILDE
+ /\/$@
+  _.$@
+ (_|$@
+     @@
+228  LATIN SMALL LETTER A WITH DIAERESIS
+ o o$@
+  _.$@
+ (_|$@
+     @@
+229  LATIN SMALL LETTER A WITH RING ABOVE
+  O$ @
+  _.$@
+ (_|$@
+     @@
+230  LATIN SMALL LETTER AE
+       @
+  ___$ @
+ (_|/_$@
+       @@
+231  LATIN SMALL LETTER C WITH CEDILLA
+    @
+  _$@
+ (_$@
+  S$@@
+232  LATIN SMALL LETTER E WITH GRAVE
+  \$ @
+  _$ @
+ (/_$@
+     @@
+233  LATIN SMALL LETTER E WITH ACUTE
+  /$ @
+  _$ @
+ (/_$@
+     @@
+234  LATIN SMALL LETTER E WITH CIRCUMFLEX
+  /\$@
+  _$ @
+ (/_$@
+     @@
+235  LATIN SMALL LETTER E WITH DIAERESIS
+ o o$@
+  _$ @
+ (/_$@
+     @@
+236  LATIN SMALL LETTER I WITH GRAVE
+ \$@
+   @
+ |$@
+   @@
+237  LATIN SMALL LETTER I WITH ACUTE
+ /$@
+   @
+ |$@
+   @@
+238  LATIN SMALL LETTER I WITH CIRCUMFLEX
+ /\$@
+    @
+ |$ @
+    @@
+239  LATIN SMALL LETTER I WITH DIAERESIS
+ o o$@
+     @
+  |$ @
+     @@
+240  LATIN SMALL LETTER ETH
+ X$  @
+  \$ @
+ (_|$@
+     @@
+241  LATIN SMALL LETTER N WITH TILDE
+ /\/$@
+ ._$ @
+ | |$@
+     @@
+242  LATIN SMALL LETTER O WITH GRAVE
+  \$ @
+  _$ @
+ (_)$@
+     @@
+243  LATIN SMALL LETTER O WITH ACUTE
+  /$ @
+  _$ @
+ (_)$@
+     @@
+244  LATIN SMALL LETTER O WITH CIRCUMFLEX
+  /\$@
+  _$ @
+ (_)$@
+     @@
+245  LATIN SMALL LETTER O WITH TILDE
+ /\/$@
+  _$ @
+ (_)$@
+     @@
+246  LATIN SMALL LETTER O WITH DIAERESIS
+ o o$@
+  _$ @
+ (_)$@
+     @@
+247  DIVISION SIGN
+  o$ @
+ ---$@
+  o$ @
+     @@
+248  LATIN SMALL LETTER O WITH STROKE
+     @
+  _$ @
+ (/)$@
+     @@
+249  LATIN SMALL LETTER U WITH GRAVE
+  \$ @
+     @
+ |_|$@
+     @@
+250  LATIN SMALL LETTER U WITH ACUTE
+  /$ @
+     @
+ |_|$@
+     @@
+251  LATIN SMALL LETTER U WITH CIRCUMFLEX
+  /\$@
+     @
+ |_|$@
+     @@
+252  LATIN SMALL LETTER U WITH DIAERESIS
+ o o$@
+     @
+ |_|$@
+     @@
+253  LATIN SMALL LETTER Y WITH ACUTE
+  /$@
+    @
+ \/$@
+ /$ @@
+254  LATIN SMALL LETTER THORN
+     @
+ |_$ @
+ |_)$@
+ |$  @@
+255  LATIN SMALL LETTER Y WITH DIAERESIS
+ oo$@
+    @
+ \/$@
+ /$ @@
diff --git a/externals/figlet/fonts/mnemonic.flf b/externals/figlet/fonts/mnemonic.flf
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/mnemonic.flf
@@ -0,0 +1,3702 @@
+flf2a$ 1 1 12 -1 5 0 0 1797
+mnemonic - a FIGfont by John Cowan <cowan@@ccil.org>
+This font uses the mnemonics of RFC1345
+(http://ds.internic.net/rfc/rfc1345.txt) to implement a really large character
+set rather crudely, but reversibly.  Two-letter mnemonics
+are prefixed by &; larger mnemonics are prefixed by &_ and followed by _.
+&SP@@
+!@@
+"@@
+&Nb@@
+&DO@@
+%@@
+&@@
+'@@
+(@@
+)@@
+*@@
++@@
+,@@
+-@@
+.@@
+/@@
+0@@
+1@@
+2@@
+3@@
+4@@
+5@@
+6@@
+7@@
+8@@
+9@@
+:@@
+;@@
+<@@
+=@@
+>@@
+?@@
+&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@@
+&<(@@
+&//@@
+&)>@@
+&'>@@
+_@@
+&'!@@
+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@@
+&(!@@
+&!!@@
+&!)@@
+&'?@@
+&A:@@
+&O:@@
+&U:@@
+&a:@@
+&o:@@
+&u:@@
+&ss@@
+0x0001    START OF HEADING (SOH)
+&SH@@
+0x0002    START OF TEXT (STX)
+&SX@@
+0x0003    END OF TEXT (ETX)
+&EX@@
+0x0004    END OF TRANSMISSION (EOT)
+&ET@@
+0x0005    ENQUIRY (ENQ)
+&EQ@@
+0x0006    ACKNOWLEDGE (ACK)
+&AK@@
+0x0007    BELL (BEL)
+&BL@@
+0x0008    BACKSPACE (BS)
+&BS@@
+0x0009    CHARACTER TABULATION (HT)
+&HT@@
+0x000a    LINE FEED (LF)
+&LF@@
+0x000b    LINE TABULATION (VT)
+&VT@@
+0x000c    FORM FEED (FF)
+&FF@@
+0x000d    CARRIAGE RETURN (CR)
+&CR@@
+0x000e    SHIFT OUT (SO)
+&SO@@
+0x000f    SHIFT IN (SI)
+&SI@@
+0x0010    DATALINK ESCAPE (DLE)
+&DL@@
+0x0011    DEVICE CONTROL ONE (DC1)
+&D1@@
+0x0012    DEVICE CONTROL TWO (DC2)
+&D2@@
+0x0013    DEVICE CONTROL THREE (DC3)
+&D3@@
+0x0014    DEVICE CONTROL FOUR (DC4)
+&D4@@
+0x0015    NEGATIVE ACKNOWLEDGE (NAK)
+&NK@@
+0x0016    SYNCRONOUS IDLE (SYN)
+&SY@@
+0x0017    END OF TRANSMISSION BLOCK (ETB)
+&EB@@
+0x0018    CANCEL (CAN)
+&CN@@
+0x0019    END OF MEDIUM (EM)
+&EM@@
+0x001a    SUBSTITUTE (SUB)
+&SB@@
+0x001b    ESCAPE (ESC)
+&EC@@
+0x001c    FILE SEPARATOR (IS4)
+&FS@@
+0x001d    GROUP SEPARATOR (IS3)
+&GS@@
+0x001e    RECORD SEPARATOR (IS2)
+&RS@@
+0x001f    UNIT SEPARATOR (IS1)
+&US@@
+0x007f    DELETE (DEL)
+&DT@@
+0x0080    PADDING CHARACTER (PAD)
+&PA@@
+0x0081    HIGH OCTET PRESET (HOP)
+&HO@@
+0x0082    BREAK PERMITTED HERE (BPH)
+&BH@@
+0x0083    NO BREAK HERE (NBH)
+&NH@@
+0x0084    INDEX (IND)
+&IN@@
+0x0085    NEXT LINE (NEL)
+&NL@@
+0x0086    START OF SELECTED AREA (SSA)
+&SA@@
+0x0087    END OF SELECTED AREA (ESA)
+&ES@@
+0x0088    CHARACTER TABULATION SET (HTS)
+&HS@@
+0x0089    CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
+&HJ@@
+0x008a    LINE TABULATION SET (VTS)
+&VS@@
+0x008b    PARTIAL LINE FORWARD (PLD)
+&PD@@
+0x008c    PARTIAL LINE BACKWARD (PLU)
+&PU@@
+0x008d    REVERSE LINE FEED (RI)
+&RI@@
+0x008e    SINGLE-SHIFT TWO (SS2)
+&S2@@
+0x008f    SINGLE-SHIFT THREE (SS3)
+&S3@@
+0x0090    DEVICE CONTROL STRING (DCS)
+&DC@@
+0x0091    PRIVATE USE ONE (PU1)
+&P1@@
+0x0092    PRIVATE USE TWO (PU2)
+&P2@@
+0x0093    SET TRANSMIT STATE (STS)
+&TS@@
+0x0094    CANCEL CHARACTER (CCH)
+&CC@@
+0x0095    MESSAGE WAITING (MW)
+&MW@@
+0x0096    START OF GUARDED AREA (SPA)
+&SG@@
+0x0097    END OF GUARDED AREA (EPA)
+&EG@@
+0x0098    START OF STRING (SOS)
+&SS@@
+0x0099    SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
+&GC@@
+0x009a    SINGLE CHARACTER INTRODUCER (SCI)
+&SC@@
+0x009b    CONTROL SEQUENCE INTRODUCER (CSI)
+&CI@@
+0x009c    STRING TERMINATOR (ST)
+&ST@@
+0x009d    OPERATING SYSTEM COMMAND (OSC)
+&OC@@
+0x009e    PRIVACY MESSAGE (PM)
+&PM@@
+0x009f    APPLICATION PROGRAM COMMAND (APC)
+&AC@@
+0x00a0    NO-BREAK SPACE
+&NS@@
+0x00a1    INVERTED EXCLAMATION MARK
+&!I@@
+0x00a2    CENT SIGN
+&Ct@@
+0x00a3    POUND SIGN
+&Pd@@
+0x00a4    CURRENCY SIGN
+&Cu@@
+0x00a5    YEN SIGN
+&Ye@@
+0x00a6    BROKEN BAR
+&BB@@
+0x00a7    SECTION SIGN
+&SE@@
+0x00a8    DIAERESIS
+&':@@
+0x00a9    COPYRIGHT SIGN
+&Co@@
+0x00aa    FEMININE ORDINAL INDICATOR
+&-a@@
+0x00ab    LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+&<<@@
+0x00ac    NOT SIGN
+&NO@@
+0x00ad    SOFT HYPHEN
+&--@@
+0x00ae    REGISTERED SIGN
+&Rg@@
+0x00af    MACRON
+&'m@@
+0x00b0    DEGREE SIGN
+&DG@@
+0x00b1    PLUS-MINUS SIGN
+&+-@@
+0x00b2    SUPERSCRIPT TWO
+&2S@@
+0x00b3    SUPERSCRIPT THREE
+&3S@@
+0x00b4    ACUTE ACCENT
+&''@@
+0x00b5    MICRO SIGN
+&My@@
+0x00b6    PILCROW SIGN
+&PI@@
+0x00b7    MIDDLE DOT
+&.M@@
+0x00b8    CEDILLA
+&',@@
+0x00b9    SUPERSCRIPT ONE
+&1S@@
+0x00ba    MASCULINE ORDINAL INDICATOR
+&-o@@
+0x00bb    RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+&>>@@
+0x00bc    VULGAR FRACTION ONE QUARTER
+&14@@
+0x00bd    VULGAR FRACTION ONE HALF
+&12@@
+0x00be    VULGAR FRACTION THREE QUARTERS
+&34@@
+0x00bf    INVERTED QUESTION MARK
+&?I@@
+0x00c0    LATIN CAPITAL LETTER A WITH GRAVE
+&A!@@
+0x00c1    LATIN CAPITAL LETTER A WITH ACUTE
+&A'@@
+0x00c2    LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+&A>@@
+0x00c3    LATIN CAPITAL LETTER A WITH TILDE
+&A?@@
+0x00c4    LATIN CAPITAL LETTER A WITH DIAERESIS
+&A:@@
+0x00c5    LATIN CAPITAL LETTER A WITH RING ABOVE
+&AA@@
+0x00c6    LATIN CAPITAL LETTER AE
+&AE@@
+0x00c7    LATIN CAPITAL LETTER C WITH CEDILLA
+&C,@@
+0x00c8    LATIN CAPITAL LETTER E WITH GRAVE
+&E!@@
+0x00c9    LATIN CAPITAL LETTER E WITH ACUTE
+&E'@@
+0x00ca    LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+&E>@@
+0x00cb    LATIN CAPITAL LETTER E WITH DIAERESIS
+&E:@@
+0x00cc    LATIN CAPITAL LETTER I WITH GRAVE
+&I!@@
+0x00cd    LATIN CAPITAL LETTER I WITH ACUTE
+&I'@@
+0x00ce    LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+&I>@@
+0x00cf    LATIN CAPITAL LETTER I WITH DIAERESIS
+&I:@@
+0x00d0    LATIN CAPITAL LETTER ETH (Icelandic)
+&D-@@
+0x00d1    LATIN CAPITAL LETTER N WITH TILDE
+&N?@@
+0x00d2    LATIN CAPITAL LETTER O WITH GRAVE
+&O!@@
+0x00d3    LATIN CAPITAL LETTER O WITH ACUTE
+&O'@@
+0x00d4    LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+&O>@@
+0x00d5    LATIN CAPITAL LETTER O WITH TILDE
+&O?@@
+0x00d6    LATIN CAPITAL LETTER O WITH DIAERESIS
+&O:@@
+0x00d7    MULTIPLICATION SIGN
+&*X@@
+0x00d8    LATIN CAPITAL LETTER O WITH STROKE
+&O/@@
+0x00d9    LATIN CAPITAL LETTER U WITH GRAVE
+&U!@@
+0x00da    LATIN CAPITAL LETTER U WITH ACUTE
+&U'@@
+0x00db    LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+&U>@@
+0x00dc    LATIN CAPITAL LETTER U WITH DIAERESIS
+&U:@@
+0x00dd    LATIN CAPITAL LETTER Y WITH ACUTE
+&Y'@@
+0x00de    LATIN CAPITAL LETTER THORN (Icelandic)
+&TH@@
+0x00df    LATIN SMALL LETTER SHARP S (German)
+&ss@@
+0x00e0    LATIN SMALL LETTER A WITH GRAVE
+&a!@@
+0x00e1    LATIN SMALL LETTER A WITH ACUTE
+&a'@@
+0x00e2    LATIN SMALL LETTER A WITH CIRCUMFLEX
+&a>@@
+0x00e3    LATIN SMALL LETTER A WITH TILDE
+&a?@@
+0x00e4    LATIN SMALL LETTER A WITH DIAERESIS
+&a:@@
+0x00e5    LATIN SMALL LETTER A WITH RING ABOVE
+&aa@@
+0x00e6    LATIN SMALL LETTER AE
+&ae@@
+0x00e7    LATIN SMALL LETTER C WITH CEDILLA
+&c,@@
+0x00e8    LATIN SMALL LETTER E WITH GRAVE
+&e!@@
+0x00e9    LATIN SMALL LETTER E WITH ACUTE
+&e'@@
+0x00ea    LATIN SMALL LETTER E WITH CIRCUMFLEX
+&e>@@
+0x00eb    LATIN SMALL LETTER E WITH DIAERESIS
+&e:@@
+0x00ec    LATIN SMALL LETTER I WITH GRAVE
+&i!@@
+0x00ed    LATIN SMALL LETTER I WITH ACUTE
+&i'@@
+0x00ee    LATIN SMALL LETTER I WITH CIRCUMFLEX
+&i>@@
+0x00ef    LATIN SMALL LETTER I WITH DIAERESIS
+&i:@@
+0x00f0    LATIN SMALL LETTER ETH (Icelandic)
+&d-@@
+0x00f1    LATIN SMALL LETTER N WITH TILDE
+&n?@@
+0x00f2    LATIN SMALL LETTER O WITH GRAVE
+&o!@@
+0x00f3    LATIN SMALL LETTER O WITH ACUTE
+&o'@@
+0x00f4    LATIN SMALL LETTER O WITH CIRCUMFLEX
+&o>@@
+0x00f5    LATIN SMALL LETTER O WITH TILDE
+&o?@@
+0x00f6    LATIN SMALL LETTER O WITH DIAERESIS
+&o:@@
+0x00f7    DIVISION SIGN
+&-:@@
+0x00f8    LATIN SMALL LETTER O WITH STROKE
+&o/@@
+0x00f9    LATIN SMALL LETTER U WITH GRAVE
+&u!@@
+0x00fa    LATIN SMALL LETTER U WITH ACUTE
+&u'@@
+0x00fb    LATIN SMALL LETTER U WITH CIRCUMFLEX
+&u>@@
+0x00fc    LATIN SMALL LETTER U WITH DIAERESIS
+&u:@@
+0x00fd    LATIN SMALL LETTER Y WITH ACUTE
+&y'@@
+0x00fe    LATIN SMALL LETTER THORN (Icelandic)
+&th@@
+0x00ff    LATIN SMALL LETTER Y WITH DIAERESIS
+&y:@@
+0x0100    LATIN CAPITAL LETTER A WITH MACRON
+&A-@@
+0x0101    LATIN SMALL LETTER A WITH MACRON
+&a-@@
+0x0102    LATIN CAPITAL LETTER A WITH BREVE
+&A(@@
+0x0103    LATIN SMALL LETTER A WITH BREVE
+&a(@@
+0x0104    LATIN CAPITAL LETTER A WITH OGONEK
+&A;@@
+0x0105    LATIN SMALL LETTER A WITH OGONEK
+&a;@@
+0x0106    LATIN CAPITAL LETTER C WITH ACUTE
+&C'@@
+0x0107    LATIN SMALL LETTER C WITH ACUTE
+&c'@@
+0x0108    LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+&C>@@
+0x0109    LATIN SMALL LETTER C WITH CIRCUMFLEX
+&c>@@
+0x010a    LATIN CAPITAL LETTER C WITH DOT ABOVE
+&C.@@
+0x010b    LATIN SMALL LETTER C WITH DOT ABOVE
+&c.@@
+0x010c    LATIN CAPITAL LETTER C WITH CARON
+&C<@@
+0x010d    LATIN SMALL LETTER C WITH CARON
+&c<@@
+0x010e    LATIN CAPITAL LETTER D WITH CARON
+&D<@@
+0x010f    LATIN SMALL LETTER D WITH CARON
+&d<@@
+0x0110    LATIN CAPITAL LETTER D WITH STROKE
+&D/@@
+0x0111    LATIN SMALL LETTER D WITH STROKE
+&d/@@
+0x0112    LATIN CAPITAL LETTER E WITH MACRON
+&E-@@
+0x0113    LATIN SMALL LETTER E WITH MACRON
+&e-@@
+0x0114    LATIN CAPITAL LETTER E WITH BREVE
+&E(@@
+0x0115    LATIN SMALL LETTER E WITH BREVE
+&e(@@
+0x0116    LATIN CAPITAL LETTER E WITH DOT ABOVE
+&E.@@
+0x0117    LATIN SMALL LETTER E WITH DOT ABOVE
+&e.@@
+0x0118    LATIN CAPITAL LETTER E WITH OGONEK
+&E;@@
+0x0119    LATIN SMALL LETTER E WITH OGONEK
+&e;@@
+0x011a    LATIN CAPITAL LETTER E WITH CARON
+&E<@@
+0x011b    LATIN SMALL LETTER E WITH CARON
+&e<@@
+0x011c    LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+&G>@@
+0x011d    LATIN SMALL LETTER G WITH CIRCUMFLEX
+&g>@@
+0x011e    LATIN CAPITAL LETTER G WITH BREVE
+&G(@@
+0x011f    LATIN SMALL LETTER G WITH BREVE
+&g(@@
+0x0120    LATIN CAPITAL LETTER G WITH DOT ABOVE
+&G.@@
+0x0121    LATIN SMALL LETTER G WITH DOT ABOVE
+&g.@@
+0x0122    LATIN CAPITAL LETTER G WITH CEDILLA
+&G,@@
+0x0123    LATIN SMALL LETTER G WITH CEDILLA
+&g,@@
+0x0124    LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+&H>@@
+0x0125    LATIN SMALL LETTER H WITH CIRCUMFLEX
+&h>@@
+0x0126    LATIN CAPITAL LETTER H WITH STROKE
+&H/@@
+0x0127    LATIN SMALL LETTER H WITH STROKE
+&h/@@
+0x0128    LATIN CAPITAL LETTER I WITH TILDE
+&I?@@
+0x0129    LATIN SMALL LETTER I WITH TILDE
+&i?@@
+0x012a    LATIN CAPITAL LETTER I WITH MACRON
+&I-@@
+0x012b    LATIN SMALL LETTER I WITH MACRON
+&i-@@
+0x012c    LATIN CAPITAL LETTER I WITH BREVE
+&I(@@
+0x012d    LATIN SMALL LETTER I WITH BREVE
+&i(@@
+0x012e    LATIN CAPITAL LETTER I WITH OGONEK
+&I;@@
+0x012f    LATIN SMALL LETTER I WITH OGONEK
+&i;@@
+0x0130    LATIN CAPITAL LETTER I WITH DOT ABOVE
+&I.@@
+0x0131    LATIN SMALL LETTER I DOTLESS
+&i.@@
+0x0132    LATIN CAPITAL LIGATURE IJ
+&IJ@@
+0x0133    LATIN SMALL LIGATURE IJ
+&ij@@
+0x0134    LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+&J>@@
+0x0135    LATIN SMALL LETTER J WITH CIRCUMFLEX
+&j>@@
+0x0136    LATIN CAPITAL LETTER K WITH CEDILLA
+&K,@@
+0x0137    LATIN SMALL LETTER K WITH CEDILLA
+&k,@@
+0x0138    LATIN SMALL LETTER KRA (Greenlandic)
+&kk@@
+0x0139    LATIN CAPITAL LETTER L WITH ACUTE
+&L'@@
+0x013a    LATIN SMALL LETTER L WITH ACUTE
+&l'@@
+0x013b    LATIN CAPITAL LETTER L WITH CEDILLA
+&L,@@
+0x013c    LATIN SMALL LETTER L WITH CEDILLA
+&l,@@
+0x013d    LATIN CAPITAL LETTER L WITH CARON
+&L<@@
+0x013e    LATIN SMALL LETTER L WITH CARON
+&l<@@
+0x013f    LATIN CAPITAL LETTER L WITH MIDDLE DOT
+&L.@@
+0x0140    LATIN SMALL LETTER L WITH MIDDLE DOT
+&l.@@
+0x0141    LATIN CAPITAL LETTER L WITH STROKE
+&L/@@
+0x0142    LATIN SMALL LETTER L WITH STROKE
+&l/@@
+0x0143    LATIN CAPITAL LETTER N WITH ACUTE
+&N'@@
+0x0144    LATIN SMALL LETTER N WITH ACUTE
+&n'@@
+0x0145    LATIN CAPITAL LETTER N WITH CEDILLA
+&N,@@
+0x0146    LATIN SMALL LETTER N WITH CEDILLA
+&n,@@
+0x0147    LATIN CAPITAL LETTER N WITH CARON
+&N<@@
+0x0148    LATIN SMALL LETTER N WITH CARON
+&n<@@
+0x0149    LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+&'n@@
+0x014a    LATIN CAPITAL LETTER ENG (Lappish)
+&NG@@
+0x014b    LATIN SMALL LETTER ENG (Lappish)
+&ng@@
+0x014c    LATIN CAPITAL LETTER O WITH MACRON
+&O-@@
+0x014d    LATIN SMALL LETTER O WITH MACRON
+&o-@@
+0x014e    LATIN CAPITAL LETTER O WITH BREVE
+&O(@@
+0x014f    LATIN SMALL LETTER O WITH BREVE
+&o(@@
+0x0150    LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+&O"@@
+0x0151    LATIN SMALL LETTER O WITH DOUBLE ACUTE
+&o"@@
+0x0152    LATIN CAPITAL LIGATURE OE
+&OE@@
+0x0153    LATIN SMALL LIGATURE OE
+&oe@@
+0x0154    LATIN CAPITAL LETTER R WITH ACUTE
+&R'@@
+0x0155    LATIN SMALL LETTER R WITH ACUTE
+&r'@@
+0x0156    LATIN CAPITAL LETTER R WITH CEDILLA
+&R,@@
+0x0157    LATIN SMALL LETTER R WITH CEDILLA
+&r,@@
+0x0158    LATIN CAPITAL LETTER R WITH CARON
+&R<@@
+0x0159    LATIN SMALL LETTER R WITH CARON
+&r<@@
+0x015a    LATIN CAPITAL LETTER S WITH ACUTE
+&S'@@
+0x015b    LATIN SMALL LETTER S WITH ACUTE
+&s'@@
+0x015c    LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+&S>@@
+0x015d    LATIN SMALL LETTER S WITH CIRCUMFLEX
+&s>@@
+0x015e    LATIN CAPITAL LETTER S WITH CEDILLA
+&S,@@
+0x015f    LATIN SMALL LETTER S WITH CEDILLA
+&s,@@
+0x0160    LATIN CAPITAL LETTER S WITH CARON
+&S<@@
+0x0161    LATIN SMALL LETTER S WITH CARON
+&s<@@
+0x0162    LATIN CAPITAL LETTER T WITH CEDILLA
+&T,@@
+0x0163    LATIN SMALL LETTER T WITH CEDILLA
+&t,@@
+0x0164    LATIN CAPITAL LETTER T WITH CARON
+&T<@@
+0x0165    LATIN SMALL LETTER T WITH CARON
+&t<@@
+0x0166    LATIN CAPITAL LETTER T WITH STROKE
+&T/@@
+0x0167    LATIN SMALL LETTER T WITH STROKE
+&t/@@
+0x0168    LATIN CAPITAL LETTER U WITH TILDE
+&U?@@
+0x0169    LATIN SMALL LETTER U WITH TILDE
+&u?@@
+0x016a    LATIN CAPITAL LETTER U WITH MACRON
+&U-@@
+0x016b    LATIN SMALL LETTER U WITH MACRON
+&u-@@
+0x016c    LATIN CAPITAL LETTER U WITH BREVE
+&U(@@
+0x016d    LATIN SMALL LETTER U WITH BREVE
+&u(@@
+0x016e    LATIN CAPITAL LETTER U WITH RING ABOVE
+&U0@@
+0x016f    LATIN SMALL LETTER U WITH RING ABOVE
+&u0@@
+0x0170    LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+&U"@@
+0x0171    LATIN SMALL LETTER U WITH DOUBLE ACUTE
+&u"@@
+0x0172    LATIN CAPITAL LETTER U WITH OGONEK
+&U;@@
+0x0173    LATIN SMALL LETTER U WITH OGONEK
+&u;@@
+0x0174    LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+&W>@@
+0x0175    LATIN SMALL LETTER W WITH CIRCUMFLEX
+&w>@@
+0x0176    LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+&Y>@@
+0x0177    LATIN SMALL LETTER Y WITH CIRCUMFLEX
+&y>@@
+0x0178    LATIN CAPITAL LETTER Y WITH DIAERESIS
+&Y:@@
+0x0179    LATIN CAPITAL LETTER Z WITH ACUTE
+&Z'@@
+0x017a    LATIN SMALL LETTER Z WITH ACUTE
+&z'@@
+0x017b    LATIN CAPITAL LETTER Z WITH DOT ABOVE
+&Z.@@
+0x017c    LATIN SMALL LETTER Z WITH DOT ABOVE
+&z.@@
+0x017d    LATIN CAPITAL LETTER Z WITH CARON
+&Z<@@
+0x017e    LATIN SMALL LETTER Z WITH CARON
+&z<@@
+0x01a0    LATIN CAPITAL LETTER O WITH HORN
+&O9@@
+0x01a1    LATIN SMALL LETTER O WITH HORN
+&o9@@
+0x01a2    LATIN CAPITAL LETTER OI
+&OI@@
+0x01a3    LATIN SMALL LETTER OI
+&oi@@
+0x01a6    LATIN LETTER YR
+&yr@@
+0x01af    LATIN CAPITAL LETTER U WITH HORN
+&U9@@
+0x01b0    LATIN SMALL LETTER U WITH HORN
+&u9@@
+0x01b5    LATIN CAPITAL LETTER Z WITH STROKE
+&Z/@@
+0x01b6    LATIN SMALL LETTER Z WITH STROKE
+&z/@@
+0x01b7    LATIN CAPITAL LETTER EZH
+&ED@@
+0x01cd    LATIN CAPITAL LETTER A WITH CARON
+&A<@@
+0x01ce    LATIN SMALL LETTER A WITH CARON
+&a<@@
+0x01cf    LATIN CAPITAL LETTER I WITH CARON
+&I<@@
+0x01d0    LATIN SMALL LETTER I WITH CARON
+&i<@@
+0x01d1    LATIN CAPITAL LETTER O WITH CARON
+&O<@@
+0x01d2    LATIN SMALL LETTER O WITH CARON
+&o<@@
+0x01d3    LATIN CAPITAL LETTER U WITH CARON
+&U<@@
+0x01d4    LATIN SMALL LETTER U WITH CARON
+&u<@@
+0x01d5    LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+&_U:-_@@
+0x01d6    LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+&_u:-_@@
+0x01d7    LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+&_U:'_@@
+0x01d8    LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+&_u:'_@@
+0x01d9    LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+&_U:<_@@
+0x01da    LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+&_u:<_@@
+0x01db    LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+&_U:!_@@
+0x01dc    LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+&_u:!_@@
+0x01de    LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+&A1@@
+0x01df    LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+&a1@@
+0x01e0    LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+&A7@@
+0x01e1    LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+&a7@@
+0x01e2    LATIN CAPITAL LETTER AE WITH MACRON
+&A3@@
+0x01e3    LATIN SMALL LETTER AE WITH MACRON
+&a3@@
+0x01e4    LATIN CAPITAL LETTER G WITH STROKE
+&G/@@
+0x01e5    LATIN SMALL LETTER G WITH STROKE
+&g/@@
+0x01e6    LATIN CAPITAL LETTER G WITH CARON
+&G<@@
+0x01e7    LATIN SMALL LETTER G WITH CARON
+&g<@@
+0x01e8    LATIN CAPITAL LETTER K WITH CARON
+&K<@@
+0x01e9    LATIN SMALL LETTER K WITH CARON
+&k<@@
+0x01ea    LATIN CAPITAL LETTER O WITH OGONEK
+&O;@@
+0x01eb    LATIN SMALL LETTER O WITH OGONEK
+&o;@@
+0x01ec    LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+&O1@@
+0x01ed    LATIN SMALL LETTER O WITH OGONEK AND MACRON
+&o1@@
+0x01ee    LATIN CAPITAL LETTER EZH WITH CARON
+&EZ@@
+0x01ef    LATIN SMALL LETTER EZH WITH CARON
+&ez@@
+0x01f0    LATIN SMALL LETTER J WITH CARON
+&j<@@
+0x01f4    LATIN CAPITAL LETTER G WITH ACUTE
+&G'@@
+0x01f5    LATIN SMALL LETTER G WITH ACUTE
+&g'@@
+0x01fa    LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+&_AA'_@@
+0x01fb    LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+&_aa'_@@
+0x01fc    LATIN CAPITAL LETTER AE WITH ACUTE
+&_AE'_@@
+0x01fd    LATIN SMALL LETTER AE WITH ACUTE
+&_ae'_@@
+0x01fe    LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+&_O/'_@@
+0x01ff    LATIN SMALL LETTER O WITH STROKE AND ACUTE
+&_o/'_@@
+0x02bf    MODIFIER LETTER LEFT HALF RING
+&;S@@
+0x02c7    CARON
+&'<@@
+0x02d8    BREVE
+&'(@@
+0x02d9    DOT ABOVE
+&'.@@
+0x02da    RING ABOVE
+&'0@@
+0x02db    OGONEK
+&';@@
+0x02dd    DOUBLE ACUTE ACCENT
+&'"@@
+0x0386    GREEK CAPITAL LETTER ALPHA WITH ACUTE
+&A%@@
+0x0388    GREEK CAPITAL LETTER EPSILON WITH ACUTE
+&E%@@
+0x0389    GREEK CAPITAL LETTER ETA WITH ACUTE
+&Y%@@
+0x038a    GREEK CAPITAL LETTER IOTA WITH ACUTE
+&I%@@
+0x038c    GREEK CAPITAL LETTER OMICRON WITH ACUTE
+&O%@@
+0x038e    GREEK CAPITAL LETTER UPSILON WITH ACUTE
+&U%@@
+0x038f    GREEK CAPITAL LETTER OMEGA WITH ACUTE
+&W%@@
+0x0390    GREEK SMALL LETTER IOTA WITH ACUTE AND DIAERESIS
+&i3@@
+0x0391    GREEK CAPITAL LETTER ALPHA
+&A*@@
+0x0392    GREEK CAPITAL LETTER BETA
+&B*@@
+0x0393    GREEK CAPITAL LETTER GAMMA
+&G*@@
+0x0394    GREEK CAPITAL LETTER DELTA
+&D*@@
+0x0395    GREEK CAPITAL LETTER EPSILON
+&E*@@
+0x0396    GREEK CAPITAL LETTER ZETA
+&Z*@@
+0x0397    GREEK CAPITAL LETTER ETA
+&Y*@@
+0x0398    GREEK CAPITAL LETTER THETA
+&H*@@
+0x0399    GREEK CAPITAL LETTER IOTA
+&I*@@
+0x039a    GREEK CAPITAL LETTER KAPPA
+&K*@@
+0x039b    GREEK CAPITAL LETTER LAMDA
+&L*@@
+0x039c    GREEK CAPITAL LETTER MU
+&M*@@
+0x039d    GREEK CAPITAL LETTER NU
+&N*@@
+0x039e    GREEK CAPITAL LETTER XI
+&C*@@
+0x039f    GREEK CAPITAL LETTER OMICRON
+&O*@@
+0x03a0    GREEK CAPITAL LETTER PI
+&P*@@
+0x03a1    GREEK CAPITAL LETTER RHO
+&R*@@
+0x03a3    GREEK CAPITAL LETTER SIGMA
+&S*@@
+0x03a4    GREEK CAPITAL LETTER TAU
+&T*@@
+0x03a5    GREEK CAPITAL LETTER UPSILON
+&U*@@
+0x03a6    GREEK CAPITAL LETTER PHI
+&F*@@
+0x03a7    GREEK CAPITAL LETTER CHI
+&X*@@
+0x03a8    GREEK CAPITAL LETTER PSI
+&Q*@@
+0x03a9    GREEK CAPITAL LETTER OMEGA
+&W*@@
+0x03aa    GREEK CAPITAL LETTER IOTA WITH DIAERESIS
+&J*@@
+0x03ab    GREEK CAPITAL LETTER UPSILON WITH DIAERESIS
+&V*@@
+0x03ac    GREEK SMALL LETTER ALPHA WITH ACUTE
+&a%@@
+0x03ad    GREEK SMALL LETTER EPSILON WITH ACUTE
+&e%@@
+0x03ae    GREEK SMALL LETTER ETA WITH ACUTE
+&y%@@
+0x03af    GREEK SMALL LETTER IOTA WITH ACUTE
+&i%@@
+0x03b0    GREEK SMALL LETTER UPSILON WITH ACUTE AND DIAERESIS
+&u3@@
+0x03b1    GREEK SMALL LETTER ALPHA
+&a*@@
+0x03b2    GREEK SMALL LETTER BETA
+&b*@@
+0x03b3    GREEK SMALL LETTER GAMMA
+&g*@@
+0x03b4    GREEK SMALL LETTER DELTA
+&d*@@
+0x03b5    GREEK SMALL LETTER EPSILON
+&e*@@
+0x03b6    GREEK SMALL LETTER ZETA
+&z*@@
+0x03b7    GREEK SMALL LETTER ETA
+&y*@@
+0x03b8    GREEK SMALL LETTER THETA
+&h*@@
+0x03b9    GREEK SMALL LETTER IOTA
+&i*@@
+0x03ba    GREEK SMALL LETTER KAPPA
+&k*@@
+0x03bb    GREEK SMALL LETTER LAMDA
+&l*@@
+0x03bc    GREEK SMALL LETTER MU
+&m*@@
+0x03bd    GREEK SMALL LETTER NU
+&n*@@
+0x03be    GREEK SMALL LETTER XI
+&c*@@
+0x03bf    GREEK SMALL LETTER OMICRON
+&o*@@
+0x03c0    GREEK SMALL LETTER PI
+&p*@@
+0x03c1    GREEK SMALL LETTER RHO
+&r*@@
+0x03c2    GREEK SMALL LETTER FINAL SIGMA
+&*s@@
+0x03c3    GREEK SMALL LETTER SIGMA
+&s*@@
+0x03c4    GREEK SMALL LETTER TAU
+&t*@@
+0x03c5    GREEK SMALL LETTER UPSILON
+&u*@@
+0x03c6    GREEK SMALL LETTER PHI
+&f*@@
+0x03c7    GREEK SMALL LETTER CHI
+&x*@@
+0x03c8    GREEK SMALL LETTER PSI
+&q*@@
+0x03c9    GREEK SMALL LETTER OMEGA
+&w*@@
+0x03ca    GREEK SMALL LETTER IOTA WITH DIAERESIS
+&j*@@
+0x03cb    GREEK SMALL LETTER UPSILON WITH DIAERESIS
+&v*@@
+0x03cc    GREEK SMALL LETTER OMICRON WITH ACUTE
+&o%@@
+0x03cd    GREEK SMALL LETTER UPSILON WITH ACUTE
+&u%@@
+0x03ce    GREEK SMALL LETTER OMEGA WITH ACUTE
+&w%@@
+0x03d8    GREEK NUMERAL SIGN
+&'G@@
+0x03d9    GREEK LOWER NUMERAL SIGN
+&,G@@
+0x03da    GREEK CAPITAL LETTER STIGMA
+&T3@@
+0x03db    GREEK SMALL LETTER STIGMA
+&t3@@
+0x03dc    GREEK CAPITAL LETTER DIGAMMA
+&M3@@
+0x03dd    GREEK SMALL LETTER DIGAMMA
+&m3@@
+0x03de    GREEK CAPITAL LETTER KOPPA
+&K3@@
+0x03df    GREEK SMALL LETTER KOPPA
+&k3@@
+0x03e0    GREEK CAPITAL LETTER SAMPI
+&P3@@
+0x03e1    GREEK SMALL LETTER SAMPI
+&p3@@
+0x03f4    ACUTE ACCENT AND DIAERESIS (Tonos and Dialytika)
+&'%@@
+0x03f5    GREEK IOTA BELOW
+&j3@@
+0x0401    CYRILLIC CAPITAL LETTER IO
+&IO@@
+0x0402    CYRILLIC CAPITAL LETTER DJE (Serbocroatian)
+&D%@@
+0x0403    CYRILLIC CAPITAL LETTER GJE (Macedonian)
+&G%@@
+0x0404    CYRILLIC CAPITAL LETTER UKRAINIAN IE
+&IE@@
+0x0405    CYRILLIC CAPITAL LETTER DZE (Macedonian)
+&DS@@
+0x0406    CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+&II@@
+0x0407    CYRILLIC CAPITAL LETTER YI (Ukrainian)
+&YI@@
+0x0408    CYRILLIC CAPITAL LETTER JE
+&J%@@
+0x0409    CYRILLIC CAPITAL LETTER LJE
+&LJ@@
+0x040a    CYRILLIC CAPITAL LETTER NJE
+&NJ@@
+0x040b    CYRILLIC CAPITAL LETTER TSHE (Serbocroatian)
+&Ts@@
+0x040c    CYRILLIC CAPITAL LETTER KJE (Macedonian)
+&KJ@@
+0x040e    CYRILLIC CAPITAL LETTER SHORT U (Byelorussian)
+&V%@@
+0x040f    CYRILLIC CAPITAL LETTER DZHE
+&DZ@@
+0x0410    CYRILLIC CAPITAL LETTER A
+&A=@@
+0x0411    CYRILLIC CAPITAL LETTER BE
+&B=@@
+0x0412    CYRILLIC CAPITAL LETTER VE
+&V=@@
+0x0413    CYRILLIC CAPITAL LETTER GHE
+&G=@@
+0x0414    CYRILLIC CAPITAL LETTER DE
+&D=@@
+0x0415    CYRILLIC CAPITAL LETTER IE
+&E=@@
+0x0416    CYRILLIC CAPITAL LETTER ZHE
+&Z%@@
+0x0417    CYRILLIC CAPITAL LETTER ZE
+&Z=@@
+0x0418    CYRILLIC CAPITAL LETTER I
+&I=@@
+0x0419    CYRILLIC CAPITAL LETTER SHORT I
+&J=@@
+0x041a    CYRILLIC CAPITAL LETTER KA
+&K=@@
+0x041b    CYRILLIC CAPITAL LETTER EL
+&L=@@
+0x041c    CYRILLIC CAPITAL LETTER EM
+&M=@@
+0x041d    CYRILLIC CAPITAL LETTER EN
+&N=@@
+0x041e    CYRILLIC CAPITAL LETTER O
+&O=@@
+0x041f    CYRILLIC CAPITAL LETTER PE
+&P=@@
+0x0420    CYRILLIC CAPITAL LETTER ER
+&R=@@
+0x0421    CYRILLIC CAPITAL LETTER ES
+&S=@@
+0x0422    CYRILLIC CAPITAL LETTER TE
+&T=@@
+0x0423    CYRILLIC CAPITAL LETTER U
+&U=@@
+0x0424    CYRILLIC CAPITAL LETTER EF
+&F=@@
+0x0425    CYRILLIC CAPITAL LETTER HA
+&H=@@
+0x0426    CYRILLIC CAPITAL LETTER TSE
+&C=@@
+0x0427    CYRILLIC CAPITAL LETTER CHE
+&C%@@
+0x0428    CYRILLIC CAPITAL LETTER SHA
+&S%@@
+0x0429    CYRILLIC CAPITAL LETTER SHCHA
+&Sc@@
+0x042a    CYRILLIC CAPITAL LETTER HARD SIGN
+&="@@
+0x042b    CYRILLIC CAPITAL LETTER YERU
+&Y=@@
+0x042c    CYRILLIC CAPITAL LETTER SOFT SIGN
+&%"@@
+0x042d    CYRILLIC CAPITAL LETTER E
+&JE@@
+0x042e    CYRILLIC CAPITAL LETTER YU
+&JU@@
+0x042f    CYRILLIC CAPITAL LETTER YA
+&JA@@
+0x0430    CYRILLIC SMALL LETTER A
+&a=@@
+0x0431    CYRILLIC SMALL LETTER BE
+&b=@@
+0x0432    CYRILLIC SMALL LETTER VE
+&v=@@
+0x0433    CYRILLIC SMALL LETTER GHE
+&g=@@
+0x0434    CYRILLIC SMALL LETTER DE
+&d=@@
+0x0435    CYRILLIC SMALL LETTER IE
+&e=@@
+0x0436    CYRILLIC SMALL LETTER ZHE
+&z%@@
+0x0437    CYRILLIC SMALL LETTER ZE
+&z=@@
+0x0438    CYRILLIC SMALL LETTER I
+&i=@@
+0x0439    CYRILLIC SMALL LETTER SHORT I
+&j=@@
+0x043a    CYRILLIC SMALL LETTER KA
+&k=@@
+0x043b    CYRILLIC SMALL LETTER EL
+&l=@@
+0x043c    CYRILLIC SMALL LETTER EM
+&m=@@
+0x043d    CYRILLIC SMALL LETTER EN
+&n=@@
+0x043e    CYRILLIC SMALL LETTER O
+&o=@@
+0x043f    CYRILLIC SMALL LETTER PE
+&p=@@
+0x0440    CYRILLIC SMALL LETTER ER
+&r=@@
+0x0441    CYRILLIC SMALL LETTER ES
+&s=@@
+0x0442    CYRILLIC SMALL LETTER TE
+&t=@@
+0x0443    CYRILLIC SMALL LETTER U
+&u=@@
+0x0444    CYRILLIC SMALL LETTER EF
+&f=@@
+0x0445    CYRILLIC SMALL LETTER HA
+&h=@@
+0x0446    CYRILLIC SMALL LETTER TSE
+&c=@@
+0x0447    CYRILLIC SMALL LETTER CHE
+&c%@@
+0x0448    CYRILLIC SMALL LETTER SHA
+&s%@@
+0x0449    CYRILLIC SMALL LETTER SHCHA
+&sc@@
+0x044a    CYRILLIC SMALL LETTER HARD SIGN
+&='@@
+0x044b    CYRILLIC SMALL LETTER YERU
+&y=@@
+0x044c    CYRILLIC SMALL LETTER SOFT SIGN
+&%'@@
+0x044d    CYRILLIC SMALL LETTER E
+&je@@
+0x044e    CYRILLIC SMALL LETTER YU
+&ju@@
+0x044f    CYRILLIC SMALL LETTER YA
+&ja@@
+0x0451    CYRILLIC SMALL LETTER IO
+&io@@
+0x0452    CYRILLIC SMALL LETTER DJE (Serbocroatian)
+&d%@@
+0x0453    CYRILLIC SMALL LETTER GJE (Macedonian)
+&g%@@
+0x0454    CYRILLIC SMALL LETTER UKRAINIAN IE
+&ie@@
+0x0455    CYRILLIC SMALL LETTER DZE (Macedonian)
+&ds@@
+0x0456    CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+&ii@@
+0x0457    CYRILLIC SMALL LETTER YI (Ukrainian)
+&yi@@
+0x0458    CYRILLIC SMALL LETTER JE
+&j%@@
+0x0459    CYRILLIC SMALL LETTER LJE
+&lj@@
+0x045a    CYRILLIC SMALL LETTER NJE
+&nj@@
+0x045b    CYRILLIC SMALL LETTER TSHE (Serbocroatian)
+&ts@@
+0x045c    CYRILLIC SMALL LETTER KJE (Macedonian)
+&kj@@
+0x045e    CYRILLIC SMALL LETTER SHORT U (Byelorussian)
+&v%@@
+0x045f    CYRILLIC SMALL LETTER DZHE
+&dz@@
+0x0462    CYRILLIC CAPITAL LETTER YAT
+&Y3@@
+0x0463    CYRILLIC SMALL LETTER YAT
+&y3@@
+0x046a    CYRILLIC CAPITAL LETTER BIG YUS
+&O3@@
+0x046b    CYRILLIC SMALL LETTER BIG YUS
+&o3@@
+0x0472    CYRILLIC CAPITAL LETTER FITA
+&F3@@
+0x0473    CYRILLIC SMALL LETTER FITA
+&f3@@
+0x0474    CYRILLIC CAPITAL LETTER IZHITSA
+&V3@@
+0x0475    CYRILLIC SMALL LETTER IZHITSA
+&v3@@
+0x0480    CYRILLIC CAPITAL LETTER KOPPA
+&C3@@
+0x0481    CYRILLIC SMALL LETTER KOPPA
+&c3@@
+0x0490    CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+&G3@@
+0x0491    CYRILLIC SMALL LETTER GHE WITH UPTURN
+&g3@@
+0x05d0    HEBREW LETTER ALEF
+&A+@@
+0x05d1    HEBREW LETTER BET
+&B+@@
+0x05d2    HEBREW LETTER GIMEL
+&G+@@
+0x05d3    HEBREW LETTER DALET
+&D+@@
+0x05d4    HEBREW LETTER HE
+&H+@@
+0x05d5    HEBREW LETTER VAV
+&W+@@
+0x05d6    HEBREW LETTER ZAYIN
+&Z+@@
+0x05d7    HEBREW LETTER HET
+&X+@@
+0x05d8    HEBREW LETTER TET
+&Tj@@
+0x05d9    HEBREW LETTER YOD
+&J+@@
+0x05da    HEBREW LETTER FINAL KAF
+&K%@@
+0x05db    HEBREW LETTER KAF
+&K+@@
+0x05dc    HEBREW LETTER LAMED
+&L+@@
+0x05dd    HEBREW LETTER FINAL MEM
+&M%@@
+0x05de    HEBREW LETTER MEM
+&M+@@
+0x05df    HEBREW LETTER FINAL NUN
+&N%@@
+0x05e0    HEBREW LETTER NUN
+&N+@@
+0x05e1    HEBREW LETTER SAMEKH
+&S+@@
+0x05e2    HEBREW LETTER AYIN
+&E+@@
+0x05e3    HEBREW LETTER FINAL PE
+&P%@@
+0x05e4    HEBREW LETTER PE
+&P+@@
+0x05e5    HEBREW LETTER FINAL TSADI
+&Zj@@
+0x05e6    HEBREW LETTER TSADI
+&ZJ@@
+0x05e7    HEBREW LETTER QOF
+&Q+@@
+0x05e8    HEBREW LETTER RESH
+&R+@@
+0x05e9    HEBREW LETTER SHIN
+&Sh@@
+0x05ea    HEBREW LETTER TAV
+&T+@@
+0x060c    ARABIC COMMA
+&,+@@
+0x061b    ARABIC SEMICOLON
+&;+@@
+0x061f    ARABIC QUESTION MARK
+&?+@@
+0x0621    ARABIC LETTER HAMZA
+&H'@@
+0x0622    ARABIC LETTER ALEF WITH MADDA ABOVE
+&aM@@
+0x0623    ARABIC LETTER ALEF WITH HAMZA ABOVE
+&aH@@
+0x0624    ARABIC LETTER WAW WITH HAMZA ABOVE
+&wH@@
+0x0625    ARABIC LETTER ALEF WITH HAMZA BELOW
+&ah@@
+0x0626    ARABIC LETTER YEH WITH HAMZA ABOVE
+&yH@@
+0x0627    ARABIC LETTER ALEF
+&a+@@
+0x0628    ARABIC LETTER BEH
+&b+@@
+0x0629    ARABIC LETTER TEH MARBUTA
+&tm@@
+0x062a    ARABIC LETTER TEH
+&t+@@
+0x062b    ARABIC LETTER THEH
+&tk@@
+0x062c    ARABIC LETTER JEEM
+&g+@@
+0x062d    ARABIC LETTER HAH
+&hk@@
+0x062e    ARABIC LETTER KHAH
+&x+@@
+0x062f    ARABIC LETTER DAL
+&d+@@
+0x0630    ARABIC LETTER THAL
+&dk@@
+0x0631    ARABIC LETTER REH
+&r+@@
+0x0632    ARABIC LETTER ZAIN
+&z+@@
+0x0633    ARABIC LETTER SEEN
+&s+@@
+0x0634    ARABIC LETTER SHEEN
+&sn@@
+0x0635    ARABIC LETTER SAD
+&c+@@
+0x0636    ARABIC LETTER DAD
+&dd@@
+0x0637    ARABIC LETTER TAH
+&tj@@
+0x0638    ARABIC LETTER ZAH
+&zH@@
+0x0639    ARABIC LETTER AIN
+&e+@@
+0x063a    ARABIC LETTER GHAIN
+&i+@@
+0x0640    ARABIC TATWEEL
+&++@@
+0x0641    ARABIC LETTER FEH
+&f+@@
+0x0642    ARABIC LETTER QAF
+&q+@@
+0x0643    ARABIC LETTER KAF
+&k+@@
+0x0644    ARABIC LETTER LAM
+&l+@@
+0x0645    ARABIC LETTER MEEM
+&m+@@
+0x0646    ARABIC LETTER NOON
+&n+@@
+0x0647    ARABIC LETTER HEH
+&h+@@
+0x0648    ARABIC LETTER WAW
+&w+@@
+0x0649    ARABIC LETTER ALEF MAKSURA
+&j+@@
+0x064a    ARABIC LETTER YEH
+&y+@@
+0x064b    ARABIC FATHATAN
+&:+@@
+0x064c    ARABIC DAMMATAN
+&"+@@
+0x064d    ARABIC KASRATAN
+&=+@@
+0x064e    ARABIC FATHA
+&/+@@
+0x064f    ARABIC DAMMA
+&'+@@
+0x0650    ARABIC KASRA
+&1+@@
+0x0651    ARABIC SHADDA
+&3+@@
+0x0652    ARABIC SUKUN
+&0+@@
+0x0670    SUPERSCRIPT ARABIC LETTER ALEF
+&aS@@
+0x067e    ARABIC LETTER PEH
+&p+@@
+0x06a4    ARABIC LETTER VEH
+&v+@@
+0x06af    ARABIC LETTER GAF
+&gf@@
+0x06f0    EASTERN ARABIC-INDIC DIGIT ZERO
+&0a@@
+0x06f1    EASTERN ARABIC-INDIC DIGIT ONE
+&1a@@
+0x06f2    EASTERN ARABIC-INDIC DIGIT TWO
+&2a@@
+0x06f3    EASTERN ARABIC-INDIC DIGIT THREE
+&3a@@
+0x06f4    EASTERN ARABIC-INDIC DIGIT FOUR
+&4a@@
+0x06f5    EASTERN ARABIC-INDIC DIGIT FIVE
+&5a@@
+0x06f6    EASTERN ARABIC-INDIC DIGIT SIX
+&6a@@
+0x06f7    EASTERN ARABIC-INDIC DIGIT SEVEN
+&7a@@
+0x06f8    EASTERN ARABIC-INDIC DIGIT EIGHT
+&8a@@
+0x06f9    EASTERN ARABIC-INDIC DIGIT NINE
+&9a@@
+0x1e00    LATIN CAPITAL LETTER A WITH RING BELOW
+&_A-0_@@
+0x1e01    LATIN SMALL LETTER A WITH RING BELOW
+&_a-0_@@
+0x1e02    LATIN CAPITAL LETTER B WITH DOT ABOVE
+&B.@@
+0x1e03    LATIN SMALL LETTER B WITH DOT ABOVE
+&b.@@
+0x1e04    LATIN CAPITAL LETTER B WITH DOT BELOW
+&_B-._@@
+0x1e05    LATIN SMALL LETTER B WITH DOT BELOW
+&_b-._@@
+0x1e06    LATIN CAPITAL LETTER B WITH LINE BELOW
+&B_@@
+0x1e07    LATIN SMALL LETTER B WITH LINE BELOW
+&b_@@
+0x1e08    LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+&_C,'_@@
+0x1e09    LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+&_c,'_@@
+0x1e0a    LATIN CAPITAL LETTER D WITH DOT ABOVE
+&D.@@
+0x1e0b    LATIN SMALL LETTER D WITH DOT ABOVE
+&d.@@
+0x1e0c    LATIN CAPITAL LETTER D WITH DOT BELOW
+&_D-._@@
+0x1e0d    LATIN SMALL LETTER D WITH DOT BELOW
+&_d-._@@
+0x1e0e    LATIN CAPITAL LETTER D WITH LINE BELOW
+&D_@@
+0x1e0f    LATIN SMALL LETTER D WITH LINE BELOW
+&d_@@
+0x1e10    LATIN CAPITAL LETTER D WITH CEDILLA
+&D,@@
+0x1e11    LATIN SMALL LETTER D WITH CEDILLA
+&d,@@
+0x1e12    LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+&_D->_@@
+0x1e13    LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+&_d->_@@
+0x1e14    LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+&_E-!_@@
+0x1e15    LATIN SMALL LETTER E WITH MACRON AND GRAVE
+&_e-!_@@
+0x1e16    LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+&_E-'_@@
+0x1e17    LATIN SMALL LETTER E WITH MACRON AND ACUTE
+&_e-'_@@
+0x1e18    LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+&_E->_@@
+0x1e19    LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+&_e->_@@
+0x1e1a    LATIN CAPITAL LETTER E WITH TILDE BELOW
+&_E-?_@@
+0x1e1b    LATIN SMALL LETTER E WITH TILDE BELOW
+&_e-?_@@
+0x1e1c    LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+&_E,(_@@
+0x1e1d    LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+&_e,(_@@
+0x1e1e    LATIN CAPITAL LETTER F WITH DOT ABOVE
+&F.@@
+0x1e1f    LATIN SMALL LETTER F WITH DOT ABOVE
+&f.@@
+0x1e20    LATIN CAPITAL LETTER G WITH MACRON
+&G-@@
+0x1e21    LATIN SMALL LETTER G WITH MACRON
+&g-@@
+0x1e22    LATIN CAPITAL LETTER H WITH DOT ABOVE
+&H.@@
+0x1e23    LATIN SMALL LETTER H WITH DOT ABOVE
+&h.@@
+0x1e24    LATIN CAPITAL LETTER H WITH DOT BELOW
+&_H-._@@
+0x1e25    LATIN SMALL LETTER H WITH DOT BELOW
+&_h-._@@
+0x1e26    LATIN CAPITAL LETTER H WITH DIAERESIS
+&H:@@
+0x1e27    LATIN SMALL LETTER H WITH DIAERESIS
+&h:@@
+0x1e28    LATIN CAPITAL LETTER H WITH CEDILLA
+&H,@@
+0x1e29    LATIN SMALL LETTER H WITH CEDILLA
+&h,@@
+0x1e2a    LATIN CAPITAL LETTER H WITH BREVE BELOW
+&_H-(_@@
+0x1e2b    LATIN SMALL LETTER H WITH BREVE BELOW
+&_h-(_@@
+0x1e2c    LATIN CAPITAL LETTER I WITH TILDE BELOW
+&_I-?_@@
+0x1e2d    LATIN SMALL LETTER I WITH TILDE BELOW
+&_i-?_@@
+0x1e2e    LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+&_I:'_@@
+0x1e2f    LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+&_i:'_@@
+0x1e30    LATIN CAPITAL LETTER K WITH ACUTE
+&K'@@
+0x1e31    LATIN SMALL LETTER K WITH ACUTE
+&k'@@
+0x1e32    LATIN CAPITAL LETTER K WITH DOT BELOW
+&_K-._@@
+0x1e33    LATIN SMALL LETTER K WITH DOT BELOW
+&_k-._@@
+0x1e34    LATIN CAPITAL LETTER K WITH LINE BELOW
+&K_@@
+0x1e35    LATIN SMALL LETTER K WITH LINE BELOW
+&k_@@
+0x1e36    LATIN CAPITAL LETTER L WITH DOT BELOW
+&_L-._@@
+0x1e37    LATIN SMALL LETTER L WITH DOT BELOW
+&_l-._@@
+0x1e38    LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+&_L--._@@
+0x1e39    LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+&_l--._@@
+0x1e3a    LATIN CAPITAL LETTER L WITH LINE BELOW
+&L_@@
+0x1e3b    LATIN SMALL LETTER L WITH LINE BELOW
+&l_@@
+0x1e3c    LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+&_L->_@@
+0x1e3d    LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+&_l->_@@
+0x1e3e    LATIN CAPITAL LETTER M WITH ACUTE
+&M'@@
+0x1e3f    LATIN SMALL LETTER M WITH ACUTE
+&m'@@
+0x1e40    LATIN CAPITAL LETTER M WITH DOT ABOVE
+&M.@@
+0x1e41    LATIN SMALL LETTER M WITH DOT ABOVE
+&m.@@
+0x1e42    LATIN CAPITAL LETTER M WITH DOT BELOW
+&_M-._@@
+0x1e43    LATIN SMALL LETTER M WITH DOT BELOW
+&_m-._@@
+0x1e44    LATIN CAPITAL LETTER N WITH DOT ABOVE
+&N.@@
+0x1e45    LATIN SMALL LETTER N WITH DOT ABOVE
+&n.@@
+0x1e46    LATIN CAPITAL LETTER N WITH DOT BELOW
+&_N-._@@
+0x1e47    LATIN SMALL LETTER N WITH DOT BELOW
+&_n-._@@
+0x1e48    LATIN CAPITAL LETTER N WITH LINE BELOW
+&N_@@
+0x1e49    LATIN SMALL LETTER N WITH LINE BELOW
+&n_@@
+0x1e4a    LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+&_N->_@@
+0x1e4b    LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+&_N->_@@
+0x1e4c    LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+&_O?'_@@
+0x1e4d    LATIN SMALL LETTER O WITH TILDE AND ACUTE
+&_o?'_@@
+0x1e4e    LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+&_O?:_@@
+0x1e4f    LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+&_o?:_@@
+0x1e50    LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+&_O-!_@@
+0x1e51    LATIN SMALL LETTER O WITH MACRON AND GRAVE
+&_o-!_@@
+0x1e52    LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+&_O-'_@@
+0x1e53    LATIN SMALL LETTER O WITH MACRON AND ACUTE
+&_o-'_@@
+0x1e54    LATIN CAPITAL LETTER P WITH ACUTE
+&P'@@
+0x1e55    LATIN SMALL LETTER P WITH ACUTE
+&p'@@
+0x1e56    LATIN CAPITAL LETTER P WITH DOT ABOVE
+&P.@@
+0x1e57    LATIN SMALL LETTER P WITH DOT ABOVE
+&p.@@
+0x1e58    LATIN CAPITAL LETTER R WITH DOT ABOVE
+&R.@@
+0x1e59    LATIN SMALL LETTER R WITH DOT ABOVE
+&r.@@
+0x1e5a    LATIN CAPITAL LETTER R WITH DOT BELOW
+&_R-._@@
+0x1e5b    LATIN SMALL LETTER R WITH DOT BELOW
+&_r-._@@
+0x1e5c    LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+&_R--._@@
+0x1e5d    LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+&_r--._@@
+0x1e5e    LATIN CAPITAL LETTER R WITH LINE BELOW
+&R_@@
+0x1e5f    LATIN SMALL LETTER R WITH LINE BELOW
+&r_@@
+0x1e60    LATIN CAPITAL LETTER S WITH DOT ABOVE
+&S.@@
+0x1e61    LATIN SMALL LETTER S WITH DOT ABOVE
+&s.@@
+0x1e62    LATIN CAPITAL LETTER S WITH DOT BELOW
+&_S-._@@
+0x1e63    LATIN SMALL LETTER S WITH DOT BELOW
+&_s-._@@
+0x1e64    LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+&_S'._@@
+0x1e65    LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+&_s'._@@
+0x1e66    LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+&_S<._@@
+0x1e67    LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+&_s<._@@
+0x1e68    LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+&_S.-._@@
+0x1e69    LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+&_S.-._@@
+0x1e6a    LATIN CAPITAL LETTER T WITH DOT ABOVE
+&T.@@
+0x1e6b    LATIN SMALL LETTER T WITH DOT ABOVE
+&t.@@
+0x1e6c    LATIN CAPITAL LETTER T WITH DOT BELOW
+&_T-._@@
+0x1e6d    LATIN SMALL LETTER T WITH DOT BELOW
+&_t-._@@
+0x1e6e    LATIN CAPITAL LETTER T WITH LINE BELOW
+&T_@@
+0x1e6f    LATIN SMALL LETTER T WITH LINE BELOW
+&t_@@
+0x1e70    LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+&_T->_@@
+0x1e71    LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+&_t->_@@
+0x1e72    LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+&_U--:_@@
+0x1e73    LATIN SMALL LETTER U WITH DIAERESIS BELOW
+&_u--:_@@
+0x1e74    LATIN CAPITAL LETTER U WITH TILDE BELOW
+&_U-?_@@
+0x1e75    LATIN SMALL LETTER U WITH TILDE BELOW
+&_u-?_@@
+0x1e76    LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+&_U->_@@
+0x1e77    LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+&_u->_@@
+0x1e78    LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+&_U?'_@@
+0x1e79    LATIN SMALL LETTER U WITH TILDE AND ACUTE
+&_u?'_@@
+0x1e7a    LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+&_U-:_@@
+0x1e7b    LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+&_u-:_@@
+0x1e7c    LATIN CAPITAL LETTER V WITH TILDE
+&V?@@
+0x1e7d    LATIN SMALL LETTER V WITH TILDE
+&v?@@
+0x1e7e    LATIN CAPITAL LETTER V WITH DOT BELOW
+&_V-._@@
+0x1e7f    LATIN SMALL LETTER V WITH DOT BELOW
+&_v-._@@
+0x1e80    LATIN CAPITAL LETTER W WITH GRAVE
+&W!@@
+0x1e81    LATIN SMALL LETTER W WITH GRAVE
+&w!@@
+0x1e82    LATIN CAPITAL LETTER W WITH ACUTE
+&W'@@
+0x1e83    LATIN SMALL LETTER W WITH ACUTE
+&w'@@
+0x1e84    LATIN CAPITAL LETTER W WITH DIAERESIS
+&W:@@
+0x1e85    LATIN SMALL LETTER W WITH DIAERESIS
+&w:@@
+0x1e86    LATIN CAPITAL LETTER W WITH DOT ABOVE
+&W.@@
+0x1e87    LATIN SMALL LETTER W WITH DOT ABOVE
+&w.@@
+0x1e88    LATIN CAPITAL LETTER W WITH DOT BELOW
+&_W-._@@
+0x1e89    LATIN SMALL LETTER W WITH DOT BELOW
+&_w-._@@
+0x1e8a    LATIN CAPITAL LETTER X WITH DOT ABOVE
+&X.@@
+0x1e8b    LATIN SMALL LETTER X WITH DOT ABOVE
+&x.@@
+0x1e8c    LATIN CAPITAL LETTER X WITH DIAERESIS
+&X:@@
+0x1e8d    LATIN SMALL LETTER X WITH DIAERESIS
+&x:@@
+0x1e8e    LATIN CAPITAL LETTER Y WITH DOT ABOVE
+&Y.@@
+0x1e8f    LATIN SMALL LETTER Y WITH DOT ABOVE
+&y.@@
+0x1e90    LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+&Z>@@
+0x1e91    LATIN SMALL LETTER Z WITH CIRCUMFLEX
+&z>@@
+0x1e92    LATIN CAPITAL LETTER Z WITH DOT BELOW
+&_Z-._@@
+0x1e93    LATIN SMALL LETTER Z WITH DOT BELOW
+&_z-._@@
+0x1e94    LATIN CAPITAL LETTER Z WITH LINE BELOW
+&Z_@@
+0x1e95    LATIN SMALL LETTER Z WITH LINE BELOW
+&z_@@
+0x1e96    LATIN SMALL LETTER H WITH LINE BELOW
+&h_@@
+0x1e97    LATIN SMALL LETTER T WITH DIAERESIS
+&t:@@
+0x1e98    LATIN SMALL LETTER W WITH RING ABOVE
+&w0@@
+0x1e99    LATIN SMALL LETTER Y WITH RING ABOVE
+&y0@@
+0x1ea0    LATIN CAPITAL LETTER A WITH DOT BELOW
+&_A-._@@
+0x1ea1    LATIN SMALL LETTER A WITH DOT BELOW
+&_a-._@@
+0x1ea2    LATIN CAPITAL LETTER A WITH HOOK ABOVE
+&A2@@
+0x1ea3    LATIN SMALL LETTER A WITH HOOK ABOVE
+&a2@@
+0x1ea4    LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+&_A>'_@@
+0x1ea5    LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+&_a>'_@@
+0x1ea6    LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+&_A>!_@@
+0x1ea7    LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+&_a>!_@@
+0x1ea8    LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+&_A>2_@@
+0x1ea9    LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+&_a>2_@@
+0x1eaa    LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+&_A>?_@@
+0x1eab    LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+&_a>?_@@
+0x1eac    LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+&_A>-._@@
+0x1ead    LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+&_a>-._@@
+0x1eae    LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+&_A('_@@
+0x1eaf    LATIN SMALL LETTER A WITH BREVE AND ACUTE
+&_a('_@@
+0x1eb0    LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+&_A(!_@@
+0x1eb1    LATIN SMALL LETTER A WITH BREVE AND GRAVE
+&_a(!_@@
+0x1eb2    LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+&_A(2_@@
+0x1eb3    LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+&_a(2_@@
+0x1eb4    LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+&_A(?_@@
+0x1eb5    LATIN SMALL LETTER A WITH BREVE AND TILDE
+&_a(?_@@
+0x1eb6    LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+&_A(-._@@
+0x1eb7    LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+&_a(-._@@
+0x1eb8    LATIN CAPITAL LETTER E WITH DOT BELOW
+&_E-._@@
+0x1eb9    LATIN SMALL LETTER E WITH DOT BELOW
+&_e-._@@
+0x1eba    LATIN CAPITAL LETTER E WITH HOOK ABOVE
+&E2@@
+0x1ebb    LATIN SMALL LETTER E WITH HOOK ABOVE
+&e2@@
+0x1ebc    LATIN CAPITAL LETTER E WITH TILDE
+&E?@@
+0x1ebd    LATIN SMALL LETTER E WITH TILDE
+&e?@@
+0x1ebe    LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+&_E>'_@@
+0x1ebf    LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+&_e>'_@@
+0x1ec0    LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+&_E>!_@@
+0x1ec1    LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+&_e>!_@@
+0x1ec2    LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+&_E>2_@@
+0x1ec3    LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+&_e>2_@@
+0x1ec4    LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+&_E>?_@@
+0x1ec5    LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+&_e>?_@@
+0x1ec6    LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+&_E>-._@@
+0x1ec7    LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+&_e>-._@@
+0x1ec8    LATIN CAPITAL LETTER I WITH HOOK ABOVE
+&I2@@
+0x1ec9    LATIN SMALL LETTER I WITH HOOK ABOVE
+&i2@@
+0x1eca    LATIN CAPITAL LETTER I WITH DOT BELOW
+&_I-._@@
+0x1ecb    LATIN SMALL LETTER I WITH DOT BELOW
+&_i-._@@
+0x1ecc    LATIN CAPITAL LETTER O WITH DOT BELOW
+&_O-._@@
+0x1ecd    LATIN SMALL LETTER O WITH DOT BELOW
+&_o-._@@
+0x1ece    LATIN CAPITAL LETTER O WITH HOOK ABOVE
+&O2@@
+0x1ecf    LATIN SMALL LETTER O WITH HOOK ABOVE
+&o2@@
+0x1ed0    LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+&_O>'_@@
+0x1ed1    LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+&_o>'_@@
+0x1ed2    LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+&_O>!_@@
+0x1ed3    LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+&_o>!_@@
+0x1ed4    LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+&_O>2_@@
+0x1ed5    LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+&_o>2_@@
+0x1ed6    LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+&_O>?_@@
+0x1ed7    LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+&_o>?_@@
+0x1ed8    LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+&_O>-._@@
+0x1ed9    LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+&_o>-._@@
+0x1eda    LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+&_O9'_@@
+0x1edb    LATIN SMALL LETTER O WITH HORN AND ACUTE
+&_o9'_@@
+0x1edc    LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+&_O9!_@@
+0x1edd    LATIN SMALL LETTER O WITH HORN AND GRAVE
+&_o9!_@@
+0x1ede    LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+&_O92_@@
+0x1edf    LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+&_o92_@@
+0x1ee0    LATIN CAPITAL LETTER O WITH HORN AND TILDE
+&_O9?_@@
+0x1ee1    LATIN SMALL LETTER O WITH HORN AND TILDE
+&_o9?_@@
+0x1ee2    LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+&_O9-._@@
+0x1ee3    LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+&_o9-._@@
+0x1ee4    LATIN CAPITAL LETTER U WITH DOT BELOW
+&_U-._@@
+0x1ee5    LATIN SMALL LETTER U WITH DOT BELOW
+&_u-._@@
+0x1ee6    LATIN CAPITAL LETTER U WITH HOOK ABOVE
+&U2@@
+0x1ee7    LATIN SMALL LETTER U WITH HOOK ABOVE
+&u2@@
+0x1ee8    LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+&_U9'_@@
+0x1ee9    LATIN SMALL LETTER U WITH HORN AND ACUTE
+&_u9'_@@
+0x1eea    LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+&_U9!_@@
+0x1eeb    LATIN SMALL LETTER U WITH HORN AND GRAVE
+&_u9!_@@
+0x1eec    LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+&_U92_@@
+0x1eed    LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+&_u92_@@
+0x1eee    LATIN CAPITAL LETTER U WITH HORN AND TILDE
+&_U9?_@@
+0x1eef    LATIN SMALL LETTER U WITH HORN AND TILDE
+&_u9?_@@
+0x1ef0    LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+&_U9-._@@
+0x1ef1    LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+&_u9-._@@
+0x1ef2    LATIN CAPITAL LETTER Y WITH GRAVE
+&Y!@@
+0x1ef3    LATIN SMALL LETTER Y WITH GRAVE
+&y!@@
+0x1ef4    LATIN CAPITAL LETTER Y WITH DOT BELOW
+&_Y-._@@
+0x1ef5    LATIN SMALL LETTER Y WITH DOT BELOW
+&_y-._@@
+0x1ef6    LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+&Y2@@
+0x1ef7    LATIN SMALL LETTER Y WITH HOOK ABOVE
+&y2@@
+0x1ef8    LATIN CAPITAL LETTER Y WITH TILDE
+&Y?@@
+0x1ef9    LATIN SMALL LETTER Y WITH TILDE
+&y?@@
+0x1f00    GREEK DASIA AND ACUTE ACCENT
+&;'@@
+0x1f01    GREEK PSILI AND ACUTE ACCENT
+&,'@@
+0x1f02    GREEK DASIA AND VARIA
+&;!@@
+0x1f03    GREEK PSILI AND VARIA
+&,!@@
+0x1f04    GREEK DASIA AND PERISPOMENI
+&?;@@
+0x1f05    GREEK PSILI AND PERISPOMENI
+&?,@@
+0x1f06    GREEK DIAERESIS AND VARIA
+&!:@@
+0x1f07    GREEK DIAERESIS AND PERISPOMENI
+&?:@@
+0x2002    EN SPACE
+&1N@@
+0x2003    EM SPACE
+&1M@@
+0x2004    THREE-PER-EM SPACE
+&3M@@
+0x2005    FOUR-PER-EM SPACE
+&4M@@
+0x2006    SIX-PER-EM SPACE
+&6M@@
+0x2009    THIN SPACE
+&1T@@
+0x200a    HAIR SPACE
+&1H@@
+0x2010    HYPHEN
+&-1@@
+0x2013    EN DASH
+&-N@@
+0x2014    EM DASH
+&-M@@
+0x2015    HORIZONTAL BAR
+&-3@@
+0x2016    DOUBLE VERTICAL LINE
+&!2@@
+0x2017    DOUBLE LOW LINE
+&=2@@
+0x2018    LEFT SINGLE QUOTATION MARK
+&'6@@
+0x2019    RIGHT SINGLE QUOTATION MARK
+&'9@@
+0x201a    SINGLE LOW-9 QUOTATION MARK
+&.9@@
+0x201b    SINGLE HIGH-REVERSED-9 QUOTATION MARK
+&9'@@
+0x201c    LEFT DOUBLE QUOTATION MARK
+&"6@@
+0x201d    RIGHT DOUBLE QUOTATION MARK
+&"9@@
+0x201e    DOUBLE LOW-9 QUOTATION MARK
+&:9@@
+0x201f    DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+&9"@@
+0x2020    DAGGER
+&/-@@
+0x2021    DOUBLE DAGGER
+&/=@@
+0x2025    TWO DOT LEADER
+&..@@
+0x2030    PER MILLE SIGN
+&%0@@
+0x2032    PRIME
+&1'@@
+0x2033    DOUBLE PRIME
+&2'@@
+0x2034    TRIPLE PRIME
+&3'@@
+0x2035    REVERSED PRIME
+&1"@@
+0x2036    REVERSED DOUBLE PRIME
+&2"@@
+0x2037    REVERSED TRIPLE PRIME
+&3"@@
+0x2038    CARET
+&Ca@@
+0x2039    SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+&<1@@
+0x203a    SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+&>1@@
+0x203b    REFERENCE MARK
+&:X@@
+0x203c    DOUBLE EXCLAMATION MARK
+&_!*2_@@
+0x203e    OVERLINE
+&'-@@
+0x2044    FRACTION SLASH
+&/f@@
+0x2070    SUPERSCRIPT DIGIT ZERO
+&0S@@
+0x2074    SUPERSCRIPT DIGIT FOUR
+&4S@@
+0x2075    SUPERSCRIPT DIGIT FIVE
+&5S@@
+0x2076    SUPERSCRIPT DIGIT SIX
+&6S@@
+0x2077    SUPERSCRIPT DIGIT SEVEN
+&7S@@
+0x2078    SUPERSCRIPT DIGIT EIGHT
+&8S@@
+0x2079    SUPERSCRIPT DIGIT NINE
+&9S@@
+0x207a    SUPERSCRIPT PLUS SIGN
+&+S@@
+0x207b    SUPERSCRIPT MINUS
+&-S@@
+0x207c    SUPERSCRIPT EQUALS SIGN
+&=S@@
+0x207d    SUPERSCRIPT LEFT PARENTHESIS
+&(S@@
+0x207e    SUPERSCRIPT RIGHT PARENTHESIS
+&)S@@
+0x207f    SUPERSCRIPT LATIN SMALL LETTER N
+&nS@@
+0x2080    SUBSCRIPT DIGIT ZERO
+&0s@@
+0x2081    SUBSCRIPT DIGIT ONE
+&1s@@
+0x2082    SUBSCRIPT DIGIT TWO
+&2s@@
+0x2083    SUBSCRIPT DIGIT THREE
+&3s@@
+0x2084    SUBSCRIPT DIGIT FOUR
+&4s@@
+0x2085    SUBSCRIPT DIGIT FIVE
+&5s@@
+0x2086    SUBSCRIPT DIGIT SIX
+&6s@@
+0x2087    SUBSCRIPT DIGIT SEVEN
+&7s@@
+0x2088    SUBSCRIPT DIGIT EIGHT
+&8s@@
+0x2089    SUBSCRIPT DIGIT NINE
+&9s@@
+0x208a    SUBSCRIPT PLUS SIGN
+&+s@@
+0x208b    SUBSCRIPT MINUS
+&-s@@
+0x208c    SUBSCRIPT EQUALS SIGN
+&=s@@
+0x208d    SUBSCRIPT LEFT PARENTHESIS
+&(s@@
+0x208e    SUBSCRIPT RIGHT PARENTHESIS
+&)s@@
+0x20a4    LIRA SIGN
+&Li@@
+0x20a7    PESETA SIGN
+&Pt@@
+0x20a9    WON SIGN
+&W=@@
+0x2103    DEGREE CENTIGRADE
+&oC@@
+0x2105    CARE OF
+&co@@
+0x2109    DEGREE FAHRENHEIT
+&oF@@
+0x2116    NUMERO SIGN
+&N0@@
+0x2117    SOUND RECORDING COPYRIGHT
+&PO@@
+0x211e    PRESCRIPTION TAKE
+&Rx@@
+0x2120    SERVICE MARK
+&SM@@
+0x2122    TRADE MARK SIGN
+&TM@@
+0x2126    OHM SIGN
+&Om@@
+0x212b    ANGSTROEM SIGN
+&AO@@
+0x2153    VULGAR FRACTION ONE THIRD
+&13@@
+0x2154    VULGAR FRACTION TWO THIRDS
+&23@@
+0x2155    VULGAR FRACTION ONE FIFTH
+&15@@
+0x2156    VULGAR FRACTION TWO FIFTHS
+&25@@
+0x2157    VULGAR FRACTION THREE FIFTHS
+&35@@
+0x2158    VULGAR FRACTION FOUR FIFTHS
+&45@@
+0x2159    VULGAR FRACTION ONE SIXTH
+&16@@
+0x215a    VULGAR FRACTION FIVE SIXTHS
+&56@@
+0x215b    VULGAR FRACTION ONE EIGHTH
+&18@@
+0x215c    VULGAR FRACTION THREE EIGHTHS
+&38@@
+0x215d    VULGAR FRACTION FIVE EIGHTHS
+&58@@
+0x215e    VULGAR FRACTION SEVEN EIGHTHS
+&78@@
+0x2160    ROMAN NUMERAL ONE
+&1R@@
+0x2161    ROMAN NUMERAL TWO
+&2R@@
+0x2162    ROMAN NUMERAL THREE
+&3R@@
+0x2163    ROMAN NUMERAL FOUR
+&4R@@
+0x2164    ROMAN NUMERAL FIVE
+&5R@@
+0x2165    ROMAN NUMERAL SIX
+&6R@@
+0x2166    ROMAN NUMERAL SEVEN
+&7R@@
+0x2167    ROMAN NUMERAL EIGHT
+&8R@@
+0x2168    ROMAN NUMERAL NINE
+&9R@@
+0x2169    ROMAN NUMERAL TEN
+&aR@@
+0x216a    ROMAN NUMERAL ELEVEN
+&bR@@
+0x216b    ROMAN NUMERAL TWELVE
+&cR@@
+0x216c    ROMAN NUMERAL FIFTY
+&_50R_@@
+0x216d    ROMAN NUMERAL ONE HUNDRED
+&_100R_@@
+0x216e    ROMAN NUMERAL FIVE HUNDRED
+&_500R_@@
+0x216f    ROMAN NUMERAL ONE THOUSAND
+&_1000R_@@
+0x2170    SMALL ROMAN NUMERAL ONE
+&1r@@
+0x2171    SMALL ROMAN NUMERAL TWO
+&2r@@
+0x2172    SMALL ROMAN NUMERAL THREE
+&3r@@
+0x2173    SMALL ROMAN NUMERAL FOUR
+&4r@@
+0x2174    SMALL ROMAN NUMERAL FIVE
+&5r@@
+0x2175    SMALL ROMAN NUMERAL SIX
+&6r@@
+0x2176    SMALL ROMAN NUMERAL SEVEN
+&7r@@
+0x2177    SMALL ROMAN NUMERAL EIGHT
+&8r@@
+0x2178    SMALL ROMAN NUMERAL NINE
+&9r@@
+0x2179    SMALL ROMAN NUMERAL TEN
+&ar@@
+0x217a    SMALL ROMAN NUMERAL ELEVEN
+&br@@
+0x217b    SMALL ROMAN NUMERAL TWELVE
+&cr@@
+0x217c    SMALL ROMAN NUMERAL FIFTY
+&_50r_@@
+0x217d    SMALL ROMAN NUMERAL ONE HUNDRED
+&_100r_@@
+0x217e    SMALL ROMAN NUMERAL FIVE HUNDRED
+&_500r_@@
+0x217f    SMALL ROMAN NUMERAL ONE THOUSAND
+&_1000r_@@
+0x2180    ROMAN NUMERAL ONE THOUSAND C D
+&_1000RCD_@@
+0x2181    ROMAN NUMERAL FIVE THOUSAND
+&_5000R_@@
+0x2182    ROMAN NUMERAL TEN THOUSAND
+&_10000R_@@
+0x2190    LEFTWARDS ARROW
+&<-@@
+0x2191    UPWARDS ARROW
+&-!@@
+0x2192    RIGHTWARDS ARROW
+&->@@
+0x2193    DOWNWARDS ARROW
+&-v@@
+0x2194    LEFT RIGHT ARROW
+&<>@@
+0x2195    UP DOWN ARROW
+&UD@@
+0x2196    NORTH WEST ARROW
+&_<!!_@@
+0x2197    NORTH EAST ARROW
+&_//>_@@
+0x2198    SOUTH EAST ARROW
+&_!!>_@@
+0x2199    SOUTH WEST ARROW
+&_<//_@@
+0x21d0    LEFTWARDS DOUBLE ARROW
+&<=@@
+0x21d2    RIGHTWARDS DOUBLE ARROW
+&=>@@
+0x21d4    LEFT RIGHT DOUBLE ARROW
+&==@@
+0x2200    FOR ALL
+&FA@@
+0x2202    PARTIAL DIFFERENTIAL
+&dP@@
+0x2203    THERE EXISTS
+&TE@@
+0x2205    EMPTY SET
+&/0@@
+0x2206    INCREMENT
+&DE@@
+0x2207    NABLA
+&NB@@
+0x2208    ELEMENT OF
+&(-@@
+0x220b    CONTAINS AS MEMBER
+&-)@@
+0x220f    N-ARY PRODUCT
+&*P@@
+0x2211    N-ARY SUMMATION
+&+Z@@
+0x2212    MINUS SIGN
+&-2@@
+0x2213    MINUS-OR-PLUS SIGN
+&-+@@
+0x2217    ASTERISK OPERATOR
+&*-@@
+0x2218    RING OPERATOR
+&Ob@@
+0x2219    BULLET OPERATOR
+&Sb@@
+0x221a    SQUARE ROOT
+&RT@@
+0x221d    PROPORTIONAL TO
+&0(@@
+0x221e    INFINITY
+&00@@
+0x221f    RIGHT ANGLE
+&-L@@
+0x2220    ANGLE
+&-V@@
+0x2225    PARALLEL TO
+&PP@@
+0x2227    LOGICAL AND
+&AN@@
+0x2228    LOGICAL OR
+&OR@@
+0x2229    INTERSECTION
+&(U@@
+0x222a    UNION
+&)U@@
+0x222b    INTEGRAL
+&In@@
+0x222c    DOUBLE INTEGRAL
+&DI@@
+0x222e    CONTOUR INTEGRAL
+&Io@@
+0x2234    THEREFORE
+&.:@@
+0x2235    BECAUSE
+&:.@@
+0x2236    RATIO
+&:R@@
+0x2237    PROPORTION
+&::@@
+0x223c    TILDE OPERATOR
+&?1@@
+0x223e    INVERTED LAZY S
+&CG@@
+0x2243    ASYMPTOTICALLY EQUAL TO
+&?-@@
+0x2245    APPROXIMATELY EQUAL TO
+&?=@@
+0x2248    ALMOST EQUAL TO
+&?2@@
+0x224c    ALL EQUAL TO
+&=?@@
+0x2253    IMAGE OF OR APPROXIMATELY EQUAL TO
+&HI@@
+0x2260    NOT EQUAL TO
+&!=@@
+0x2261    IDENTICAL TO
+&=3@@
+0x2264    LESS-THAN OR EQUAL TO
+&=<@@
+0x2265    GREATER-THAN OR EQUAL TO
+&>=@@
+0x226a    MUCH LESS-THAN
+&<*@@
+0x226b    MUCH GREATER-THAN
+&*>@@
+0x226e    NOT LESS-THAN
+&!<@@
+0x226f    NOT GREATER-THAN
+&!>@@
+0x2282    SUBSET OF
+&(C@@
+0x2283    SUPERSET OF
+&)C@@
+0x2286    SUBSET OF OR EQUAL TO
+&(_@@
+0x2287    SUPERSET OF OR EQUAL TO
+&)_@@
+0x2299    CIRCLED DOT OPERATOR
+&0.@@
+0x229a    CIRCLED RING OPERATOR
+&02@@
+0x22a5    UP TACK
+&-T@@
+0x22c5    DOT OPERATOR
+&.P@@
+0x22ee    VERTICAL ELLIPSIS
+&:3@@
+0x22ef    MIDLINE HORIZONTAL ELLIPSIS
+&.3@@
+0x2302    HOUSE
+&Eh@@
+0x2308    LEFT CEILING
+&<7@@
+0x2309    RIGHT CEILING
+&>7@@
+0x230a    LEFT FLOOR
+&7<@@
+0x230b    RIGHT FLOOR
+&7>@@
+0x2310    REVERSED NOT SIGN
+&NI@@
+0x2312    ARC
+&(A@@
+0x2315    TELEPHONE RECORDER
+&TR@@
+0x2320    TOP HALF INTEGRAL
+&Iu@@
+0x2321    BOTTOM HALF INTEGRAL
+&Il@@
+0x2329    LEFT-POINTING ANGLE BRACKET
+&</@@
+0x232a    RIGHT-POINTING ANGLE BRACKET
+&/>@@
+0x2423    OPEN BOX
+&Vs@@
+0x2440    OCR HOOK
+&1h@@
+0x2441    OCR CHAIR
+&3h@@
+0x2442    OCR FORK
+&2h@@
+0x2443    OCR INVERTED FORK
+&4h@@
+0x2446    OCR BRANCH BANK IDENTIFICATION
+&1j@@
+0x2447    OCR AMOUNT OF CHECK
+&2j@@
+0x2448    OCR DASH
+&3j@@
+0x2449    OCR CUSTOMER ACCOUNT NUMBER
+&4j@@
+0x2460    CIRCLED DIGIT ONE
+&_1-o_@@
+0x2461    CIRCLED DIGIT TWO
+&_2-o_@@
+0x2462    CIRCLED DIGIT THREE
+&_3-o_@@
+0x2463    CIRCLED DIGIT FOUR
+&_4-o_@@
+0x2464    CIRCLED DIGIT FIVE
+&_5-o_@@
+0x2465    CIRCLED DIGIT SIX
+&_6-o_@@
+0x2466    CIRCLED DIGIT SEVEN
+&_7-o_@@
+0x2467    CIRCLED DIGIT EIGHT
+&_8-o_@@
+0x2468    CIRCLED DIGIT NINE
+&_9-o_@@
+0x2469    CIRCLED NUMBER TEN
+&_10-o_@@
+0x246a    CIRCLED NUMBER ELEVEN
+&_11-o_@@
+0x246b    CIRCLED NUMBER TWELVE
+&_12-o_@@
+0x246c    CIRCLED NUMBER THIRTEEN
+&_13-o_@@
+0x246d    CIRCLED NUMBER FOURTEEN
+&_14-o_@@
+0x246e    CIRCLED NUMBER FIFTEEN
+&_15-o_@@
+0x246f    CIRCLED NUMBER SIXTEEN
+&_16-o_@@
+0x2470    CIRCLED NUMBER SEVENTEEN
+&_17-o_@@
+0x2471    CIRCLED NUMBER EIGHTEEN
+&_18-o_@@
+0x2472    CIRCLED NUMBER NINETEEN
+&_19-o_@@
+0x2473    CIRCLED NUMBER TWENTY
+&_20-o_@@
+0x2474    PARENTHESIZED DIGIT ONE
+&_(1)_@@
+0x2475    PARENTHESIZED DIGIT TWO
+&_(2)_@@
+0x2476    PARENTHESIZED DIGIT THREE
+&_(3)_@@
+0x2477    PARENTHESIZED DIGIT FOUR
+&_(4)_@@
+0x2478    PARENTHESIZED DIGIT FIVE
+&_(5)_@@
+0x2479    PARENTHESIZED DIGIT SIX
+&_(6)_@@
+0x247a    PARENTHESIZED DIGIT SEVEN
+&_(7)_@@
+0x247b    PARENTHESIZED DIGIT EIGHT
+&_(8)_@@
+0x247c    PARENTHESIZED DIGIT NINE
+&_(9)_@@
+0x247d    PARENTHESIZED NUMBER TEN
+&_(10)_@@
+0x247e    PARENTHESIZED NUMBER ELEVEN
+&_(11)_@@
+0x247f    PARENTHESIZED NUMBER TWELVE
+&_(12)_@@
+0x2480    PARENTHESIZED NUMBER THIRTEEN
+&_(13)_@@
+0x2481    PARENTHESIZED NUMBER FOURTEEN
+&_(14)_@@
+0x2482    PARENTHESIZED NUMBER FIFTEEN
+&_(15)_@@
+0x2483    PARENTHESIZED NUMBER SIXTEEN
+&_(16)_@@
+0x2484    PARENTHESIZED NUMBER SEVENTEEN
+&_(17)_@@
+0x2485    PARENTHESIZED NUMBER EIGHTEEN
+&_(18)_@@
+0x2486    PARENTHESIZED NUMBER NINETEEN
+&_(19)_@@
+0x2487    PARENTHESIZED NUMBER TWENTY
+&_(20)_@@
+0x2488    DIGIT ONE FULL STOP
+&1.@@
+0x2489    DIGIT TWO FULL STOP
+&2.@@
+0x248a    DIGIT THREE FULL STOP
+&3.@@
+0x248b    DIGIT FOUR FULL STOP
+&4.@@
+0x248c    DIGIT FIVE FULL STOP
+&5.@@
+0x248d    DIGIT SIX FULL STOP
+&6.@@
+0x248e    DIGIT SEVEN FULL STOP
+&7.@@
+0x248f    DIGIT EIGHT FULL STOP
+&8.@@
+0x2490    DIGIT NINE FULL STOP
+&9.@@
+0x2491    NUMBER TEN FULL STOP
+&_10._@@
+0x2492    NUMBER ELEVEN FULL STOP
+&_11._@@
+0x2493    NUMBER TWELVE FULL STOP
+&_12._@@
+0x2494    NUMBER THIRTEEN FULL STOP
+&_13._@@
+0x2495    NUMBER FOURTEEN FULL STOP
+&_14._@@
+0x2496    NUMBER FIFTEEN FULL STOP
+&_15._@@
+0x2497    NUMBER SIXTEEN FULL STOP
+&_16._@@
+0x2498    NUMBER SEVENTEEN FULL STOP
+&_17._@@
+0x2499    NUMBER EIGHTEEN FULL STOP
+&_18._@@
+0x249a    NUMBER NINETEEN FULL STOP
+&_19._@@
+0x249b    NUMBER TWENTY FULL STOP
+&_20._@@
+0x249c    PARENTHESIZED LATIN SMALL LETTER A
+&_(a)_@@
+0x249d    PARENTHESIZED LATIN SMALL LETTER B
+&_(b)_@@
+0x249e    PARENTHESIZED LATIN SMALL LETTER C
+&_(c)_@@
+0x249f    PARENTHESIZED LATIN SMALL LETTER D
+&_(d)_@@
+0x24a0    PARENTHESIZED LATIN SMALL LETTER E
+&_(e)_@@
+0x24a1    PARENTHESIZED LATIN SMALL LETTER F
+&_(f)_@@
+0x24a2    PARENTHESIZED LATIN SMALL LETTER G
+&_(g)_@@
+0x24a3    PARENTHESIZED LATIN SMALL LETTER H
+&_(h)_@@
+0x24a4    PARENTHESIZED LATIN SMALL LETTER I
+&_(i)_@@
+0x24a5    PARENTHESIZED LATIN SMALL LETTER J
+&_(j)_@@
+0x24a6    PARENTHESIZED LATIN SMALL LETTER K
+&_(k)_@@
+0x24a7    PARENTHESIZED LATIN SMALL LETTER L
+&_(l)_@@
+0x24a8    PARENTHESIZED LATIN SMALL LETTER M
+&_(m)_@@
+0x24a9    PARENTHESIZED LATIN SMALL LETTER N
+&_(n)_@@
+0x24aa    PARENTHESIZED LATIN SMALL LETTER O
+&_(o)_@@
+0x24ab    PARENTHESIZED LATIN SMALL LETTER P
+&_(p)_@@
+0x24ac    PARENTHESIZED LATIN SMALL LETTER Q
+&_(q)_@@
+0x24ad    PARENTHESIZED LATIN SMALL LETTER R
+&_(r)_@@
+0x24ae    PARENTHESIZED LATIN SMALL LETTER S
+&_(s)_@@
+0x24af    PARENTHESIZED LATIN SMALL LETTER T
+&_(t)_@@
+0x24b0    PARENTHESIZED LATIN SMALL LETTER U
+&_(u)_@@
+0x24b1    PARENTHESIZED LATIN SMALL LETTER V
+&_(v)_@@
+0x24b2    PARENTHESIZED LATIN SMALL LETTER W
+&_(w)_@@
+0x24b3    PARENTHESIZED LATIN SMALL LETTER X
+&_(x)_@@
+0x24b4    PARENTHESIZED LATIN SMALL LETTER Y
+&_(y)_@@
+0x24b5    PARENTHESIZED LATIN SMALL LETTER Z
+&_(z)_@@
+0x24b6    CIRCLED LATIN CAPITAL LETTER A
+&_A-o_@@
+0x24b7    CIRCLED LATIN CAPITAL LETTER B
+&_B-o_@@
+0x24b8    CIRCLED LATIN CAPITAL LETTER C
+&_C-o_@@
+0x24b9    CIRCLED LATIN CAPITAL LETTER D
+&_D-o_@@
+0x24ba    CIRCLED LATIN CAPITAL LETTER E
+&_E-o_@@
+0x24bb    CIRCLED LATIN CAPITAL LETTER F
+&_F-o_@@
+0x24bc    CIRCLED LATIN CAPITAL LETTER G
+&_G-o_@@
+0x24bd    CIRCLED LATIN CAPITAL LETTER H
+&_H-o_@@
+0x24be    CIRCLED LATIN CAPITAL LETTER I
+&_I-o_@@
+0x24bf    CIRCLED LATIN CAPITAL LETTER J
+&_J-o_@@
+0x24c0    CIRCLED LATIN CAPITAL LETTER K
+&_K-o_@@
+0x24c1    CIRCLED LATIN CAPITAL LETTER L
+&_L-o_@@
+0x24c2    CIRCLED LATIN CAPITAL LETTER M
+&_M-o_@@
+0x24c3    CIRCLED LATIN CAPITAL LETTER N
+&_N-o_@@
+0x24c4    CIRCLED LATIN CAPITAL LETTER O
+&_O-o_@@
+0x24c5    CIRCLED LATIN CAPITAL LETTER P
+&_P-o_@@
+0x24c6    CIRCLED LATIN CAPITAL LETTER Q
+&_Q-o_@@
+0x24c7    CIRCLED LATIN CAPITAL LETTER R
+&_R-o_@@
+0x24c8    CIRCLED LATIN CAPITAL LETTER S
+&_S-o_@@
+0x24c9    CIRCLED LATIN CAPITAL LETTER T
+&_T-o_@@
+0x24ca    CIRCLED LATIN CAPITAL LETTER U
+&_U-o_@@
+0x24cb    CIRCLED LATIN CAPITAL LETTER V
+&_V-o_@@
+0x24cc    CIRCLED LATIN CAPITAL LETTER W
+&_W-o_@@
+0x24cd    CIRCLED LATIN CAPITAL LETTER X
+&_X-o_@@
+0x24ce    CIRCLED LATIN CAPITAL LETTER Y
+&_Y-o_@@
+0x24cf    CIRCLED LATIN CAPITAL LETTER Z
+&_Z-o_@@
+0x24d0    CIRCLED LATIN SMALL LETTER A
+&_a-o_@@
+0x24d1    CIRCLED LATIN SMALL LETTER B
+&_b-o_@@
+0x24d2    CIRCLED LATIN SMALL LETTER C
+&_c-o_@@
+0x24d3    CIRCLED LATIN SMALL LETTER D
+&_d-o_@@
+0x24d4    CIRCLED LATIN SMALL LETTER E
+&_e-o_@@
+0x24d5    CIRCLED LATIN SMALL LETTER F
+&_f-o_@@
+0x24d6    CIRCLED LATIN SMALL LETTER G
+&_g-o_@@
+0x24d7    CIRCLED LATIN SMALL LETTER H
+&_h-o_@@
+0x24d8    CIRCLED LATIN SMALL LETTER I
+&_i-o_@@
+0x24d9    CIRCLED LATIN SMALL LETTER J
+&_j-o_@@
+0x24da    CIRCLED LATIN SMALL LETTER K
+&_k-o_@@
+0x24db    CIRCLED LATIN SMALL LETTER L
+&_l-o_@@
+0x24dc    CIRCLED LATIN SMALL LETTER M
+&_m-o_@@
+0x24dd    CIRCLED LATIN SMALL LETTER N
+&_n-o_@@
+0x24de    CIRCLED LATIN SMALL LETTER O
+&_o-o_@@
+0x24df    CIRCLED LATIN SMALL LETTER P
+&_p-o_@@
+0x24e0    CIRCLED LATIN SMALL LETTER Q
+&_q-o_@@
+0x24e1    CIRCLED LATIN SMALL LETTER R
+&_r-o_@@
+0x24e2    CIRCLED LATIN SMALL LETTER S
+&_s-o_@@
+0x24e3    CIRCLED LATIN SMALL LETTER T
+&_t-o_@@
+0x24e4    CIRCLED LATIN SMALL LETTER U
+&_u-o_@@
+0x24e5    CIRCLED LATIN SMALL LETTER V
+&_v-o_@@
+0x24e6    CIRCLED LATIN SMALL LETTER W
+&_w-o_@@
+0x24e7    CIRCLED LATIN SMALL LETTER X
+&_x-o_@@
+0x24e8    CIRCLED LATIN SMALL LETTER Y
+&_y-o_@@
+0x24e9    CIRCLED LATIN SMALL LETTER Z
+&_z-o_@@
+0x24ea    CIRCLED DIGIT ZERO
+&_0-o_@@
+0x2500    BOX DRAWINGS LIGHT HORIZONTAL
+&hh@@
+0x2501    BOX DRAWINGS HEAVY HORIZONTAL
+&HH@@
+0x2502    BOX DRAWINGS LIGHT VERTICAL
+&vv@@
+0x2503    BOX DRAWINGS HEAVY VERTICAL
+&VV@@
+0x2504    BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
+&3-@@
+0x2505    BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
+&3_@@
+0x2506    BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
+&3!@@
+0x2507    BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
+&3/@@
+0x2508    BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
+&4-@@
+0x2509    BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
+&4_@@
+0x250a    BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
+&4!@@
+0x250b    BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
+&4/@@
+0x250c    BOX DRAWINGS LIGHT DOWN AND RIGHT
+&dr@@
+0x250d    BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
+&dR@@
+0x250e    BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
+&Dr@@
+0x250f    BOX DRAWINGS HEAVY DOWN AND RIGHT
+&DR@@
+0x2510    BOX DRAWINGS LIGHT DOWN AND LEFT
+&dl@@
+0x2511    BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
+&dL@@
+0x2512    BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
+&Dl@@
+0x2513    BOX DRAWINGS HEAVY DOWN AND LEFT
+&LD@@
+0x2514    BOX DRAWINGS LIGHT UP AND RIGHT
+&ur@@
+0x2515    BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
+&uR@@
+0x2516    BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
+&Ur@@
+0x2517    BOX DRAWINGS HEAVY UP AND RIGHT
+&UR@@
+0x2518    BOX DRAWINGS LIGHT UP AND LEFT
+&ul@@
+0x2519    BOX DRAWINGS UP LIGHT AND LEFT HEAVY
+&uL@@
+0x251a    BOX DRAWINGS UP HEAVY AND LEFT LIGHT
+&Ul@@
+0x251b    BOX DRAWINGS HEAVY UP AND LEFT
+&UL@@
+0x251c    BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+&vr@@
+0x251d    BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
+&vR@@
+0x251e    BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
+&_Udr_@@
+0x251f    BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
+&_uDr_@@
+0x2520    BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
+&Vr@@
+0x2521    BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
+&_UdR_@@
+0x2522    BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
+&_uDR_@@
+0x2523    BOX DRAWINGS HEAVY VERTICAL AND RIGHT
+&VR@@
+0x2524    BOX DRAWINGS LIGHT VERTICAL AND LEFT
+&vl@@
+0x2525    BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
+&vL@@
+0x2526    BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
+&_Udl_@@
+0x2527    BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
+&_uDl_@@
+0x2528    BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
+&Vl@@
+0x2529    BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
+&_UdL_@@
+0x252a    BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
+&_uDL_@@
+0x252b    BOX DRAWINGS HEAVY VERTICAL AND LEFT
+&VL@@
+0x252c    BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+&dh@@
+0x252d    BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
+&_dLr_@@
+0x252e    BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
+&_dlR_@@
+0x252f    BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
+&dH@@
+0x2530    BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
+&Dh@@
+0x2531    BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
+&_DLr_@@
+0x2532    BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
+&_DlR_@@
+0x2533    BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
+&DH@@
+0x2534    BOX DRAWINGS LIGHT UP AND HORIZONTAL
+&uh@@
+0x2535    BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
+&_uLr_@@
+0x2536    BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
+&_ulR_@@
+0x2537    BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
+&uH@@
+0x2538    BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
+&Uh@@
+0x2539    BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
+&_ULr_@@
+0x253a    BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
+&_UlR_@@
+0x253b    BOX DRAWINGS HEAVY UP AND HORIZONTAL
+&UH@@
+0x253c    BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+&vh@@
+0x253d    BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
+&_vLr_@@
+0x253e    BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
+&_vlR_@@
+0x253f    BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
+&vH@@
+0x2540    BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
+&_Udh_@@
+0x2541    BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
+&_uDh_@@
+0x2542    BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
+&Vh@@
+0x2543    BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
+&_UdLr_@@
+0x2544    BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
+&_UdlR_@@
+0x2545    BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
+&_uDLr_@@
+0x2546    BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
+&_uDlR_@@
+0x2547    BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
+&_UdH_@@
+0x2548    BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
+&_uDH_@@
+0x2549    BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
+&_VLr_@@
+0x254a    BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
+&_VlR_@@
+0x254b    BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+&VH@@
+0x2571    BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
+&FD@@
+0x2572    BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
+&BD@@
+0x2580    UPPER HALF BLOCK
+&TB@@
+0x2584    LOWER HALF BLOCK
+&LB@@
+0x2588    FULL BLOCK
+&FB@@
+0x258c    LEFT HALF BLOCK
+&lB@@
+0x2590    RIGHT HALF BLOCK
+&RB@@
+0x2591    LIGHT SHADE
+&.S@@
+0x2592    MEDIUM SHADE
+&:S@@
+0x2593    DARK SHADE
+&?S@@
+0x25a0    BLACK SQUARE
+&fS@@
+0x25a1    WHITE SQUARE
+&OS@@
+0x25a2    WHITE SQUARE WITH ROUNDED CORNERS
+&RO@@
+0x25a3    WHITE SQUARE CONTAINING BLACK SMALL SQUARE
+&Rr@@
+0x25a4    SQUARE WITH HORIZONTAL FILL
+&RF@@
+0x25a5    SQUARE WITH VERTICAL FILL
+&RY@@
+0x25a6    SQUARE WITH ORTHOGONAL CROSSHATCH FILL
+&RH@@
+0x25a7    SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
+&RZ@@
+0x25a8    SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
+&RK@@
+0x25a9    SQUARE WITH DIAGONAL CROSSHATCH FILL
+&RX@@
+0x25aa    BLACK SMALL SQUARE
+&sB@@
+0x25ac    BLACK RECTANGLE
+&SR@@
+0x25ad    WHITE RECTANGLE
+&Or@@
+0x25b2    BLACK UP-POINTING TRIANGLE
+&UT@@
+0x25b3    WHITE UP-POINTING TRIANGLE
+&uT@@
+0x25b6    BLACK RIGHT-POINTING TRIANGLE
+&PR@@
+0x25b7    WHITE RIGHT-POINTING TRIANGLE
+&Tr@@
+0x25bc    BLACK DOWN-POINTING TRIANGLE
+&Dt@@
+0x25bd    WHITE DOWN-POINTING TRIANGLE
+&dT@@
+0x25c0    BLACK LEFT-POINTING TRIANGLE
+&PL@@
+0x25c1    WHITE LEFT-POINTING TRIANGLE
+&Tl@@
+0x25c6    BLACK DIAMOND
+&Db@@
+0x25c7    WHITE DIAMOND
+&Dw@@
+0x25ca    LOZENGE
+&LZ@@
+0x25cb    WHITE CIRCLE
+&0m@@
+0x25ce    BULLSEYE
+&0o@@
+0x25cf    BLACK CIRCLE
+&0M@@
+0x25d0    CIRCLE WITH LEFT HALF BLACK
+&0L@@
+0x25d1    CIRCLE WITH RIGHT HALF BLACK
+&0R@@
+0x25d8    INVERSE BULLET
+&Sn@@
+0x25d9    INVERSE WHITE CIRCLE
+&Ic@@
+0x25e2    BLACK LOWER RIGHT TRIANGLE
+&Fd@@
+0x25e3    BLACK LOWER LEFT TRIANGLE
+&Bd@@
+0x2605    BLACK STAR
+&*2@@
+0x2606    WHITE STAR
+&*1@@
+0x260e    BLACK TELEPHONE
+&_TEL_@@
+0x260f    WHITE TELEPHONE
+&_tel_@@
+0x261c    WHITE LEFT POINTING INDEX
+&<H@@
+0x261e    WHITE RIGHT POINTING INDEX
+&>H@@
+0x263a    WHITE SMILING FACE
+&0u@@
+0x263b    BLACK SMILING FACE
+&0U@@
+0x263c    WHITE SUN WITH RAYS
+&SU@@
+0x2640    FEMALE SIGN
+&Fm@@
+0x2642    MALE SIGN
+&Ml@@
+0x2660    BLACK SPADE SUIT
+&cS@@
+0x2661    WHITE HEART SUIT
+&cH@@
+0x2662    WHITE DIAMOND SUIT
+&cD@@
+0x2663    BLACK CLUB SUIT
+&cC@@
+0x2664    WHITE SPADE SUIT
+&_cS-_@@
+0x2665    BLACK HEART SUIT
+&_cH-_@@
+0x2666    BLACK DIAMOND SUIT
+&_cD-_@@
+0x2667    WHITE CLUB SUIT
+&_cC-_@@
+0x2669    QUARTER NOTE
+&Md@@
+0x266a    EIGHTH NOTE
+&M8@@
+0x266b    BARRED EIGHTH NOTES
+&M2@@
+0x266c    BARRED SIXTEENTH NOTES
+&_M16_@@
+0x266d    MUSIC FLAT SIGN
+&Mb@@
+0x266e    MUSIC NATURAL SIGN
+&Mx@@
+0x266f    MUSIC SHARP SIGN
+&MX@@
+0x2713    CHECK MARK
+&OK@@
+0x2717    BALLOT X
+&XX@@
+0x2720    MALTESE CROSS
+&-X@@
+0x3000    IDEOGRAPHIC SPACE
+&IS@@
+0x3001    IDEOGRAPHIC COMMA
+&,_@@
+0x3002    IDEOGRAPHIC PERIOD
+&._@@
+0x3003    DITTO MARK
+&+"@@
+0x3004    IDEOGRAPHIC DITTO MARK
+&+_@@
+0x3005    IDEOGRAPHIC ITERATION MARK
+&*_@@
+0x3006    IDEOGRAPHIC CLOSING MARK
+&;_@@
+0x3007    IDEOGRAPHIC NUMBER ZERO
+&0_@@
+0x300a    LEFT DOUBLE ANGLE BRACKET
+&<+@@
+0x300b    RIGHT DOUBLE ANGLE BRACKET
+&>+@@
+0x300c    LEFT CORNER BRACKET
+&<'@@
+0x300d    RIGHT CORNER BRACKET
+&>'@@
+0x300e    LEFT WHITE CORNER BRACKET
+&<"@@
+0x300f    RIGHT WHITE CORNER BRACKET
+&>"@@
+0x3010    LEFT BLACK LENTICULAR BRACKET
+&("@@
+0x3011    RIGHT BLACK LENTICULAR BRACKET
+&)"@@
+0x3012    POSTAL MARK
+&=T@@
+0x3013    GETA MARK
+&=_@@
+0x3014    LEFT TORTOISE SHELL BRACKET
+&('@@
+0x3015    RIGHT TORTOISE SHELL BRACKET
+&)'@@
+0x3016    LEFT WHITE LENTICULAR BRACKET
+&(I@@
+0x3017    RIGHT WHITE LENTICULAR BRACKET
+&)I@@
+0x301c    WAVE DASH
+&-?@@
+0x3020    POSTAL MARK FACE
+&_=T:)_@@
+0x3041    HIRAGANA LETTER SMALL A
+&A5@@
+0x3042    HIRAGANA LETTER A
+&a5@@
+0x3043    HIRAGANA LETTER SMALL I
+&I5@@
+0x3044    HIRAGANA LETTER I
+&i5@@
+0x3045    HIRAGANA LETTER SMALL U
+&U5@@
+0x3046    HIRAGANA LETTER U
+&u5@@
+0x3047    HIRAGANA LETTER SMALL E
+&E5@@
+0x3048    HIRAGANA LETTER E
+&e5@@
+0x3049    HIRAGANA LETTER SMALL O
+&O5@@
+0x304a    HIRAGANA LETTER O
+&o5@@
+0x304b    HIRAGANA LETTER KA
+&ka@@
+0x304c    HIRAGANA LETTER GA
+&ga@@
+0x304d    HIRAGANA LETTER KI
+&ki@@
+0x304e    HIRAGANA LETTER GI
+&gi@@
+0x304f    HIRAGANA LETTER KU
+&ku@@
+0x3050    HIRAGANA LETTER GU
+&gu@@
+0x3051    HIRAGANA LETTER KE
+&ke@@
+0x3052    HIRAGANA LETTER GE
+&ge@@
+0x3053    HIRAGANA LETTER KO
+&ko@@
+0x3054    HIRAGANA LETTER GO
+&go@@
+0x3055    HIRAGANA LETTER SA
+&sa@@
+0x3056    HIRAGANA LETTER ZA
+&za@@
+0x3057    HIRAGANA LETTER SI
+&si@@
+0x3058    HIRAGANA LETTER ZI
+&zi@@
+0x3059    HIRAGANA LETTER SU
+&su@@
+0x305a    HIRAGANA LETTER ZU
+&zu@@
+0x305b    HIRAGANA LETTER SE
+&se@@
+0x305c    HIRAGANA LETTER ZE
+&ze@@
+0x305d    HIRAGANA LETTER SO
+&so@@
+0x305e    HIRAGANA LETTER ZO
+&zo@@
+0x305f    HIRAGANA LETTER TA
+&ta@@
+0x3060    HIRAGANA LETTER DA
+&da@@
+0x3061    HIRAGANA LETTER TI
+&ti@@
+0x3062    HIRAGANA LETTER DI
+&di@@
+0x3063    HIRAGANA LETTER SMALL TU
+&tU@@
+0x3064    HIRAGANA LETTER TU
+&tu@@
+0x3065    HIRAGANA LETTER DU
+&du@@
+0x3066    HIRAGANA LETTER TE
+&te@@
+0x3067    HIRAGANA LETTER DE
+&de@@
+0x3068    HIRAGANA LETTER TO
+&to@@
+0x3069    HIRAGANA LETTER DO
+&do@@
+0x306a    HIRAGANA LETTER NA
+&na@@
+0x306b    HIRAGANA LETTER NI
+&ni@@
+0x306c    HIRAGANA LETTER NU
+&nu@@
+0x306d    HIRAGANA LETTER NE
+&ne@@
+0x306e    HIRAGANA LETTER NO
+&no@@
+0x306f    HIRAGANA LETTER HA
+&ha@@
+0x3070    HIRAGANA LETTER BA
+&ba@@
+0x3071    HIRAGANA LETTER PA
+&pa@@
+0x3072    HIRAGANA LETTER HI
+&hi@@
+0x3073    HIRAGANA LETTER BI
+&bi@@
+0x3074    HIRAGANA LETTER PI
+&pi@@
+0x3075    HIRAGANA LETTER HU
+&hu@@
+0x3076    HIRAGANA LETTER BU
+&bu@@
+0x3077    HIRAGANA LETTER PU
+&pu@@
+0x3078    HIRAGANA LETTER HE
+&he@@
+0x3079    HIRAGANA LETTER BE
+&be@@
+0x307a    HIRAGANA LETTER PE
+&pe@@
+0x307b    HIRAGANA LETTER HO
+&ho@@
+0x307c    HIRAGANA LETTER BO
+&bo@@
+0x307d    HIRAGANA LETTER PO
+&po@@
+0x307e    HIRAGANA LETTER MA
+&ma@@
+0x307f    HIRAGANA LETTER MI
+&mi@@
+0x3080    HIRAGANA LETTER MU
+&mu@@
+0x3081    HIRAGANA LETTER ME
+&me@@
+0x3082    HIRAGANA LETTER MO
+&mo@@
+0x3083    HIRAGANA LETTER SMALL YA
+&yA@@
+0x3084    HIRAGANA LETTER YA
+&ya@@
+0x3085    HIRAGANA LETTER SMALL YU
+&yU@@
+0x3086    HIRAGANA LETTER YU
+&yu@@
+0x3087    HIRAGANA LETTER SMALL YO
+&yO@@
+0x3088    HIRAGANA LETTER YO
+&yo@@
+0x3089    HIRAGANA LETTER RA
+&ra@@
+0x308a    HIRAGANA LETTER RI
+&ri@@
+0x308b    HIRAGANA LETTER RU
+&ru@@
+0x308c    HIRAGANA LETTER RE
+&re@@
+0x308d    HIRAGANA LETTER RO
+&ro@@
+0x308e    HIRAGANA LETTER SMALL WA
+&wA@@
+0x308f    HIRAGANA LETTER WA
+&wa@@
+0x3090    HIRAGANA LETTER WI
+&wi@@
+0x3091    HIRAGANA LETTER WE
+&we@@
+0x3092    HIRAGANA LETTER WO
+&wo@@
+0x3093    HIRAGANA LETTER N
+&n5@@
+0x3094    HIRAGANA LETTER VU
+&vu@@
+0x309b    KATAKANA-HIRAGANA VOICED SOUND MARK
+&"5@@
+0x309c    KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+&05@@
+0x309d    HIRAGANA ITERATION MARK
+&*5@@
+0x309e    HIRAGANA VOICED ITERATION MARK
+&+5@@
+0x30a1    KATAKANA LETTER SMALL A
+&a6@@
+0x30a2    KATAKANA LETTER A
+&A6@@
+0x30a3    KATAKANA LETTER SMALL I
+&i6@@
+0x30a4    KATAKANA LETTER I
+&I6@@
+0x30a5    KATAKANA LETTER SMALL U
+&u6@@
+0x30a6    KATAKANA LETTER U
+&U6@@
+0x30a7    KATAKANA LETTER SMALL E
+&e6@@
+0x30a8    KATAKANA LETTER E
+&E6@@
+0x30a9    KATAKANA LETTER SMALL O
+&o6@@
+0x30aa    KATAKANA LETTER O
+&O6@@
+0x30ab    KATAKANA LETTER KA
+&Ka@@
+0x30ac    KATAKANA LETTER GA
+&Ga@@
+0x30ad    KATAKANA LETTER KI
+&Ki@@
+0x30ae    KATAKANA LETTER GI
+&Gi@@
+0x30af    KATAKANA LETTER KU
+&Ku@@
+0x30b0    KATAKANA LETTER GU
+&Gu@@
+0x30b1    KATAKANA LETTER KE
+&Ke@@
+0x30b2    KATAKANA LETTER GE
+&Ge@@
+0x30b3    KATAKANA LETTER KO
+&Ko@@
+0x30b4    KATAKANA LETTER GO
+&Go@@
+0x30b5    KATAKANA LETTER SA
+&Sa@@
+0x30b6    KATAKANA LETTER ZA
+&Za@@
+0x30b7    KATAKANA LETTER SI
+&Si@@
+0x30b8    KATAKANA LETTER ZI
+&Zi@@
+0x30b9    KATAKANA LETTER SU
+&Su@@
+0x30ba    KATAKANA LETTER ZU
+&Zu@@
+0x30bb    KATAKANA LETTER SE
+&Se@@
+0x30bc    KATAKANA LETTER ZE
+&Ze@@
+0x30bd    KATAKANA LETTER SO
+&So@@
+0x30be    KATAKANA LETTER ZO
+&Zo@@
+0x30bf    KATAKANA LETTER TA
+&Ta@@
+0x30c0    KATAKANA LETTER DA
+&Da@@
+0x30c1    KATAKANA LETTER TI
+&Ti@@
+0x30c2    KATAKANA LETTER DI
+&Di@@
+0x30c3    KATAKANA LETTER SMALL TU
+&TU@@
+0x30c4    KATAKANA LETTER TU
+&Tu@@
+0x30c5    KATAKANA LETTER DU
+&Du@@
+0x30c6    KATAKANA LETTER TE
+&Te@@
+0x30c7    KATAKANA LETTER DE
+&De@@
+0x30c8    KATAKANA LETTER TO
+&To@@
+0x30c9    KATAKANA LETTER DO
+&Do@@
+0x30ca    KATAKANA LETTER NA
+&Na@@
+0x30cb    KATAKANA LETTER NI
+&Ni@@
+0x30cc    KATAKANA LETTER NU
+&Nu@@
+0x30cd    KATAKANA LETTER NE
+&Ne@@
+0x30ce    KATAKANA LETTER NO
+&No@@
+0x30cf    KATAKANA LETTER HA
+&Ha@@
+0x30d0    KATAKANA LETTER BA
+&Ba@@
+0x30d1    KATAKANA LETTER PA
+&Pa@@
+0x30d2    KATAKANA LETTER HI
+&Hi@@
+0x30d3    KATAKANA LETTER BI
+&Bi@@
+0x30d4    KATAKANA LETTER PI
+&Pi@@
+0x30d5    KATAKANA LETTER HU
+&Hu@@
+0x30d6    KATAKANA LETTER BU
+&Bu@@
+0x30d7    KATAKANA LETTER PU
+&Pu@@
+0x30d8    KATAKANA LETTER HE
+&He@@
+0x30d9    KATAKANA LETTER BE
+&Be@@
+0x30da    KATAKANA LETTER PE
+&Pe@@
+0x30db    KATAKANA LETTER HO
+&Ho@@
+0x30dc    KATAKANA LETTER BO
+&Bo@@
+0x30dd    KATAKANA LETTER PO
+&Po@@
+0x30de    KATAKANA LETTER MA
+&Ma@@
+0x30df    KATAKANA LETTER MI
+&Mi@@
+0x30e0    KATAKANA LETTER MU
+&Mu@@
+0x30e1    KATAKANA LETTER ME
+&Me@@
+0x30e2    KATAKANA LETTER MO
+&Mo@@
+0x30e3    KATAKANA LETTER SMALL YA
+&YA@@
+0x30e4    KATAKANA LETTER YA
+&Ya@@
+0x30e5    KATAKANA LETTER SMALL YU
+&YU@@
+0x30e6    KATAKANA LETTER YU
+&Yu@@
+0x30e7    KATAKANA LETTER SMALL YO
+&YO@@
+0x30e8    KATAKANA LETTER YO
+&Yo@@
+0x30e9    KATAKANA LETTER RA
+&Ra@@
+0x30ea    KATAKANA LETTER RI
+&Ri@@
+0x30eb    KATAKANA LETTER RU
+&Ru@@
+0x30ec    KATAKANA LETTER RE
+&Re@@
+0x30ed    KATAKANA LETTER RO
+&Ro@@
+0x30ee    KATAKANA LETTER SMALL WA
+&WA@@
+0x30ef    KATAKANA LETTER WA
+&Wa@@
+0x30f0    KATAKANA LETTER WI
+&Wi@@
+0x30f1    KATAKANA LETTER WE
+&We@@
+0x30f2    KATAKANA LETTER WO
+&Wo@@
+0x30f3    KATAKANA LETTER N
+&N6@@
+0x30f4    KATAKANA LETTER VU
+&Vu@@
+0x30f5    KATAKANA LETTER SMALL KA
+&KA@@
+0x30f6    KATAKANA LETTER SMALL KE
+&KE@@
+0x30f7    KATAKANA LETTER VA
+&Va@@
+0x30f8    KATAKANA LETTER VI
+&Vi@@
+0x30f9    KATAKANA LETTER VE
+&Ve@@
+0x30fa    KATAKANA LETTER VO
+&Vo@@
+0x30fb    KATAKANA MIDDLE DOT
+&.6@@
+0x30fc    KATAKANA-HIRAGANA PROLONGED SOUND MARK
+&-6@@
+0x30fd    KATAKANA ITERATION MARK
+&*6@@
+0x30fe    KATAKANA VOICED ITERATION MARK
+&+6@@
+0x3105    BOPOMOFO LETTER B
+&b4@@
+0x3106    BOPOMOFO LETTER P
+&p4@@
+0x3107    BOPOMOFO LETTER M
+&m4@@
+0x3108    BOPOMOFO LETTER F
+&f4@@
+0x3109    BOPOMOFO LETTER D
+&d4@@
+0x310a    BOPOMOFO LETTER T
+&t4@@
+0x310b    BOPOMOFO LETTER N
+&n4@@
+0x310c    BOPOMOFO LETTER L
+&l4@@
+0x310d    BOPOMOFO LETTER G
+&g4@@
+0x310e    BOPOMOFO LETTER K
+&k4@@
+0x310f    BOPOMOFO LETTER H
+&h4@@
+0x3110    BOPOMOFO LETTER J
+&j4@@
+0x3111    BOPOMOFO LETTER Q
+&q4@@
+0x3112    BOPOMOFO LETTER X
+&x4@@
+0x3113    BOPOMOFO LETTER ZH
+&zh@@
+0x3114    BOPOMOFO LETTER CH
+&ch@@
+0x3115    BOPOMOFO LETTER SH
+&sh@@
+0x3116    BOPOMOFO LETTER R
+&r4@@
+0x3117    BOPOMOFO LETTER Z
+&z4@@
+0x3118    BOPOMOFO LETTER C
+&c4@@
+0x3119    BOPOMOFO LETTER S
+&s4@@
+0x311a    BOPOMOFO LETTER A
+&a4@@
+0x311b    BOPOMOFO LETTER O
+&o4@@
+0x311c    BOPOMOFO LETTER E
+&e4@@
+0x311d    BOPOMOFO LETTER EH
+&_eh4_@@
+0x311e    BOPOMOFO LETTER AI
+&ai@@
+0x311f    BOPOMOFO LETTER EI
+&ei@@
+0x3120    BOPOMOFO LETTER AU
+&au@@
+0x3121    BOPOMOFO LETTER OU
+&ou@@
+0x3122    BOPOMOFO LETTER AN
+&an@@
+0x3123    BOPOMOFO LETTER EN
+&en@@
+0x3124    BOPOMOFO LETTER ANG
+&aN@@
+0x3125    BOPOMOFO LETTER ENG
+&eN@@
+0x3126    BOPOMOFO LETTER ER
+&er@@
+0x3127    BOPOMOFO LETTER I
+&i4@@
+0x3128    BOPOMOFO LETTER U
+&u4@@
+0x3129    BOPOMOFO LETTER IU
+&iu@@
+0x312a    BOPOMOFO LETTER V
+&v4@@
+0x312b    BOPOMOFO LETTER NG
+&nG@@
+0x312c    BOPOMOFO LETTER GN
+&gn@@
+0x321c    PARENTHESIZED HANGUL JU
+&_(JU)_@@
+0x3220    PARENTHESIZED IDEOGRAPH ONE
+&1c@@
+0x3221    PARENTHESIZED IDEOGRAPH TWO
+&2c@@
+0x3222    PARENTHESIZED IDEOGRAPH THREE
+&3c@@
+0x3223    PARENTHESIZED IDEOGRAPH FOUR
+&4c@@
+0x3224    PARENTHESIZED IDEOGRAPH FIVE
+&5c@@
+0x3225    PARENTHESIZED IDEOGRAPH SIX
+&6c@@
+0x3226    PARENTHESIZED IDEOGRAPH SEVEN
+&7c@@
+0x3227    PARENTHESIZED IDEOGRAPH EIGHT
+&8c@@
+0x3228    PARENTHESIZED IDEOGRAPH NINE
+&9c@@
+0x3229    PARENTHESIZED IDEOGRAPH TEN
+&_10c_@@
+0x327f    KOREAN STANDARD SYMBOL
+&_KSC_@@
+0xe001    JOIN THIS LINE WITH NEXT LINE (Mnemonic)
+&/c@@
+0xe002    Unit space A (ISO-IR-8-1 064)
+&UA@@
+0xe003    Unit space B (ISO-IR-8-1 096)
+&UB@@
+0xe004    NON-SPACING UMLAUT (ISO-IR-38 201) (character part)
+&"3@@
+0xe005    NON-SPACING DIAERESIS WITH ACCENT (ISO-IR-70 192) (character part)
+&"1@@
+0xe006    NON-SPACING GRAVE ACCENT (ISO-IR-103 193) (character part)
+&"!@@
+0xe007    NON-SPACING ACUTE ACCENT (ISO-IR-103 194) (character part)
+&"'@@
+0xe008    NON-SPACING CIRCUMFLEX ACCENT (ISO-IR-103 195) (character part)
+&">@@
+0xe009    NON-SPACING TILDE (ISO-IR-103 196) (character part)
+&"?@@
+0xe00a    NON-SPACING MACRON (ISO-IR-103 197) (character part)
+&"-@@
+0xe00b    NON-SPACING BREVE (ISO-IR-103 198) (character part)
+&"(@@
+0xe00c    NON-SPACING DOT ABOVE (ISO-IR-103 199) (character part)
+&".@@
+0xe00d    NON-SPACING DIAERESIS (ISO-IR-103 200) (character part)
+&":@@
+0xe00e    NON-SPACING RING ABOVE (ISO-IR-103 202) (character part)
+&"0@@
+0xe00f    NON-SPACING DOUBLE ACCUTE (ISO-IR-103 204) (character part)
+&""@@
+0xe010    NON-SPACING CARON (ISO-IR-103 206) (character part)
+&"<@@
+0xe011    NON-SPACING CEDILLA (ISO-IR-103 203) (character part)
+&",@@
+0xe012    NON-SPACING OGONEK (ISO-IR-103 206) (character part)
+&";@@
+0xe013    NON-SPACING LOW LINE (ISO-IR-103 204) (character part)
+&"_@@
+0xe014    NON-SPACING DOUBLE LOW LINE (ISO-IR-38 217) (character part)
+&"=@@
+0xe015    NON-SPACING LONG SOLIDUS (ISO-IR-128 201) (character part)
+&"/@@
+0xe016    GREEK NON-SPACING IOTA BELOW (ISO-IR-55 39) (character part)
+&"i@@
+0xe017    GREEK NON-SPACING DASIA PNEUMATA (ISO-IR-55 38) (character part)
+&"d@@
+0xe018    GREEK NON-SPACING PSILI PNEUMATA (ISO-IR-55 37) (character part)
+&"p@@
+0xe019    GREEK DASIA PNEUMATA (ISO-IR-18 92)
+&;;@@
+0xe01a    GREEK PSILI PNEUMATA (ISO-IR-18 124)
+&,,@@
+0xe01b    GREEK SMALL LETTER MIDDLE BETA (ISO-IR-18 99)
+&b3@@
+0xe01c    CIRCLE (ISO-IR-83 0294)
+&Ci@@
+0xe01d    FUNCTION SIGN (ISO-IR-143 221)
+&f(@@
+0xe01e    LATIN SMALL LETTER EZH (ISO-IR-158 142)
+&ed@@
+0xe01f    ANTE MERIDIAM SIGN (ISO-IR-149 0267)
+&am@@
+0xe020    POST MERIDIAM SIGN (ISO-IR-149 0268)
+&pm@@
+0xe021    TEL COMPATIBILITY SIGN (ISO-IR-149 0269)
+&_Tel_@@
+0xe022    ARABIC LETTER ALEF FINAL FORM COMPATIBILITY (IBM868 144)
+&_a+:_@@
+0xe023    DUTCH GUILDER SIGN (IBM437 159)
+&Fl@@
+0xe024    GAMMA FUNCTION SIGN (ISO-10646-1DIS 032/032/037/122)
+&GF@@
+0xe025    RIGHTWARDS VECTOR ABOVE (ISO-10646-1DIS 032/032/038/046)
+&>V@@
+0xe026    GREEK VARIA (ISO-10646-1DIS 032/032/042/164)
+&!*@@
+0xe027    GREEK PERISPOMENI (ISO-10646-1DIS 032/032/042/165)
+&?*@@
+0xe028    LATIN CAPITAL LETTER J WITH CARON (lowercase: 000/000/001/240)
+&J<@@
+0xfb00    LATIN SMALL LIGATURE FF
+&ff@@
+0xfb01    LATIN SMALL LIGATURE FI
+&fi@@
+0xfb02    LATIN SMALL LIGATURE FL
+&fl@@
+0xfb03    LATIN SMALL LIGATURE FFI
+&_ffi_@@
+0xfb04    LATIN SMALL LIGATURE FFL
+&_ffl_@@
+0xfb05    LATIN SMALL LIGATURE FT
+&ft@@
+0xfb06    LATIN SMALL LIGATURE ST
+&st@@
+0xfe7d    ARABIC SHADDA MEDIAL FORM
+&_3+;_@@
+0xfe82    ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
+&_aM._@@
+0xfe84    ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
+&_aH._@@
+0xfe8d    ARABIC LETTER ALEF ISOLATED FORM
+&_a+-_@@
+0xfe8e    ARABIC LETTER ALEF FINAL FORM
+&_a+._@@
+0xfe8f    ARABIC LETTER BEH ISOLATED FORM
+&_b+-_@@
+0xfe90    ARABIC LETTER BEH INITIAL FORM
+&_b+,_@@
+0xfe91    ARABIC LETTER BEH MEDIAL FORM
+&_b+;_@@
+0xfe92    ARABIC LETTER BEH FINAL FORM
+&_b+._@@
+0xfe93    ARABIC LETTER TEH MARBUTA ISOLATED FORM
+&_tm-_@@
+0xfe94    ARABIC LETTER TEH MARBUTA FINAL FORM
+&_tm._@@
+0xfe95    ARABIC LETTER TEH ISOLATED FORM
+&_t+-_@@
+0xfe96    ARABIC LETTER TEH INITIAL FORM
+&_t+,_@@
+0xfe97    ARABIC LETTER TEH MEDIAL FORM
+&_t+;_@@
+0xfe98    ARABIC LETTER TEH FINAL FORM
+&_t+._@@
+0xfe99    ARABIC LETTER THEH ISOLATED FORM
+&_tk-_@@
+0xfe9a    ARABIC LETTER THEH INITIAL FORM
+&_tk,_@@
+0xfe9b    ARABIC LETTER THEH MEDIAL FORM
+&_tk;_@@
+0xfe9c    ARABIC LETTER THEH FINAL FORM
+&_tk._@@
+0xfe9d    ARABIC LETTER JEEM ISOLATED FORM
+&_g+-_@@
+0xfe9e    ARABIC LETTER JEEM INITIAL FORM
+&_g+,_@@
+0xfe9f    ARABIC LETTER JEEM MEDIAL FORM
+&_g+;_@@
+0xfea0    ARABIC LETTER JEEM FINAL FORM
+&_g+._@@
+0xfea1    ARABIC LETTER HAH ISOLATED FORM
+&_hk-_@@
+0xfea2    ARABIC LETTER HAH INITIAL FORM
+&_hk,_@@
+0xfea3    ARABIC LETTER HAH MEDIAL FORM
+&_hk;_@@
+0xfea4    ARABIC LETTER HAH FINAL FORM
+&_hk._@@
+0xfea5    ARABIC LETTER KHAH ISOLATED FORM
+&_x+-_@@
+0xfea6    ARABIC LETTER KHAH INITIAL FORM
+&_x+,_@@
+0xfea7    ARABIC LETTER KHAH MEDIAL FORM
+&_x+;_@@
+0xfea8    ARABIC LETTER KHAH FINAL FORM
+&_x+._@@
+0xfea9    ARABIC LETTER DAL ISOLATED FORM
+&_d+-_@@
+0xfeaa    ARABIC LETTER DAL FINAL FORM
+&_d+._@@
+0xfeab    ARABIC LETTER THAL ISOLATED FORM
+&_dk-_@@
+0xfeac    ARABIC LETTER THAL FINAL FORM
+&_dk._@@
+0xfead    ARABIC LETTER REH ISOLATED FORM
+&_r+-_@@
+0xfeae    ARABIC LETTER REH FINAL FORM
+&_r+._@@
+0xfeaf    ARABIC LETTER ZAIN ISOLATED FORM
+&_z+-_@@
+0xfeb0    ARABIC LETTER ZAIN FINAL FORM
+&_z+._@@
+0xfeb1    ARABIC LETTER SEEN ISOLATED FORM
+&_s+-_@@
+0xfeb2    ARABIC LETTER SEEN INITIAL FORM
+&_s+,_@@
+0xfeb3    ARABIC LETTER SEEN MEDIAL FORM
+&_s+;_@@
+0xfeb4    ARABIC LETTER SEEN FINAL FORM
+&_s+._@@
+0xfeb5    ARABIC LETTER SHEEN ISOLATED FORM
+&_sn-_@@
+0xfeb6    ARABIC LETTER SHEEN INITIAL FORM
+&_sn,_@@
+0xfeb7    ARABIC LETTER SHEEN MEDIAL FORM
+&_sn;_@@
+0xfeb8    ARABIC LETTER SHEEN FINAL FORM
+&_sn._@@
+0xfeb9    ARABIC LETTER SAD ISOLATED FORM
+&_c+-_@@
+0xfeba    ARABIC LETTER SAD INITIAL FORM
+&_c+,_@@
+0xfebb    ARABIC LETTER SAD MEDIAL FORM
+&_c+;_@@
+0xfebc    ARABIC LETTER SAD FINAL FORM
+&_c+._@@
+0xfebd    ARABIC LETTER DAD ISOLATED FORM
+&_dd-_@@
+0xfebe    ARABIC LETTER DAD INITIAL FORM
+&_dd,_@@
+0xfebf    ARABIC LETTER DAD MEDIAL FORM
+&_dd;_@@
+0xfec0    ARABIC LETTER DAD FINAL FORM
+&_dd._@@
+0xfec1    ARABIC LETTER TAH ISOLATED FORM
+&_tj-_@@
+0xfec2    ARABIC LETTER TAH INITIAL FORM
+&_tj,_@@
+0xfec3    ARABIC LETTER TAH MEDIAL FORM
+&_tj;_@@
+0xfec4    ARABIC LETTER TAH FINAL FORM
+&_tj._@@
+0xfec5    ARABIC LETTER ZAH ISOLATED FORM
+&_zH-_@@
+0xfec6    ARABIC LETTER ZAH INITIAL FORM
+&_zH,_@@
+0xfec7    ARABIC LETTER ZAH MEDIAL FORM
+&_zH;_@@
+0xfec8    ARABIC LETTER ZAH FINAL FORM
+&_zH._@@
+0xfec9    ARABIC LETTER AIN ISOLATED FORM
+&_e+-_@@
+0xfeca    ARABIC LETTER AIN INITIAL FORM
+&_e+,_@@
+0xfecb    ARABIC LETTER AIN MEDIAL FORM
+&_e+;_@@
+0xfecc    ARABIC LETTER AIN FINAL FORM
+&_e+._@@
+0xfecd    ARABIC LETTER GHAIN ISOLATED FORM
+&_i+-_@@
+0xfece    ARABIC LETTER GHAIN INITIAL FORM
+&_i+,_@@
+0xfecf    ARABIC LETTER GHAIN MEDIAL FORM
+&_i+;_@@
+0xfed0    ARABIC LETTER GHAIN FINAL FORM
+&_i+._@@
+0xfed1    ARABIC LETTER FEH ISOLATED FORM
+&_f+-_@@
+0xfed2    ARABIC LETTER FEH INITIAL FORM
+&_f+,_@@
+0xfed3    ARABIC LETTER FEH MEDIAL FORM
+&_f+;_@@
+0xfed4    ARABIC LETTER FEH FINAL FORM
+&_f+._@@
+0xfed5    ARABIC LETTER QAF ISOLATED FORM
+&_q+-_@@
+0xfed6    ARABIC LETTER QAF INITIAL FORM
+&_q+,_@@
+0xfed7    ARABIC LETTER QAF MEDIAL FORM
+&_q+;_@@
+0xfed8    ARABIC LETTER QAF FINAL FORM
+&_q+._@@
+0xfed9    ARABIC LETTER KAF ISOLATED FORM
+&_k+-_@@
+0xfeda    ARABIC LETTER KAF INITIAL FORM
+&_k+,_@@
+0xfedb    ARABIC LETTER KAF MEDIAL FORM
+&_k+;_@@
+0xfedc    ARABIC LETTER KAF FINAL FORM
+&_k+._@@
+0xfedd    ARABIC LETTER LAM ISOLATED FORM
+&_l+-_@@
+0xfede    ARABIC LETTER LAM INITIAL FORM
+&_l+,_@@
+0xfedf    ARABIC LETTER LAM MEDIAL FORM
+&_l+;_@@
+0xfee0    ARABIC LETTER LAM FINAL FORM
+&_l+._@@
+0xfee1    ARABIC LETTER MEEM ISOLATED FORM
+&_m+-_@@
+0xfee2    ARABIC LETTER MEEM INITIAL FORM
+&_m+,_@@
+0xfee3    ARABIC LETTER MEEM MEDIAL FORM
+&_m+;_@@
+0xfee4    ARABIC LETTER MEEM FINAL FORM
+&_m+._@@
+0xfee5    ARABIC LETTER NOON ISOLATED FORM
+&_n+-_@@
+0xfee6    ARABIC LETTER NOON INITIAL FORM
+&_n+,_@@
+0xfee7    ARABIC LETTER NOON MEDIAL FORM
+&_n+;_@@
+0xfee8    ARABIC LETTER NOON FINAL FORM
+&_n+._@@
+0xfee9    ARABIC LETTER HEH ISOLATED FORM
+&_h+-_@@
+0xfeea    ARABIC LETTER HEH INITIAL FORM
+&_h+,_@@
+0xfeeb    ARABIC LETTER HEH MEDIAL FORM
+&_h+;_@@
+0xfeec    ARABIC LETTER HEH FINAL FORM
+&_h+._@@
+0xfeed    ARABIC LETTER WAW ISOLATED FORM
+&_w+-_@@
+0xfeee    ARABIC LETTER WAW FINAL FORM
+&_w+._@@
+0xfeef    ARABIC LETTER ALEF MAKSURA ISOLATED FORM
+&_j+-_@@
+0xfef0    ARABIC LETTER ALEF MAKSURA FINAL FORM
+&_j+._@@
+0xfef1    ARABIC LETTER YEH ISOLATED FORM
+&_y+-_@@
+0xfef2    ARABIC LETTER YEH INITIAL FORM
+&_y+,_@@
+0xfef3    ARABIC LETTER YEH MEDIAL FORM
+&_y+;_@@
+0xfef4    ARABIC LETTER YEH FINAL FORM
+&_y+._@@
+0xfef5    ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
+&_lM-_@@
+0xfef6    ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
+&_lM._@@
+0xfef7    ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
+&_lH-_@@
+0xfef8    ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
+&_lH._@@
+0xfef9    ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM
+&_lh-_@@
+0xfefa    ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM
+&_lh._@@
+0xfefb    ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
+&_la-_@@
+0xfefc    ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+&_la._@@
diff --git a/externals/figlet/fonts/moscow.flc b/externals/figlet/fonts/moscow.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/moscow.flc
@@ -0,0 +1,68 @@
+flc2a
+# This controlfile maps the U.S. keyboard to Cyrillic
+# in the style of the "moscow" font, but is meant for use
+# with a FIGlet Unicode font with Cyrillic codes, such as "banner"
+#
+# "moscow" is an upper-case-only font, so for full compatibility
+# use the "upper" controlfile as well and avoid "@" and "<".
+t / \0x044c
+t \0x5c \0x044a
+t | \0x044b
+t ~ \0x044d
+t < \0x042d
+t ` \0x0443
+t @ \0x042e
+t > \0x0439
+t A \0x0410
+t a \0x0430
+t B \0x0411
+t b \0x0431
+t C \0x0427
+t c \0x0447
+t D \0x0414
+t d \0x0434
+t E \0x0415
+t e \0x0435
+t F \0x0424
+t f \0x0444
+t G \0x0413
+t g \0x0433
+t H \0x0425
+t h \0x0445
+t I \0x0418
+t i \0x0438
+t J \0x0416
+t j \0x0436
+t K \0x041a
+t k \0x043a
+t L \0x041b
+t l \0x043b
+t M \0x041c
+t m \0x043c
+t N \0x041d
+t n \0x043d
+t O \0x041e
+t o \0x043e
+t P \0x041f
+t p \0x043f
+t Q \0x0426
+t q \0x0446
+t R \0x0420
+t r \0x0440
+t S \0x0421
+t s \0x0441
+t T \0x0422
+t t \0x0442
+t U \0x0423
+t u \0x0443
+t V \0x0412
+t v \0x0432
+t W \0x0428
+t w \0x0448
+t X \0x0429
+t x \0x0449
+t Y \0x042f
+t y \0x044f
+t Z \0x0417
+t z \0x0437
+t = \-6
diff --git a/externals/figlet/fonts/script.flf b/externals/figlet/fonts/script.flf
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/script.flf
@@ -0,0 +1,1493 @@
+flf2a$ 7 5 16 0 10 0 3904 96
+Script by Glenn Chappell 4/93
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin.  May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+$$@
+$$@
+$$@
+$$@
+$$@
+$$@
+$$@@
+  @
+ |@
+ |@
+ |@
+ o@
+  @
+  @@
+ oo@
+ ||@
+ $$@
+ $$@
+ $$@
+   @
+   @@
+         @
+   |  |  @
+ --+--+--@
+ --+--+--@
+   |  |  @
+         @
+         @@
+      @
+  |_|_@
+ (|_| @
+ _|_|)@
+  | | @
+      @
+      @@
+     @
+ () /@
+   / @
+  /  @
+ / ()@
+     @
+     @@
+      @
+  ()  @
+  /\  @
+ /  \/@
+ \__/\@
+      @
+      @@
+ o@
+ /@
+ $@
+ $@
+ $@
+  @
+  @@
+   @
+  /@
+ | @
+ | @
+ | @
+  \@
+   @@
+   @
+ \ @
+  |@
+  |@
+  |@
+ / @
+   @@
+      @
+      @
+  \|/ @
+ --*--@
+  /|\ @
+      @
+      @@
+      @
+      @
+   |  @
+ --+--@
+   |  @
+      @
+      @@
+  @
+  @
+  @
+  @
+ o@
+ /@
+  @@
+      @
+      @
+      @
+ -----@
+   $  @
+      @
+      @@
+  @
+  @
+  @
+  @
+ o@
+  @
+  @@
+     @
+    /@
+   / @
+  /  @
+ /   @
+     @
+     @@
+   __  @
+  /  \ @
+ |    |@
+ |    |@
+  \__/ @
+       @
+       @@
+  ,@
+ /|@
+  |@
+  |@
+  |@
+   @
+   @@
+  __ @
+ /  )@
+  $/ @
+  /  @
+ /___@
+     @
+     @@
+  ___ @
+ /   \@
+  $__/@
+  $  \@
+ \___/@
+      @
+      @@
+      @
+ |  | @
+ |__|_@
+    | @
+    | @
+      @
+      @@
+  ____@
+ |    @
+ |___ @
+  $  \@
+ \___/@
+      @
+      @@
+   __ @
+  /$  @
+ | __ @
+ |/  \@
+  \__/@
+      @
+      @@
+ _____@
+  $  /@
+  $ / @
+  $/  @
+  /   @
+      @
+      @@
+  __ @
+ /  \@
+ \__/@
+ /  \@
+ \__/@
+     @
+     @@
+  __ @
+ /  |@
+ \_/|@
+    |@
+    |@
+     @
+     @@
+  @
+ o@
+ $@
+ $@
+ o@
+  @
+  @@
+  @
+ o@
+ $@
+ $@
+ o@
+ /@
+  @@
+   @
+  /@
+ / @
+ \ @
+  \@
+   @
+   @@
+      @
+      @
+ -----@
+ -----@
+      @
+      @
+      @@
+   @
+ \ @
+  \@
+  /@
+ / @
+   @
+   @@
+  __ @
+ /  \@
+  $_/@
+  |  @
+  o  @
+     @
+     @@
+         @
+   ____  @
+  / __,\ @
+ | /  | |@
+ | \_/|/ @
+  \____/ @
+         @@
+   ___,  @
+  /   |  @
+ |    |  @
+ |    |  @
+  \__/\_/@
+         @
+         @@
+  , __ @
+ /|/  \@
+  | __/@
+  |   \@
+  |(__/@
+       @
+       @@
+   ___$@
+  / (_)@
+ |   $ @
+ |   $ @
+  \___/@
+       @
+       @@
+  $____  @
+  (|   \ @
+   |    |@
+ $_|    |@
+ (/\___/ @
+         @
+         @@
+  ___$@
+ / (_)@
+ \__$ @
+ /  $ @
+ \___/@
+      @
+      @@
+ $______@
+ (_) |$ @
+    _|_$@
+   / | |@
+  (_/   @
+        @
+        @@
+       @
+   () |@
+   /\/|@
+  /   |@
+ /(__/ @
+       @
+       @@
+  ,     @
+ /|   | @
+  |___| @
+  |   |\@
+  |   |/@
+        @
+        @@
+    _ @
+   | |@
+   | |@
+ _ |/ @
+ \_/\/@
+      @
+      @@
+      @
+  /\  @
+ |  | @
+ |  | @
+  \_|/@
+   /| @
+   \| @@
+  ,     @
+ /|   / @
+  |__/  @
+  | \$  @
+  |  \_/@
+        @
+        @@
+   $_$  @
+ \_|_)  @
+   |$   @
+ $_|$   @
+ (/\___/@
+        @
+        @@
+  ,__ __   @
+ /|  |  |  @
+  |  |  |  @
+  |  |  |  @
+  |  |  |_/@
+           @
+           @@
+  , _    @
+ /|/ \   @
+  |   |  @
+  |   |  @
+  |   |_/@
+         @
+         @@
+   __  @
+  /\_\/@
+ |    |@
+ |    |@
+  \__/ @
+       @
+       @@
+  , __ @
+ /|/  \@
+  |___/@
+  |   $@
+  |   $@
+       @
+       @@
+   __    @
+  /  \   @
+ | __ |  @
+ |/  \|  @
+  \__/\_/@
+         @
+         @@
+  , __  @
+ /|/  \ @
+  |___/ @
+  | \$  @
+  |  \_/@
+        @
+        @@
+      @
+   () @
+   /\ @
+  /  \@
+ /(__/@
+      @
+      @@
+ $______@
+ (_) |  @
+   $ |  @
+  $_ |  @
+  (_/   @
+        @
+        @@
+ $_        @
+ (_|    |  @
+   |    |  @
+   |    |  @
+    \__/\_/@
+           @
+           @@
+ $_       @
+ (_|   |_/@
+   |   |  @
+   |   |  @
+    \_/   @
+          @
+          @@
+ $_           @
+ (_|   |   |_/@
+   |   |   |  @
+   |   |   |  @
+    \_/ \_/   @
+              @
+              @@
+ $_      @
+ (_\  /  @
+   $\/   @
+   $/\   @
+  _/  \_/@
+         @
+         @@
+ $_      @
+ (_|   | @
+   |   | @
+   |   | @
+    \_/|/@
+      /| @
+      \| @@
+ $__  @
+ (_ \ @
+   $/ @
+   /  @
+  /__/@
+   /| @
+   \| @@
+  _@
+ | @
+ | @
+ | @
+ | @
+ |_@
+   @@
+     @
+ \   @
+  \  @
+   \ @
+    \@
+     @
+     @@
+ _ @
+  |@
+  |@
+  |@
+  |@
+ _|@
+   @@
+ /\@
+  $@
+  $@
+  $@
+  $@
+   @
+   @@
+      @
+      @
+      @
+      @
+   $  @
+   $  @
+ _____@@
+ o@
+ \@
+ $@
+ $@
+ $@
+  @
+  @@
+       @
+       @
+  __,  @
+ /  |  @
+ \_/|_/@
+       @
+       @@
+ $_$  @
+ | |  @
+ | |  @
+ |/ \_@
+  \_/ @
+      @
+      @@
+      @
+      @
+  __  @
+ /$   @
+ \___/@
+      @
+      @@
+       @
+    |  @
+  __|  @
+ /  |  @
+ \_/|_/@
+       @
+       @@
+     @
+     @
+  _  @
+ |/  @
+ |__/@
+     @
+     @@
+ $_$ @
+ | | @
+ | | @
+ |/  @
+ |__/@
+ |\  @
+ |/  @@
+      @
+      @
+  __, @
+ /  | @
+ \_/|/@
+   /| @
+   \| @@
+ $_$    @
+ | |    @
+ | |    @
+ |/ \   @
+ |   |_/@
+        @
+        @@
+    @
+ o  @
+    @
+ |  @
+ |_/@
+    @
+    @@
+    @
+  o @
+    @
+  | @
+  |/@
+ /| @
+ \| @@
+ $_$  @
+ | |  @
+ | |  @
+ |/_) @
+ | \_/@
+      @
+      @@
+ $_$ @
+ | | @
+ | | @
+ |/  @
+ |__/@
+     @
+     @@
+            @
+            @
+  _  _  _   @
+ / |/ |/ |  @
+ $ |  |  |_/@
+            @
+            @@
+         @
+         @
+  _  _   @
+ / |/ |  @
+ $ |  |_/@
+         @
+         @@
+      @
+      @
+  __  @
+ /  \_@
+ \__/ @
+      @
+      @@
+       @
+       @
+    _  @
+  |/ \_@
+  |__/ @
+ /|    @
+ \|    @@
+       @
+       @
+  __,  @
+ /  |  @
+ \_/|_/@
+    |\ @
+    |/ @@
+       @
+       @
+  ,_   @
+ /  |  @
+ $  |_/@
+       @
+       @@
+     @
+     @
+  ,  @
+ / \_@
+ $\/ @
+     @
+     @@
+     @
+     @
+ _|_ @
+  |  @
+  |_/@
+     @
+     @@
+        @
+        @
+        @
+ |   |  @
+ $\_/|_/@
+        @
+        @@
+      @
+      @
+      @
+ |  |_@
+ $\/  @
+      @
+      @@
+         @
+         @
+         @
+ |  |  |_@
+ $\/ \/  @
+         @
+         @@
+      @
+      @
+      @
+ /\/  @
+ $/\_/@
+      @
+      @@
+       @
+       @
+       @
+ |   | @
+ $\_/|/@
+    /| @
+    \| @@
+      @
+      @
+  __  @
+ / / _@
+ $/_/ @
+   /| @
+   \| @@
+    @
+   /@
+  | @
+ <  @
+  | @
+   \@
+    @@
+ |@
+ |@
+ |@
+ |@
+ |@
+ |@
+ |@@
+    @
+ \  @
+  | @
+   >@
+  | @
+ /  @
+    @@
+ /\/@
+  $ @
+  $ @
+  $ @
+  $ @
+    @
+    @@
+  o   o  @
+   ___,  @
+  /   |  @
+ |    |  @
+  \__/\_/@
+         @
+         @@
+  o  o @
+   __  @
+  /\_\/@
+ |    |@
+  \__/ @
+       @
+       @@
+    o  o   @
+ $_        @
+ (_|    |  @
+   |    |  @
+    \__/\_/@
+           @
+           @@
+ o  o  @
+       @
+  __,  @
+ /  |  @
+ \_/|_/@
+       @
+       @@
+ o  o @
+      @
+  __  @
+ /  \_@
+ \__/ @
+      @
+      @@
+ o   o  @
+        @
+        @
+ |   |  @
+ $\_/|_/@
+        @
+        @@
+   _ @
+  / \@
+ |  /@
+ |  \@
+ | _/@
+ |   @
+     @@
+160  NO-BREAK SPACE
+ $$@
+ $$@
+ $$@
+ $$@
+ $$@
+ $$@
+ $$@@
+161  INVERTED EXCLAMATION MARK
+  @
+ o@
+ |@
+ |@
+ |@
+  @
+  @@
+162  CENT SIGN
+      @
+      @
+  _|_ @
+ / |  @
+ \_|_/@
+   |  @
+      @@
+163  POUND SIGN
+     _  @
+    / \ @
+ __|__  @
+  _| $  @
+ (/ \__/@
+        @
+        @@
+164  CURRENCY SIGN
+      @
+ \ _ /@
+  / \ @
+  \_/ @
+ /   \@
+      @
+      @@
+165  YEN SIGN
+      @
+ \   /@
+ _\_/_@
+ __|__@
+   |  @
+      @
+      @@
+166  BROKEN BAR
+ |@
+ |@
+ |@
+  @
+ |@
+ |@
+ |@@
+167  SECTION SIGN
+  _@
+ ( @
+ /\@
+ \/@
+ _)@
+   @
+   @@
+168  DIAERESIS
+ o  o@
+ $  $@
+ $  $@
+ $  $@
+ $  $@
+     @
+     @@
+169  COPYRIGHT SIGN
+    ____   @
+   / __ \  @
+  / / () \ @
+ | |      |@
+  \ \__/ / @
+   \____/  @
+           @@
+170  FEMININE ORDINAL INDICATOR
+  __, @
+ /  | @
+ \_/|_@
+ ---- @
+   $  @
+      @
+      @@
+171  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    @
+  //@
+ // @
+ \\ @
+  \\@
+    @
+    @@
+172  NOT SIGN
+     @
+ ___ @
+    |@
+   $ @
+   $ @
+     @
+     @@
+173  SOFT HYPHEN
+     @
+     @
+     @
+ ----@
+   $ @
+     @
+     @@
+174  REGISTERED SIGN
+    ____   @
+   /, _ \  @
+  //|/ \ \ @
+ |  |__/  |@
+  \ | \_// @
+   \____/  @
+           @@
+175  MACRON
+ _____@
+   $  @
+   $  @
+   $  @
+   $  @
+      @
+      @@
+176  DEGREE SIGN
+  _ @
+ / \@
+ \_/@
+    @
+  $ @
+    @
+    @@
+177  PLUS-MINUS SIGN
+      @
+      @
+   |  @
+ --+--@
+ __|__@
+      @
+      @@
+178  SUPERSCRIPT TWO
+ _ @
+  )@
+ /_@
+   @
+  $@
+   @
+   @@
+179  SUPERSCRIPT THREE
+ ___@
+  _/@
+ __)@
+    @
+  $ @
+    @
+    @@
+180  ACUTE ACCENT
+ /@
+ $@
+ $@
+ $@
+ $@
+  @
+  @@
+181  MICRO SIGN
+        @
+        @
+        @
+ |   |  @
+ |\_/|_/@
+ |      @
+ |      @@
+182  PILCROW SIGN
+  ____ @
+ / |  |@
+ \_|  |@
+   |  |@
+   |  |@
+       @
+       @@
+183  MIDDLE DOT
+    @
+    @
+ $O$@
+  $ @
+  $ @
+    @
+    @@
+184  CEDILLA
+   @
+   @
+   @
+   @
+ $ @
+ _)@
+   @@
+185  SUPERSCRIPT ONE
+  ,@
+ /|@
+  |@
+   @
+  $@
+   @
+   @@
+186  MASCULINE ORDINAL INDICATOR
+  __  @
+ /  \_@
+ \__/ @
+ ---- @
+   $  @
+      @
+      @@
+187  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    @
+ \\ @
+  \\@
+  //@
+ // @
+    @
+    @@
+188  VULGAR FRACTION ONE QUARTER
+  ,    @
+ /| /  @
+  |/   @
+  /|_|_@
+ /   | @
+       @
+       @@
+189  VULGAR FRACTION ONE HALF
+  ,   @
+ /| / @
+  |/_ @
+  /  )@
+ /  /_@
+      @
+      @@
+190  VULGAR FRACTION THREE QUARTERS
+ ___    @
+  _/ /  @
+ __)/   @
+   /|_|_@
+  /   | @
+        @
+        @@
+191  INVERTED QUESTION MARK
+     @
+   o @
+  _| @
+ /$  @
+ \__/@
+     @
+     @@
+192  LATIN CAPITAL LETTER A WITH GRAVE
+    \    @
+   ___,  @
+  /   |  @
+ |    |  @
+  \__/\_/@
+         @
+         @@
+193  LATIN CAPITAL LETTER A WITH ACUTE
+    /    @
+   ___,  @
+  /   |  @
+ |    |  @
+  \__/\_/@
+         @
+         @@
+194  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    /\   @
+   ___,  @
+  /   |  @
+ |    |  @
+  \__/\_/@
+         @
+         @@
+195  LATIN CAPITAL LETTER A WITH TILDE
+   /\/   @
+   ___,  @
+  /   |  @
+ |    |  @
+  \__/\_/@
+         @
+         @@
+196  LATIN CAPITAL LETTER A WITH DIAERESIS
+  o   o  @
+   ___,  @
+  /   |  @
+ |    |  @
+  \__/\_/@
+         @
+         @@
+197  LATIN CAPITAL LETTER A WITH RING ABOVE
+    _    @
+   (_),  @
+  /   |  @
+ |    |  @
+  \__/\_/@
+         @
+         @@
+198  LATIN CAPITAL LETTER AE
+   ___,___$@
+  /   | (_)@
+ |    |__  @
+ |    |    @
+  \__/\___/@
+           @
+           @@
+199  LATIN CAPITAL LETTER C WITH CEDILLA
+   ___$@
+  / (_)@
+ |   $ @
+ |   $ @
+  \___/@
+   _)  @
+       @@
+200  LATIN CAPITAL LETTER E WITH GRAVE
+   \   @
+  ___$ @
+ / (_) @
+ >--$  @
+ \____/@
+       @
+       @@
+201  LATIN CAPITAL LETTER E WITH ACUTE
+   /   @
+  ___$ @
+ / (_) @
+ >--$  @
+ \____/@
+       @
+       @@
+202  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+  /\   @
+  ___$ @
+ / (_) @
+ >--$  @
+ \____/@
+       @
+       @@
+203  LATIN CAPITAL LETTER E WITH DIAERESIS
+ o   o @
+  ___$ @
+ / (_) @
+ >--$  @
+ \____/@
+       @
+       @@
+204  LATIN CAPITAL LETTER I WITH GRAVE
+    \  @
+   $_$ @
+   | | @
+ _ |/  @
+ \_/\_/@
+       @
+       @@
+205  LATIN CAPITAL LETTER I WITH ACUTE
+    /  @
+   $_$ @
+   | | @
+ _ |/  @
+ \_/\_/@
+       @
+       @@
+206  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+   /\  @
+   $_$ @
+   | | @
+ _ |/  @
+ \_/\_/@
+       @
+       @@
+207  LATIN CAPITAL LETTER I WITH DIAERESIS
+  o  o @
+   $_$ @
+   | | @
+ _ |/  @
+ \_/\_/@
+       @
+       @@
+208  LATIN CAPITAL LETTER ETH
+  $____  @
+  (|   \ @
+ __|__  |@
+ $_|    |@
+ (/\___/ @
+         @
+         @@
+209  LATIN CAPITAL LETTER N WITH TILDE
+   /\/   @
+  , _    @
+ /|/ \   @
+  |   |  @
+  |   |_/@
+         @
+         @@
+210  LATIN CAPITAL LETTER O WITH GRAVE
+   \   @
+   __  @
+  /\_\/@
+ |    |@
+  \__/ @
+       @
+       @@
+211  LATIN CAPITAL LETTER O WITH ACUTE
+    /  @
+   __  @
+  /\_\/@
+ |    |@
+  \__/ @
+       @
+       @@
+212  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+   /\  @
+   __  @
+  /\_\/@
+ |    |@
+  \__/ @
+       @
+       @@
+213  LATIN CAPITAL LETTER O WITH TILDE
+   /\/ @
+   __  @
+  /\_\/@
+ |    |@
+  \__/ @
+       @
+       @@
+214  LATIN CAPITAL LETTER O WITH DIAERESIS
+  o  o @
+   __  @
+  /\_\/@
+ |    |@
+  \__/ @
+       @
+       @@
+215  MULTIPLICATION SIGN
+     @
+     @
+ $\/$@
+ $/\$@
+ $  $@
+     @
+     @@
+216  LATIN CAPITAL LETTER O WITH STROKE
+   __ /@
+  /\_//@
+ |  / |@
+ | /  |@
+  /__/ @
+ /     @
+       @@
+217  LATIN CAPITAL LETTER U WITH GRAVE
+     \     @
+ $_        @
+ (_|    |  @
+   |    |  @
+    \__/\_/@
+           @
+           @@
+218  LATIN CAPITAL LETTER U WITH ACUTE
+      /    @
+ $_        @
+ (_|    |  @
+   |    |  @
+    \__/\_/@
+           @
+           @@
+219  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+     /\    @
+ $_        @
+ (_|    |  @
+   |    |  @
+    \__/\_/@
+           @
+           @@
+220  LATIN CAPITAL LETTER U WITH DIAERESIS
+    o  o   @
+ $_        @
+ (_|    |  @
+   |    |  @
+    \__/\_/@
+           @
+           @@
+221  LATIN CAPITAL LETTER Y WITH ACUTE
+     /   @
+ $_      @
+ (_|   | @
+   |   | @
+    \_/|/@
+      /| @
+      \| @@
+222  LATIN CAPITAL LETTER THORN
+  ,    @
+  | __ @
+ /|/  \@
+  |___/@
+  |   $@
+       @
+       @@
+223  LATIN SMALL LETTER SHARP S
+   _ @
+  / \@
+ |  /@
+ |  \@
+ | _/@
+ |   @
+     @@
+224  LATIN SMALL LETTER A WITH GRAVE
+   \   @
+       @
+  __,  @
+ /  |  @
+ \_/|_/@
+       @
+       @@
+225  LATIN SMALL LETTER A WITH ACUTE
+   /   @
+       @
+  __,  @
+ /  |  @
+ \_/|_/@
+       @
+       @@
+226  LATIN SMALL LETTER A WITH CIRCUMFLEX
+  /\   @
+       @
+  __,  @
+ /  |  @
+ \_/|_/@
+       @
+       @@
+227  LATIN SMALL LETTER A WITH TILDE
+  /\/  @
+       @
+  __,  @
+ /  |  @
+ \_/|_/@
+       @
+       @@
+228  LATIN SMALL LETTER A WITH DIAERESIS
+ o  o  @
+       @
+  __,  @
+ /  |  @
+ \_/|_/@
+       @
+       @@
+229  LATIN SMALL LETTER A WITH RING ABOVE
+       @
+  ()   @
+  __,  @
+ /  |  @
+ \_/|_/@
+       @
+       @@
+230  LATIN SMALL LETTER AE
+        @
+        @
+  __,_  @
+ /  |/  @
+ \_/|__/@
+        @
+        @@
+231  LATIN SMALL LETTER C WITH CEDILLA
+      @
+      @
+  __  @
+ /    @
+ \___/@
+  _)  @
+      @@
+232  LATIN SMALL LETTER E WITH GRAVE
+  \  @
+     @
+  _  @
+ |/  @
+ |__/@
+     @
+     @@
+233  LATIN SMALL LETTER E WITH ACUTE
+  /  @
+     @
+  _  @
+ |/  @
+ |__/@
+     @
+     @@
+234  LATIN SMALL LETTER E WITH CIRCUMFLEX
+ /\  @
+     @
+  _  @
+ |/  @
+ |__/@
+     @
+     @@
+235  LATIN SMALL LETTER E WITH DIAERESIS
+ o o @
+     @
+  _  @
+ |/  @
+ |__/@
+     @
+     @@
+236  LATIN SMALL LETTER I WITH GRAVE
+ \  @
+    @
+    @
+ |  @
+ |_/@
+    @
+    @@
+237  LATIN SMALL LETTER I WITH ACUTE
+ /  @
+    @
+    @
+ |  @
+ |_/@
+    @
+    @@
+238  LATIN SMALL LETTER I WITH CIRCUMFLEX
+ /\ @
+    @
+    @
+ |  @
+ |_/@
+    @
+    @@
+239  LATIN SMALL LETTER I WITH DIAERESIS
+ o o @
+     @
+     @
+ |   @
+ |__/@
+     @
+     @@
+240  LATIN SMALL LETTER ETH
+     @
+   \/@
+  _'|@
+ /  |@
+ \_/ @
+     @
+     @@
+241  LATIN SMALL LETTER N WITH TILDE
+   /\/   @
+         @
+  _  _   @
+ / |/ |  @
+ $ |  |_/@
+         @
+         @@
+242  LATIN SMALL LETTER O WITH GRAVE
+  \   @
+      @
+  __  @
+ /  \_@
+ \__/ @
+      @
+      @@
+243  LATIN SMALL LETTER O WITH ACUTE
+   /  @
+      @
+  __  @
+ /  \_@
+ \__/ @
+      @
+      @@
+244  LATIN SMALL LETTER O WITH CIRCUMFLEX
+  /\  @
+      @
+  __  @
+ /  \_@
+ \__/ @
+      @
+      @@
+245  LATIN SMALL LETTER O WITH TILDE
+  /\/ @
+      @
+  __  @
+ /  \_@
+ \__/ @
+      @
+      @@
+246  LATIN SMALL LETTER O WITH DIAERESIS
+ o  o @
+      @
+  __  @
+ /  \_@
+ \__/ @
+      @
+      @@
+247  DIVISION SIGN
+      @
+      @
+   O  @
+ -----@
+   O  @
+      @
+      @@
+248  LATIN SMALL LETTER O WITH STROKE
+      @
+      @
+  __/ @
+ / /\_@
+ \/_/ @
+ /    @
+      @@
+249  LATIN SMALL LETTER U WITH GRAVE
+   \    @
+        @
+        @
+ |   |  @
+ $\_/|_/@
+        @
+        @@
+250  LATIN SMALL LETTER U WITH ACUTE
+   /    @
+        @
+        @
+ |   |  @
+ $\_/|_/@
+        @
+        @@
+251  LATIN SMALL LETTER U WITH CIRCUMFLEX
+   /\   @
+        @
+        @
+ |   |  @
+ $\_/|_/@
+        @
+        @@
+252  LATIN SMALL LETTER U WITH DIAERESIS
+ o   o  @
+        @
+        @
+ |   |  @
+ $\_/|_/@
+        @
+        @@
+253  LATIN SMALL LETTER Y WITH ACUTE
+   /   @
+       @
+       @
+ |   | @
+ $\_/|/@
+    /| @
+    \| @@
+254  LATIN SMALL LETTER THORN
+   _   @
+  | |  @
+  | |  @
+  |/ \_@
+  |__/ @
+ /|    @
+ \|    @@
+255  LATIN SMALL LETTER Y WITH DIAERESIS
+ o   o @
+       @
+       @
+ |   | @
+ $\_/|/@
+    /| @
+    \| @@
diff --git a/externals/figlet/fonts/shadow.flf b/externals/figlet/fonts/shadow.flf
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/shadow.flf
@@ -0,0 +1,1097 @@
+flf2a$ 5 4 16 0 10 0 4992 96
+Shadow by Glenn Chappell 6/93 -- based on Standard & SmShadow
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin.  May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+ $$@
+ $$@
+ $$@
+ $$@
+ $$@@
+ $|$@
+ $|$@
+ _|$@
+ _)$@
+    @@
+ $| )$@
+ V V$ @
+  $$  @
+  $$  @
+      @@
+   $|  |$  @
+ _  |_ |_|$@
+ _  |_ |_|$@
+   _| _|$  @
+           @@
+   $|$ @
+ $ __)$@
+ \__ \$@
+ (   /$@
+   _|$ @@
+ _)  /$@
+   $/$ @
+  $/$  @
+ _/ _)$@
+       @@
+ $ _ )$  @
+  $_ \ \$@
+ $( `  <$@
+ \___/\/$@
+         @@
+ $)$@
+ /$ @
+ $$ @
+ $$ @
+    @@
+  $/$@
+ $|$ @
+ $|$ @
+ $|$ @
+ \_\$@@
+ \ \$ @
+   $|$@
+   $|$@
+   $|$@
+  _/$ @@
+   $\$  @
+ \    /$@
+ $_  _\$@
+   \/$  @
+        @@
+        @
+   $|$  @
+ _   _|$@
+   _|$  @
+        @@
+    @
+    @
+    @
+ $)$@
+ /$ @@
+        @
+        @
+ _____|$@
+   $$   @
+        @@
+    @
+    @
+    @
+ _)$@
+    @@
+    $/$@
+   $/$ @
+  $/$  @
+ _/$   @
+       @@
+  $_ \$ @
+ $|   |$@
+ $|   |$@
+ \___/$ @
+        @@
+ _ |$@
+  $|$@
+  $|$@
+  _|$@
+     @@
+ ___ \$ @
+    ) |$@
+  $__/$ @
+ _____|$@
+        @@
+ ___ /$ @
+   _ \$ @
+    ) |$@
+ ____/$ @
+        @@
+ $|  |$  @
+ $|  |$  @
+ ___ __|$@
+    _|$  @
+         @@
+ $___|$ @
+ $__ \$ @
+    ) |$@
+ ____/$ @
+        @@
+  $/$   @
+ $ _ \$ @
+ $(   |$@
+ \___/$ @
+        @@
+ ___  |$@
+    $/$ @
+   $/$  @
+  _/$   @
+        @@
+ $ _ )$ @
+  $_ \$ @
+ $(   |$@
+ \___/$ @
+        @@
+  $_ \$ @
+ $(   |$@
+ \__  |$@
+   __/$ @
+        @@
+    @
+ _)$@
+ $$ @
+ _)$@
+    @@
+    @
+ _)$@
+ $$ @
+ $)$@
+ /$ @@
+   $/$@
+  $/$ @
+ \ \$ @
+  \_\$@
+      @@
+        @
+ _____|$@
+ _____|$@
+        @
+        @@
+ \ \$ @
+  \ \$@
+   $/$@
+  _/$ @
+      @@
+ __ \$@
+   $/$@
+  _|$ @
+  _)$ @
+      @@
+   $__ \$ @
+  $/ _` |$@
+ $| (   |$@
+ \ \__,_|$@
+  \____/$ @@
+    $\$   @
+   $_ \$  @
+  $___ \$ @
+ _/    _\$@
+          @@
+ $__ )$ @
+ $__ \$ @
+ $|   |$@
+ ____/$ @
+        @@
+  $___|$@
+ $|$    @
+ $|$    @
+ \____|$@
+        @@
+ $__ \$ @
+ $|   |$@
+ $|   |$@
+ ____/$ @
+        @@
+ $____|$@
+ $__|$  @
+ $|$    @
+ _____|$@
+        @@
+ $____|$@
+ $|$    @
+ $__|$  @
+ _|$    @
+        @@
+  $___|$@
+ $|$    @
+ $|   |$@
+ \____|$@
+        @@
+ $|   |$@
+ $|   |$@
+ $___ |$@
+ _|  _|$@
+        @@
+ _ _|$@
+  $|$ @
+  $|$ @
+ ___|$@
+      @@
+     $|$@
+     $|$@
+ $\   |$@
+ \___/$ @
+        @@
+ $|  /$@
+ $' /$ @
+ $. \$ @
+ _|\_\$@
+       @@
+ $|$    @
+ $|$    @
+ $|$    @
+ _____|$@
+        @@
+ $ \  |$@
+ $|\/ |$@
+ $|   |$@
+ _|  _|$@
+        @@
+ $ \  |$@
+ $  \ |$@
+ $|\  |$@
+ _| \_|$@
+        @@
+  $_ \$ @
+ $|   |$@
+ $|   |$@
+ \___/$ @
+        @@
+ $ _ \$ @
+ $|   |$@
+ $___/$ @
+ _|$    @
+        @@
+  $_ \$ @
+ $|   |$@
+ $|   |$@
+ \__\_\$@
+        @@
+ $ _ \$ @
+ $|   |$@
+ $__ <$ @
+ _| \_\$@
+        @@
+  $___|$ @
+ \___ \$ @
+      $|$@
+ _____/$ @
+         @@
+ __ __|$@
+   $|$  @
+   $|$  @
+   _|$  @
+        @@
+ $|   |$@
+ $|   |$@
+ $|   |$@
+ \___/$ @
+        @@
+ \ \     /$@
+  \ \   /$ @
+   \ \ /$  @
+    \_/$   @
+           @@
+ \ \        /$@
+  \ \  \   /$ @
+   \ \  \ /$  @
+    \_/\_/$   @
+              @@
+ \ \  /$@
+  \  /$ @
+   $ \$ @
+  _/\_\$@
+        @@
+ \ \   /$@
+  \   /$ @
+    $|$  @
+    _|$  @
+         @@
+ __  /$@
+   $/$ @
+  $/$  @
+ ____|$@
+       @@
+ $_|$@
+ $|$ @
+ $|$ @
+ $|$ @
+ __|$@@
+ \ \$   @
+  \ \$  @
+   \ \$ @
+    \_\$@
+        @@
+ _ |$@
+  $|$@
+  $|$@
+  $|$@
+ __|$@@
+ /\\$@
+  $$ @
+  $$ @
+  $$ @
+     @@
+        @
+        @
+        @
+   $$   @
+ _____|$@@
+ $)$@
+ \|$@
+ $$ @
+ $$ @
+    @@
+        @
+  $_` |$@
+ $(   |$@
+ \__,_|$@
+        @@
+ $|$    @
+ $__ \$ @
+ $|   |$@
+ _.__/$ @
+        @@
+       @
+  $__|$@
+ $($   @
+ \___|$@
+       @@
+     $|$@
+  $_` |$@
+ $(   |$@
+ \__,_|$@
+        @@
+       @
+  $_ \$@
+ $ __/$@
+ \___|$@
+       @@
+  $_|$@
+ $|$  @
+ $__|$@
+ _|$  @
+      @@
+        @
+  $_` |$@
+ $(   |$@
+ \__, |$@
+ |___/$ @@
+ $|$    @
+ $__ \$ @
+ $| | |$@
+ _| |_|$@
+        @@
+ _)$@
+ $|$@
+ $|$@
+ _|$@
+    @@
+    _)$@
+    $|$@
+    $|$@
+    $|$@
+ ___/$ @@
+ $|$   @
+ $|  /$@
+ $  <$ @
+ _|\_\$@
+       @@
+ $|$@
+ $|$@
+ $|$@
+ _|$@
+    @@
+            @
+ $__ `__ \$ @
+ $|   |   |$@
+ _|  _|  _|$@
+            @@
+        @
+ $__ \$ @
+ $|   |$@
+ _|  _|$@
+        @@
+        @
+  $_ \$ @
+ $(   |$@
+ \___/$ @
+        @@
+        @
+ $__ \$ @
+ $|   |$@
+ $.__/$ @
+ _|$    @@
+        @
+  $_` |$@
+ $(   |$@
+ \__, |$@
+     _|$@@
+       @
+ $ __|$@
+ $|$   @
+ _|$   @
+       @@
+       @
+  $__|$@
+ \__ \$@
+ ____/$@
+       @@
+ $|$  @
+ $__|$@
+ $|$  @
+ \__|$@
+      @@
+        @
+ $|   |$@
+ $|   |$@
+ \__,_|$@
+        @@
+         @
+ \ \   /$@
+  \ \ /$ @
+   \_/$  @
+         @@
+            @
+ \ \  \   /$@
+  \ \  \ /$ @
+   \_/\_/$  @
+            @@
+        @
+ \ \  /$@
+  `  <$ @
+  _/\_\$@
+        @@
+        @
+ $|   |$@
+ $|   |$@
+ \__, |$@
+ ____/$ @@
+      @
+ _  /$@
+  $/$ @
+ ___|$@
+      @@
+    $/$@
+   $|$ @
+ < <$  @
+   $|$ @
+   \_\$@@
+ $|$@
+ $|$@
+ $|$@
+ $|$@
+ _|$@@
+ \ \$  @
+   $|$ @
+   ` >$@
+   $|$ @
+  _/$  @@
+ / _/$@
+  $$  @
+  $$  @
+  $$  @
+      @@
+  _) \ _)$@
+   $_ \$  @
+  $___ \$ @
+ _/    _\$@
+          @@
+ _)  _)$@
+  $_ \$ @
+ $|   |$@
+ \___/$ @
+        @@
+ _)  _)$@
+ $|   |$@
+ $|   |$@
+ \___/$ @
+        @@
+ _)  _)$@
+  $_` |$@
+ $(   |$@
+ \__,_|$@
+        @@
+ _)  _)$@
+  $_ \$ @
+ $(   |$@
+ \___/$ @
+        @@
+ _)  _)$@
+ $|   |$@
+ $|   |$@
+ \__,_|$@
+        @@
+  $_ \$@
+ $|  /$@
+ $|\ \$@
+ $|__/$@
+ _|$   @@
+160  NO-BREAK SPACE
+ $ $@
+ $ $@
+ $ $@
+ $ $@
+ $ $@@
+161  INVERTED EXCLAMATION MARK
+ _)$@
+ $|$@
+ $|$@
+ _|$@
+    @@
+162  CENT SIGN
+   $|$ @
+  $__)$@
+ $($   @
+ \   )$@
+   _|$ @@
+163  POUND SIGN
+    $,_\$ @
+ _  |_$   @
+   $|$    @
+  _,____|$@
+          @@
+164  CURRENCY SIGN
+ \  _  /$@
+  $(   |$@
+  $___ \$@
+ \/    /$@
+         @@
+165  YEN SIGN
+ \ \ /$ @
+ __ __|$@
+ __ __|$@
+   _|$  @
+        @@
+166  BROKEN BAR
+ $|$@
+ _|$@
+    @
+ $|$@
+ _|$@@
+167  SECTION SIGN
+    $_)$@
+  $\ \$ @
+ \ \\ \$@
+  \ \_/$@
+ (__/$  @@
+168  DIAERESIS
+ _)  _)$@
+ $    $ @
+ $    $ @
+ $    $ @
+        @@
+169  COPYRIGHT SIGN
+   $    \$  @
+  $  __| \$ @
+ $  (     |$@
+ \ \___| /$ @
+  \_____/$  @@
+170  FEMININE ORDINAL INDICATOR
+  $_` |$@
+ \__,_|$@
+ _____|$@
+   $$   @
+        @@
+171  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+   $/ /$@
+  $/ /$ @
+ \ \ \$ @
+  \_\_\$@
+        @@
+172  NOT SIGN
+         @
+ _____ |$@
+      _|$@
+    $$   @
+         @@
+173  SOFT HYPHEN
+        @
+        @
+ _____|$@
+   $$   @
+        @@
+174  REGISTERED SIGN
+   $    \$  @
+  $  _ \ \$ @
+ $     /  |$@
+ \  _|_\ /$ @
+  \_____/$  @@
+175  MACRON
+ _____|$@
+   $$   @
+   $$   @
+   $$   @
+        @@
+176  DEGREE SIGN
+  $ \$ @
+ $(  |$@
+ \__/$ @
+   $$  @
+       @@
+177  PLUS-MINUS SIGN
+   $|$  @
+ _   _|$@
+   _|$  @
+ _____|$@
+        @@
+178  SUPERSCRIPT TWO
+ _  )$@
+  $/$ @
+ ___|$@
+  $$  @
+      @@
+179  SUPERSCRIPT THREE
+ __ /$@
+  _ \$@
+ ___/$@
+  $$  @
+      @@
+180  ACUTE ACCENT
+ _/$@
+ $$ @
+ $$ @
+ $$ @
+    @@
+181  MICRO SIGN
+        @
+ $|   |$@
+ $|   |$@
+ $._,_|$@
+ _|$    @@
+182  PILCROW SIGN
+  $    |$@
+ $(  | |$@
+ \__ | |$@
+    _|_|$@
+         @@
+183  MIDDLE DOT
+    @
+ _)$@
+ $$ @
+ $$ @
+    @@
+184  CEDILLA
+    @
+    @
+    @
+ $$ @
+ _)$@@
+185  SUPERSCRIPT ONE
+ _ |$@
+  $|$@
+  _|$@
+  $$ @
+     @@
+186  MASCULINE ORDINAL INDICATOR
+  $_ \$@
+ \___/$@
+ ____|$@
+   $$  @
+       @@
+187  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ \ \ \$ @
+  \ \ \$@
+   $/ /$@
+  _/_/$ @
+        @@
+188  VULGAR FRACTION ONE QUARTER
+ _ |   /$    @
+  $|  / | |$ @
+  _| / __ _|$@
+   _/    _|$ @
+             @@
+189  VULGAR FRACTION ONE HALF
+ _ |   /$   @
+  $|  /_  )$@
+  _| /   /$ @
+   _/  ___|$@
+            @@
+190  VULGAR FRACTION THREE QUARTERS
+ __ /   /$    @
+  _ \  / | |$ @
+ ___/ / __ _|$@
+    _/    _|$ @
+              @@
+191  INVERTED QUESTION MARK
+   _)$ @
+   $|$ @
+  $/$  @
+ \___|$@
+       @@
+192  LATIN CAPITAL LETTER A WITH GRAVE
+  \_\$  @
+   $\$  @
+  $_ \$ @
+ _/  _\$@
+        @@
+193  LATIN CAPITAL LETTER A WITH ACUTE
+   _/$  @
+   $\$  @
+  $_ \$ @
+ _/  _\$@
+        @@
+194  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+   /\\$ @
+   $\$  @
+  $_ \$ @
+ _/  _\$@
+        @@
+195  LATIN CAPITAL LETTER A WITH TILDE
+  / _/$ @
+   $\$  @
+  $_ \$ @
+ _/  _\$@
+        @@
+196  LATIN CAPITAL LETTER A WITH DIAERESIS
+  _) \ _)$@
+   $_ \$  @
+  $___ \$ @
+ _/    _\$@
+          @@
+197  LATIN CAPITAL LETTER A WITH RING ABOVE
+    ( )$  @
+   $_ \$  @
+  $___ \$ @
+ _/    _\$@
+          @@
+198  LATIN CAPITAL LETTER AE
+    $ ____|$@
+   $/ __|$  @
+  $__ |$    @
+ _/  _____|$@
+            @@
+199  LATIN CAPITAL LETTER C WITH CEDILLA
+  $___|$@
+ $|$    @
+ $|$    @
+ \____|$@
+    _)$ @@
+200  LATIN CAPITAL LETTER E WITH GRAVE
+  \_\$  @
+ $____|$@
+ $ _|$  @
+ _____|$@
+        @@
+201  LATIN CAPITAL LETTER E WITH ACUTE
+   _/$  @
+ $____|$@
+ $ _|$  @
+ _____|$@
+        @@
+202  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+   /\\$ @
+ $____|$@
+ $ _|_$ @
+ _____|$@
+        @@
+203  LATIN CAPITAL LETTER E WITH DIAERESIS
+ _)  _)$@
+ $____|$@
+ $ _|$  @
+ _____|$@
+        @@
+204  LATIN CAPITAL LETTER I WITH GRAVE
+ \_\$ @
+ _ _|$@
+ | |$ @
+ ___|$@
+      @@
+205  LATIN CAPITAL LETTER I WITH ACUTE
+  _/$ @
+ _ _|$@
+  $|$ @
+ ___|$@
+      @@
+206  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ /\\$ @
+ _ _|$@
+  $|$ @
+ ___|$@
+      @@
+207  LATIN CAPITAL LETTER I WITH DIAERESIS
+ _)  _)$@
+  _ _|$ @
+   $|$  @
+  ___|$ @
+        @@
+208  LATIN CAPITAL LETTER ETH
+    __ \$ @
+    |   |$@
+ __ __| |$@
+   ____/$ @
+          @@
+209  LATIN CAPITAL LETTER N WITH TILDE
+  / _/$@
+ $ \ |$@
+ $.  |$@
+ _|\_|$@
+       @@
+210  LATIN CAPITAL LETTER O WITH GRAVE
+  \_\$  @
+  $_ \$ @
+ $|   |$@
+ \___/$ @
+        @@
+211  LATIN CAPITAL LETTER O WITH ACUTE
+   _/$  @
+  $_ \$ @
+ $|   |$@
+ \___/$ @
+        @@
+212  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+   /\\$ @
+  $_ \$ @
+ $|   |$@
+ \___/$ @
+        @@
+213  LATIN CAPITAL LETTER O WITH TILDE
+  / _/$ @
+  $_ \$ @
+ $|   |$@
+ \___/$ @
+        @@
+214  LATIN CAPITAL LETTER O WITH DIAERESIS
+ _)  _)$@
+  $_ \$ @
+ $|   |$@
+ \___/$ @
+        @@
+215  MULTIPLICATION SIGN
+      @
+  \ \$@
+ ,  '$@
+ \/\/$@
+      @@
+216  LATIN CAPITAL LETTER O WITH STROKE
+  $_ /$ @
+ $| / |$@
+ $ /  |$@
+ _/__/$ @
+        @@
+217  LATIN CAPITAL LETTER U WITH GRAVE
+  \_\$  @
+ $|   |$@
+ $|   |$@
+ \___/$ @
+        @@
+218  LATIN CAPITAL LETTER U WITH ACUTE
+   _/$  @
+ $|   |$@
+ $|   |$@
+ \___/$ @
+        @@
+219  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+   /\\$ @
+ $|   |$@
+ $|   |$@
+ \___/$ @
+        @@
+220  LATIN CAPITAL LETTER U WITH DIAERESIS
+ _)  _)$@
+ $|   |$@
+ $|   |$@
+ \___/$ @
+        @@
+221  LATIN CAPITAL LETTER Y WITH ACUTE
+    _/$ @
+ \ \  /$@
+  \  /$ @
+   _|$  @
+        @@
+222  LATIN CAPITAL LETTER THORN
+ $|$    @
+ $ __ \$@
+ $ ___/$@
+ _|$    @
+        @@
+223  LATIN SMALL LETTER SHARP S
+  $_ \$@
+ $|  /$@
+ $|\ \$@
+ $|__/$@
+ _|$   @@
+224  LATIN SMALL LETTER A WITH GRAVE
+  \_\$  @
+  $_` |$@
+ $(   |$@
+ \__,_|$@
+        @@
+225  LATIN SMALL LETTER A WITH ACUTE
+   _/_$ @
+  $_` |$@
+ $(   |$@
+ \__,_|$@
+        @@
+226  LATIN SMALL LETTER A WITH CIRCUMFLEX
+   /\\$ @
+  $_` |$@
+ $(   |$@
+ \__,_|$@
+        @@
+227  LATIN SMALL LETTER A WITH TILDE
+  / _/$ @
+  $_` |$@
+ $(   |$@
+ \__,_|$@
+        @@
+228  LATIN SMALL LETTER A WITH DIAERESIS
+ _)  _)$@
+  $_` |$@
+ $(   |$@
+ \__,_|$@
+        @@
+229  LATIN SMALL LETTER A WITH RING ABOVE
+   ( )$ @
+  $_ '|$@
+ $(   |$@
+ \__,_|$@
+        @@
+230  LATIN SMALL LETTER AE
+           @
+  $_`  _ \$@
+ $(    __/$@
+ \__,____|$@
+           @@
+231  LATIN SMALL LETTER C WITH CEDILLA
+       @
+  $__|$@
+ $($   @
+ \___|$@
+   _)$ @@
+232  LATIN SMALL LETTER E WITH GRAVE
+  \_\$ @
+  $_ \$@
+ $ __/$@
+ \___|$@
+       @@
+233  LATIN SMALL LETTER E WITH ACUTE
+   _/$ @
+  $_ \$@
+ $ __/$@
+ \___|$@
+       @@
+234  LATIN SMALL LETTER E WITH CIRCUMFLEX
+  /\\$ @
+  $_ \$@
+ $ __/$@
+ \___|$@
+       @@
+235  LATIN SMALL LETTER E WITH DIAERESIS
+ _)  _)$@
+  $_ \$ @
+ $ __/$ @
+ \___|$ @
+        @@
+236  LATIN SMALL LETTER I WITH GRAVE
+ \_\$@
+  $|$@
+  $|$@
+  _|$@
+     @@
+237  LATIN SMALL LETTER I WITH ACUTE
+ _/$@
+ $|$@
+ $|$@
+ _|$@
+    @@
+238  LATIN SMALL LETTER I WITH CIRCUMFLEX
+ /\\$@
+ $|$ @
+ $|$ @
+ _|$ @
+     @@
+239  LATIN SMALL LETTER I WITH DIAERESIS
+ _)  _)$@
+   $|$  @
+   $|$  @
+   _|$  @
+        @@
+240  LATIN SMALL LETTER ETH
+   `  <$ @
+   \/\ |$@
+  $__` |$@
+ \____/$ @
+         @@
+241  LATIN SMALL LETTER N WITH TILDE
+  / _/$ @
+ $'_ \$ @
+ $|   |$@
+ _|  _|$@
+        @@
+242  LATIN SMALL LETTER O WITH GRAVE
+  \_\$  @
+  $_ \$ @
+ $(   |$@
+ \___/$ @
+        @@
+243  LATIN SMALL LETTER O WITH ACUTE
+   _/$  @
+  $_ \$ @
+ $(   |$@
+ \___/$ @
+        @@
+244  LATIN SMALL LETTER O WITH CIRCUMFLEX
+   /\\$ @
+  $_ \$ @
+ $(   |$@
+ \___/$ @
+        @@
+245  LATIN SMALL LETTER O WITH TILDE
+  / _/$ @
+  $_ \$ @
+ $(   |$@
+ \___/$ @
+        @@
+246  LATIN SMALL LETTER O WITH DIAERESIS
+ _)  _)$@
+  $_ \$ @
+ $(   |$@
+ \___/$ @
+        @@
+247  DIVISION SIGN
+        @
+   _)$  @
+ _____|$@
+   _)$  @
+        @@
+248  LATIN SMALL LETTER O WITH STROKE
+         @
+  $_ /\$ @
+ $( /  |$@
+ \_/__/$ @
+         @@
+249  LATIN SMALL LETTER U WITH GRAVE
+  \_\$  @
+ $|   |$@
+ $|   |$@
+ \__,_|$@
+        @@
+250  LATIN SMALL LETTER U WITH ACUTE
+   _/$  @
+ $|   |$@
+ $|   |$@
+ \__,_|$@
+        @@
+251  LATIN SMALL LETTER U WITH CIRCUMFLEX
+   /\\$ @
+ $|   |$@
+ $|   |$@
+ \__,_|$@
+        @@
+252  LATIN SMALL LETTER U WITH DIAERESIS
+ _)  _)$@
+ $|   |$@
+ $|   |$@
+ \__,_|$@
+        @@
+253  LATIN SMALL LETTER Y WITH ACUTE
+   _/$  @
+ $|   |$@
+ $|   |$@
+ \__, |$@
+ ____/$ @@
+254  LATIN SMALL LETTER THORN
+ $|$    @
+ $__ \$ @
+ $|   |$@
+ $.__/$ @
+ _|$    @@
+255  LATIN SMALL LETTER Y WITH DIAERESIS
+ _)  _)$@
+ $|   |$@
+ $|   |$@
+ \__, |$@
+ ____/$ @@
diff --git a/externals/figlet/fonts/slant.flf b/externals/figlet/fonts/slant.flf
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/slant.flf
@@ -0,0 +1,1295 @@
+flf2a$ 6 5 16 15 10 0 18319 96
+Slant by Glenn Chappell 3/93 -- based on Standard
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin.  May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+     $$@
+    $$ @
+   $$  @
+  $$   @
+ $$    @
+$$     @@
+    __@
+   / /@
+  / / @
+ /_/  @
+(_)   @
+      @@
+ _ _ @
+( | )@
+|/|/ @
+ $   @
+$    @
+     @@
+     __ __ @
+  __/ // /_@
+ /_  _  __/@
+/_  _  __/ @
+ /_//_/    @
+           @@
+     __@
+   _/ /@
+  / __/@
+ (_  ) @
+/  _/  @
+/_/    @@
+   _   __@
+  (_)_/_/@
+   _/_/  @
+ _/_/_   @
+/_/ (_)  @
+         @@
+   ___   @
+  ( _ )  @
+ / __ \/|@
+/ /_/  < @
+\____/\/ @
+         @@
+  _ @
+ ( )@
+ |/ @
+ $  @
+$   @
+    @@
+     __@
+   _/_/@
+  / /  @
+ / /   @
+/ /    @
+|_|    @@
+     _ @
+    | |@
+    / /@
+   / / @
+ _/_/  @
+/_/    @@
+       @
+  __/|_@
+ |    /@
+/_ __| @
+ |/    @
+       @@
+       @
+    __ @
+ __/ /_@
+/_  __/@
+ /_/   @
+       @@
+   @
+   @
+   @
+ _ @
+( )@
+|/ @@
+       @
+       @
+ ______@
+/_____/@
+  $    @
+       @@
+   @
+   @
+   @
+ _ @
+(_)@
+   @@
+       __@
+     _/_/@
+   _/_/  @
+ _/_/    @
+/_/      @
+         @@
+   ____ @
+  / __ \@
+ / / / /@
+/ /_/ / @
+\____/  @
+        @@
+   ___@
+  <  /@
+  / / @
+ / /  @
+/_/   @
+      @@
+   ___ @
+  |__ \@
+  __/ /@
+ / __/ @
+/____/ @
+       @@
+   _____@
+  |__  /@
+   /_ < @
+ ___/ / @
+/____/  @
+        @@
+   __ __@
+  / // /@
+ / // /_@
+/__  __/@
+  /_/   @
+        @@
+    ______@
+   / ____/@
+  /___ \  @
+ ____/ /  @
+/_____/   @
+          @@
+   _____@
+  / ___/@
+ / __ \ @
+/ /_/ / @
+\____/  @
+        @@
+ _____@
+/__  /@
+  / / @
+ / /  @
+/_/   @
+      @@
+   ____ @
+  ( __ )@
+ / __  |@
+/ /_/ / @
+\____/  @
+        @@
+   ____ @
+  / __ \@
+ / /_/ /@
+ \__, / @
+/____/  @
+        @@
+     @
+   _ @
+  (_)@
+ _   @
+(_)  @
+     @@
+     @
+   _ @
+  (_)@
+ _   @
+( )  @
+|/   @@
+  __@
+ / /@
+/ / @
+\ \ @
+ \_\@
+    @@
+       @
+  _____@
+ /____/@
+/____/ @
+  $    @
+       @@
+__  @
+\ \ @
+ \ \@
+ / /@
+/_/ @
+    @@
+  ___ @
+ /__ \@
+  / _/@
+ /_/  @
+(_)   @
+      @@
+   ______ @
+  / ____ \@
+ / / __ `/@
+/ / /_/ / @
+\ \__,_/  @
+ \____/   @@
+    ___ @
+   /   |@
+  / /| |@
+ / ___ |@
+/_/  |_|@
+        @@
+    ____ @
+   / __ )@
+  / __  |@
+ / /_/ / @
+/_____/  @
+         @@
+   ______@
+  / ____/@
+ / /     @
+/ /___   @
+\____/   @
+         @@
+    ____ @
+   / __ \@
+  / / / /@
+ / /_/ / @
+/_____/  @
+         @@
+    ______@
+   / ____/@
+  / __/   @
+ / /___   @
+/_____/   @
+          @@
+    ______@
+   / ____/@
+  / /_    @
+ / __/    @
+/_/       @
+          @@
+   ______@
+  / ____/@
+ / / __  @
+/ /_/ /  @
+\____/   @
+         @@
+    __  __@
+   / / / /@
+  / /_/ / @
+ / __  /  @
+/_/ /_/   @
+          @@
+    ____@
+   /  _/@
+   / /  @
+ _/ /   @
+/___/   @
+        @@
+       __@
+      / /@
+ __  / / @
+/ /_/ /  @
+\____/   @
+         @@
+    __ __@
+   / //_/@
+  / ,<   @
+ / /| |  @
+/_/ |_|  @
+         @@
+    __ @
+   / / @
+  / /  @
+ / /___@
+/_____/@
+       @@
+    __  ___@
+   /  |/  /@
+  / /|_/ / @
+ / /  / /  @
+/_/  /_/   @
+           @@
+    _   __@
+   / | / /@
+  /  |/ / @
+ / /|  /  @
+/_/ |_/   @
+          @@
+   ____ @
+  / __ \@
+ / / / /@
+/ /_/ / @
+\____/  @
+        @@
+    ____ @
+   / __ \@
+  / /_/ /@
+ / ____/ @
+/_/      @
+         @@
+   ____ @
+  / __ \@
+ / / / /@
+/ /_/ / @
+\___\_\ @
+        @@
+    ____ @
+   / __ \@
+  / /_/ /@
+ / _, _/ @
+/_/ |_|  @
+         @@
+   _____@
+  / ___/@
+  \__ \ @
+ ___/ / @
+/____/  @
+        @@
+  ______@
+ /_  __/@
+  / /   @
+ / /    @
+/_/     @
+        @@
+   __  __@
+  / / / /@
+ / / / / @
+/ /_/ /  @
+\____/   @
+         @@
+ _    __@
+| |  / /@
+| | / / @
+| |/ /  @
+|___/   @
+        @@
+ _       __@
+| |     / /@
+| | /| / / @
+| |/ |/ /  @
+|__/|__/   @
+           @@
+   _  __@
+  | |/ /@
+  |   / @
+ /   |  @
+/_/|_|  @
+        @@
+__  __@
+\ \/ /@
+ \  / @
+ / /  @
+/_/   @
+      @@
+ _____@
+/__  /@
+  / / @
+ / /__@
+/____/@
+      @@
+     ___@
+    / _/@
+   / /  @
+  / /   @
+ / /    @
+/__/    @@
+__    @
+\ \   @
+ \ \  @
+  \ \ @
+   \_\@
+      @@
+     ___@
+    /  /@
+    / / @
+   / /  @
+ _/ /   @
+/__/    @@
+  //|@
+ |/||@
+  $  @
+ $   @
+$    @
+     @@
+       @
+       @
+       @
+       @
+ ______@
+/_____/@@
+  _ @
+ ( )@
+  V @
+ $  @
+$   @
+    @@
+        @
+  ____ _@
+ / __ `/@
+/ /_/ / @
+\__,_/  @
+        @@
+    __  @
+   / /_ @
+  / __ \@
+ / /_/ /@
+/_.___/ @
+        @@
+       @
+  _____@
+ / ___/@
+/ /__  @
+\___/  @
+       @@
+       __@
+  ____/ /@
+ / __  / @
+/ /_/ /  @
+\__,_/   @
+         @@
+      @
+  ___ @
+ / _ \@
+/  __/@
+\___/ @
+      @@
+    ____@
+   / __/@
+  / /_  @
+ / __/  @
+/_/     @
+        @@
+         @
+   ____ _@
+  / __ `/@
+ / /_/ / @
+ \__, /  @
+/____/   @@
+    __  @
+   / /_ @
+  / __ \@
+ / / / /@
+/_/ /_/ @
+        @@
+    _ @
+   (_)@
+  / / @
+ / /  @
+/_/   @
+      @@
+       _ @
+      (_)@
+     / / @
+    / /  @
+ __/ /   @
+/___/    @@
+    __  @
+   / /__@
+  / //_/@
+ / ,<   @
+/_/|_|  @
+        @@
+    __@
+   / /@
+  / / @
+ / /  @
+/_/   @
+      @@
+            @
+   ____ ___ @
+  / __ `__ \@
+ / / / / / /@
+/_/ /_/ /_/ @
+            @@
+        @
+   ____ @
+  / __ \@
+ / / / /@
+/_/ /_/ @
+        @@
+       @
+  ____ @
+ / __ \@
+/ /_/ /@
+\____/ @
+       @@
+         @
+    ____ @
+   / __ \@
+  / /_/ /@
+ / .___/ @
+/_/      @@
+        @
+  ____ _@
+ / __ `/@
+/ /_/ / @
+\__, /  @
+  /_/   @@
+        @
+   _____@
+  / ___/@
+ / /    @
+/_/     @
+        @@
+        @
+   _____@
+  / ___/@
+ (__  ) @
+/____/  @
+        @@
+   __ @
+  / /_@
+ / __/@
+/ /_  @
+\__/  @
+      @@
+        @
+  __  __@
+ / / / /@
+/ /_/ / @
+\__,_/  @
+        @@
+       @
+ _   __@
+| | / /@
+| |/ / @
+|___/  @
+       @@
+          @
+ _      __@
+| | /| / /@
+| |/ |/ / @
+|__/|__/  @
+          @@
+        @
+   _  __@
+  | |/_/@
+ _>  <  @
+/_/|_|  @
+        @@
+         @
+   __  __@
+  / / / /@
+ / /_/ / @
+ \__, /  @
+/____/   @@
+     @
+ ____@
+/_  /@
+ / /_@
+/___/@
+     @@
+     __@
+   _/_/@
+ _/_/  @
+< <    @
+/ /    @
+\_\    @@
+     __@
+    / /@
+   / / @
+  / /  @
+ / /   @
+/_/    @@
+     _ @
+    | |@
+    / /@
+   _>_>@
+ _/_/  @
+/_/    @@
+  /\//@
+ //\/ @
+  $   @
+ $    @
+$     @
+      @@
+    _  _ @
+   (_)(_)@
+  / _ |  @
+ / __ |  @
+/_/ |_|  @
+         @@
+   _   _ @
+  (_)_(_)@
+ / __ \  @
+/ /_/ /  @
+\____/   @
+         @@
+   _   _ @
+  (_) (_)@
+ / / / / @
+/ /_/ /  @
+\____/   @
+         @@
+   _   _ @
+  (_)_(_)@
+ / __ `/ @
+/ /_/ /  @
+\__,_/   @
+         @@
+   _   _ @
+  (_)_(_)@
+ / __ \  @
+/ /_/ /  @
+\____/   @
+         @@
+   _   _ @
+  (_) (_)@
+ / / / / @
+/ /_/ /  @
+\__,_/   @
+         @@
+     ____ @
+    / __ \@
+   / / / /@
+  / /_| | @
+ / //__/  @
+/_/       @@
+160  NO-BREAK SPACE
+     $$@
+    $$ @
+   $$  @
+  $$   @
+ $$    @
+$$     @@
+161  INVERTED EXCLAMATION MARK
+    _ @
+   (_)@
+  / / @
+ / /  @
+/_/   @
+      @@
+162  CENT SIGN
+     __@
+  __/ /@
+ / ___/@
+/ /__  @
+\  _/  @
+/_/    @@
+163  POUND SIGN
+     ____ @
+    / ,__\@
+ __/ /_   @
+ _/ /___  @
+(_,____/  @
+          @@
+164  CURRENCY SIGN
+    /|___/|@
+   | __  / @
+  / /_/ /  @
+ /___  |   @
+|/   |/    @
+           @@
+165  YEN SIGN
+    ____@
+  _| / /@
+ /_  __/@
+/_  __/ @
+ /_/    @
+        @@
+166  BROKEN BAR
+     __@
+    / /@
+   /_/ @
+  __   @
+ / /   @
+/_/    @@
+167  SECTION SIGN
+     __ @
+   _/ _)@
+  / | | @
+ | || | @
+ | |_/  @
+(__/    @@
+168  DIAERESIS
+  _   _ @
+ (_) (_)@
+  $   $ @
+ $   $  @
+$   $   @
+        @@
+169  COPYRIGHT SIGN
+    ______  @
+   / _____\ @
+  / / ___/ |@
+ / / /__  / @
+|  \___/ /  @
+ \______/   @@
+170  FEMININE ORDINAL INDICATOR
+   ___ _@
+  / _ `/@
+ _\_,_/ @
+/____/  @
+ $      @
+        @@
+171  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+  ____@
+ / / /@
+/ / / @
+\ \ \ @
+ \_\_\@
+      @@
+172  NOT SIGN
+       @
+ ______@
+/___  /@
+   /_/ @
+ $     @
+       @@
+173  SOFT HYPHEN
+      @
+      @
+ _____@
+/____/@
+  $   @
+      @@
+174  REGISTERED SIGN
+    ______  @
+   / ___  \ @
+  / / _ \  |@
+ / / , _/ / @
+| /_/|_| /  @
+ \______/   @@
+175  MACRON
+ ______@
+/_____/@
+  $    @
+ $     @
+$      @
+       @@
+176  DEGREE SIGN
+  ___ @
+ / _ \@
+/ // /@
+\___/ @
+ $    @
+      @@
+177  PLUS-MINUS SIGN
+      __ @
+   __/ /_@
+  /_  __/@
+ __/_/_  @
+/_____/  @
+         @@
+178  SUPERSCRIPT TWO
+   ___ @
+  |_  |@
+ / __/ @
+/____/ @
+ $     @
+       @@
+179  SUPERSCRIPT THREE
+   ____@
+  |_  /@
+ _/_ < @
+/____/ @
+ $     @
+       @@
+180  ACUTE ACCENT
+  __@
+ /_/@
+  $ @
+ $  @
+$   @
+    @@
+181  MICRO SIGN
+          @
+    __  __@
+   / / / /@
+  / /_/ / @
+ / ._,_/  @
+/_/       @@
+182  PILCROW SIGN
+  _______@
+ / _    /@
+/ (/ / / @
+\_  / /  @
+ /_/_/   @
+         @@
+183  MIDDLE DOT
+   @
+ _ @
+(_)@
+ $ @
+$  @
+   @@
+184  CEDILLA
+   @
+   @
+   @
+   @
+ _ @
+/_)@@
+185  SUPERSCRIPT ONE
+  ___@
+ <  /@
+ / / @
+/_/  @
+$    @
+     @@
+186  MASCULINE ORDINAL INDICATOR
+   ___ @
+  / _ \@
+ _\___/@
+/____/ @
+ $     @
+       @@
+187  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+____  @
+\ \ \ @
+ \ \ \@
+ / / /@
+/_/_/ @
+      @@
+188  VULGAR FRACTION ONE QUARTER
+  ___   __ @
+ <  / _/_/ @
+ / /_/_/___@
+/_//_// / /@
+ /_/ /_  _/@
+      /_/  @@
+189  VULGAR FRACTION ONE HALF
+  ___   __   @
+ <  / _/_/__ @
+ / /_/_/|_  |@
+/_//_/ / __/ @
+ /_/  /____/ @
+             @@
+190  VULGAR FRACTION THREE QUARTERS
+   ____    __ @
+  |_  /  _/_/ @
+ _/_ < _/_/___@
+/____//_// / /@
+    /_/ /_  _/@
+         /_/  @@
+191  INVERTED QUESTION MARK
+    _ @
+   (_)@
+ _/ / @
+/ _/_ @
+\___/ @
+      @@
+192  LATIN CAPITAL LETTER A WITH GRAVE
+    __ @
+   _\_\@
+  / _ |@
+ / __ |@
+/_/ |_|@
+       @@
+193  LATIN CAPITAL LETTER A WITH ACUTE
+     __@
+   _/_/@
+  / _ |@
+ / __ |@
+/_/ |_|@
+       @@
+194  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+     //|@
+   _|/||@
+  / _ | @
+ / __ | @
+/_/ |_| @
+        @@
+195  LATIN CAPITAL LETTER A WITH TILDE
+     /\//@
+   _//\/ @
+  / _ |  @
+ / __ |  @
+/_/ |_|  @
+         @@
+196  LATIN CAPITAL LETTER A WITH DIAERESIS
+    _  _ @
+   (_)(_)@
+  / _ |  @
+ / __ |  @
+/_/ |_|  @
+         @@
+197  LATIN CAPITAL LETTER A WITH RING ABOVE
+    (())@
+   /   |@
+  / /| |@
+ / ___ |@
+/_/  |_|@
+        @@
+198  LATIN CAPITAL LETTER AE
+    __________@
+   /     ____/@
+  / /|  __/   @
+ / __  /___   @
+/_/ /_____/   @
+              @@
+199  LATIN CAPITAL LETTER C WITH CEDILLA
+   ______@
+  / ____/@
+ / /     @
+/ /___   @
+\____/   @
+ /_)     @@
+200  LATIN CAPITAL LETTER E WITH GRAVE
+    __ @
+   _\_\@
+  / __/@
+ / _/  @
+/___/  @
+       @@
+201  LATIN CAPITAL LETTER E WITH ACUTE
+     __@
+   _/_/@
+  / __/@
+ / _/  @
+/___/  @
+       @@
+202  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+     //|@
+   _|/||@
+  / __/ @
+ / _/   @
+/___/   @
+        @@
+203  LATIN CAPITAL LETTER E WITH DIAERESIS
+    _  _ @
+   (_)(_)@
+  / __/  @
+ / _/    @
+/___/    @
+         @@
+204  LATIN CAPITAL LETTER I WITH GRAVE
+    __ @
+   _\_\@
+  /  _/@
+ _/ /  @
+/___/  @
+       @@
+205  LATIN CAPITAL LETTER I WITH ACUTE
+     __@
+   _/_/@
+  /  _/@
+ _/ /  @
+/___/  @
+       @@
+206  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+     //|@
+   _|/||@
+  /  _/ @
+ _/ /   @
+/___/   @
+        @@
+207  LATIN CAPITAL LETTER I WITH DIAERESIS
+    _  _ @
+   (_)(_)@
+  /  _/  @
+ _/ /    @
+/___/    @
+         @@
+208  LATIN CAPITAL LETTER ETH
+     ____ @
+    / __ \@
+ __/ /_/ /@
+/_  __/ / @
+ /_____/  @
+          @@
+209  LATIN CAPITAL LETTER N WITH TILDE
+     /\//@
+   _//\/ @
+  / |/ / @
+ /    /  @
+/_/|_/   @
+         @@
+210  LATIN CAPITAL LETTER O WITH GRAVE
+    __ @
+  __\_\@
+ / __ \@
+/ /_/ /@
+\____/ @
+       @@
+211  LATIN CAPITAL LETTER O WITH ACUTE
+     __@
+  __/_/@
+ / __ \@
+/ /_/ /@
+\____/ @
+       @@
+212  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    //|@
+  _|/||@
+ / __ \@
+/ /_/ /@
+\____/ @
+       @@
+213  LATIN CAPITAL LETTER O WITH TILDE
+    /\//@
+  _//\/ @
+ / __ \ @
+/ /_/ / @
+\____/  @
+        @@
+214  LATIN CAPITAL LETTER O WITH DIAERESIS
+   _   _ @
+  (_)_(_)@
+ / __ \  @
+/ /_/ /  @
+\____/   @
+         @@
+215  MULTIPLICATION SIGN
+     @
+     @
+ /|/|@
+ > < @
+|/|/ @
+     @@
+216  LATIN CAPITAL LETTER O WITH STROKE
+   _____ @
+  / _// \@
+ / //// /@
+/ //// / @
+\_//__/  @
+         @@
+217  LATIN CAPITAL LETTER U WITH GRAVE
+    __  @
+  __\_\_@
+ / / / /@
+/ /_/ / @
+\____/  @
+        @@
+218  LATIN CAPITAL LETTER U WITH ACUTE
+     __ @
+  __/_/_@
+ / / / /@
+/ /_/ / @
+\____/  @
+        @@
+219  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    //| @
+  _|/||_@
+ / / / /@
+/ /_/ / @
+\____/  @
+        @@
+220  LATIN CAPITAL LETTER U WITH DIAERESIS
+   _   _ @
+  (_) (_)@
+ / / / / @
+/ /_/ /  @
+\____/   @
+         @@
+221  LATIN CAPITAL LETTER Y WITH ACUTE
+   __ @
+__/_/_@
+\ \/ /@
+ \  / @
+ /_/  @
+      @@
+222  LATIN CAPITAL LETTER THORN
+    __  @
+   / /_ @
+  / __ \@
+ / ____/@
+/_/     @
+        @@
+223  LATIN SMALL LETTER SHARP S
+     ____ @
+    / __ \@
+   / / / /@
+  / /_| | @
+ / //__/  @
+/_/       @@
+224  LATIN SMALL LETTER A WITH GRAVE
+    __  @
+  __\_\_@
+ / __ `/@
+/ /_/ / @
+\__,_/  @
+        @@
+225  LATIN SMALL LETTER A WITH ACUTE
+     __ @
+  __/_/_@
+ / __ `/@
+/ /_/ / @
+\__,_/  @
+        @@
+226  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    //| @
+  _|/||_@
+ / __ `/@
+/ /_/ / @
+\__,_/  @
+        @@
+227  LATIN SMALL LETTER A WITH TILDE
+    /\//@
+  _//\/_@
+ / __ `/@
+/ /_/ / @
+\__,_/  @
+        @@
+228  LATIN SMALL LETTER A WITH DIAERESIS
+   _   _ @
+  (_)_(_)@
+ / __ `/ @
+/ /_/ /  @
+\__,_/   @
+         @@
+229  LATIN SMALL LETTER A WITH RING ABOVE
+     __ @
+  __(())@
+ / __ `/@
+/ /_/ / @
+\__,_/  @
+        @@
+230  LATIN SMALL LETTER AE
+           @
+  ____ ___ @
+ / __ ` _ \@
+/ /_/   __/@
+\__,_____/ @
+           @@
+231  LATIN SMALL LETTER C WITH CEDILLA
+       @
+  _____@
+ / ___/@
+/ /__  @
+\___/  @
+/_)    @@
+232  LATIN SMALL LETTER E WITH GRAVE
+   __ @
+  _\_\@
+ / _ \@
+/  __/@
+\___/ @
+      @@
+233  LATIN SMALL LETTER E WITH ACUTE
+    __@
+  _/_/@
+ / _ \@
+/  __/@
+\___/ @
+      @@
+234  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    //|@
+  _|/||@
+ / _ \ @
+/  __/ @
+\___/  @
+       @@
+235  LATIN SMALL LETTER E WITH DIAERESIS
+   _  _ @
+  (_)(_)@
+ / _ \  @
+/  __/  @
+\___/   @
+        @@
+236  LATIN SMALL LETTER I WITH GRAVE
+   __ @
+   \_\@
+  / / @
+ / /  @
+/_/   @
+      @@
+237  LATIN SMALL LETTER I WITH ACUTE
+    __@
+   /_/@
+  / / @
+ / /  @
+/_/   @
+      @@
+238  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    //|@
+   |/||@
+  / /  @
+ / /   @
+/_/    @
+       @@
+239  LATIN SMALL LETTER I WITH DIAERESIS
+  _   _ @
+ (_)_(_)@
+  / /   @
+ / /    @
+/_/     @
+        @@
+240  LATIN SMALL LETTER ETH
+     || @
+    =||=@
+ ___ || @
+/ __` | @
+\____/  @
+        @@
+241  LATIN SMALL LETTER N WITH TILDE
+     /\//@
+   _//\/ @
+  / __ \ @
+ / / / / @
+/_/ /_/  @
+         @@
+242  LATIN SMALL LETTER O WITH GRAVE
+    __ @
+  __\_\@
+ / __ \@
+/ /_/ /@
+\____/ @
+       @@
+243  LATIN SMALL LETTER O WITH ACUTE
+     __@
+  __/_/@
+ / __ \@
+/ /_/ /@
+\____/ @
+       @@
+244  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    //|@
+  _|/||@
+ / __ \@
+/ /_/ /@
+\____/ @
+       @@
+245  LATIN SMALL LETTER O WITH TILDE
+    /\//@
+  _//\/ @
+ / __ \ @
+/ /_/ / @
+\____/  @
+        @@
+246  LATIN SMALL LETTER O WITH DIAERESIS
+   _   _ @
+  (_)_(_)@
+ / __ \  @
+/ /_/ /  @
+\____/   @
+         @@
+247  DIVISION SIGN
+       @
+    _  @
+ __(_)_@
+/_____/@
+ (_)   @
+       @@
+248  LATIN SMALL LETTER O WITH STROKE
+        @
+  _____ @
+ / _// \@
+/ //// /@
+\_//__/ @
+        @@
+249  LATIN SMALL LETTER U WITH GRAVE
+    __  @
+  __\_\_@
+ / / / /@
+/ /_/ / @
+\__,_/  @
+        @@
+250  LATIN SMALL LETTER U WITH ACUTE
+     __ @
+  __/_/_@
+ / / / /@
+/ /_/ / @
+\__,_/  @
+        @@
+251  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    //| @
+  _|/||_@
+ / / / /@
+/ /_/ / @
+\__,_/  @
+        @@
+252  LATIN SMALL LETTER U WITH DIAERESIS
+   _   _ @
+  (_) (_)@
+ / / / / @
+/ /_/ /  @
+\__,_/   @
+         @@
+253  LATIN SMALL LETTER Y WITH ACUTE
+      __ @
+   __/_/_@
+  / / / /@
+ / /_/ / @
+ \__, /  @
+/____/   @@
+254  LATIN SMALL LETTER THORN
+     __  @
+    / /_ @
+   / __ \@
+  / /_/ /@
+ / .___/ @
+/_/      @@
+255  LATIN SMALL LETTER Y WITH DIAERESIS
+    _   _ @
+   (_) (_)@
+  / / / / @
+ / /_/ /  @
+ \__, /   @
+/____/    @@
diff --git a/externals/figlet/fonts/small.flf b/externals/figlet/fonts/small.flf
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/small.flf
@@ -0,0 +1,1097 @@
+flf2a$ 5 4 13 15 10 0 22415 96
+Small by Glenn Chappell 4/93 -- based on Standard
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin.  May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+ $@
+ $@
+ $@
+ $@
+ $@@
+  _ @
+ | |@
+ |_|@
+ (_)@
+    @@
+  _ _ @
+ ( | )@
+  V V @
+   $  @
+      @@
+    _ _   @
+  _| | |_ @
+ |_  .  _|@
+ |_     _|@
+   |_|_|  @@
+     @
+  ||_@
+ (_-<@
+ / _/@
+  || @@
+  _  __ @
+ (_)/ / @
+   / /_ @
+  /_/(_)@
+        @@
+  __     @
+ / _|___ @
+ > _|_ _|@
+ \_____| @
+         @@
+  _ @
+ ( )@
+ |/ @
+  $ @
+    @@
+   __@
+  / /@
+ | | @
+ | | @
+  \_\@@
+ __  @
+ \ \ @
+  | |@
+  | |@
+ /_/ @@
+     @
+ _/\_@
+ >  <@
+  \/ @
+     @@
+    _   @
+  _| |_ @
+ |_   _|@
+   |_|  @
+        @@
+    @
+    @
+  _ @
+ ( )@
+ |/ @@
+      @
+  ___ @
+ |___|@
+   $  @
+      @@
+    @
+    @
+  _ @
+ (_)@
+    @@
+    __@
+   / /@
+  / / @
+ /_/  @
+      @@
+   __  @
+  /  \ @
+ | () |@
+  \__/ @
+       @@
+  _ @
+ / |@
+ | |@
+ |_|@
+    @@
+  ___ @
+ |_  )@
+  / / @
+ /___|@
+      @@
+  ____@
+ |__ /@
+  |_ \@
+ |___/@
+      @@
+  _ _  @
+ | | | @
+ |_  _|@
+   |_| @
+       @@
+  ___ @
+ | __|@
+ |__ \@
+ |___/@
+      @@
+   __ @
+  / / @
+ / _ \@
+ \___/@
+      @@
+  ____ @
+ |__  |@
+   / / @
+  /_/  @
+       @@
+  ___ @
+ ( _ )@
+ / _ \@
+ \___/@
+      @@
+  ___ @
+ / _ \@
+ \_, /@
+  /_/ @
+      @@
+  _ @
+ (_)@
+  _ @
+ (_)@
+    @@
+  _ @
+ (_)@
+  _ @
+ ( )@
+ |/ @@
+   __@
+  / /@
+ < < @
+  \_\@
+     @@
+      @
+  ___ @
+ |___|@
+ |___|@
+      @@
+ __  @
+ \ \ @
+  > >@
+ /_/ @
+     @@
+  ___ @
+ |__ \@
+   /_/@
+  (_) @
+      @@
+   ____  @
+  / __ \ @
+ / / _` |@
+ \ \__,_|@
+  \____/ @@
+    _   @
+   /_\  @
+  / _ \ @
+ /_/ \_\@
+        @@
+  ___ @
+ | _ )@
+ | _ \@
+ |___/@
+      @@
+   ___ @
+  / __|@
+ | (__ @
+  \___|@
+       @@
+  ___  @
+ |   \ @
+ | |) |@
+ |___/ @
+       @@
+  ___ @
+ | __|@
+ | _| @
+ |___|@
+      @@
+  ___ @
+ | __|@
+ | _| @
+ |_|  @
+      @@
+   ___ @
+  / __|@
+ | (_ |@
+  \___|@
+       @@
+  _  _ @
+ | || |@
+ | __ |@
+ |_||_|@
+       @@
+  ___ @
+ |_ _|@
+  | | @
+ |___|@
+      @@
+     _ @
+  _ | |@
+ | || |@
+  \__/ @
+       @@
+  _  __@
+ | |/ /@
+ | ' < @
+ |_|\_\@
+       @@
+  _    @
+ | |   @
+ | |__ @
+ |____|@
+       @@
+  __  __ @
+ |  \/  |@
+ | |\/| |@
+ |_|  |_|@
+         @@
+  _  _ @
+ | \| |@
+ | .` |@
+ |_|\_|@
+       @@
+   ___  @
+  / _ \ @
+ | (_) |@
+  \___/ @
+        @@
+  ___ @
+ | _ \@
+ |  _/@
+ |_|  @
+      @@
+   ___  @
+  / _ \ @
+ | (_) |@
+  \__\_\@
+        @@
+  ___ @
+ | _ \@
+ |   /@
+ |_|_\@
+      @@
+  ___ @
+ / __|@
+ \__ \@
+ |___/@
+      @@
+  _____ @
+ |_   _|@
+   | |  @
+   |_|  @
+        @@
+  _   _ @
+ | | | |@
+ | |_| |@
+  \___/ @
+        @@
+ __   __@
+ \ \ / /@
+  \ V / @
+   \_/  @
+        @@
+ __      __@
+ \ \    / /@
+  \ \/\/ / @
+   \_/\_/  @
+           @@
+ __  __@
+ \ \/ /@
+  >  < @
+ /_/\_\@
+       @@
+ __   __@
+ \ \ / /@
+  \ V / @
+   |_|  @
+        @@
+  ____@
+ |_  /@
+  / / @
+ /___|@
+      @@
+  __ @
+ | _|@
+ | | @
+ | | @
+ |__|@@
+ __   @
+ \ \  @
+  \ \ @
+   \_\@
+      @@
+  __ @
+ |_ |@
+  | |@
+  | |@
+ |__|@@
+  /\ @
+ |/\|@
+   $ @
+   $ @
+     @@
+      @
+      @
+      @
+  ___ @
+ |___|@@
+  _ @
+ ( )@
+  \|@
+  $ @
+    @@
+       @
+  __ _ @
+ / _` |@
+ \__,_|@
+       @@
+  _    @
+ | |__ @
+ | '_ \@
+ |_.__/@
+       @@
+     @
+  __ @
+ / _|@
+ \__|@
+     @@
+     _ @
+  __| |@
+ / _` |@
+ \__,_|@
+       @@
+      @
+  ___ @
+ / -_)@
+ \___|@
+      @@
+   __ @
+  / _|@
+ |  _|@
+ |_|  @
+      @@
+       @
+  __ _ @
+ / _` |@
+ \__, |@
+ |___/ @@
+  _    @
+ | |_  @
+ | ' \ @
+ |_||_|@
+       @@
+  _ @
+ (_)@
+ | |@
+ |_|@
+    @@
+    _ @
+   (_)@
+   | |@
+  _/ |@
+ |__/ @@
+  _   @
+ | |__@
+ | / /@
+ |_\_\@
+      @@
+  _ @
+ | |@
+ | |@
+ |_|@
+    @@
+        @
+  _ __  @
+ | '  \ @
+ |_|_|_|@
+        @@
+       @
+  _ _  @
+ | ' \ @
+ |_||_|@
+       @@
+      @
+  ___ @
+ / _ \@
+ \___/@
+      @@
+       @
+  _ __ @
+ | '_ \@
+ | .__/@
+ |_|   @@
+       @
+  __ _ @
+ / _` |@
+ \__, |@
+    |_|@@
+      @
+  _ _ @
+ | '_|@
+ |_|  @
+      @@
+     @
+  ___@
+ (_-<@
+ /__/@
+     @@
+  _   @
+ | |_ @
+ |  _|@
+  \__|@
+      @@
+       @
+  _  _ @
+ | || |@
+  \_,_|@
+       @@
+      @
+ __ __@
+ \ V /@
+  \_/ @
+      @@
+         @
+ __ __ __@
+ \ V  V /@
+  \_/\_/ @
+         @@
+      @
+ __ __@
+ \ \ /@
+ /_\_\@
+      @@
+       @
+  _  _ @
+ | || |@
+  \_, |@
+  |__/ @@
+     @
+  ___@
+ |_ /@
+ /__|@
+     @@
+    __@
+   / /@
+ _| | @
+  | | @
+   \_\@@
+  _ @
+ | |@
+ | |@
+ | |@
+ |_|@@
+ __   @
+ \ \  @
+  | |_@
+  | | @
+ /_/  @@
+  /\/|@
+ |/\/ @
+   $  @
+   $  @
+      @@
+  _  _ @
+ (_)(_)@
+  /--\ @
+ /_/\_\@
+       @@
+  _  _ @
+ (_)(_)@
+ / __ \@
+ \____/@
+       @@
+  _   _ @
+ (_) (_)@
+ | |_| |@
+  \___/ @
+        @@
+  _  _ @
+ (_)(_)@
+ / _` |@
+ \__,_|@
+       @@
+  _   _ @
+ (_)_(_)@
+  / _ \ @
+  \___/ @
+        @@
+  _  _ @
+ (_)(_)@
+ | || |@
+  \_,_|@
+       @@
+   ___ @
+  / _ \@
+ | |< <@
+ | ||_/@
+ |_|   @@
+160  NO-BREAK SPACE
+ $@
+ $@
+ $@
+ $@
+ $@@
+161  INVERTED EXCLAMATION MARK
+  _ @
+ (_)@
+ | |@
+ |_|@
+    @@
+162  CENT SIGN
+     @
+  || @
+ / _)@
+ \ _)@
+  || @@
+163  POUND SIGN
+    __  @
+  _/ _\ @
+ |_ _|_ @
+ (_,___|@
+        @@
+164  CURRENCY SIGN
+ /\_/\@
+ \ . /@
+ / _ \@
+ \/ \/@
+      @@
+165  YEN SIGN
+  __ __ @
+  \ V / @
+ |__ __|@
+ |__ __|@
+   |_|  @@
+166  BROKEN BAR
+  _ @
+ | |@
+ |_|@
+ | |@
+ |_|@@
+167  SECTION SIGN
+    __ @
+   / _)@
+  /\ \ @
+  \ \/ @
+ (__/  @@
+168  DIAERESIS
+  _  _ @
+ (_)(_)@
+  $  $ @
+  $  $ @
+       @@
+169  COPYRIGHT SIGN
+   ____  @
+  / __ \ @
+ / / _| \@
+ \ \__| /@
+  \____/ @@
+170  FEMININE ORDINAL INDICATOR
+  __ _ @
+ / _` |@
+ \__,_|@
+ |____|@
+       @@
+171  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+   ____@
+  / / /@
+ < < < @
+  \_\_\@
+       @@
+172  NOT SIGN
+  ____ @
+ |__  |@
+    |_|@
+   $   @
+       @@
+173  SOFT HYPHEN
+     @
+  __ @
+ |__|@
+   $ @
+     @@
+174  REGISTERED SIGN
+   ____  @
+  / __ \ @
+ / | -) \@
+ \ ||\\ /@
+  \____/ @@
+175  MACRON
+  ___ @
+ |___|@
+   $  @
+   $  @
+      @@
+176  DEGREE SIGN
+  _ @
+ /.\@
+ \_/@
+  $ @
+    @@
+177  PLUS-MINUS SIGN
+    _   @
+  _| |_ @
+ |_   _|@
+  _|_|_ @
+ |_____|@@
+178  SUPERSCRIPT TWO
+  __ @
+ |_ )@
+ /__|@
+   $ @
+     @@
+179  SUPERSCRIPT THREE
+  ___@
+ |_ /@
+ |__)@
+   $ @
+     @@
+180  ACUTE ACCENT
+  __@
+ /_/@
+  $ @
+  $ @
+    @@
+181  MICRO SIGN
+       @
+  _  _ @
+ | || |@
+ | .,_|@
+ |_|   @@
+182  PILCROW SIGN
+  ____ @
+ /    |@
+ \_ | |@
+  |_|_|@
+       @@
+183  MIDDLE DOT
+    @
+  _ @
+ (_)@
+  $ @
+    @@
+184  CEDILLA
+    @
+    @
+    @
+  _ @
+ )_)@@
+185  SUPERSCRIPT ONE
+  _ @
+ / |@
+ |_|@
+  $ @
+    @@
+186  MASCULINE ORDINAL INDICATOR
+  ___ @
+ / _ \@
+ \___/@
+ |___|@
+      @@
+187  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ ____  @
+ \ \ \ @
+  > > >@
+ /_/_/ @
+       @@
+188  VULGAR FRACTION ONE QUARTER
+  _  __   @
+ / |/ /__ @
+ |_/ /_' |@
+  /_/  |_|@
+          @@
+189  VULGAR FRACTION ONE HALF
+  _  __  @
+ / |/ /_ @
+ |_/ /_ )@
+  /_//__|@
+         @@
+190  VULGAR FRACTION THREE QUARTERS
+  ___ __   @
+ |_ // /__ @
+ |__) /_' |@
+   /_/  |_|@
+           @@
+191  INVERTED QUESTION MARK
+   _  @
+  (_) @
+ / /_ @
+ \___|@
+      @@
+192  LATIN CAPITAL LETTER A WITH GRAVE
+  __   @
+  \_\  @
+  /--\ @
+ /_/\_\@
+       @@
+193  LATIN CAPITAL LETTER A WITH ACUTE
+    __ @
+   /_/ @
+  /--\ @
+ /_/\_\@
+       @@
+194  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+   /\  @
+  |/\| @
+  /--\ @
+ /_/\_\@
+       @@
+195  LATIN CAPITAL LETTER A WITH TILDE
+   /\/|@
+  |/\/ @
+  /--\ @
+ /_/\_\@
+       @@
+196  LATIN CAPITAL LETTER A WITH DIAERESIS
+  _  _ @
+ (_)(_)@
+  /--\ @
+ /_/\_\@
+       @@
+197  LATIN CAPITAL LETTER A WITH RING ABOVE
+   __  @
+  (()) @
+  /--\ @
+ /_/\_\@
+       @@
+198  LATIN CAPITAL LETTER AE
+    ____ @
+   /, __|@
+  / _ _| @
+ /_/|___|@
+         @@
+199  LATIN CAPITAL LETTER C WITH CEDILLA
+   ___ @
+  / __|@
+ | (__ @
+  \___|@
+   )_) @@
+200  LATIN CAPITAL LETTER E WITH GRAVE
+  __ @
+  \_\@
+ | -<@
+ |__<@
+     @@
+201  LATIN CAPITAL LETTER E WITH ACUTE
+   __@
+  /_/@
+ | -<@
+ |__<@
+     @@
+202  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+  /\ @
+ |/\|@
+ | -<@
+ |__<@
+     @@
+203  LATIN CAPITAL LETTER E WITH DIAERESIS
+  _  _ @
+ (_)(_)@
+  | -< @
+  |__< @
+       @@
+204  LATIN CAPITAL LETTER I WITH GRAVE
+  __  @
+  \_\ @
+ |_ _|@
+ |___|@
+      @@
+205  LATIN CAPITAL LETTER I WITH ACUTE
+   __ @
+  /_/ @
+ |_ _|@
+ |___|@
+      @@
+206  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+  //\ @
+ |/_\|@
+ |_ _|@
+ |___|@
+      @@
+207  LATIN CAPITAL LETTER I WITH DIAERESIS
+  _   _ @
+ (_)_(_)@
+  |_ _| @
+  |___| @
+        @@
+208  LATIN CAPITAL LETTER ETH
+   ____  @
+  | __ \ @
+ |_ _|) |@
+  |____/ @
+         @@
+209  LATIN CAPITAL LETTER N WITH TILDE
+   /\/|@
+  |/\/ @
+ | \| |@
+ |_|\_|@
+       @@
+210  LATIN CAPITAL LETTER O WITH GRAVE
+  __   @
+  \_\_ @
+ / __ \@
+ \____/@
+       @@
+211  LATIN CAPITAL LETTER O WITH ACUTE
+    __ @
+  _/_/ @
+ / __ \@
+ \____/@
+       @@
+212  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+   /\  @
+  |/\| @
+ / __ \@
+ \____/@
+       @@
+213  LATIN CAPITAL LETTER O WITH TILDE
+   /\/|@
+  |/\/ @
+ / __ \@
+ \____/@
+       @@
+214  LATIN CAPITAL LETTER O WITH DIAERESIS
+  _  _ @
+ (_)(_)@
+ / __ \@
+ \____/@
+       @@
+215  MULTIPLICATION SIGN
+     @
+ /\/\@
+ >  <@
+ \/\/@
+     @@
+216  LATIN CAPITAL LETTER O WITH STROKE
+   ____  @
+  / _//\ @
+ | (//) |@
+  \//__/ @
+         @@
+217  LATIN CAPITAL LETTER U WITH GRAVE
+   __   @
+  _\_\_ @
+ | |_| |@
+  \___/ @
+        @@
+218  LATIN CAPITAL LETTER U WITH ACUTE
+    __  @
+  _/_/_ @
+ | |_| |@
+  \___/ @
+        @@
+219  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+   //\  @
+  |/ \| @
+ | |_| |@
+  \___/ @
+        @@
+220  LATIN CAPITAL LETTER U WITH DIAERESIS
+  _   _ @
+ (_) (_)@
+ | |_| |@
+  \___/ @
+        @@
+221  LATIN CAPITAL LETTER Y WITH ACUTE
+   __ @
+ _/_/_@
+ \ V /@
+  |_| @
+      @@
+222  LATIN CAPITAL LETTER THORN
+  _   @
+ | |_ @
+ | -_)@
+ |_|  @
+      @@
+223  LATIN SMALL LETTER SHARP S
+   ___ @
+  / _ \@
+ | |< <@
+ | ||_/@
+ |_|   @@
+224  LATIN SMALL LETTER A WITH GRAVE
+  __   @
+  \_\_ @
+ / _` |@
+ \__,_|@
+       @@
+225  LATIN SMALL LETTER A WITH ACUTE
+    __ @
+  _/_/ @
+ / _` |@
+ \__,_|@
+       @@
+226  LATIN SMALL LETTER A WITH CIRCUMFLEX
+   /\  @
+  |/\| @
+ / _` |@
+ \__,_|@
+       @@
+227  LATIN SMALL LETTER A WITH TILDE
+   /\/|@
+  |/\/ @
+ / _` |@
+ \__,_|@
+       @@
+228  LATIN SMALL LETTER A WITH DIAERESIS
+  _  _ @
+ (_)(_)@
+ / _` |@
+ \__,_|@
+       @@
+229  LATIN SMALL LETTER A WITH RING ABOVE
+   __  @
+  (()) @
+ / _` |@
+ \__,_|@
+       @@
+230  LATIN SMALL LETTER AE
+         @
+  __ ___ @
+ / _` -_)@
+ \__,___|@
+         @@
+231  LATIN SMALL LETTER C WITH CEDILLA
+     @
+  __ @
+ / _|@
+ \__|@
+  )_)@@
+232  LATIN SMALL LETTER E WITH GRAVE
+  __  @
+  \_\ @
+ / -_)@
+ \___|@
+      @@
+233  LATIN SMALL LETTER E WITH ACUTE
+   __ @
+  /_/ @
+ / -_)@
+ \___|@
+      @@
+234  LATIN SMALL LETTER E WITH CIRCUMFLEX
+  //\ @
+ |/_\|@
+ / -_)@
+ \___|@
+      @@
+235  LATIN SMALL LETTER E WITH DIAERESIS
+  _   _ @
+ (_)_(_)@
+  / -_) @
+  \___| @
+        @@
+236  LATIN SMALL LETTER I WITH GRAVE
+ __ @
+ \_\@
+ | |@
+ |_|@
+    @@
+237  LATIN SMALL LETTER I WITH ACUTE
+  __@
+ /_/@
+ | |@
+ |_|@
+    @@
+238  LATIN SMALL LETTER I WITH CIRCUMFLEX
+  //\ @
+ |/_\|@
+  | | @
+  |_| @
+      @@
+239  LATIN SMALL LETTER I WITH DIAERESIS
+  _   _ @
+ (_)_(_)@
+   | |  @
+   |_|  @
+        @@
+240  LATIN SMALL LETTER ETH
+  \\/\ @
+  \/\\ @
+ / _` |@
+ \___/ @
+       @@
+241  LATIN SMALL LETTER N WITH TILDE
+  /\/| @
+ |/\/  @
+ | ' \ @
+ |_||_|@
+       @@
+242  LATIN SMALL LETTER O WITH GRAVE
+  __  @
+  \_\ @
+ / _ \@
+ \___/@
+      @@
+243  LATIN SMALL LETTER O WITH ACUTE
+   __ @
+  /_/ @
+ / _ \@
+ \___/@
+      @@
+244  LATIN SMALL LETTER O WITH CIRCUMFLEX
+  //\ @
+ |/_\|@
+ / _ \@
+ \___/@
+      @@
+245  LATIN SMALL LETTER O WITH TILDE
+  /\/|@
+ |/\/ @
+ / _ \@
+ \___/@
+      @@
+246  LATIN SMALL LETTER O WITH DIAERESIS
+  _   _ @
+ (_)_(_)@
+  / _ \ @
+  \___/ @
+        @@
+247  DIVISION SIGN
+   _  @
+  (_) @
+ |___|@
+  (_) @
+      @@
+248  LATIN SMALL LETTER O WITH STROKE
+      @
+  ___ @
+ / //\@
+ \//_/@
+      @@
+249  LATIN SMALL LETTER U WITH GRAVE
+  __   @
+  \_\_ @
+ | || |@
+  \_,_|@
+       @@
+250  LATIN SMALL LETTER U WITH ACUTE
+    __ @
+  _/_/ @
+ | || |@
+  \_,_|@
+       @@
+251  LATIN SMALL LETTER U WITH CIRCUMFLEX
+   /\  @
+  |/\| @
+ | || |@
+  \_,_|@
+       @@
+252  LATIN SMALL LETTER U WITH DIAERESIS
+  _  _ @
+ (_)(_)@
+ | || |@
+  \_,_|@
+       @@
+253  LATIN SMALL LETTER Y WITH ACUTE
+    __ @
+  _/_/ @
+ | || |@
+  \_, |@
+  |__/ @@
+254  LATIN SMALL LETTER THORN
+  _    @
+ | |__ @
+ | '_ \@
+ | .__/@
+ |_|   @@
+255  LATIN SMALL LETTER Y WITH DIAERESIS
+  _  _ @
+ (_)(_)@
+ | || |@
+  \_, |@
+  |__/ @@
diff --git a/externals/figlet/fonts/smscript.flf b/externals/figlet/fonts/smscript.flf
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/smscript.flf
@@ -0,0 +1,1097 @@
+flf2a$ 5 4 13 0 10 0 3904 96
+SmScript by Glenn Chappell 4/93 -- based on Script
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin.  May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+$ $@
+$ $@
+$ $@
+$ $@
+$ $@@
+  @
+ |@
+ |@
+ o@
+  @@
+ oo@
+ ||@
+  $@
+  $@
+   @@
+      @
+ _|_|_@
+ _|_|_@
+  | | @
+      @@
+      @
+  |_|_@
+ (|_| @
+ _|_|)@
+  | | @@
+      @
+ () / @
+   /  @
+  / ()@
+      @@
+    @
+ () @
+ /\/@
+ \/\@
+    @@
+ o@
+ /@
+ $@
+ $@
+  @@
+   @
+  /@
+ | @
+ | @
+  \@@
+   @
+ \ @
+  |@
+  |@
+ / @@
+      @
+  \|/ @
+ --*--@
+  /|\ @
+      @@
+      @
+   |  @
+ --+--@
+   |  @
+      @@
+  @
+  @
+  @
+ o@
+ /@@
+     @
+     @
+ ----@
+   $ @
+     @@
+  @
+  @
+  @
+ o@
+  @@
+    @
+   /@
+  / @
+ /  @
+    @@
+   _  @
+  / \ @
+ |   |@
+  \_/ @
+      @@
+  ,@
+ /|@
+  |@
+  |@
+   @@
+  _ @
+ / )@
+  / @
+ /__@
+    @@
+ ____@
+  __/@
+  $ \@
+ \__/@
+     @@
+      @
+ |  | @
+ |__|_@
+    | @
+      @@
+  ___@
+ |__ @
+  $ \@
+ \__/@
+     @@
+   _ @
+  /_ @
+ |/ \@
+  \_/@
+     @@
+ ____@
+   $/@
+   / @
+  /  @
+     @@
+  __ @
+ (__)@
+ /  \@
+ \__/@
+     @@
+  __ @
+ /  |@
+ \_/|@
+    |@
+     @@
+  @
+ o@
+ $@
+ o@
+  @@
+  @
+ o@
+ $@
+ o@
+ /@@
+   @
+  /@
+ < @
+  \@
+   @@
+     @
+ ____@
+ ____@
+   $ @
+     @@
+   @
+ \ @
+  >@
+ / @
+   @@
+ __ @
+   )@
+  | @
+  o @
+    @@
+   ____  @
+  / __,\ @
+ | /  | |@
+ | \_/|/ @
+  \____/ @@
+   __,  @
+  /  |  @
+ |   |  @
+  \_/\_/@
+        @@
+  , _ @
+ /|/_)@
+  |  \@
+  |(_/@
+      @@
+   __$ @
+  / () @
+ |  $  @
+  \___/@
+       @@
+ $___  @
+ (|  \ @
+  |   |@
+ (\__/ @
+       @@
+  __$ @
+ / () @
+ >-$  @
+ \___/@
+      @@
+ $_____@
+ () |_$@
+   /| |@
+  (/   @
+       @@
+      @
+  () |@
+  /\/|@
+ /(_/ @
+      @@
+  ,    @
+ /|  | @
+  |--| @
+  |  |)@
+       @@
+      @
+   |\ @
+ _ |/ @
+ \_/\/@
+      @@
+     @
+  /| @
+ | | @
+  \|/@
+  (| @@
+  ,  , @
+ /|_/  @
+  |\   @
+  | \_/@
+       @@
+   $   @
+ \_|)  @
+   |   @
+  (\__/@
+       @@
+  ,_ _   @
+ /| | |  @
+  | | |  @
+  | | |_/@
+         @@
+  ,     @
+ /|/\   @
+  |  |  @
+  |  |_/@
+        @@
+   __  @
+  /\_\/@
+ |    |@
+  \__/ @
+       @@
+  , _ @
+ /|/ \@
+  |__/@
+  |  $@
+      @@
+   __    @
+  /__\   @
+ |/  \|  @
+  \__/\_/@
+         @@
+  , _  @
+ /|/ \ @
+  |__/ @
+  | \_/@
+       @@
+     @
+  () @
+  /\ @
+ /(_)@
+     @@
+ $_____@
+ () |  @
+   $|  @
+  (/   @
+       @@
+         @
+ (|   |  @
+  |   |  @
+   \_/\_/@
+         @@
+        @
+ (|  |_/@
+  |  |  @
+   \/   @
+        @@
+           @
+ (|  |  |_/@
+  |  |  |  @
+   \/ \/   @
+           @@
+        @
+ (\  /  @
+   ><   @
+ _/  \_/@
+        @@
+       @
+ (|  | @
+  |  | @
+   \/|/@
+    (| @@
+  _  @
+ / ) @
+  /  @
+ /__/@
+  (| @@
+  _@
+ | @
+ | @
+ | @
+ |_@@
+    @
+ \  @
+  \ @
+   \@
+    @@
+ _ @
+  |@
+  |@
+  |@
+ _|@@
+ /\@
+  $@
+  $@
+  $@
+   @@
+     @
+     @
+     @
+   $ @
+ ____@@
+ o@
+ \@
+ $@
+ $@
+  @@
+      @
+  _,  @
+ / |  @
+ \/|_/@
+      @@
+     @
+ |)  @
+ |/\_@
+  \/ @
+     @@
+     @
+  _  @
+ /   @
+ \__/@
+     @@
+      @
+  _|  @
+ / |  @
+ \/|_/@
+      @@
+    @
+  _ @
+ |/ @
+ |_/@
+    @@
+    @
+ |\ @
+ |/ @
+ |_/@
+ |) @@
+     @
+  _, @
+ / | @
+ \/|/@
+  (| @@
+      @
+ |)   @
+ |/\  @
+ |  |/@
+      @@
+   @
+ o @
+ | @
+ |/@
+   @@
+    @
+  o @
+  | @
+  |/@
+ (| @@
+     @
+ |)  @
+ |/) @
+ | \/@
+     @@
+    @
+ |\ @
+ |/ @
+ |_/@
+    @@
+         @
+         @
+ /|/|/|  @
+ $| | |_/@
+         @@
+       @
+       @
+ /|/|  @
+ $| |_/@
+       @@
+     @
+  _  @
+ / \_@
+ \_/ @
+     @@
+      @
+      @
+  |/\_@
+  |_/ @
+ (|   @@
+      @
+  _,  @
+ / |  @
+ \/|_/@
+   |) @@
+      @
+  ,_  @
+ /  | @
+ $  |/@
+      @@
+     @
+  ,  @
+ / \_@
+ $\/ @
+     @@
+     @
+ _|_ @
+  |  @
+  |_/@
+     @@
+       @
+       @
+ |  |  @
+ $\/|_/@
+       @@
+      @
+      @
+ |  |_@
+ $\/  @
+      @@
+         @
+         @
+ |  |  |_@
+ $\/ \/  @
+         @@
+     @
+     @
+ /\/ @
+ $/\/@
+     @@
+      @
+      @
+ |  | @
+ $\/|/@
+   (| @@
+      @
+  __  @
+ / / _@
+ $/_/ @
+   (| @@
+    @
+   /@
+ _| @
+  | @
+   \@@
+ |@
+ |@
+ |@
+ |@
+ |@@
+    @
+ \  @
+  |_@
+  | @
+ /  @@
+ /\/@
+  $ @
+  $ @
+  $ @
+    @@
+ o  o  @
+  __,  @
+ /  |  @
+ \_/\_/@
+       @@
+ o  o @
+  __  @
+ /\_\/@
+ \__/ @
+      @@
+   /\/   @
+         @
+ (|   |  @
+   \_/\_/@
+         @@
+ o o  @
+  _,  @
+ / |  @
+ \/|_/@
+      @@
+ o o @
+  _  @
+ / \_@
+ \_/ @
+     @@
+ o  o  @
+       @
+ |  |  @
+ $\/|_/@
+       @@
+  _ @
+ | \@
+ | <@
+ |_/@
+ |  @@
+160  NO-BREAK SPACE
+ $@
+ $@
+ $@
+ $@
+ $@@
+161  INVERTED EXCLAMATION MARK
+  @
+ o@
+ |@
+ |@
+  @@
+162  CENT SIGN
+      @
+  _|_ @
+ / |  @
+ \_|_/@
+   |  @@
+163  POUND SIGN
+   _  @
+ _|_` @
+  |   @
+ (\__/@
+      @@
+164  CURRENCY SIGN
+ \ _ /@
+  / \ @
+  \_/ @
+ /   \@
+      @@
+165  YEN SIGN
+ \   /@
+ _\_/_@
+ __|__@
+   |  @
+      @@
+166  BROKEN BAR
+ |@
+ |@
+  @
+ |@
+ |@@
+167  SECTION SIGN
+  _@
+ ( @
+ ()@
+ _)@
+   @@
+168  DIAERESIS
+ o o@
+ $ $@
+ $ $@
+ $ $@
+    @@
+169  COPYRIGHT SIGN
+   ____  @
+  / __ \ @
+ | / () |@
+ | \__/ |@
+  \____/ @@
+170  FEMININE ORDINAL INDICATOR
+  _, @
+ (_|_@
+ --- @
+  $  @
+     @@
+171  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    @
+  //@
+ << @
+  \\@
+    @@
+172  NOT SIGN
+    @
+ __ @
+   |@
+  $ @
+    @@
+173  SOFT HYPHEN
+    @
+    @
+ ---@
+  $ @
+    @@
+174  REGISTERED SIGN
+   ____  @
+  / ,_ \ @
+ | /|_) |@
+ |  |\/ |@
+  \____/ @@
+175  MACRON
+ ____@
+   $ @
+   $ @
+   $ @
+     @@
+176  DEGREE SIGN
+ ()@
+  $@
+  $@
+  $@
+   @@
+177  PLUS-MINUS SIGN
+      @
+   |  @
+ --+--@
+ __|__@
+      @@
+178  SUPERSCRIPT TWO
+ _ @
+  )@
+ /_@
+  $@
+   @@
+179  SUPERSCRIPT THREE
+ ___@
+  _/@
+ __)@
+  $ @
+    @@
+180  ACUTE ACCENT
+ /@
+ $@
+ $@
+ $@
+  @@
+181  MICRO SIGN
+       @
+       @
+ |  |  @
+ |\/|_/@
+ |     @@
+182  PILCROW SIGN
+  ___ @
+ / | |@
+ \_| |@
+   | |@
+      @@
+183  MIDDLE DOT
+    @
+    @
+ $O$@
+  $ @
+    @@
+184  CEDILLA
+   @
+   @
+   @
+ $ @
+ _)@@
+185  SUPERSCRIPT ONE
+  ,@
+ /|@
+  |@
+  $@
+   @@
+186  MASCULINE ORDINAL INDICATOR
+  __@
+ (_)@
+ ---@
+  $ @
+    @@
+187  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    @
+ \\ @
+  >>@
+ // @
+    @@
+188  VULGAR FRACTION ONE QUARTER
+  ,     @
+ /| /   @
+  |/|_|_@
+  /   | @
+        @@
+189  VULGAR FRACTION ONE HALF
+  ,    @
+ /| /_ @
+  |/  )@
+  /  /_@
+       @@
+190  VULGAR FRACTION THREE QUARTERS
+ ___     @
+  _/ /   @
+ __)/|_|_@
+   /   | @
+         @@
+191  INVERTED QUESTION MARK
+    @
+  o @
+  | @
+ (__@
+    @@
+192  LATIN CAPITAL LETTER A WITH GRAVE
+  \    @
+  __,  @
+ /  |  @
+ \_/\_/@
+       @@
+193  LATIN CAPITAL LETTER A WITH ACUTE
+   /   @
+  __,  @
+ /  |  @
+ \_/\_/@
+       @@
+194  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+  /\   @
+  __,  @
+ /  |  @
+ \_/\_/@
+       @@
+195  LATIN CAPITAL LETTER A WITH TILDE
+  /\/  @
+  __,  @
+ /  |  @
+ \_/\_/@
+       @@
+196  LATIN CAPITAL LETTER A WITH DIAERESIS
+ o  o  @
+  __,  @
+ /  |  @
+ \_/\_/@
+       @@
+197  LATIN CAPITAL LETTER A WITH RING ABOVE
+   _   @
+  (_)  @
+ /  |  @
+ \_/\_/@
+       @@
+198  LATIN CAPITAL LETTER AE
+   __,__$ @
+  /  | () @
+ |   |-$  @
+  \_/\___/@
+          @@
+199  LATIN CAPITAL LETTER C WITH CEDILLA
+   __$ @
+  / () @
+ |  $  @
+  \___/@
+   _)  @@
+200  LATIN CAPITAL LETTER E WITH GRAVE
+  \   @
+  __$ @
+ <_() @
+ <___/@
+      @@
+201  LATIN CAPITAL LETTER E WITH ACUTE
+   /  @
+  __$ @
+ <_() @
+ <___/@
+      @@
+202  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+  /\  @
+  __$ @
+ <_() @
+ <___/@
+      @@
+203  LATIN CAPITAL LETTER E WITH DIAERESIS
+ o  o @
+  __$ @
+ <_() @
+ <___/@
+      @@
+204  LATIN CAPITAL LETTER I WITH GRAVE
+   \  @
+   |\ @
+ _ |/ @
+ \_/\/@
+      @@
+205  LATIN CAPITAL LETTER I WITH ACUTE
+    / @
+   |\ @
+ _ |/ @
+ \_/\/@
+      @@
+206  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+   /\ @
+   |\ @
+ _ |/ @
+ \_/\/@
+      @@
+207  LATIN CAPITAL LETTER I WITH DIAERESIS
+  o o @
+   |\ @
+ _ |/ @
+ \_/\/@
+      @@
+208  LATIN CAPITAL LETTER ETH
+  ___  @
+ (|  \ @
+ -|-  |@
+ (\__/ @
+       @@
+209  LATIN CAPITAL LETTER N WITH TILDE
+  ,/\/  @
+ /|/\   @
+  |  |  @
+  |  |_/@
+        @@
+210  LATIN CAPITAL LETTER O WITH GRAVE
+  \   @
+  __  @
+ /\_\/@
+ \__/ @
+      @@
+211  LATIN CAPITAL LETTER O WITH ACUTE
+   /  @
+  __  @
+ /\_\/@
+ \__/ @
+      @@
+212  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+  /\  @
+  __  @
+ /\_\/@
+ \__/ @
+      @@
+213  LATIN CAPITAL LETTER O WITH TILDE
+  /\/ @
+  __  @
+ /\_\/@
+ \__/ @
+      @@
+214  LATIN CAPITAL LETTER O WITH DIAERESIS
+ o  o @
+  __  @
+ /\_\/@
+ \__/ @
+      @@
+215  MULTIPLICATION SIGN
+     @
+ $\/$@
+ $/\$@
+ $  $@
+     @@
+216  LATIN CAPITAL LETTER O WITH STROKE
+   __/ @
+  /\/\/@
+ | /  |@
+  /__/ @
+ /     @@
+217  LATIN CAPITAL LETTER U WITH GRAVE
+    \    @
+         @
+ (|   |  @
+   \_/\_/@
+         @@
+218  LATIN CAPITAL LETTER U WITH ACUTE
+    /    @
+         @
+ (|   |  @
+   \_/\_/@
+         @@
+219  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    /\   @
+         @
+ (|   |  @
+   \_/\_/@
+         @@
+220  LATIN CAPITAL LETTER U WITH DIAERESIS
+   /\/   @
+         @
+ (|   |  @
+   \_/\_/@
+         @@
+221  LATIN CAPITAL LETTER Y WITH ACUTE
+    /  @
+       @
+ (|  | @
+   \/|/@
+    (| @@
+222  LATIN CAPITAL LETTER THORN
+  ,   @
+ /|__ @
+  |__)@
+  |  $@
+      @@
+223  LATIN SMALL LETTER SHARP S
+  _ @
+ | \@
+ | <@
+ |_/@
+ |  @@
+224  LATIN SMALL LETTER A WITH GRAVE
+  \   @
+  _,  @
+ / |  @
+ \/|_/@
+      @@
+225  LATIN SMALL LETTER A WITH ACUTE
+  /   @
+  _,  @
+ / |  @
+ \/|_/@
+      @@
+226  LATIN SMALL LETTER A WITH CIRCUMFLEX
+  /\  @
+  _,  @
+ / |  @
+ \/|_/@
+      @@
+227  LATIN SMALL LETTER A WITH TILDE
+ /\/  @
+  _,  @
+ / |  @
+ \/|_/@
+      @@
+228  LATIN SMALL LETTER A WITH DIAERESIS
+ o o  @
+  _,  @
+ / |  @
+ \/|_/@
+      @@
+229  LATIN SMALL LETTER A WITH RING ABOVE
+  ()  @
+  _,  @
+ / |  @
+ \/|_/@
+      @@
+230  LATIN SMALL LETTER AE
+      @
+  _,_ @
+ / |/ @
+ \/|_/@
+      @@
+231  LATIN SMALL LETTER C WITH CEDILLA
+     @
+  _  @
+ /   @
+ \__/@
+  _) @@
+232  LATIN SMALL LETTER E WITH GRAVE
+  \ @
+  _ @
+ |/ @
+ |_/@
+    @@
+233  LATIN SMALL LETTER E WITH ACUTE
+  / @
+  _ @
+ |/ @
+ |_/@
+    @@
+234  LATIN SMALL LETTER E WITH CIRCUMFLEX
+ /\ @
+  _ @
+ |/ @
+ |_/@
+    @@
+235  LATIN SMALL LETTER E WITH DIAERESIS
+ o o @
+  _  @
+ |/  @
+ |__/@
+     @@
+236  LATIN SMALL LETTER I WITH GRAVE
+ \ @
+   @
+ | @
+ |/@
+   @@
+237  LATIN SMALL LETTER I WITH ACUTE
+ / @
+   @
+ | @
+ |/@
+   @@
+238  LATIN SMALL LETTER I WITH CIRCUMFLEX
+ /\@
+   @
+ | @
+ |/@
+   @@
+239  LATIN SMALL LETTER I WITH DIAERESIS
+ o o @
+     @
+ |   @
+ |__/@
+     @@
+240  LATIN SMALL LETTER ETH
+ \, @
+ '\ @
+ / |@
+ \/ @
+    @@
+241  LATIN SMALL LETTER N WITH TILDE
+  /\/  @
+       @
+ /|/|  @
+ $| |_/@
+       @@
+242  LATIN SMALL LETTER O WITH GRAVE
+  \  @
+  _  @
+ / \_@
+ \_/ @
+     @@
+243  LATIN SMALL LETTER O WITH ACUTE
+  /  @
+  _  @
+ / \_@
+ \_/ @
+     @@
+244  LATIN SMALL LETTER O WITH CIRCUMFLEX
+  /\ @
+  _  @
+ / \_@
+ \_/ @
+     @@
+245  LATIN SMALL LETTER O WITH TILDE
+ /\/ @
+  _  @
+ / \_@
+ \_/ @
+     @@
+246  LATIN SMALL LETTER O WITH DIAERESIS
+ o o @
+  _  @
+ / \_@
+ \_/ @
+     @@
+247  DIVISION SIGN
+    @
+  O @
+ ---@
+  O @
+    @@
+248  LATIN SMALL LETTER O WITH STROKE
+      @
+  __/ @
+ / /\_@
+ \/_/ @
+ /    @@
+249  LATIN SMALL LETTER U WITH GRAVE
+  \    @
+       @
+ |  |  @
+ $\/|_/@
+       @@
+250  LATIN SMALL LETTER U WITH ACUTE
+   /   @
+       @
+ |  |  @
+ $\/|_/@
+       @@
+251  LATIN SMALL LETTER U WITH CIRCUMFLEX
+  /\   @
+       @
+ |  |  @
+ $\/|_/@
+       @@
+252  LATIN SMALL LETTER U WITH DIAERESIS
+ o  o  @
+       @
+ |  |  @
+ $\/|_/@
+       @@
+253  LATIN SMALL LETTER Y WITH ACUTE
+   /  @
+      @
+ |  | @
+ $\/|/@
+   (| @@
+254  LATIN SMALL LETTER THORN
+      @
+  |)  @
+  |/\_@
+  |_/ @
+ (|   @@
+255  LATIN SMALL LETTER Y WITH DIAERESIS
+ o  o @
+      @
+ |  | @
+ $\/|/@
+   (| @@
diff --git a/externals/figlet/fonts/smshadow.flf b/externals/figlet/fonts/smshadow.flf
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/smshadow.flf
@@ -0,0 +1,899 @@
+flf2a$ 4 3 14 0 10 0 1920 96
+SmShadow by Glenn Chappell 4/93 -- based on Small
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin.  May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+ $$@
+ $$@
+ $$@
+ $$@@
+  |$@
+ _|$@
+ _)$@
+    @@
+  | )$@
+ V V$ @
+      @
+      @@
+   |  |$  @
+ _ |_ |_|$@
+ _ |_ |_|$@
+  _| _|$  @@
+   |$ @
+ (_-<$@
+ _ _/$@
+  _|$ @@
+ _) /$ @
+   /$  @
+ _/ _)$@
+       @@
+   _|$   @
+   _| _|$@
+ \____|$ @
+         @@
+  )$@
+ /$ @
+    @
+    @@
+   /$@
+  |$ @
+  |$ @
+ \_\$@@
+ \ \$ @
+    |$@
+    |$@
+  _/$ @@
+ \ \ /$ @
+ _   _|$@
+ _/ _\$ @
+        @@
+    |$  @
+ __ __|$@
+   _|$  @
+        @@
+    @
+    @
+  )$@
+ /$ @@
+       @
+ ____|$@
+       @
+       @@
+    @
+    @
+ _)$@
+    @@
+    /$@
+   /$ @
+ _/$  @
+      @@
+    \$ @
+  (  |$@
+ \__/$ @
+       @@
+ _ |$@
+   |$@
+  _|$@
+     @@
+ _  )$@
+   /$ @
+ ___|$@
+      @@
+ __ /$@
+  _ \$@
+ ___/$@
+      @@
+  | |$ @
+ __ _|$@
+   _|$ @
+       @@
+  __|$@
+ __ \$@
+ ___/$@
+      @@
+   /$  @
+   _ \$@
+ \___/$@
+       @@
+ __  /$@
+    /$ @
+  _/$  @
+       @@
+   _ )$@
+   _ \$@
+ \___/$@
+       @@
+   _ \$@
+ \_  /$@
+   _/$ @
+       @@
+ _)$@
+    @
+ _)$@
+    @@
+ _)$@
+    @
+  )$@
+ /$ @@
+    /$@
+ < <$ @
+  \_\$@
+      @@
+       @
+ ____|$@
+ ____|$@
+       @@
+ \ \$ @
+  > >$@
+  _/$ @
+      @@
+ __ \$@
+   _/$@
+  _)$ @
+      @@
+   __ \$ @
+  / _` |$@
+  \__,_|$@
+ \____/$ @@
+    \$  @
+   _ \$ @
+ _/  _\$@
+        @@
+  _ )$@
+  _ \$@
+ ___/$@
+      @@
+   __|$@
+  ($   @
+ \___|$@
+       @@
+  _ \$ @
+  |  |$@
+ ___/$ @
+       @@
+  __|$@
+  _|$ @
+ ___|$@
+      @@
+  __|$@
+  _|$ @
+ _|$  @
+      @@
+   __|$@
+  (_ |$@
+ \___|$@
+       @@
+  |  |$@
+  __ |$@
+ _| _|$@
+       @@
+ _ _|$@
+   |$ @
+ ___|$@
+      @@
+     |$@
+  \  |$@
+ \__/$ @
+       @@
+  |  /$@
+  . <$ @
+ _|\_\$@
+       @@
+  |$   @
+  |$   @
+ ____|$@
+       @@
+   \  |$@
+  |\/ |$@
+ _|  _|$@
+        @@
+   \ |$@
+  .  |$@
+ _|\_|$@
+       @@
+   _ \$ @
+  (   |$@
+ \___/$ @
+        @@
+  _ \$@
+  __/$@
+ _|$  @
+      @@
+   _ \$ @
+  (   |$@
+ \__\_\$@
+        @@
+  _ \$@
+    /$@
+ _|_\$@
+      @@
+   __|$@
+ \__ \$@
+ ____/$@
+       @@
+ __ __|$@
+    |$  @
+   _|$  @
+        @@
+  |  |$@
+  |  |$@
+ \__/$ @
+       @@
+ \ \   /$@
+  \ \ /$ @
+   \_/$  @
+         @@
+ \ \      /$@
+  \ \ \  /$ @
+   \_/\_/$  @
+            @@
+ \ \  /$@
+  >  <$ @
+  _/\_\$@
+        @@
+ \ \  /$@
+  \  /$ @
+   _|$  @
+        @@
+ __  /$@
+    /$ @
+ ____|$@
+       @@
+  _|$@
+  |$ @
+  |$ @
+ __|$@@
+ \ \$  @
+  \ \$ @
+   \_\$@
+       @@
+ _ |$@
+   |$@
+   |$@
+ __|$@@
+  \$ @
+ /\|$@
+     @
+     @@
+       @
+       @
+       @
+ ____|$@@
+  )$@
+ \|$@
+    @
+    @@
+        @
+   _` |$@
+ \__,_|$@
+        @@
+  |$   @
+   _ \$@
+ _.__/$@
+       @@
+      @
+   _|$@
+ \__|$@
+      @@
+      |$@
+   _` |$@
+ \__,_|$@
+        @@
+       @
+   -_)$@
+ \___|$@
+       @@
+   _|$@
+   _|$@
+ _|$  @
+      @@
+        @
+   _` |$@
+ \__, |$@
+ ____/$ @@
+  |$   @
+    \$ @
+ _| _|$@
+       @@
+ _)$@
+  |$@
+ _|$@
+    @@
+   _)$@
+    |$@
+    |$@
+ __/$ @@
+  |$  @
+  | /$@
+ _\_\$@
+      @@
+  |$@
+  |$@
+ _|$@
+    @@
+        @
+   ` \$ @
+ _|_|_|$@
+        @@
+       @
+    \$ @
+ _| _|$@
+       @@
+       @
+   _ \$@
+ \___/$@
+       @@
+       @
+   _ \$@
+  .__/$@
+ _|$   @@
+        @
+   _` |$@
+ \__, |$@
+     _|$@@
+      @
+   _|$@
+ _|$  @
+      @@
+      @
+ (_-<$@
+ ___/$@
+      @@
+  |$  @
+   _|$@
+ \__|$@
+      @@
+       @
+  |  |$@
+ \_,_|$@
+       @@
+       @
+ \ \ /$@
+  \_/$ @
+       @@
+          @
+ \ \  \ /$@
+  \_/\_/$ @
+          @@
+       @
+ \ \ /$@
+  _\_\$@
+       @@
+       @
+  |  |$@
+ \_, |$@
+ ___/$ @@
+      @
+ _  /$@
+ ___|$@
+      @@
+    /$@
+ _ |$ @
+   |$ @
+  \_\$@@
+  |$@
+  |$@
+  |$@
+ _|$@@
+ \ \$  @
+    |_$@
+    |$ @
+  _/$  @@
+  \ |$@
+ /\/$ @
+      @
+      @@
+ _) \_)$@
+   _ \$ @
+  /  _\$@
+        @@
+ _)  _)$@
+   __ \$@
+ \____/$@
+        @@
+ _) _)$@
+  |  |$@
+ \__/$ @
+       @@
+ _)  _)$@
+   _` |$@
+ \__,_|$@
+        @@
+ _) _)$@
+   _ \$@
+ \___/$@
+       @@
+ _) _)$@
+  |  |$@
+ \_,_|$@
+       @@
+   _ \$@
+  |< <$@
+  |__/$@
+ _|$   @@
+160  NO-BREAK SPACE
+ $$@
+ $$@
+ $$@
+ $$@@
+161  INVERTED EXCLAMATION MARK
+ _)$@
+  |$@
+ _|$@
+    @@
+162  CENT SIGN
+   |$ @
+   _)$@
+ \ _)$@
+   |$ @@
+163  POUND SIGN
+    _\$ @
+ _ _|$  @
+ _,___|$@
+        @@
+164  CURRENCY SIGN
+ \ . /$@
+   _ \$@
+ \/  /$@
+       @@
+165  YEN SIGN
+ \ \ /$ @
+ __ __|$@
+ __ __|$@
+   _|$  @@
+166  BROKEN BAR
+  |$@
+ _|$@
+  |$@
+ _|$@@
+167  SECTION SIGN
+    _)$@
+  \ \$ @
+ \ \/$ @
+ __/$  @@
+168  DIAERESIS
+ _) _)$@
+       @
+       @
+       @@
+169  COPYRIGHT SIGN
+       \$ @
+     _| \$@
+ \ \__| /$@
+  \____/$ @@
+170  FEMININE ORDINAL INDICATOR
+   _` |$@
+ \__,_|$@
+ _____|$@
+        @@
+171  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    / /$@
+ < < <$ @
+  \_\_\$@
+        @@
+172  NOT SIGN
+ ____ |$@
+     _|$@
+        @
+        @@
+173  SOFT HYPHEN
+      @
+ ___|$@
+      @
+      @@
+174  REGISTERED SIGN
+       \$ @
+     -) \$@
+ \  |\\ /$@
+  \____/$ @@
+175  MACRON
+ ___|$@
+      @
+      @
+      @@
+176  DEGREE SIGN
+  .\$@
+ \_/$@
+     @
+     @@
+177  PLUS-MINUS SIGN
+    |$  @
+ _   _|$@
+   _|$  @
+ _____|$@@
+178  SUPERSCRIPT TWO
+ _ )$@
+ __|$@
+     @
+     @@
+179  SUPERSCRIPT THREE
+ _ /$@
+ __)$@
+     @
+     @@
+180  ACUTE ACCENT
+ _/$@
+    @
+    @
+    @@
+181  MICRO SIGN
+       @
+  |  |$@
+  .,_|$@
+ _|$   @@
+182  PILCROW SIGN
+      |$@
+ \_ | |$@
+   _|_|$@
+        @@
+183  MIDDLE DOT
+    @
+ _)$@
+    @
+    @@
+184  CEDILLA
+    @
+    @
+    @
+ _)$@@
+185  SUPERSCRIPT ONE
+ _ |$@
+  _|$@
+     @
+     @@
+186  MASCULINE ORDINAL INDICATOR
+   _ \$@
+ \___/$@
+ ____|$@
+       @@
+187  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ \ \ \$ @
+  > > >$@
+  _/_/$ @
+        @@
+188  VULGAR FRACTION ONE QUARTER
+ _ |  /$   @
+  _| /_' |$@
+   _/   _|$@
+           @@
+189  VULGAR FRACTION ONE HALF
+ _ |  /$  @
+  _| /_ )$@
+   _/ __|$@
+          @@
+190  VULGAR FRACTION THREE QUARTERS
+ _ /  /$   @
+ __) /_' |$@
+   _/   _|$@
+           @@
+191  INVERTED QUESTION MARK
+   _)$ @
+   /$  @
+ \___|$@
+       @@
+192  LATIN CAPITAL LETTER A WITH GRAVE
+ \_\$  @
+  --\$ @
+ _/\_\$@
+       @@
+193  LATIN CAPITAL LETTER A WITH ACUTE
+   _/$ @
+  --\$ @
+ _/\_\$@
+       @@
+194  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+  /\\$ @
+  --\$ @
+ _/\_\$@
+       @@
+195  LATIN CAPITAL LETTER A WITH TILDE
+ / _/$ @
+  --\$ @
+ _/\_\$@
+       @@
+196  LATIN CAPITAL LETTER A WITH DIAERESIS
+ _) \_)$@
+   _ \$ @
+  /  _\$@
+        @@
+197  LATIN CAPITAL LETTER A WITH RING ABOVE
+   ( )$ @
+   _ \$ @
+ _/  _\$@
+        @@
+198  LATIN CAPITAL LETTER AE
+   , __|$@
+   _ _|$ @
+ _/ ___|$@
+         @@
+199  LATIN CAPITAL LETTER C WITH CEDILLA
+     |$@
+  ($   @
+ \___|$@
+   _)$ @@
+200  LATIN CAPITAL LETTER E WITH GRAVE
+ \_\$@
+  -<$@
+ __<$@
+     @@
+201  LATIN CAPITAL LETTER E WITH ACUTE
+  _/$@
+  -<$@
+ __<$@
+     @@
+202  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ /\\$@
+  -<$@
+ __<$@
+     @@
+203  LATIN CAPITAL LETTER E WITH DIAERESIS
+ _) _)$@
+   -<$ @
+  __<$ @
+       @@
+204  LATIN CAPITAL LETTER I WITH GRAVE
+ \_\$ @
+ _ _|$@
+ ___|$@
+      @@
+205  LATIN CAPITAL LETTER I WITH ACUTE
+  _/$ @
+ _ _|$@
+ ___|$@
+      @@
+206  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ /\\$ @
+ _ _|$@
+ ___|$@
+      @@
+207  LATIN CAPITAL LETTER I WITH DIAERESIS
+ _)  _)$@
+  _ _|$ @
+  ___|$ @
+        @@
+208  LATIN CAPITAL LETTER ETH
+   _ \$ @
+ _ _| |$@
+  ___/$ @
+        @@
+209  LATIN CAPITAL LETTER N WITH TILDE
+  / _/$@
+   \ |$@
+ _|\_|$@
+       @@
+210  LATIN CAPITAL LETTER O WITH GRAVE
+  \_\$  @
+   __ \$@
+ \____/$@
+        @@
+211  LATIN CAPITAL LETTER O WITH ACUTE
+    _/$ @
+   __ \$@
+ \____/$@
+        @@
+212  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+   /\\$ @
+   __ \$@
+ \____/$@
+        @@
+213  LATIN CAPITAL LETTER O WITH TILDE
+  / _/$ @
+   __ \$@
+ \____/$@
+        @@
+214  LATIN CAPITAL LETTER O WITH DIAERESIS
+ _)  _)$@
+   __ \$@
+ \____/$@
+        @@
+215  MULTIPLICATION SIGN
+  \ \$@
+ ,  '$@
+ \/\/$@
+      @@
+216  LATIN CAPITAL LETTER O WITH STROKE
+   _ /\$ @
+  ( /  |$@
+ \_/__/$ @
+         @@
+217  LATIN CAPITAL LETTER U WITH GRAVE
+ \_\$  @
+  |  |$@
+ \__/$ @
+       @@
+218  LATIN CAPITAL LETTER U WITH ACUTE
+   _/$ @
+  |  |$@
+ \__/$ @
+       @@
+219  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+  /\\$ @
+  |  |$@
+ \__/$ @
+       @@
+220  LATIN CAPITAL LETTER U WITH DIAERESIS
+ _) _)$@
+  |  |$@
+ \__/$ @
+       @@
+221  LATIN CAPITAL LETTER Y WITH ACUTE
+   _/$ @
+ \ \ /$@
+   _|$ @
+       @@
+222  LATIN CAPITAL LETTER THORN
+  |$  @
+  -_)$@
+ _|$  @
+      @@
+223  LATIN SMALL LETTER SHARP S
+   _ \$@
+  |< <$@
+  |__/$@
+ _|$   @@
+224  LATIN SMALL LETTER A WITH GRAVE
+  \_\$  @
+   _` |$@
+ \__,_|$@
+        @@
+225  LATIN SMALL LETTER A WITH ACUTE
+    _/$ @
+   _` |$@
+ \__,_|$@
+        @@
+226  LATIN SMALL LETTER A WITH CIRCUMFLEX
+   /\\$ @
+   _` |$@
+ \__,_|$@
+        @@
+227  LATIN SMALL LETTER A WITH TILDE
+  / _/$ @
+   _` |$@
+ \__,_|$@
+        @@
+228  LATIN SMALL LETTER A WITH DIAERESIS
+ _)  _)$@
+   _` |$@
+ \__,_|$@
+        @@
+229  LATIN SMALL LETTER A WITH RING ABOVE
+   ( )$ @
+   _` |$@
+ \__,_|$@
+        @@
+230  LATIN SMALL LETTER AE
+          @
+   _` -_)$@
+ \__,___|$@
+          @@
+231  LATIN SMALL LETTER C WITH CEDILLA
+      @
+   _|$@
+ \__|$@
+   _)$@@
+232  LATIN SMALL LETTER E WITH GRAVE
+  \_\$ @
+   -_)$@
+ \___|$@
+       @@
+233  LATIN SMALL LETTER E WITH ACUTE
+   _/$ @
+   -_)$@
+ \___|$@
+       @@
+234  LATIN SMALL LETTER E WITH CIRCUMFLEX
+  /\\$ @
+   -_)$@
+ \___|$@
+       @@
+235  LATIN SMALL LETTER E WITH DIAERESIS
+ _)  _)$@
+   -_)$ @
+ \___|$ @
+        @@
+236  LATIN SMALL LETTER I WITH GRAVE
+ \_\$@
+   |$@
+  _|$@
+     @@
+237  LATIN SMALL LETTER I WITH ACUTE
+ _/$@
+  |$@
+ _|$@
+    @@
+238  LATIN SMALL LETTER I WITH CIRCUMFLEX
+ /\\$@
+  |$ @
+ _|$ @
+     @@
+239  LATIN SMALL LETTER I WITH DIAERESIS
+ _)  _)$@
+    |$  @
+   _|$  @
+        @@
+240  LATIN SMALL LETTER ETH
+   , \'$@
+   _` |$@
+ \___/$ @
+        @@
+241  LATIN SMALL LETTER N WITH TILDE
+ / _/$ @
+  ' \$ @
+ _| _|$@
+       @@
+242  LATIN SMALL LETTER O WITH GRAVE
+  \_\$ @
+   _ \$@
+ \___/$@
+       @@
+243  LATIN SMALL LETTER O WITH ACUTE
+   _/$ @
+   _ \$@
+ \___/$@
+       @@
+244  LATIN SMALL LETTER O WITH CIRCUMFLEX
+  /\\$ @
+   _ \$@
+ \___/$@
+       @@
+245  LATIN SMALL LETTER O WITH TILDE
+  / _/$@
+   _ \$@
+ \___/$@
+       @@
+246  LATIN SMALL LETTER O WITH DIAERESIS
+ _) _)$@
+   _ \$@
+ \___/$@
+       @@
+247  DIVISION SIGN
+  _)$ @
+ ___|$@
+  _)$ @
+      @@
+248  LATIN SMALL LETTER O WITH STROKE
+       @
+    /\$@
+ \_/_/$@
+       @@
+249  LATIN SMALL LETTER U WITH GRAVE
+ \_\$  @
+  |  |$@
+ \_,_|$@
+       @@
+250  LATIN SMALL LETTER U WITH ACUTE
+   _/$ @
+  |  |$@
+ \_,_|$@
+       @@
+251  LATIN SMALL LETTER U WITH CIRCUMFLEX
+  /\\$ @
+  |  |$@
+ \_,_|$@
+       @@
+252  LATIN SMALL LETTER U WITH DIAERESIS
+ _) _)$@
+  |  |$@
+ \_,_|$@
+       @@
+253  LATIN SMALL LETTER Y WITH ACUTE
+   _/$ @
+  |  |$@
+ \_, |$@
+ ___/$ @@
+254  LATIN SMALL LETTER THORN
+  |$   @
+  '_ \$@
+  .__/$@
+ _|$   @@
+255  LATIN SMALL LETTER Y WITH DIAERESIS
+ _) _)$@
+  |  |$@
+ \_, |$@
+ ___/$ @@
diff --git a/externals/figlet/fonts/smslant.flf b/externals/figlet/fonts/smslant.flf
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/smslant.flf
@@ -0,0 +1,1097 @@
+flf2a$ 5 4 14 15 10 0 22415 96
+SmSlant by Glenn Chappell 6/93 - based on Small & Slant
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin.  May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+    $@
+   $ @
+  $  @
+ $   @
+$    @@
+   __@
+  / /@
+ /_/ @
+(_)  @
+     @@
+ _ _ @
+( | )@
+|/|/ @
+$    @
+     @@
+     ____ @
+  __/ / /_@
+ /_  . __/@
+/_    __/ @
+ /_/_/    @@
+     @
+  _//@
+ (_-<@
+/ __/@
+//   @@
+ _   __@
+(_)_/_/@
+ _/_/_ @
+/_/ (_)@
+       @@
+  ____   @
+ / __/___@
+ > _/_ _/@
+|_____/  @
+         @@
+ _ @
+( )@
+|/ @
+$  @
+   @@
+    __@
+  _/_/@
+ / /  @
+/ /   @
+|_|   @@
+    _ @
+   | |@
+   / /@
+ _/_/ @
+/_/   @@
+    @
+ _/|@
+> _<@
+|/  @
+    @@
+    __ @
+ __/ /_@
+/_  __/@
+ /_/   @
+       @@
+   @
+   @
+ _ @
+( )@
+|/ @@
+     @
+ ____@
+/___/@
+ $   @
+     @@
+   @
+   @
+ _ @
+(_)@
+   @@
+     __@
+   _/_/@
+ _/_/  @
+/_/    @
+       @@
+  ___ @
+ / _ \@
+/ // /@
+\___/ @
+      @@
+  ___@
+ <  /@
+ / / @
+/_/  @
+     @@
+   ___ @
+  |_  |@
+ / __/ @
+/____/ @
+       @@
+   ____@
+  |_  /@
+ _/_ < @
+/____/ @
+       @@
+  ____@
+ / / /@
+/_  _/@
+ /_/  @
+      @@
+   ____@
+  / __/@
+ /__ \ @
+/____/ @
+       @@
+  ____@
+ / __/@
+/ _ \ @
+\___/ @
+      @@
+ ____@
+/_  /@
+ / / @
+/_/  @
+     @@
+  ___ @
+ ( _ )@
+/ _  |@
+\___/ @
+      @@
+  ___ @
+ / _ \@
+ \_, /@
+/___/ @
+      @@
+   _ @
+  (_)@
+ _   @
+(_)  @
+     @@
+   _ @
+  (_)@
+ _   @
+( )  @
+|/   @@
+  __@
+ / /@
+< < @
+ \_\@
+    @@
+      @
+  ____@
+ /___/@
+/___/ @
+      @@
+__  @
+\ \ @
+ > >@
+/_/ @
+    @@
+ ___ @
+/__ \@
+ /__/@
+(_)  @
+     @@
+  _____ @
+ / ___ \@
+/ / _ `/@
+\ \_,_/ @
+ \___/  @@
+   ___ @
+  / _ |@
+ / __ |@
+/_/ |_|@
+       @@
+   ___ @
+  / _ )@
+ / _  |@
+/____/ @
+       @@
+  _____@
+ / ___/@
+/ /__  @
+\___/  @
+       @@
+   ___ @
+  / _ \@
+ / // /@
+/____/ @
+       @@
+   ____@
+  / __/@
+ / _/  @
+/___/  @
+       @@
+   ____@
+  / __/@
+ / _/  @
+/_/    @
+       @@
+  _____@
+ / ___/@
+/ (_ / @
+\___/  @
+       @@
+   __ __@
+  / // /@
+ / _  / @
+/_//_/  @
+        @@
+   ____@
+  /  _/@
+ _/ /  @
+/___/  @
+       @@
+     __@
+ __ / /@
+/ // / @
+\___/  @
+       @@
+   __ __@
+  / //_/@
+ / ,<   @
+/_/|_|  @
+        @@
+   __ @
+  / / @
+ / /__@
+/____/@
+      @@
+   __  ___@
+  /  |/  /@
+ / /|_/ / @
+/_/  /_/  @
+          @@
+   _  __@
+  / |/ /@
+ /    / @
+/_/|_/  @
+        @@
+  ____ @
+ / __ \@
+/ /_/ /@
+\____/ @
+       @@
+   ___ @
+  / _ \@
+ / ___/@
+/_/    @
+       @@
+  ____ @
+ / __ \@
+/ /_/ /@
+\___\_\@
+       @@
+   ___ @
+  / _ \@
+ / , _/@
+/_/|_| @
+       @@
+   ____@
+  / __/@
+ _\ \  @
+/___/  @
+       @@
+ ______@
+/_  __/@
+ / /   @
+/_/    @
+       @@
+  __  __@
+ / / / /@
+/ /_/ / @
+\____/  @
+        @@
+  _   __@
+ | | / /@
+ | |/ / @
+ |___/  @
+        @@
+  _      __@
+ | | /| / /@
+ | |/ |/ / @
+ |__/|__/  @
+           @@
+   _  __@
+  | |/_/@
+ _>  <  @
+/_/|_|  @
+        @@
+ __  __@
+ \ \/ /@
+  \  / @
+  /_/  @
+       @@
+  ____@
+ /_  /@
+  / /_@
+ /___/@
+      @@
+    ___@
+   / _/@
+  / /  @
+ / /   @
+/__/   @@
+__   @
+\ \  @
+ \ \ @
+  \_\@
+     @@
+    ___@
+   /  /@
+   / / @
+ _/ /  @
+/__/   @@
+ //|@
+|/||@
+ $  @
+$   @
+    @@
+     @
+     @
+     @
+ ____@
+/___/@@
+ _ @
+( )@
+ V @
+$  @
+   @@
+      @
+ ___ _@
+/ _ `/@
+\_,_/ @
+      @@
+   __ @
+  / / @
+ / _ \@
+/_.__/@
+      @@
+     @
+ ____@
+/ __/@
+\__/ @
+     @@
+     __@
+ ___/ /@
+/ _  / @
+\_,_/  @
+       @@
+     @
+ ___ @
+/ -_)@
+\__/ @
+     @@
+   ___@
+  / _/@
+ / _/ @
+/_/   @
+      @@
+       @
+  ___ _@
+ / _ `/@
+ \_, / @
+/___/  @@
+   __ @
+  / / @
+ / _ \@
+/_//_/@
+      @@
+   _ @
+  (_)@
+ / / @
+/_/  @
+     @@
+      _ @
+     (_)@
+    / / @
+ __/ /  @
+|___/   @@
+   __  @
+  / /__@
+ /  '_/@
+/_/\_\ @
+       @@
+   __@
+  / /@
+ / / @
+/_/  @
+     @@
+       @
+  __ _ @
+ /  ' \@
+/_/_/_/@
+       @@
+      @
+  ___ @
+ / _ \@
+/_//_/@
+      @@
+     @
+ ___ @
+/ _ \@
+\___/@
+     @@
+       @
+   ___ @
+  / _ \@
+ / .__/@
+/_/    @@
+      @
+ ___ _@
+/ _ `/@
+\_, / @
+ /_/  @@
+      @
+  ____@
+ / __/@
+/_/   @
+      @@
+     @
+  ___@
+ (_-<@
+/___/@
+     @@
+  __ @
+ / /_@
+/ __/@
+\__/ @
+     @@
+      @
+ __ __@
+/ // /@
+\_,_/ @
+      @@
+      @
+ _  __@
+| |/ /@
+|___/ @
+      @@
+        @
+ _    __@
+| |/|/ /@
+|__,__/ @
+        @@
+      @
+ __ __@
+ \ \ /@
+/_\_\ @
+      @@
+       @
+  __ __@
+ / // /@
+ \_, / @
+/___/  @@
+    @
+ ___@
+/_ /@
+/__/@
+    @@
+    __@
+  _/_/@
+_/ /  @
+/ /   @
+\_\   @@
+    __@
+   / /@
+  / / @
+ / /  @
+/_/   @@
+   __  @
+   \ \ @
+   / /_@
+ _/_/  @
+/_/    @@
+ /\//@
+//\/ @
+ $   @
+$    @
+     @@
+   _  _ @
+  (_)(_)@
+ / - |  @
+/_/|_|  @
+        @@
+  _   _ @
+ (_)_(_)@
+/ __ \  @
+\____/  @
+        @@
+  _   _ @
+ (_) (_)@
+/ /_/ / @
+\____/  @
+        @@
+  _  _ @
+ (_)(_)@
+/ _ `/ @
+\_,_/  @
+       @@
+  _  _ @
+ (_)(_)@
+/ _ \  @
+\___/  @
+       @@
+  _  _ @
+ (_)(_)@
+/ // / @
+\_,_/  @
+       @@
+    ____ @
+   / _  )@
+  / /< < @
+ / //__/ @
+/_/      @@
+160  NO-BREAK SPACE
+    $@
+   $ @
+  $  @
+ $   @
+$    @@
+161  INVERTED EXCLAMATION MARK
+   _ @
+  (_)@
+ / / @
+/_/  @
+     @@
+162  CENT SIGN
+     @
+ __//@
+/ __/@
+\ _/ @
+//   @@
+163  POUND SIGN
+     __ @
+  __/__|@
+ /_ _/_ @
+(_,___/ @
+        @@
+164  CURRENCY SIGN
+   /|_/|@
+  | . / @
+ /_  |  @
+|/ |/   @
+        @@
+165  YEN SIGN
+    ____@
+  _| / /@
+ /_  __/@
+/_  __/ @
+ /_/    @@
+166  BROKEN BAR
+    __@
+   / /@
+  /_/ @
+ / /  @
+/_/   @@
+167  SECTION SIGN
+     __ @
+   _/ _)@
+  / | | @
+ | |_/  @
+(__/    @@
+168  DIAERESIS
+ _   _ @
+(_) (_)@
+ $   $ @
+$   $  @
+       @@
+169  COPYRIGHT SIGN
+   ____  @
+  / ___\ @
+ / / _/ |@
+| |__/ / @
+ \____/  @@
+170  FEMININE ORDINAL INDICATOR
+   ___ _@
+  / _ `/@
+ _\_,_/ @
+/____/  @
+        @@
+171  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+  ____@
+ / / /@
+< < < @
+ \_\_\@
+      @@
+172  NOT SIGN
+     @
+ ____@
+/_  /@
+ /_/ @
+     @@
+173  SOFT HYPHEN
+    @
+ ___@
+/__/@
+ $  @
+    @@
+174  REGISTERED SIGN
+   ____  @
+  / __ \ @
+ / / -) |@
+| //\\ / @
+ \____/  @@
+175  MACRON
+ ____@
+/___/@
+ $   @
+$    @
+     @@
+176  DEGREE SIGN
+  __ @
+ /. |@
+|__/ @
+ $   @
+     @@
+177  PLUS-MINUS SIGN
+      __ @
+   __/ /_@
+  /_  __/@
+ __/_/_  @
+/_____/  @@
+178  SUPERSCRIPT TWO
+  __ @
+ |_ )@
+/__| @
+ $   @
+     @@
+179  SUPERSCRIPT THREE
+  ___@
+ |_ /@
+/__) @
+ $   @
+     @@
+180  ACUTE ACCENT
+ __@
+/_/@
+ $ @
+$  @
+   @@
+181  MICRO SIGN
+        @
+   __ __@
+  / // /@
+ / .,_/ @
+/_/     @@
+182  PILCROW SIGN
+  _____@
+ /    /@
+|_ / / @
+/_/_/  @
+       @@
+183  MIDDLE DOT
+   @
+ _ @
+(_)@
+$  @
+   @@
+184  CEDILLA
+   @
+   @
+   @
+ _ @
+/_)@@
+185  SUPERSCRIPT ONE
+  __@
+ < /@
+/_/ @
+$   @
+    @@
+186  MASCULINE ORDINAL INDICATOR
+   ___ @
+  / _ \@
+ _\___/@
+/____/ @
+       @@
+187  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+____  @
+\ \ \ @
+ > > >@
+/_/_/ @
+      @@
+188  VULGAR FRACTION ONE QUARTER
+  __  __   @
+ < /_/_/___@
+/_//_//_' /@
+ /_/   /_/ @
+           @@
+189  VULGAR FRACTION ONE HALF
+  __  __  @
+ < /_/_/_ @
+/_//_/|_ )@
+ /_/ /__| @
+          @@
+190  VULGAR FRACTION THREE QUARTERS
+  ___  __   @
+ |_ /_/_/___@
+/__)/_//_' /@
+  /_/   /_/ @
+            @@
+191  INVERTED QUESTION MARK
+   _ @
+ _(_)@
+/ _/_@
+\___/@
+     @@
+192  LATIN CAPITAL LETTER A WITH GRAVE
+   __ @
+  _\_\@
+ / - |@
+/_/|_|@
+      @@
+193  LATIN CAPITAL LETTER A WITH ACUTE
+    __@
+  _/_/@
+ / - |@
+/_/|_|@
+      @@
+194  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    //|@
+  _|/||@
+ / - | @
+/_/|_| @
+       @@
+195  LATIN CAPITAL LETTER A WITH TILDE
+    /\//@
+  _//\/ @
+ / - |  @
+/_/|_|  @
+        @@
+196  LATIN CAPITAL LETTER A WITH DIAERESIS
+   _  _ @
+  (_)(_)@
+ / - |  @
+/_/|_|  @
+        @@
+197  LATIN CAPITAL LETTER A WITH RING ABOVE
+   (())@
+  / _ |@
+ / __ |@
+/_/ |_|@
+       @@
+198  LATIN CAPITAL LETTER AE
+   _______@
+  / _  __/@
+ / _  _/  @
+/_//___/  @
+          @@
+199  LATIN CAPITAL LETTER C WITH CEDILLA
+  _____@
+ / ___/@
+/ /__  @
+\___/  @
+/_)    @@
+200  LATIN CAPITAL LETTER E WITH GRAVE
+  __ @
+  \_\@
+ / -<@
+/__< @
+     @@
+201  LATIN CAPITAL LETTER E WITH ACUTE
+    __@
+  _/_/@
+ / -< @
+/__<  @
+      @@
+202  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+   //|@
+  |/||@
+ / -< @
+/__<  @
+      @@
+203  LATIN CAPITAL LETTER E WITH DIAERESIS
+  _  _ @
+ (_)(_)@
+ / -<  @
+/__<   @
+       @@
+204  LATIN CAPITAL LETTER I WITH GRAVE
+   __  @
+  _\_\ @
+ /_ __/@
+/____/ @
+       @@
+205  LATIN CAPITAL LETTER I WITH ACUTE
+     __@
+  __/_/@
+ /_ __/@
+/____/ @
+       @@
+206  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    //|@
+  _|/||@
+ /_ __/@
+/____/ @
+       @@
+207  LATIN CAPITAL LETTER I WITH DIAERESIS
+   _  _ @
+  (_)(_)@
+ /_ __/ @
+/____/  @
+        @@
+208  LATIN CAPITAL LETTER ETH
+   ____ @
+ _/ __ \@
+/_ _// /@
+/_____/ @
+        @@
+209  LATIN CAPITAL LETTER N WITH TILDE
+     /\//@
+  __//\/ @
+ /  |/ / @
+/_/|__/  @
+         @@
+210  LATIN CAPITAL LETTER O WITH GRAVE
+  __  @
+ _\_\ @
+/ __ \@
+\____/@
+      @@
+211  LATIN CAPITAL LETTER O WITH ACUTE
+    __@
+ __/_/@
+/ __ \@
+\____/@
+      @@
+212  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+   //|@
+ _|/||@
+/ __ \@
+\____/@
+      @@
+213  LATIN CAPITAL LETTER O WITH TILDE
+   /\//@
+ _//\/ @
+/ __ \ @
+\____/ @
+       @@
+214  LATIN CAPITAL LETTER O WITH DIAERESIS
+  _   _ @
+ (_)_(_)@
+/ __ \  @
+\____/  @
+        @@
+215  MULTIPLICATION SIGN
+     @
+ /|/|@
+ > < @
+|/|/ @
+     @@
+216  LATIN CAPITAL LETTER O WITH STROKE
+  _____ @
+ / _// \@
+/ //// /@
+\_//__/ @
+        @@
+217  LATIN CAPITAL LETTER U WITH GRAVE
+   __  @
+ __\_\ @
+/ /_/ /@
+\____/ @
+       @@
+218  LATIN CAPITAL LETTER U WITH ACUTE
+     __@
+ __ /_/@
+/ /_/ /@
+\____/ @
+       @@
+219  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    //|@
+ __|/||@
+/ /_/ /@
+\____/ @
+       @@
+220  LATIN CAPITAL LETTER U WITH DIAERESIS
+  _   _ @
+ (_) (_)@
+/ /_/ / @
+\____/  @
+        @@
+221  LATIN CAPITAL LETTER Y WITH ACUTE
+   __@
+__/_/@
+\ V /@
+ /_/ @
+     @@
+222  LATIN CAPITAL LETTER THORN
+   __ @
+  / / @
+ / -_)@
+/_/   @
+      @@
+223  LATIN SMALL LETTER SHARP S
+    ____ @
+   / _  )@
+  / /< < @
+ / //__/ @
+/_/      @@
+224  LATIN SMALL LETTER A WITH GRAVE
+  __  @
+ _\_\_@
+/ _ `/@
+\_,_/ @
+      @@
+225  LATIN SMALL LETTER A WITH ACUTE
+    __@
+ __/_/@
+/ _ `/@
+\_,_/ @
+      @@
+226  LATIN SMALL LETTER A WITH CIRCUMFLEX
+   //|@
+ _|/||@
+/ _ `/@
+\_,_/ @
+      @@
+227  LATIN SMALL LETTER A WITH TILDE
+   /\//@
+ _//\/ @
+/ _ `/ @
+\_,_/  @
+       @@
+228  LATIN SMALL LETTER A WITH DIAERESIS
+  _  _ @
+ (_)(_)@
+/ _ `/ @
+\_,_/  @
+       @@
+229  LATIN SMALL LETTER A WITH RING ABOVE
+   __ @
+ _(())@
+/ _ `/@
+\_,_/ @
+      @@
+230  LATIN SMALL LETTER AE
+         @
+ ___ ___ @
+/ _ ` -_)@
+\_,____/ @
+         @@
+231  LATIN SMALL LETTER C WITH CEDILLA
+     @
+ ____@
+/ __/@
+\__/ @
+/_)  @@
+232  LATIN SMALL LETTER E WITH GRAVE
+  __ @
+ _\_\@
+/ -_)@
+\__/ @
+     @@
+233  LATIN SMALL LETTER E WITH ACUTE
+   __@
+ _/_/@
+/ -_)@
+\__/ @
+     @@
+234  LATIN SMALL LETTER E WITH CIRCUMFLEX
+  //|@
+ |/||@
+/ -_)@
+\__/ @
+     @@
+235  LATIN SMALL LETTER E WITH DIAERESIS
+ _  _ @
+(_)(_)@
+/ -_) @
+\__/  @
+      @@
+236  LATIN SMALL LETTER I WITH GRAVE
+  __ @
+  \_\@
+ / / @
+/_/  @
+     @@
+237  LATIN SMALL LETTER I WITH ACUTE
+   __@
+  /_/@
+ / / @
+/_/  @
+     @@
+238  LATIN SMALL LETTER I WITH CIRCUMFLEX
+   //|@
+  |/||@
+ / /  @
+/_/   @
+      @@
+239  LATIN SMALL LETTER I WITH DIAERESIS
+ _   _ @
+(_)_(_)@
+ / /   @
+/_/    @
+       @@
+240  LATIN SMALL LETTER ETH
+   _||_@
+ __ || @
+/ _` | @
+\___/  @
+       @@
+241  LATIN SMALL LETTER N WITH TILDE
+    /\//@
+  _//\/ @
+ / _ \  @
+/_//_/  @
+        @@
+242  LATIN SMALL LETTER O WITH GRAVE
+  __ @
+ _\_\@
+/ _ \@
+\___/@
+     @@
+243  LATIN SMALL LETTER O WITH ACUTE
+   __@
+ _/_/@
+/ _ \@
+\___/@
+     @@
+244  LATIN SMALL LETTER O WITH CIRCUMFLEX
+   //|@
+ _|/||@
+/ _ \ @
+\___/ @
+      @@
+245  LATIN SMALL LETTER O WITH TILDE
+   /\//@
+ _//\/ @
+/ _ \  @
+\___/  @
+       @@
+246  LATIN SMALL LETTER O WITH DIAERESIS
+  _  _ @
+ (_)(_)@
+/ _ \  @
+\___/  @
+       @@
+247  DIVISION SIGN
+   _ @
+ _(_)@
+/___/@
+(_)  @
+     @@
+248  LATIN SMALL LETTER O WITH STROKE
+     @
+ ___ @
+/ //\@
+\//_/@
+     @@
+249  LATIN SMALL LETTER U WITH GRAVE
+   __ @
+ __\_\@
+/ // /@
+\_,_/ @
+      @@
+250  LATIN SMALL LETTER U WITH ACUTE
+    __@
+ __/_/@
+/ // /@
+\_,_/ @
+      @@
+251  LATIN SMALL LETTER U WITH CIRCUMFLEX
+   //|@
+ _|/||@
+/ // /@
+\_,_/ @
+      @@
+252  LATIN SMALL LETTER U WITH DIAERESIS
+  _  _ @
+ (_)(_)@
+/ // / @
+\_,_/  @
+       @@
+253  LATIN SMALL LETTER Y WITH ACUTE
+     __@
+  __/_/@
+ / // /@
+ \_, / @
+/___/  @@
+254  LATIN SMALL LETTER THORN
+    __ @
+   / / @
+  / _ \@
+ / .__/@
+/_/    @@
+255  LATIN SMALL LETTER Y WITH DIAERESIS
+   _  _ @
+  (_)(_)@
+ / // / @
+ \_, /  @
+/___/   @@
diff --git a/externals/figlet/fonts/standard.flf b/externals/figlet/fonts/standard.flf
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/standard.flf
@@ -0,0 +1,2238 @@
+flf2a$ 6 5 16 15 15 0 24463 229
+Standard by Glenn Chappell & Ian Chai 3/93 -- based on Frank's .sig
+Includes ISO Latin-1
+figlet release 2.1 -- 12 Aug 1994
+Modified for figlet 2.2 by John Cowan <cowan@ccil.org>
+  to add Latin-{2,3,4,5} support (Unicode U+0100-017F).
+Permission is hereby given to modify this font, as long as the
+modifier's name is placed on a comment line.
+
+---
+
+Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
+supported by FIGlet and FIGWin.  May also be slightly modified for better use
+of new full-width/kern/smush alternatives, but default output is NOT changed.
+
+Modified 2012-05 by Patrick Gillespie (patorjk@gmail.com) to add the 0xCA0 character.
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@@
+  _ @
+ | |@
+ | |@
+ |_|@
+ (_)@
+    @@
+  _ _ @
+ ( | )@
+  V V @
+   $  @
+   $  @
+      @@
+    _  _   @
+  _| || |_ @
+ |_  ..  _|@
+ |_      _|@
+   |_||_|  @
+           @@
+   _  @
+  | | @
+ / __)@
+ \__ \@
+ (   /@
+  |_| @@
+  _  __@
+ (_)/ /@
+   / / @
+  / /_ @
+ /_/(_)@
+       @@
+   ___   @
+  ( _ )  @
+  / _ \/\@
+ | (_>  <@
+  \___/\/@
+         @@
+  _ @
+ ( )@
+ |/ @
+  $ @
+  $ @
+    @@
+   __@
+  / /@
+ | | @
+ | | @
+ | | @
+  \_\@@
+ __  @
+ \ \ @
+  | |@
+  | |@
+  | |@
+ /_/ @@
+       @
+ __/\__@
+ \    /@
+ /_  _\@
+   \/  @
+       @@
+        @
+    _   @
+  _| |_ @
+ |_   _|@
+   |_|  @
+        @@
+    @
+    @
+    @
+  _ @
+ ( )@
+ |/ @@
+        @
+        @
+  _____ @
+ |_____|@
+    $   @
+        @@
+    @
+    @
+    @
+  _ @
+ (_)@
+    @@
+     __@
+    / /@
+   / / @
+  / /  @
+ /_/   @
+       @@
+   ___  @
+  / _ \ @
+ | | | |@
+ | |_| |@
+  \___/ @
+        @@
+  _ @
+ / |@
+ | |@
+ | |@
+ |_|@
+    @@
+  ____  @
+ |___ \ @
+   __) |@
+  / __/ @
+ |_____|@
+        @@
+  _____ @
+ |___ / @
+   |_ \ @
+  ___) |@
+ |____/ @
+        @@
+  _  _   @
+ | || |  @
+ | || |_ @
+ |__   _|@
+    |_|  @
+         @@
+  ____  @
+ | ___| @
+ |___ \ @
+  ___) |@
+ |____/ @
+        @@
+   __   @
+  / /_  @
+ | '_ \ @
+ | (_) |@
+  \___/ @
+        @@
+  _____ @
+ |___  |@
+    / / @
+   / /  @
+  /_/   @
+        @@
+   ___  @
+  ( _ ) @
+  / _ \ @
+ | (_) |@
+  \___/ @
+        @@
+   ___  @
+  / _ \ @
+ | (_) |@
+  \__, |@
+    /_/ @
+        @@
+    @
+  _ @
+ (_)@
+  _ @
+ (_)@
+    @@
+    @
+  _ @
+ (_)@
+  _ @
+ ( )@
+ |/ @@
+   __@
+  / /@
+ / / @
+ \ \ @
+  \_\@
+     @@
+        @
+  _____ @
+ |_____|@
+ |_____|@
+    $   @
+        @@
+ __  @
+ \ \ @
+  \ \@
+  / /@
+ /_/ @
+     @@
+  ___ @
+ |__ \@
+   / /@
+  |_| @
+  (_) @
+      @@
+    ____  @
+   / __ \ @
+  / / _` |@
+ | | (_| |@
+  \ \__,_|@
+   \____/ @@
+     _    @
+    / \   @
+   / _ \  @
+  / ___ \ @
+ /_/   \_\@
+          @@
+  ____  @
+ | __ ) @
+ |  _ \ @
+ | |_) |@
+ |____/ @
+        @@
+   ____ @
+  / ___|@
+ | |    @
+ | |___ @
+  \____|@
+        @@
+  ____  @
+ |  _ \ @
+ | | | |@
+ | |_| |@
+ |____/ @
+        @@
+  _____ @
+ | ____|@
+ |  _|  @
+ | |___ @
+ |_____|@
+        @@
+  _____ @
+ |  ___|@
+ | |_   @
+ |  _|  @
+ |_|    @
+        @@
+   ____ @
+  / ___|@
+ | |  _ @
+ | |_| |@
+  \____|@
+        @@
+  _   _ @
+ | | | |@
+ | |_| |@
+ |  _  |@
+ |_| |_|@
+        @@
+  ___ @
+ |_ _|@
+  | | @
+  | | @
+ |___|@
+      @@
+      _ @
+     | |@
+  _  | |@
+ | |_| |@
+  \___/ @
+        @@
+  _  __@
+ | |/ /@
+ | ' / @
+ | . \ @
+ |_|\_\@
+       @@
+  _     @
+ | |    @
+ | |    @
+ | |___ @
+ |_____|@
+        @@
+  __  __ @
+ |  \/  |@
+ | |\/| |@
+ | |  | |@
+ |_|  |_|@
+         @@
+  _   _ @
+ | \ | |@
+ |  \| |@
+ | |\  |@
+ |_| \_|@
+        @@
+   ___  @
+  / _ \ @
+ | | | |@
+ | |_| |@
+  \___/ @
+        @@
+  ____  @
+ |  _ \ @
+ | |_) |@
+ |  __/ @
+ |_|    @
+        @@
+   ___  @
+  / _ \ @
+ | | | |@
+ | |_| |@
+  \__\_\@
+        @@
+  ____  @
+ |  _ \ @
+ | |_) |@
+ |  _ < @
+ |_| \_\@
+        @@
+  ____  @
+ / ___| @
+ \___ \ @
+  ___) |@
+ |____/ @
+        @@
+  _____ @
+ |_   _|@
+   | |  @
+   | |  @
+   |_|  @
+        @@
+  _   _ @
+ | | | |@
+ | | | |@
+ | |_| |@
+  \___/ @
+        @@
+ __     __@
+ \ \   / /@
+  \ \ / / @
+   \ V /  @
+    \_/   @
+          @@
+ __        __@
+ \ \      / /@
+  \ \ /\ / / @
+   \ V  V /  @
+    \_/\_/   @
+             @@
+ __  __@
+ \ \/ /@
+  \  / @
+  /  \ @
+ /_/\_\@
+       @@
+ __   __@
+ \ \ / /@
+  \ V / @
+   | |  @
+   |_|  @
+        @@
+  _____@
+ |__  /@
+   / / @
+  / /_ @
+ /____|@
+       @@
+  __ @
+ | _|@
+ | | @
+ | | @
+ | | @
+ |__|@@
+ __    @
+ \ \   @
+  \ \  @
+   \ \ @
+    \_\@
+       @@
+  __ @
+ |_ |@
+  | |@
+  | |@
+  | |@
+ |__|@@
+  /\ @
+ |/\|@
+   $ @
+   $ @
+   $ @
+     @@
+        @
+        @
+        @
+        @
+  _____ @
+ |_____|@@
+  _ @
+ ( )@
+  \|@
+  $ @
+  $ @
+    @@
+        @
+   __ _ @
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @@
+  _     @
+ | |__  @
+ | '_ \ @
+ | |_) |@
+ |_.__/ @
+        @@
+       @
+   ___ @
+  / __|@
+ | (__ @
+  \___|@
+       @@
+      _ @
+   __| |@
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @@
+       @
+   ___ @
+  / _ \@
+ |  __/@
+  \___|@
+       @@
+   __ @
+  / _|@
+ | |_ @
+ |  _|@
+ |_|  @
+      @@
+        @
+   __ _ @
+  / _` |@
+ | (_| |@
+  \__, |@
+  |___/ @@
+  _     @
+ | |__  @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+        @@
+  _ @
+ (_)@
+ | |@
+ | |@
+ |_|@
+    @@
+    _ @
+   (_)@
+   | |@
+   | |@
+  _/ |@
+ |__/ @@
+  _    @
+ | | __@
+ | |/ /@
+ |   < @
+ |_|\_\@
+       @@
+  _ @
+ | |@
+ | |@
+ | |@
+ |_|@
+    @@
+            @
+  _ __ ___  @
+ | '_ ` _ \ @
+ | | | | | |@
+ |_| |_| |_|@
+            @@
+        @
+  _ __  @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+        @@
+        @
+   ___  @
+  / _ \ @
+ | (_) |@
+  \___/ @
+        @@
+        @
+  _ __  @
+ | '_ \ @
+ | |_) |@
+ | .__/ @
+ |_|    @@
+        @
+   __ _ @
+  / _` |@
+ | (_| |@
+  \__, |@
+     |_|@@
+       @
+  _ __ @
+ | '__|@
+ | |   @
+ |_|   @
+       @@
+      @
+  ___ @
+ / __|@
+ \__ \@
+ |___/@
+      @@
+  _   @
+ | |_ @
+ | __|@
+ | |_ @
+  \__|@
+      @@
+        @
+  _   _ @
+ | | | |@
+ | |_| |@
+  \__,_|@
+        @@
+        @
+ __   __@
+ \ \ / /@
+  \ V / @
+   \_/  @
+        @@
+           @
+ __      __@
+ \ \ /\ / /@
+  \ V  V / @
+   \_/\_/  @
+           @@
+       @
+ __  __@
+ \ \/ /@
+  >  < @
+ /_/\_\@
+       @@
+        @
+  _   _ @
+ | | | |@
+ | |_| |@
+  \__, |@
+  |___/ @@
+      @
+  ____@
+ |_  /@
+  / / @
+ /___|@
+      @@
+    __@
+   / /@
+  | | @
+ < <  @
+  | | @
+   \_\@@
+  _ @
+ | |@
+ | |@
+ | |@
+ | |@
+ |_|@@
+ __   @
+ \ \  @
+  | | @
+   > >@
+  | | @
+ /_/  @@
+  /\/|@
+ |/\/ @
+   $  @
+   $  @
+   $  @
+      @@
+  _   _ @
+ (_)_(_)@
+   /_\  @
+  / _ \ @
+ /_/ \_\@
+        @@
+  _   _ @
+ (_)_(_)@
+  / _ \ @
+ | |_| |@
+  \___/ @
+        @@
+  _   _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+  \___/ @
+        @@
+  _   _ @
+ (_)_(_)@
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @@
+  _   _ @
+ (_)_(_)@
+  / _ \ @
+ | (_) |@
+  \___/ @
+        @@
+  _   _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+  \__,_|@
+        @@
+   ___ @
+  / _ \@
+ | |/ /@
+ | |\ \@
+ | ||_/@
+ |_|   @@
+160  NO-BREAK SPACE
+ $@
+ $@
+ $@
+ $@
+ $@
+ $@@
+161  INVERTED EXCLAMATION MARK
+  _ @
+ (_)@
+ | |@
+ | |@
+ |_|@
+    @@
+162  CENT SIGN
+    _  @
+   | | @
+  / __)@
+ | (__ @
+  \   )@
+   |_| @@
+163  POUND SIGN
+    ___  @
+   / ,_\ @
+ _| |_   @
+  | |___ @
+ (_,____|@
+         @@
+164  CURRENCY SIGN
+ /\___/\@
+ \  _  /@
+ | (_) |@
+ / ___ \@
+ \/   \/@
+        @@
+165  YEN SIGN
+  __ __ @
+  \ V / @
+ |__ __|@
+ |__ __|@
+   |_|  @
+        @@
+166  BROKEN BAR
+  _ @
+ | |@
+ |_|@
+  _ @
+ | |@
+ |_|@@
+167  SECTION SIGN
+    __ @
+  _/ _)@
+ / \ \ @
+ \ \\ \@
+  \ \_/@
+ (__/  @@
+168  DIAERESIS
+  _   _ @
+ (_) (_)@
+  $   $ @
+  $   $ @
+  $   $ @
+        @@
+169  COPYRIGHT SIGN
+    _____   @
+   / ___ \  @
+  / / __| \ @
+ | | (__   |@
+  \ \___| / @
+   \_____/  @@
+170  FEMININE ORDINAL INDICATOR
+  __ _ @
+ / _` |@
+ \__,_|@
+ |____|@
+    $  @
+       @@
+171  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+   ____@
+  / / /@
+ / / / @
+ \ \ \ @
+  \_\_\@
+       @@
+172  NOT SIGN
+        @
+  _____ @
+ |___  |@
+     |_|@
+    $   @
+        @@
+173  SOFT HYPHEN
+       @
+       @
+  ____ @
+ |____|@
+    $  @
+       @@
+174  REGISTERED SIGN
+    _____   @
+   / ___ \  @
+  / | _ \ \ @
+ |  |   /  |@
+  \ |_|_\ / @
+   \_____/  @@
+175  MACRON
+  _____ @
+ |_____|@
+    $   @
+    $   @
+    $   @
+        @@
+176  DEGREE SIGN
+   __  @
+  /  \ @
+ | () |@
+  \__/ @
+    $  @
+       @@
+177  PLUS-MINUS SIGN
+    _   @
+  _| |_ @
+ |_   _|@
+  _|_|_ @
+ |_____|@
+        @@
+178  SUPERSCRIPT TWO
+  ___ @
+ |_  )@
+  / / @
+ /___|@
+   $  @
+      @@
+179  SUPERSCRIPT THREE
+  ____@
+ |__ /@
+  |_ \@
+ |___/@
+   $  @
+      @@
+180  ACUTE ACCENT
+  __@
+ /_/@
+  $ @
+  $ @
+  $ @
+    @@
+181  MICRO SIGN
+        @
+  _   _ @
+ | | | |@
+ | |_| |@
+ | ._,_|@
+ |_|    @@
+182  PILCROW SIGN
+   _____ @
+  /     |@
+ | (| | |@
+  \__ | |@
+    |_|_|@
+         @@
+183  MIDDLE DOT
+    @
+  _ @
+ (_)@
+  $ @
+  $ @
+    @@
+184  CEDILLA
+    @
+    @
+    @
+    @
+  _ @
+ )_)@@
+185  SUPERSCRIPT ONE
+  _ @
+ / |@
+ | |@
+ |_|@
+  $ @
+    @@
+186  MASCULINE ORDINAL INDICATOR
+  ___ @
+ / _ \@
+ \___/@
+ |___|@
+   $  @
+      @@
+187  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ ____  @
+ \ \ \ @
+  \ \ \@
+  / / /@
+ /_/_/ @
+       @@
+188  VULGAR FRACTION ONE QUARTER
+  _   __    @
+ / | / / _  @
+ | |/ / | | @
+ |_/ /|_  _|@
+  /_/   |_| @
+            @@
+189  VULGAR FRACTION ONE HALF
+  _   __   @
+ / | / /__ @
+ | |/ /_  )@
+ |_/ / / / @
+  /_/ /___|@
+           @@
+190  VULGAR FRACTION THREE QUARTERS
+  ____  __    @
+ |__ / / / _  @
+  |_ \/ / | | @
+ |___/ /|_  _|@
+    /_/   |_| @
+              @@
+191  INVERTED QUESTION MARK
+   _  @
+  (_) @
+  | | @
+ / /_ @
+ \___|@
+      @@
+192  LATIN CAPITAL LETTER A WITH GRAVE
+   __   @
+   \_\  @
+   /_\  @
+  / _ \ @
+ /_/ \_\@
+        @@
+193  LATIN CAPITAL LETTER A WITH ACUTE
+    __  @
+   /_/  @
+   /_\  @
+  / _ \ @
+ /_/ \_\@
+        @@
+194  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+   //\  @
+  |/_\| @
+   /_\  @
+  / _ \ @
+ /_/ \_\@
+        @@
+195  LATIN CAPITAL LETTER A WITH TILDE
+   /\/| @
+  |/\/  @
+   /_\  @
+  / _ \ @
+ /_/ \_\@
+        @@
+196  LATIN CAPITAL LETTER A WITH DIAERESIS
+  _   _ @
+ (_)_(_)@
+   /_\  @
+  / _ \ @
+ /_/ \_\@
+        @@
+197  LATIN CAPITAL LETTER A WITH RING ABOVE
+    _   @
+   (o)  @
+   /_\  @
+  / _ \ @
+ /_/ \_\@
+        @@
+198  LATIN CAPITAL LETTER AE
+     ______ @
+    /  ____|@
+   / _  _|  @
+  / __ |___ @
+ /_/ |_____|@
+            @@
+199  LATIN CAPITAL LETTER C WITH CEDILLA
+   ____ @
+  / ___|@
+ | |    @
+ | |___ @
+  \____|@
+    )_) @@
+200  LATIN CAPITAL LETTER E WITH GRAVE
+   __   @
+  _\_\_ @
+ | ____|@
+ |  _|_ @
+ |_____|@
+        @@
+201  LATIN CAPITAL LETTER E WITH ACUTE
+    __  @
+  _/_/_ @
+ | ____|@
+ |  _|_ @
+ |_____|@
+        @@
+202  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+   //\  @
+  |/_\| @
+ | ____|@
+ |  _|_ @
+ |_____|@
+        @@
+203  LATIN CAPITAL LETTER E WITH DIAERESIS
+  _   _ @
+ (_)_(_)@
+ | ____|@
+ |  _|_ @
+ |_____|@
+        @@
+204  LATIN CAPITAL LETTER I WITH GRAVE
+  __  @
+  \_\ @
+ |_ _|@
+  | | @
+ |___|@
+      @@
+205  LATIN CAPITAL LETTER I WITH ACUTE
+   __ @
+  /_/ @
+ |_ _|@
+  | | @
+ |___|@
+      @@
+206  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+  //\ @
+ |/_\|@
+ |_ _|@
+  | | @
+ |___|@
+      @@
+207  LATIN CAPITAL LETTER I WITH DIAERESIS
+  _   _ @
+ (_)_(_)@
+  |_ _| @
+   | |  @
+  |___| @
+        @@
+208  LATIN CAPITAL LETTER ETH
+    ____  @
+   |  _ \ @
+  _| |_| |@
+ |__ __| |@
+   |____/ @
+          @@
+209  LATIN CAPITAL LETTER N WITH TILDE
+   /\/|@
+  |/\/ @
+ | \| |@
+ | .` |@
+ |_|\_|@
+       @@
+210  LATIN CAPITAL LETTER O WITH GRAVE
+   __   @
+   \_\  @
+  / _ \ @
+ | |_| |@
+  \___/ @
+        @@
+211  LATIN CAPITAL LETTER O WITH ACUTE
+    __  @
+   /_/  @
+  / _ \ @
+ | |_| |@
+  \___/ @
+        @@
+212  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+   //\  @
+  |/_\| @
+  / _ \ @
+ | |_| |@
+  \___/ @
+        @@
+213  LATIN CAPITAL LETTER O WITH TILDE
+   /\/| @
+  |/\/  @
+  / _ \ @
+ | |_| |@
+  \___/ @
+        @@
+214  LATIN CAPITAL LETTER O WITH DIAERESIS
+  _   _ @
+ (_)_(_)@
+  / _ \ @
+ | |_| |@
+  \___/ @
+        @@
+215  MULTIPLICATION SIGN
+     @
+     @
+ /\/\@
+ >  <@
+ \/\/@
+     @@
+216  LATIN CAPITAL LETTER O WITH STROKE
+   ____ @
+  / _// @
+ | |// |@
+ | //| |@
+  //__/ @
+        @@
+217  LATIN CAPITAL LETTER U WITH GRAVE
+   __   @
+  _\_\_ @
+ | | | |@
+ | |_| |@
+  \___/ @
+        @@
+218  LATIN CAPITAL LETTER U WITH ACUTE
+    __  @
+  _/_/_ @
+ | | | |@
+ | |_| |@
+  \___/ @
+        @@
+219  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+   //\  @
+  |/ \| @
+ | | | |@
+ | |_| |@
+  \___/ @
+        @@
+220  LATIN CAPITAL LETTER U WITH DIAERESIS
+  _   _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+  \___/ @
+        @@
+221  LATIN CAPITAL LETTER Y WITH ACUTE
+    __  @
+ __/_/__@
+ \ \ / /@
+  \ V / @
+   |_|  @
+        @@
+222  LATIN CAPITAL LETTER THORN
+  _     @
+ | |___ @
+ |  __ \@
+ |  ___/@
+ |_|    @
+        @@
+223  LATIN SMALL LETTER SHARP S
+   ___ @
+  / _ \@
+ | |/ /@
+ | |\ \@
+ | ||_/@
+ |_|   @@
+224  LATIN SMALL LETTER A WITH GRAVE
+   __   @
+   \_\_ @
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @@
+225  LATIN SMALL LETTER A WITH ACUTE
+    __  @
+   /_/_ @
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @@
+226  LATIN SMALL LETTER A WITH CIRCUMFLEX
+   //\  @
+  |/_\| @
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @@
+227  LATIN SMALL LETTER A WITH TILDE
+   /\/| @
+  |/\/_ @
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @@
+228  LATIN SMALL LETTER A WITH DIAERESIS
+  _   _ @
+ (_)_(_)@
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @@
+229  LATIN SMALL LETTER A WITH RING ABOVE
+    __  @
+   (()) @
+  / _ '|@
+ | (_| |@
+  \__,_|@
+        @@
+230  LATIN SMALL LETTER AE
+           @
+   __ ____ @
+  / _`  _ \@
+ | (_|  __/@
+  \__,____|@
+           @@
+231  LATIN SMALL LETTER C WITH CEDILLA
+       @
+   ___ @
+  / __|@
+ | (__ @
+  \___|@
+   )_) @@
+232  LATIN SMALL LETTER E WITH GRAVE
+   __  @
+   \_\ @
+  / _ \@
+ |  __/@
+  \___|@
+       @@
+233  LATIN SMALL LETTER E WITH ACUTE
+    __ @
+   /_/ @
+  / _ \@
+ |  __/@
+  \___|@
+       @@
+234  LATIN SMALL LETTER E WITH CIRCUMFLEX
+   //\ @
+  |/_\|@
+  / _ \@
+ |  __/@
+  \___|@
+       @@
+235  LATIN SMALL LETTER E WITH DIAERESIS
+  _   _ @
+ (_)_(_)@
+  / _ \ @
+ |  __/ @
+  \___| @
+        @@
+236  LATIN SMALL LETTER I WITH GRAVE
+ __ @
+ \_\@
+ | |@
+ | |@
+ |_|@
+    @@
+237  LATIN SMALL LETTER I WITH ACUTE
+  __@
+ /_/@
+ | |@
+ | |@
+ |_|@
+    @@
+238  LATIN SMALL LETTER I WITH CIRCUMFLEX
+  //\ @
+ |/_\|@
+  | | @
+  | | @
+  |_| @
+      @@
+239  LATIN SMALL LETTER I WITH DIAERESIS
+  _   _ @
+ (_)_(_)@
+   | |  @
+   | |  @
+   |_|  @
+        @@
+240  LATIN SMALL LETTER ETH
+   /\/\ @
+   >  < @
+  _\/\ |@
+ / __` |@
+ \____/ @
+        @@
+241  LATIN SMALL LETTER N WITH TILDE
+   /\/| @
+  |/\/  @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+        @@
+242  LATIN SMALL LETTER O WITH GRAVE
+   __   @
+   \_\  @
+  / _ \ @
+ | (_) |@
+  \___/ @
+        @@
+243  LATIN SMALL LETTER O WITH ACUTE
+    __  @
+   /_/  @
+  / _ \ @
+ | (_) |@
+  \___/ @
+        @@
+244  LATIN SMALL LETTER O WITH CIRCUMFLEX
+   //\  @
+  |/_\| @
+  / _ \ @
+ | (_) |@
+  \___/ @
+        @@
+245  LATIN SMALL LETTER O WITH TILDE
+   /\/| @
+  |/\/  @
+  / _ \ @
+ | (_) |@
+  \___/ @
+        @@
+246  LATIN SMALL LETTER O WITH DIAERESIS
+  _   _ @
+ (_)_(_)@
+  / _ \ @
+ | (_) |@
+  \___/ @
+        @@
+247  DIVISION SIGN
+        @
+    _   @
+  _(_)_ @
+ |_____|@
+   (_)  @
+        @@
+248  LATIN SMALL LETTER O WITH STROKE
+         @
+   ____  @
+  / _//\ @
+ | (//) |@
+  \//__/ @
+         @@
+249  LATIN SMALL LETTER U WITH GRAVE
+   __   @
+  _\_\_ @
+ | | | |@
+ | |_| |@
+  \__,_|@
+        @@
+250  LATIN SMALL LETTER U WITH ACUTE
+    __  @
+  _/_/_ @
+ | | | |@
+ | |_| |@
+  \__,_|@
+        @@
+251  LATIN SMALL LETTER U WITH CIRCUMFLEX
+   //\  @
+  |/ \| @
+ | | | |@
+ | |_| |@
+  \__,_|@
+        @@
+252  LATIN SMALL LETTER U WITH DIAERESIS
+  _   _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+  \__,_|@
+        @@
+253  LATIN SMALL LETTER Y WITH ACUTE
+    __  @
+  _/_/_ @
+ | | | |@
+ | |_| |@
+  \__, |@
+  |___/ @@
+254  LATIN SMALL LETTER THORN
+  _     @
+ | |__  @
+ | '_ \ @
+ | |_) |@
+ | .__/ @
+ |_|    @@
+255  LATIN SMALL LETTER Y WITH DIAERESIS
+  _   _ @
+ (_) (_)@
+ | | | |@
+ | |_| |@
+  \__, |@
+  |___/ @@
+0x0100  LATIN CAPITAL LETTER A WITH MACRON
+   ____ @
+  /___/ @
+   /_\  @
+  / _ \ @
+ /_/ \_\@
+        @@
+0x0101  LATIN SMALL LETTER A WITH MACRON
+    ___ @
+   /_ _/@
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @@
+0x0102  LATIN CAPITAL LETTER A WITH BREVE
+  _   _ @
+  \\_// @
+   /_\  @
+  / _ \ @
+ /_/ \_\@
+        @@
+0x0103  LATIN SMALL LETTER A WITH BREVE
+   \_/  @
+   ___  @
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @@
+0x0104  LATIN CAPITAL LETTER A WITH OGONEK
+        @
+    _   @
+   /_\  @
+  / _ \ @
+ /_/ \_\@
+     (_(@@
+0x0105  LATIN SMALL LETTER A WITH OGONEK
+        @
+   __ _ @
+  / _` |@
+ | (_| |@
+  \__,_|@
+     (_(@@
+0x0106  LATIN CAPITAL LETTER C WITH ACUTE
+     __ @
+   _/_/ @
+  / ___|@
+ | |___ @
+  \____|@
+        @@
+0x0107  LATIN SMALL LETTER C WITH ACUTE
+    __ @
+   /__/@
+  / __|@
+ | (__ @
+  \___|@
+       @@
+0x0108  LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+     /\ @
+   _//\\@
+  / ___|@
+ | |___ @
+  \____|@
+        @@
+0x0109  LATIN SMALL LETTER C WITH CIRCUMFLEX
+    /\ @
+   /_\ @
+  / __|@
+ | (__ @
+  \___|@
+       @@
+0x010A  LATIN CAPITAL LETTER C WITH DOT ABOVE
+    []  @
+   ____ @
+  / ___|@
+ | |___ @
+  \____|@
+        @@
+0x010B  LATIN SMALL LETTER C WITH DOT ABOVE
+   []  @
+   ___ @
+  / __|@
+ | (__ @
+  \___|@
+       @@
+0x010C  LATIN CAPITAL LETTER C WITH CARON
+   \\// @
+   _\/_ @
+  / ___|@
+ | |___ @
+  \____|@
+        @@
+0x010D  LATIN SMALL LETTER C WITH CARON
+   \\//@
+   _\/ @
+  / __|@
+ | (__ @
+  \___|@
+       @@
+0x010E  LATIN CAPITAL LETTER D WITH CARON
+   \\// @
+  __\/  @
+ |  _ \ @
+ | |_| |@
+ |____/ @
+        @@
+0x010F  LATIN SMALL LETTER D WITH CARON
+  \/  _ @
+   __| |@
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @@
+0x0110  LATIN CAPITAL LETTER D WITH STROKE
+   ____   @
+  |_ __ \ @
+ /| |/ | |@
+ /|_|/_| |@
+  |_____/ @
+          @@
+0x0111  LATIN SMALL LETTER D WITH STROKE
+    ---|@
+   __| |@
+  / _` |@
+ | (_| |@
+  \__,_|@
+        @@
+0x0112  LATIN CAPITAL LETTER E WITH MACRON
+   ____ @
+  /___/ @
+ | ____|@
+ |  _|_ @
+ |_____|@
+        @@
+0x0113  LATIN SMALL LETTER E WITH MACRON
+    ____@
+   /_ _/@
+  / _ \ @
+ |  __/ @
+  \___| @
+        @@
+0x0114  LATIN CAPITAL LETTER E WITH BREVE
+  _   _ @
+  \\_// @
+ | ____|@
+ |  _|_ @
+ |_____|@
+        @@
+0x0115  LATIN SMALL LETTER E WITH BREVE
+  \\  //@
+    --  @
+  / _ \ @
+ |  __/ @
+  \___| @
+        @@
+0x0116  LATIN CAPITAL LETTER E WITH DOT ABOVE
+    []  @
+  _____ @
+ | ____|@
+ |  _|_ @
+ |_____|@
+        @@
+0x0117  LATIN SMALL LETTER E WITH DOT ABOVE
+    [] @
+    __ @
+  / _ \@
+ |  __/@
+  \___|@
+       @@
+0x0118  LATIN CAPITAL LETTER E WITH OGONEK
+        @
+  _____ @
+ | ____|@
+ |  _|_ @
+ |_____|@
+    (__(@@
+0x0119  LATIN SMALL LETTER E WITH OGONEK
+       @
+   ___ @
+  / _ \@
+ |  __/@
+  \___|@
+    (_(@@
+0x011A  LATIN CAPITAL LETTER E WITH CARON
+   \\// @
+  __\/_ @
+ | ____|@
+ |  _|_ @
+ |_____|@
+        @@
+0x011B  LATIN SMALL LETTER E WITH CARON
+   \\//@
+    \/ @
+  / _ \@
+ |  __/@
+  \___|@
+       @@
+0x011C  LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+   _/\_ @
+  / ___|@
+ | |  _ @
+ | |_| |@
+  \____|@
+        @@
+0x011D  LATIN SMALL LETTER G WITH CIRCUMFLEX
+     /\ @
+   _/_ \@
+  / _` |@
+ | (_| |@
+  \__, |@
+  |___/ @@
+0x011E  LATIN CAPITAL LETTER G WITH BREVE
+   _\/_ @
+  / ___|@
+ | |  _ @
+ | |_| |@
+  \____|@
+        @@
+0x011F  LATIN SMALL LETTER G WITH BREVE
+  \___/ @
+   __ _ @
+  / _` |@
+ | (_| |@
+  \__, |@
+  |___/ @@
+0x0120  LATIN CAPITAL LETTER G WITH DOT ABOVE
+   _[]_ @
+  / ___|@
+ | |  _ @
+ | |_| |@
+  \____|@
+        @@
+0x0121  LATIN SMALL LETTER G WITH DOT ABOVE
+   []   @
+   __ _ @
+  / _` |@
+ | (_| |@
+  \__, |@
+  |___/ @@
+0x0122  LATIN CAPITAL LETTER G WITH CEDILLA
+   ____ @
+  / ___|@
+ | |  _ @
+ | |_| |@
+  \____|@
+   )__) @@
+0x0123  LATIN SMALL LETTER G WITH CEDILLA
+        @
+   __ _ @
+  / _` |@
+ | (_| |@
+  \__, |@
+  |_))))@@
+0x0124  LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+  _/ \_ @
+ | / \ |@
+ | |_| |@
+ |  _  |@
+ |_| |_|@
+        @@
+0x0125  LATIN SMALL LETTER H WITH CIRCUMFLEX
+  _  /\ @
+ | |//\ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+        @@
+0x0126  LATIN CAPITAL LETTER H WITH STROKE
+  _   _ @
+ | |=| |@
+ | |_| |@
+ |  _  |@
+ |_| |_|@
+        @@
+0x0127  LATIN SMALL LETTER H WITH STROKE
+  _     @
+ |=|__  @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+        @@
+0x0128  LATIN CAPITAL LETTER I WITH TILDE
+  /\//@
+ |_ _|@
+  | | @
+  | | @
+ |___|@
+      @@
+0x0129  LATIN SMALL LETTER I WITH TILDE
+    @
+ /\/@
+ | |@
+ | |@
+ |_|@
+    @@
+0x012A  LATIN CAPITAL LETTER I WITH MACRON
+ /___/@
+ |_ _|@
+  | | @
+  | | @
+ |___|@
+      @@
+0x012B  LATIN SMALL LETTER I WITH MACRON
+  ____@
+ /___/@
+  | | @
+  | | @
+  |_| @
+      @@
+0x012C  LATIN CAPITAL LETTER I WITH BREVE
+  \__/@
+ |_ _|@
+  | | @
+  | | @
+ |___|@
+      @@
+0x012D  LATIN SMALL LETTER I WITH BREVE
+    @
+ \_/@
+ | |@
+ | |@
+ |_|@
+    @@
+0x012E  LATIN CAPITAL LETTER I WITH OGONEK
+  ___ @
+ |_ _|@
+  | | @
+  | | @
+ |___|@
+  (__(@@
+0x012F  LATIN SMALL LETTER I WITH OGONEK
+  _  @
+ (_) @
+ | | @
+ | | @
+ |_|_@
+  (_(@@
+0x0130  LATIN CAPITAL LETTER I WITH DOT ABOVE
+  _[] @
+ |_ _|@
+  | | @
+  | | @
+ |___|@
+      @@
+0x0131  LATIN SMALL LETTER DOTLESS I
+    @
+  _ @
+ | |@
+ | |@
+ |_|@
+    @@
+0x0132  LATIN CAPITAL LIGATURE IJ
+  ___  _ @
+ |_ _|| |@
+  | | | |@
+  | |_| |@
+ |__|__/ @
+         @@
+0x0133  LATIN SMALL LIGATURE IJ
+  _   _ @
+ (_) (_)@
+ | | | |@
+ | | | |@
+ |_|_/ |@
+   |__/ @@
+0x0134  LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+      /\ @
+     /_\|@
+  _  | | @
+ | |_| | @
+  \___/  @
+         @@
+0x0135  LATIN SMALL LETTER J WITH CIRCUMFLEX
+    /\@
+   /_\@
+   | |@
+   | |@
+  _/ |@
+ |__/ @@
+0x0136  LATIN CAPITAL LETTER K WITH CEDILLA
+  _  _  @
+ | |/ / @
+ | ' /  @
+ | . \  @
+ |_|\_\ @
+    )__)@@
+0x0137  LATIN SMALL LETTER K WITH CEDILLA
+  _    @
+ | | __@
+ | |/ /@
+ |   < @
+ |_|\_\@
+    )_)@@
+0x0138  LATIN SMALL LETTER KRA
+       @
+  _ __ @
+ | |/ \@
+ |   < @
+ |_|\_\@
+       @@
+0x0139  LATIN CAPITAL LETTER L WITH ACUTE
+  _   //@
+ | | // @
+ | |    @
+ | |___ @
+ |_____|@
+        @@
+0x013A  LATIN SMALL LETTER L WITH ACUTE
+  //@
+ | |@
+ | |@
+ | |@
+ |_|@
+    @@
+0x013B  LATIN CAPITAL LETTER L WITH CEDILLA
+  _     @
+ | |    @
+ | |    @
+ | |___ @
+ |_____|@
+    )__)@@
+0x013C  LATIN SMALL LETTER L WITH CEDILLA
+  _   @
+ | |  @
+ | |  @
+ | |  @
+ |_|  @
+   )_)@@
+0x013D  LATIN CAPITAL LETTER L WITH CARON
+  _ \\//@
+ | | \/ @
+ | |    @
+ | |___ @
+ |_____|@
+        @@
+0x013E  LATIN SMALL LETTER L WITH CARON
+  _ \\//@
+ | | \/ @
+ | |    @
+ | |    @
+ |_|    @
+        @@
+0x013F  LATIN CAPITAL LETTER L WITH MIDDLE DOT
+  _     @
+ | |    @
+ | | [] @
+ | |___ @
+ |_____|@
+        @@
+0x0140  LATIN SMALL LETTER L WITH MIDDLE DOT
+  _    @
+ | |   @
+ | | []@
+ | |   @
+ |_|   @
+       @@
+0x0141  LATIN CAPITAL LETTER L WITH STROKE
+  __    @
+ | //   @
+ |//|   @
+ // |__ @
+ |_____|@
+        @@
+0x0142  LATIN SMALL LETTER L WITH STROKE
+  _ @
+ | |@
+ |//@
+ //|@
+ |_|@
+    @@
+0x0143  LATIN CAPITAL LETTER N WITH ACUTE
+  _/ /_ @
+ | \ | |@
+ |  \| |@
+ | |\  |@
+ |_| \_|@
+        @@
+0x0144  LATIN SMALL LETTER N WITH ACUTE
+     _  @
+  _ /_/ @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+        @@
+0x0145  LATIN CAPITAL LETTER N WITH CEDILLA
+  _   _ @
+ | \ | |@
+ |  \| |@
+ | |\  |@
+ |_| \_|@
+ )_)    @@
+0x0146  LATIN SMALL LETTER N WITH CEDILLA
+        @
+  _ __  @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+ )_)    @@
+0x0147  LATIN CAPITAL LETTER N WITH CARON
+  _\/ _ @
+ | \ | |@
+ |  \| |@
+ | |\  |@
+ |_| \_|@
+        @@
+0x0148  LATIN SMALL LETTER N WITH CARON
+  \\//  @
+  _\/_  @
+ | '_ \ @
+ | | | |@
+ |_| |_|@
+        @@
+0x0149  LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+          @
+  _  __   @
+ ( )| '_\ @
+ |/| | | |@
+   |_| |_|@
+          @@
+0x014A  LATIN CAPITAL LETTER ENG
+  _   _ @
+ | \ | |@
+ |  \| |@
+ | |\  |@
+ |_| \ |@
+     )_)@@
+0x014B  LATIN SMALL LETTER ENG
+  _ __  @
+ | '_ \ @
+ | | | |@
+ |_| | |@
+     | |@
+    |__ @@
+0x014C  LATIN CAPITAL LETTER O WITH MACRON
+   ____ @
+  /_ _/ @
+  / _ \ @
+ | (_) |@
+  \___/ @
+        @@
+0x014D  LATIN SMALL LETTER O WITH MACRON
+   ____ @
+  /_ _/ @
+  / _ \ @
+ | (_) |@
+  \___/ @
+        @@
+0x014E  LATIN CAPITAL LETTER O WITH BREVE
+  \   / @
+   _-_  @
+  / _ \ @
+ | |_| |@
+  \___/ @
+        @@
+0x014F  LATIN SMALL LETTER O WITH BREVE
+  \   / @
+   _-_  @
+  / _ \ @
+ | |_| |@
+  \___/ @
+        @@
+0x0150  LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+    ___ @
+   /_/_/@
+  / _ \ @
+ | |_| |@
+  \___/ @
+        @@
+0x0151  LATIN SMALL LETTER O WITH DOUBLE ACUTE
+    ___ @
+   /_/_/@
+  / _ \ @
+ | |_| |@
+  \___/ @
+        @@
+0x0152  LATIN CAPITAL LIGATURE OE
+   ___  ___ @
+  / _ \| __|@
+ | | | |  | @
+ | |_| | |__@
+  \___/|____@
+            @@
+0x0153  LATIN SMALL LIGATURE OE
+             @
+   ___   ___ @
+  / _ \ / _ \@
+ | (_) |  __/@
+  \___/ \___|@
+             @@
+0x0154  LATIN CAPITAL LETTER R WITH ACUTE
+  _/_/  @
+ |  _ \ @
+ | |_) |@
+ |  _ < @
+ |_| \_\@
+        @@
+0x0155  LATIN SMALL LETTER R WITH ACUTE
+     __@
+  _ /_/@
+ | '__|@
+ | |   @
+ |_|   @
+       @@
+0x0156  LATIN CAPITAL LETTER R WITH CEDILLA
+  ____  @
+ |  _ \ @
+ | |_) |@
+ |  _ < @
+ |_| \_\@
+ )_)    @@
+0x0157  LATIN SMALL LETTER R WITH CEDILLA
+       @
+  _ __ @
+ | '__|@
+ | |   @
+ |_|   @
+   )_) @@
+0x0158  LATIN CAPITAL LETTER R WITH CARON
+  _\_/  @
+ |  _ \ @
+ | |_) |@
+ |  _ < @
+ |_| \_\@
+        @@
+0x0159  LATIN SMALL LETTER R WITH CARON
+  \\// @
+  _\/_ @
+ | '__|@
+ | |   @
+ |_|   @
+       @@
+0x015A  LATIN CAPITAL LETTER S WITH ACUTE
+  _/_/  @
+ / ___| @
+ \___ \ @
+  ___) |@
+ |____/ @
+        @@
+0x015B  LATIN SMALL LETTER S WITH ACUTE
+    __@
+  _/_/@
+ / __|@
+ \__ \@
+ |___/@
+      @@
+0x015C  LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+  _/\_  @
+ / ___| @
+ \___ \ @
+  ___) |@
+ |____/ @
+        @@
+0x015D  LATIN SMALL LETTER S WITH CIRCUMFLEX
+      @
+  /_\_@
+ / __|@
+ \__ \@
+ |___/@
+      @@
+0x015E  LATIN CAPITAL LETTER S WITH CEDILLA
+  ____  @
+ / ___| @
+ \___ \ @
+  ___) |@
+ |____/ @
+    )__)@@
+0x015F  LATIN SMALL LETTER S WITH CEDILLA
+      @
+  ___ @
+ / __|@
+ \__ \@
+ |___/@
+   )_)@@
+0x0160  LATIN CAPITAL LETTER S WITH CARON
+  _\_/  @
+ / ___| @
+ \___ \ @
+  ___) |@
+ |____/ @
+        @@
+0x0161  LATIN SMALL LETTER S WITH CARON
+  \\//@
+  _\/ @
+ / __|@
+ \__ \@
+ |___/@
+      @@
+0x0162  LATIN CAPITAL LETTER T WITH CEDILLA
+  _____ @
+ |_   _|@
+   | |  @
+   | |  @
+   |_|  @
+    )__)@@
+0x0163  LATIN SMALL LETTER T WITH CEDILLA
+  _   @
+ | |_ @
+ | __|@
+ | |_ @
+  \__|@
+   )_)@@
+0x0164  LATIN CAPITAL LETTER T WITH CARON
+  _____ @
+ |_   _|@
+   | |  @
+   | |  @
+   |_|  @
+        @@
+0x0165  LATIN SMALL LETTER T WITH CARON
+  \/  @
+ | |_ @
+ | __|@
+ | |_ @
+  \__|@
+      @@
+0x0166  LATIN CAPITAL LETTER T WITH STROKE
+  _____ @
+ |_   _|@
+   | |  @
+  -|-|- @
+   |_|  @
+        @@
+0x0167  LATIN SMALL LETTER T WITH STROKE
+  _   @
+ | |_ @
+ | __|@
+ |-|_ @
+  \__|@
+      @@
+0x0168  LATIN CAPITAL LETTER U WITH TILDE
+        @
+  _/\/_ @
+ | | | |@
+ | |_| |@
+  \___/ @
+        @@
+0x0169  LATIN SMALL LETTER U WITH TILDE
+        @
+  _/\/_ @
+ | | | |@
+ | |_| |@
+  \__,_|@
+        @@
+0x016A  LATIN CAPITAL LETTER U WITH MACRON
+   ____ @
+  /__ _/@
+ | | | |@
+ | |_| |@
+  \___/ @
+        @@
+0x016B  LATIN SMALL LETTER U WITH MACRON
+   ____ @
+  / _  /@
+ | | | |@
+ | |_| |@
+  \__,_|@
+        @@
+0x016C  LATIN CAPITAL LETTER U WITH BREVE
+        @
+   \_/_ @
+ | | | |@
+ | |_| |@
+  \____|@
+        @@
+0x016D  LATIN SMALL LETTER U WITH BREVE
+        @
+   \_/_ @
+ | | | |@
+ | |_| |@
+  \__,_|@
+        @@
+0x016E  LATIN CAPITAL LETTER U WITH RING ABOVE
+    O   @
+  __  _ @
+ | | | |@
+ | |_| |@
+  \___/ @
+        @@
+0x016F  LATIN SMALL LETTER U WITH RING ABOVE
+    O   @
+  __ __ @
+ | | | |@
+ | |_| |@
+  \__,_|@
+        @@
+0x0170  LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+   -- --@
+  /_//_/@
+ | | | |@
+ | |_| |@
+  \___/ @
+        @@
+0x0171  LATIN SMALL LETTER U WITH DOUBLE ACUTE
+    ____@
+  _/_/_/@
+ | | | |@
+ | |_| |@
+  \__,_|@
+        @@
+0x0172  LATIN CAPITAL LETTER U WITH OGONEK
+  _   _ @
+ | | | |@
+ | | | |@
+ | |_| |@
+  \___/ @
+    (__(@@
+0x0173  LATIN SMALL LETTER U WITH OGONEK
+        @
+  _   _ @
+ | | | |@
+ | |_| |@
+  \__,_|@
+     (_(@@
+0x0174  LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+ __    /\  __@
+ \ \  //\\/ /@
+  \ \ /\ / / @
+   \ V  V /  @
+    \_/\_/   @
+             @@
+0x0175  LATIN SMALL LETTER W WITH CIRCUMFLEX
+      /\   @
+ __  //\\__@
+ \ \ /\ / /@
+  \ V  V / @
+   \_/\_/  @
+           @@
+0x0176  LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+    /\  @
+ __//\\ @
+ \ \ / /@
+  \ V / @
+   |_|  @
+        @@
+0x0177  LATIN SMALL LETTER Y WITH CIRCUMFLEX
+    /\  @
+   //\\ @
+ | | | |@
+ | |_| |@
+  \__, |@
+  |___/ @@
+0x0178  LATIN CAPITAL LETTER Y WITH DIAERESIS
+  []  []@
+ __    _@
+ \ \ / /@
+  \ V / @
+   |_|  @
+        @@
+0x0179  LATIN CAPITAL LETTER Z WITH ACUTE
+  __/_/@
+ |__  /@
+   / / @
+  / /_ @
+ /____|@
+       @@
+0x017A  LATIN SMALL LETTER Z WITH ACUTE
+    _ @
+  _/_/@
+ |_  /@
+  / / @
+ /___|@
+      @@
+0x017B  LATIN CAPITAL LETTER Z WITH DOT ABOVE
+  __[]_@
+ |__  /@
+   / / @
+  / /_ @
+ /____|@
+       @@
+0x017C  LATIN SMALL LETTER Z WITH DOT ABOVE
+   [] @
+  ____@
+ |_  /@
+  / / @
+ /___|@
+      @@
+0x017D  LATIN CAPITAL LETTER Z WITH CARON
+  _\_/_@
+ |__  /@
+   / / @
+  / /_ @
+ /____|@
+       @@
+0x017E  LATIN SMALL LETTER Z WITH CARON
+  \\//@
+  _\/_@
+ |_  /@
+  / / @
+ /___|@
+      @@
+0x017F  LATIN SMALL LETTER LONG S
+     __ @
+    / _|@
+ |-| |  @
+ |-| |  @
+   |_|  @
+        @@
+0x02C7  CARON
+ \\//@
+  \/ @
+    $@
+    $@
+    $@
+    $@@
+0x02D8  BREVE
+ \\_//@
+  \_/ @
+     $@
+     $@
+     $@
+     $@@
+0x02D9  DOT ABOVE
+ []@
+  $@
+  $@
+  $@
+  $@
+  $@@
+0x02DB  OGONEK
+    $@
+    $@
+    $@
+    $@
+    $@
+ )_) @@
+0x02DD  DOUBLE ACUTE ACCENT
+  _ _ @
+ /_/_/@
+     $@
+     $@
+     $@
+     $@@
+0xCA0  KANNADA LETTER TTHA
+   _____)@
+  /_ ___/@
+  / _ \  @
+ | (_) | @
+ $\___/$ @
+         @@
diff --git a/externals/figlet/fonts/term.flf b/externals/figlet/fonts/term.flf
new file mode 100644
index 0000000000000000000000000000000000000000..e27d01eeecae7b17f24d04f8474454fcb8770581
GIT binary patch
literal 9697
zc$|%y`JW?I5x{@1zv3w>9y`NKGD#+iSUpKkrgt-)(B0W()-#*w*@>I!j5!w83-9~B
z?*jzo5CjAi5Ks{iQ7%D{LzGiQxdcHjUnP~De(Coze&+MpnyLQ2*L8Kh>fW{1TB?4c
zn3X>%F(pM>%*dbATnd7)v(b#|EwS&AD7C^U5{32p=4RMxiMgZlX>g)OtG^m{MPt3*
zsW*CIrz>Vt^HZrz2JC3P9yP*MvDWU0a=q7#rcyi7JLYJwo$YnGRr~mQB#v&7z(%9l
znr?UY9|Hq)YeUfudtK4(Z*I0bJ-J&uY8?{IHF2ojm)9DdFpT6KqMlf7hh11}?r()X
z(Ft2&y&H<uwDf37xb1`C#y+{%Y(AfbDmm5dHrtVCcEx(w38h8*n+N4ay|&nBuQt~X
ziQc-rM*Hp%^{!~Oqx~d%>mdw)X4pBhE28>FNPBFy>WzVEqAnWkjg3&6(`rWHG(fT4
z-`5JK8tY->fJEe-s`Y+LEc81)i67l<xB5M435NAfZ(XiAFdc=xV`LDI%4esAuvS;)
zDtTKGg~!9DjLAkg2+HAj$Q>7*5;<LuR_WJ0%}6e+MXlz6P}F6n+H!e^u8=$39YfdJ
zQ3z5rqh1&dZqXK-o%U+K5sG%dx7qKB@B|tE)}g`8yX5H5f4PLN_M=wV?GF5ndYyJl
zM!q$OMZX)a%KHZtSDAUK>y36EuJ^5Fdvp&fjqXOjyS_sl2s@FGf37uq(;x(#i0~4G
zmm(a2@G^v#BfJ9PNQ74+yb9sf2(LldfiQ(Ijc^pg48klz3L%X!hmb+YBIFR}5%LJH
zMR*;;(Fm_cI0oSj2zUfo2nz@Wgd&2Cu!vAXSVC|Rb|UOTC?hN*xCj-5D#Eb{9)gb$
zAk+|cBkVyq4q*jhFTxuU-h}XGgts8P72$0Nb%cEg4TM#M5Md2rKf*df6XER$2M}5a
z8we3X8(|aS9S9wSE<z8Xk8lv-c!U!W4k5e~;av#tMtBdxdl9ZcxCP-3gnJR5LU<10
zFVg+gJiL!Y9^NlSdIml~VirC~A_X5Jk%kYGn1hdy$iPQQWZ`2Za`15y^Y950dHAFh
zb2IQM60`7W5-Io$i8Oqc#2kE%L<T-jA`4$2k%KRin1?Ts$itVV$jrc3NX)`lNu=Ow
zB+~G85_9kk5*hd=i7b4JL=L`9VjjLjA`jn{B0D35TbWw$Y-^YBt5(5=?~!^|2*=%R
zdx2dP_Hl)>wQL1W#TCnzw+p^cL`sN)?FPbkN-ms4nzRtrO3f_}RVR~bPC_-$v)#hV
zQ2PVYW`tO=-J#+XQe=f#@G85cZo%^4R8r-H@a@9jo&)ZOq?{L`=vcOA`;HGkB28Z2
zpi*7&oYE4Ta+*}<q*sgfvg10gEh=8oajmlSr|1-{pyI*lgh&s|_F^zqtvGJrxFu1n
z)E3INu-uaT_t;t`h<SVltw>R*_%3IXLOSeM76Y-gQeCoL_%Z3E$DUns{6JdCkvNO=
z(&uHX;8k2WoBos@7wwW~+e73hq?0aJ%Qb&W+FkR9`g2Gxz4mKW+w%*aQw>D0rvm4a
zK0l^klH0*~^2)q)-zwAs=}dug1V1IEba>g377TYjpH$MLs#BJ_JwxRMq)Zc6EXp7h
zD*;?cDoUeWbjoE5enx+1)H_#P8-7muEIH{HYGr-gFCs>IImp)k7x;^5i44H*TDfF-
zV$rjPH6d>)QA^gR2bU0&*E362c@cggf&5Go7({HejSrU+7BBo`Yqq~-%4Kv}MyxE&
zb49_bI)U`AYzK0&u*4oGSP~`A+HJ$-M5ZT`gZ#iRiJY5E796ioTV5>N$HA`%&rHSx
zr(Cq**F<I~lUt9{6-4JI(;lVDTBu0>ena@Y3Af=&x}G;&FR)i!PgltUW@g5~+VQAf
zP2}ukav0U$5^2hmorvl+gqzZ3kH_kFM4M9P#0|cdNK>|)xWT_C(v&SHVelUaH>JxN
zH~2cDP1&-8CAgjdQ@Y%ERox)TSyQqqao=ww(v+-9-1nP^G$pH&@coa3o03(D8+$X6
zrbJc7qjU?=)TC?Wz^Rt0V;w$w{zTVI>EWIHfDSOYl~7Y^YVio&Mx-e%wRnX7Or$A4
zwM2w&mw3vQq}sUOcMxq#)JoipJBc(UDp;y`F5E@P;pF(sR{1dCFIiqy_%u|dQgd2F
z>7jQMmzl&3t@<l**-2b1G=C#FHwhk=&OOA<PvW)$crUT}No=fh-Y4Poj2^b(e!4oV
zy*k!4A0RTNC6%7}AaVMHC>`_f#Obq=?3WJ_tWQm%TmFMseR`B$`7m+%%qX4mpTy}i
zlkAiKB3PfAM3;O-vUB>(P>+0+F6&dHbjZhu(<eshkB<|lPmIzXpCC@3m}GDKH^KVE
zD4p?1;`B*L^u?!$&C%Sw+wl)~#Q%_1p9ZxbK24xL1xh!3MsgW__?2GxU*hz6NOr<!
z3Dzeg(FdO+R-X{13qDVrJ|V*%_yPg?B&>|z^hNoOeZtJFasJ^3!Y>Y&Gp%=DW$$Ko
zn|W2f_w61Givw8izJlJv=r%KJr6h;%!HeR6p4i8kJ%?G-Ia`Ql;Yx<}9YaCyXVi4m
z77}GM+FW0@Nq%$(Yw{iB+tk+lJXo+W=>}W)eT)~j@xY?QU(IlFqVWUtK}K!EzQs6v
z9m9*-eHHYPA!-~Hi%N&Mo@sqmtL&r9ZZq5SGjKZ76VE?pFJjhIefD@#uH^;#3QXV+
zGj5#2m1p4^ru7x5vJWw9sy;iOnvvD|%2Uvh#ipt&C7y#@d4<08lKj)mo9eF=Z#-u(
ztgk->y?BTkXW-I!a&G1Y`VvgwPcm+*!jY#utFh&Vxp)j7*>38uONl6+$}99eHpySW
zys6TclqZfmxM65kS?=H|Q;j?E8RQg(Cyr-B^n6B5749fcGB>J}zQk3QJ5|b5fsXQ|
zUB$G%1XcEdA)7YUpfg@nr||+q8>|Fn+xLY--`NJ7sX%rn5`HGH&=*LOzl3>Hf$UN%
z_9n*l6*2}t!LWXG+~ryHC3!%Y-gnFKvz-spw58onLHQ6(FHGKdWGFvX>B6L)M=(E9
z>Ebqf5Be$>e%hY6^8n?-pEJFlmzBrwWTy24ugadstm#9F8xP$L4C|*}1$~TB(^oH7
z4cusF{kzB*Jlfmzb;XT`?nZ|7g{Gj7Gip3Q-4cC49x#S;QxcakVLC1=O5+)sr#~uH
zmhH=I^WAOq6@8EgKG6(sO1c$%sAWuj#fztz-$V?rISR@zA{kRR@zf-95oh$>WDMpi
z&X^7yFP>(ePBQufM?rZo$(Sm_k2}bnBBL)21?4`GG1Z8l=*4&O3Vod<`4^Zs9caE9
zK%S5@`V(yo<`Fq-szW~>LO#y2`T|r?KGCwqPm8J<9FnYloEn2U9$8aW2XRAqP|ND8
zT0wbC%bKb>P`WLjz*&7!t1O?s*=@cI4=1BL8J_roWr#k{sHvuFO3xVuSzpvDJBqQX
zs%!Dtd}Oh{pcQmvv8k48iLa}-@d|x8C;4ZFd~Ums<?%jwJFl7e4N6(@EUz%tcTE`_
z*@v9Iyj6B&ziC$58*e^bggO1Jq@Y}bIn%7PcYJs~n-}P(r3B7rWzIA&?TtTbXECgw
xmlX8U0h%hv=WM9BaHuHG3$Ce?SRo^}WzLJNl<sn1&t*+fD5)I%ce<Pg{s+Jk`q=;g

literal 0
Hc$@<O00001

diff --git a/externals/figlet/fonts/upper.flc b/externals/figlet/fonts/upper.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/upper.flc
@@ -0,0 +1,193 @@
+flc2a
+# Upper by Glenn Chappell <ggc@uiuc.edu> 1/94
+# Converts lower-case to upper-case.
+# Modified to support all of Unicode by John Cowan <cowan@ccil.org> 10/96
+# figlet release 2.2 -- November 1996
+#
+# This is a figlet controlfile.
+#
+# Explanation of first line:
+#   flc2 - "magic number" for file identification
+#   a    - should always be `a', for now
+#
+# File body:
+#   The first character of any line is the "command" for that line.
+#   Possible figlet 2.1 commands are as follows:
+#   `#' - comment, continues until end-of-line
+#   `t' - translate, a not-so-fancy version of the Unix "tr" command
+#   `f' - freeze, treat further lines as if they were in a new file
+#
+# The following lines convert lower-case to upper-case.
+#
+# Standard letters:
+t a-z A-Z
+#
+# figlet Deutsch characters (obsolete in 2.2 and later):
+t \-252-\-250 \-255-\-253
+#
+# ISO Latin-1 accented letters:
+t \224-\246 \192-\214
+t \248-\254 \216-\222
+# Note: Latin-1 has no upper-case Y umlaut, so map to "Y".
+# But remove the following line for Unicode fonts.
+t \255 Y
+# This is the proper Unicode mapping, and does no harm for non-Unicode fonts.
+t \255 \0x0178
+# Latin Extended A (Latin-2,3,4,5) accented letters:
+t \0x01\0x01 \0x0100
+t \0x0103 \0x0102
+t \0x0105 \0x0104
+t \0x0107 \0x0106
+t \0x0109 \0x0108
+t \0x010B \0x010A
+t \0x010D \0x010C
+t \0x010F \0x010E
+t \0x01\0x01 \0x0100
+t \0x0103 \0x0102
+t \0x0105 \0x0104
+t \0x0117 \0x0116
+t \0x0119 \0x0118
+t \0x011B \0x011A
+t \0x011D \0x011C
+t \0x011F \0x011E
+t \0x01\0x01 \0x0100
+t \0x0103 \0x0102
+t \0x0105 \0x0104
+t \0x0127 \0x0126
+t \0x0129 \0x0128
+t \0x012B \0x012A
+t \0x012D \0x012C
+t \0x012F \0x012E
+t \0x0131 I
+t \0x0133 \0x0132
+t \0x0135 \0x0134
+t \0x0137 \0x0136
+t \0x0138 K
+t \0x013A \0x0139
+t \0x013C \0x013B
+t \0x013E \0x013D
+t \0x0140 \0x013F
+t \0x0142 \0x0141
+t \0x0144 \0x0143
+t \0x0146 \0x0145
+t \0x0148 \0x0147
+t \0x0149 N
+t \0x014B \0x014A
+t \0x014D \0x014C
+t \0x014F \0x014E
+t \0x0151 \0x0150
+t \0x0153 \0x0152
+t \0x0155 \0x0154
+t \0x0157 \0x0156
+t \0x0159 \0x0158
+t \0x015B \0x015A
+t \0x015D \0x015C
+t \0x015F \0x015E
+t \0x0161 \0x0160
+t \0x0163 \0x0162
+t \0x0165 \0x0164
+t \0x0167 \0x0166
+t \0x0169 \0x0168
+t \0x016B \0x016A
+t \0x016D \0x016C
+t \0x016F \0x016E
+t \0x0171 \0x0170
+t \0x0173 \0x0172
+t \0x0175 \0x0174
+t \0x0177 \0x0176
+t \0x017A \0x0179
+t \0x017C \0x017B
+t \0x017E \0x017D
+t \0x017F S
+# Greek letters:
+\0x037A \0x0399
+\0x0390 \0x0399
+\0x03AC \0x0386
+\0x03AD \0x0388
+\0x03AE \0x0389
+\0x03AF \0x038A
+\0x03B0 \0x03AB
+\0x03B1-\0x03C1 \0x0391-\0x03A1
+\0x03C2 \0x03A3
+\0x03C3-\0x03CB \0x03A3-\0x03AB
+\0x03CC \0x038C
+\0x03CD \0x038E
+\0x03CE \0x038F
+\0x03E3 \0x03E2
+\0x03E5 \0x03E4
+\0x03E7 \0x03E6
+\0x03E9 \0x03E8
+\0x03EB \0x03EA
+\0x03ED \0x03EC
+\0x03EF \0x03ED
+# Cyrillic letters:
+\0x0430-\0x044F \0x0410-\0x042F
+\0x0451-\0x045F \0x0401-\0x040F
+\0x0461 \0x0460
+\0x0463 \0x0461
+\0x0465 \0x0464
+\0x0467 \0x0466
+\0x0469 \0x0468
+\0x046B \0x046A
+\0x046D \0x046C
+\0x046F \0x046E
+\0x0471 \0x0470
+\0x0473 \0x0471
+\0x0475 \0x0474
+\0x0477 \0x0476
+\0x0479 \0x0478
+\0x047B \0x047A
+\0x047D \0x047C
+\0x047F \0x047E
+\0x0481 \0x0480
+\0x0491 \0x0490
+\0x0493 \0x0491
+\0x0495 \0x0494
+\0x0497 \0x0496
+\0x0499 \0x0498
+\0x049B \0x049A
+\0x049D \0x049C
+\0x049F \0x049E
+\0x04A1 \0x04A0
+\0x04A3 \0x04A1
+\0x04A5 \0x04A4
+\0x04A7 \0x04A6
+\0x04A9 \0x04A8
+\0x04AB \0x04AA
+\0x04AD \0x04AC
+\0x04AF \0x04AE
+\0x04B1 \0x04B0
+\0x04B3 \0x04B1
+\0x04B5 \0x04B4
+\0x04B7 \0x04B6
+\0x04B9 \0x04B8
+\0x04BB \0x04BA
+\0x04BD \0x04BC
+\0x04BF \0x04BE
+\0x04C2 \0x04C1
+\0x04C4 \0x04C3
+\0x04C8 \0x04C7
+\0x04CC \0x04CB
+\0x04D1 \0x04D0
+\0x04D3 \0x04D2
+\0x04D5 \0x04D4
+\0x04D7 \0x04D6
+\0x04D9 \0x04D8
+\0x04DB \0x04DA
+\0x04DD \0x04DC
+\0x04DF \0x04DE
+\0x04E1 \0x04E0
+\0x04E3 \0x04E2
+\0x04E5 \0x04E4
+\0x04E7 \0x04E6
+\0x04E9 \0x04E8
+\0x04EB \0x04EA
+\0x04ED \0x04EC
+\0x04EF \0x04EE
+\0x04F1 \0x04F0
+\0x04F3 \0x04F2
+\0x04F5 \0x04F4
+\0x04F7 \0x04F6
+\0x04F9 \0x04F8
+# Armenian letters:
+\0x0561-\0x0586 \0x0531-\0x0556
diff --git a/externals/figlet/fonts/ushebrew.flc b/externals/figlet/fonts/ushebrew.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/ushebrew.flc
@@ -0,0 +1,33 @@
+flc2a
+# implements a natural mapping from the U.S. keyboard
+# to Hebrew characters in the Ivrit font.
+# Note that capital letters remain unchanged.
+
+t a \0x05d0
+t b \0x05d1
+t g \0x05d2
+t d \0x05d3
+t h \0x05d4
+t v \0x05d5
+t z \0x05d6
+t c \0x05d7
+t t \0x05d8
+t y \0x05d9
+t k \0x05db
+t f \0x05da
+t l \0x05dc
+t m \0x05de
+t o \0x05dd
+t n \0x05e0
+t i \0x05df
+t e \0x05e1
+t _ \0x05e2
+t p \0x05e4
+t u \0x05e3
+t j \0x05e6
+t w \0x05e5
+t q \0x05e7
+t r \0x05e8
+t s \0x05e9
+t x \0x05ea
+t ~ \-3
diff --git a/externals/figlet/fonts/uskata.flc b/externals/figlet/fonts/uskata.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/uskata.flc
@@ -0,0 +1,53 @@
+flc2a
+# Maps the upper and lower case alphabet (A-Z and a-v) into the
+# 48 basic katakana Unicodes.  Can be used with any Unicode katakana
+# font, such as Banner.
+t A \0x30A2
+t B \0x30A4
+t C \0x30A6
+t D \0x30A8
+t E \0x30AA
+t F \0x30AB
+t G \0x30AD
+t H \0x30AF
+t I \0x30B1
+t J \0x30B3
+t K \0x30B5
+t L \0x30B7
+t M \0x30B9
+t N \0x30BB
+t O \0x30BD
+t P \0x30BF
+t Q \0x30C1
+t R \0x30C4
+t S \0x30C6
+t T \0x30C8
+t U \0x30CA
+t V \0x30CB
+t W \0x30CC
+t X \0x30CD
+t Y \0x30CE
+t Z \0x30CF
+t a \0x30D2
+t b \0x30D5
+t c \0x30D8
+t d \0x30DB
+t e \0x30DE
+t f \0x30DF
+t g \0x30E0
+t h \0x30E1
+t i \0x30E2
+t j \0x30E4
+t k \0x30E6
+t l \0x30E8
+t m \0x30F1
+t n \0x30E9
+t o \0x30EA
+t p \0x30EB
+t q \0x30EC
+t r \0x30ED
+t s \0x30EF
+t t \0x30F0
+t u \0x30F2
+t v \0x30F3
+t ~ \-4
diff --git a/externals/figlet/fonts/utf8.flc b/externals/figlet/fonts/utf8.flc
new file mode 100644
--- /dev/null
+++ b/externals/figlet/fonts/utf8.flc
@@ -0,0 +1,4 @@
+flc2a
+# Set UTF-8 input mode (an 8-bit encoding of Unicode that preserves ASCII)
+# Meaningful only to FIGlet 2.2 beta 4 or better
+u
diff --git a/externals/figlet/getopt.c b/externals/figlet/getopt.c
new file mode 100644
--- /dev/null
+++ b/externals/figlet/getopt.c
@@ -0,0 +1,104 @@
+/*
+ * *    @(#)getopt.c    2.3 (smail) 5/30/87 
+ */
+
+/*
+ * Here's something you've all been waiting for:  the AT&T public domain
+ * source for getopt(3).  It is the code which was given out at the 1985
+ * UNIFORUM conference in Dallas. I obtained it by electronic mail directly
+ * from AT&T.  The people there assure me that it is indeed in the public
+ * domain. 
+ *
+ * There is no manual page. That is because the one they gave out at UNIFORUM
+ * was slightly different from the current System V Release 2 manual page. 
+ * The difference apparently involved a note about the famous rules 5 and 6,
+ * recommending using white space between an option and its first argument,
+ * and not grouping options that have arguments. Getopt itself is currently
+ * lenient about both of these things White space is allowed, but not
+ * mandatory, and the last option in a group can have an argument.  That
+ * particular version of the man page evidently has no official existence,
+ * and my source at AT&T did not send a copy. The current SVR2 man page
+ * reflects the actual behavior of this getopt. However, I am not about to
+ * post a copy of anything licensed by AT&T. 
+ */
+
+#ifdef BSD
+ #include <strings.h>
+#else
+ #define index strchr
+ #include <string.h>
+#endif
+
+/* LINTLIBRARY */
+#ifndef NULL
+#define NULL    0
+#endif
+
+#define EOF    (-1)
+#define ERR(s, c)    if(opterr){\
+    extern int write(int, void *, unsigned);\
+    char errbuf[2];\
+    errbuf[0] = (char)c; errbuf[1] = '\n';\
+    (void) write(2, strlwr(argv[0]), (unsigned)strlen(argv[0]));\
+    (void) write(2, s, (unsigned)strlen(s));\
+    (void) write(2, errbuf, 2);}
+
+extern char    *index();
+
+int             opterr = 1;
+int             optind = 1;
+int             optopt;
+char           *optarg;
+
+int getopt(int argc, char *argv[], char *opts)
+{
+      static int      sp = 1;
+      register int    c;
+      register char  *cp;
+
+      if (sp == 1)
+      {
+            if (optind >= argc || argv[optind][0] != '-' ||
+                  argv[optind][1] == '\0')
+                        return (EOF);
+            else if (strcmp(argv[optind], "--") == 0)
+            {
+                  optind++;
+                  return (EOF);
+            }
+      }
+      optopt = c = argv[optind][sp];
+      if (c == ':' || (cp = index(opts, c)) == NULL)
+      {
+            ERR(": illegal option -- ", c);
+            if (argv[optind][++sp] == '\0')
+            {
+                  optind++;
+                  sp = 1;
+            }
+            return ('?');
+      }
+      if (*++cp == ':')
+      {
+            if (argv[optind][sp + 1] != '\0')
+                  optarg = &argv[optind++][sp + 1];
+            else if (++optind >= argc)
+            {
+                  ERR(": option requires an argument -- ", c);
+                  sp = 1;
+                  return ('?');
+            }
+            else  optarg = argv[optind++];
+            sp = 1;
+      }
+      else
+      {
+            if (argv[optind][++sp] == '\0')
+            {
+                  sp = 1;
+                  optind++;
+            }
+            optarg = NULL;
+      }
+      return (c);
+}
diff --git a/externals/figlet/inflate.h b/externals/figlet/inflate.h
new file mode 100644
--- /dev/null
+++ b/externals/figlet/inflate.h
@@ -0,0 +1,90 @@
+/*
+ * inflate.h -  inflate decompression routine
+ *
+ * Version 1.1.2
+ */
+
+/*
+ * Copyright (C) 1995, Edward B. Hamrick
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear in
+ * supporting documentation, and that the name of the copyright holders
+ * not be used in advertising or publicity pertaining to distribution of
+ * the software without specific, written prior permission. The copyright
+ * holders makes no representations about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT
+ * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+ * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+/*
+ * Changes from 1.1 to 1.1.2:
+ * Relicensed under the MIT license, with consent of the copyright holders.
+ * Claudio Matsuoka (Jan 11 2011)
+ */
+
+/*
+ * 1) All file i/o is done externally to these routines
+ * 2) Routines are symmetrical so inflate can feed into deflate
+ * 3) Routines can be easily integrated into wide range of applications
+ * 4) Routines are very portable, and use only ANSI C
+ * 5) No #defines in inflate.h to conflict with external #defines
+ * 6) No external routines need be called by these routines
+ * 7) Buffers are owned by the calling routine
+ * 8) No static non-constant variables are allowed
+ */
+
+/*
+ * Note that for each call to InflatePutBuffer, there will be
+ * 0 or more calls to (*putbuffer_ptr).  All except the last
+ * call to (*putbuffer_ptr) will be with 32768 bytes, although
+ * this behaviour may change in the future.  Before InflatePutBuffer
+ * returns, it will have output as much uncompressed data as
+ * is possible.
+ */
+
+#ifndef __INFLATE_H
+#define __INFLATE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Routine to initialize inflate decompression */
+void *InflateInitialize(                      /* returns InflateState       */
+  void *AppState,                             /* for passing to putbuffer   */
+  int (*putbuffer_ptr)(                       /* returns 0 on success       */
+    void *AppState,                           /* opaque ptr from Initialize */
+    unsigned char *buffer,                    /* buffer to put              */
+    long length                               /* length of buffer           */
+  ),
+  void *(*malloc_ptr)(long length),           /* utility routine            */
+  void (*free_ptr)(void *buffer)              /* utility routine            */
+);
+
+/* Call-in routine to put a buffer into inflate decompression */
+int InflatePutBuffer(                         /* returns 0 on success       */
+  void *InflateState,                         /* opaque ptr from Initialize */
+  unsigned char *buffer,                      /* buffer to put              */
+  long length                                 /* length of buffer           */
+);
+
+/* Routine to terminate inflate decompression */
+int InflateTerminate(                         /* returns 0 on success       */
+  void *InflateState                          /* opaque ptr from Initialize */
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/externals/figlet/inflate.c b/externals/figlet/inflate.c
new file mode 100644
--- /dev/null
+++ b/externals/figlet/inflate.c
@@ -0,0 +1,1321 @@
+/*
+ * inflate.c -  inflate decompression routine
+ *
+ * Version 1.1.2
+ */
+
+/*
+ * Copyright (C) 1995, Edward B. Hamrick
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear in
+ * supporting documentation, and that the name of the copyright holders
+ * not be used in advertising or publicity pertaining to distribution of
+ * the software without specific, written prior permission. The copyright
+ * holders makes no representations about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT
+ * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+ * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+/*
+ * Changes from 1.1 to 1.1.2:
+ * Relicensed under the MIT license, with consent of the copyright holders.
+ * Claudio Matsuoka (Jan 11 2011)
+ */
+
+/*
+ * inflate.c is based on the public-domain (non-copyrighted) version
+ * written by Mark Adler, version c14o, 23 August 1994.  It has been 
+ * modified to be reentrant, more portable, and to be data driven.
+ */
+
+/*
+ * 1) All file i/o is done externally to these routines
+ * 2) Routines are symmetrical so inflate can feed into deflate
+ * 3) Routines can be easily integrated into wide range of applications
+ * 4) Routines are very portable, and use only ANSI C
+ * 5) No #defines in inflate.h to conflict with external #defines
+ * 6) No external routines need be called by these routines
+ * 7) Buffers are owned by the calling routine
+ * 8) No static non-constant variables are allowed
+ */
+
+/*
+ * Note that for each call to InflatePutBuffer, there will be
+ * 0 or more calls to (*putbuffer_ptr).  Before InflatePutBuffer
+ * returns, it will have output as much uncompressed data as
+ * is possible.
+ */
+
+#ifdef MEMCPY
+#include <mem.h>
+#endif
+
+#include "inflate.h"
+
+/*
+ * Macros for constants
+ */
+
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#ifndef WINDOWSIZE
+#define WINDOWSIZE 0x8000
+#endif
+
+#ifndef WINDOWMASK
+#define WINDOWMASK 0x7fff
+#endif
+
+#ifndef BUFFERSIZE
+#define BUFFERSIZE 0x4000
+#endif
+
+#ifndef BUFFERMASK
+#define BUFFERMASK 0x3fff
+#endif
+
+#ifndef INFLATESTATETYPE
+#define INFLATESTATETYPE   0xabcdabcdL
+#endif
+
+/*
+ * typedefs
+ */
+
+typedef unsigned long  ulg;
+typedef unsigned short ush;
+typedef unsigned char  uch;
+
+/* Structure to hold state for inflating zip files */
+struct InflateState {
+
+  unsigned long  runtimetypeid1;             /* to detect run-time errors  */
+  int            errorencountered;           /* error encountered flag     */
+
+  /* Decoding state */
+  int            state;                      /* -1 -> need block type      */
+                                             /*  0 -> need stored setup    */
+                                             /*  1 -> need fixed setup     */
+                                             /*  2 -> need dynamic setup   */
+                                             /* 10 -> need stored data     */
+                                             /* 11 -> need fixed data      */
+                                             /* 12 -> need dynamic data    */
+
+/* State for decoding fixed & dynamic data */
+  struct huft   *tl;                         /* literal/length decoder tbl */
+  struct huft   *td;                         /* distance decoder table     */
+  int            bl;                         /* bits decoded by tl         */
+  int            bd;                         /* bits decoded by td         */
+
+  /* State for decoding stored data */
+  unsigned int   storelength;
+
+  /* State to keep track that last block has been encountered */
+  int            lastblock;                  /* current block is last      */
+
+  /* Input buffer state (circular) */
+  ulg            bb;                         /* input buffer bits          */
+  unsigned int   bk;                         /* input buffer count of bits */
+  unsigned int   bp;                         /* input buffer pointer       */
+  unsigned int   bs;                         /* input buffer size          */
+  unsigned char  buffer[BUFFERSIZE];         /* input buffer data          */
+
+  /* Storage for try/catch */
+  ulg            catch_bb;                   /* bit buffer                 */
+  unsigned int   catch_bk;                   /* bits in bit buffer         */
+  unsigned int   catch_bp;                   /* buffer pointer             */
+  unsigned int   catch_bs;                   /* buffer size                */
+
+  /* Output window state (circular) */
+  unsigned int   wp;                         /* output window pointer      */
+  unsigned int   wf;                         /* output window flush-from   */
+  unsigned char  window[WINDOWSIZE];         /* output window data         */
+
+  /* Application state */
+  void          *AppState;                   /* opaque ptr for callout     */
+
+  /* pointers to call-outs */
+  int (*putbuffer_ptr)(                      /* returns 0 on success       */
+    void *AppState,                          /* opaque ptr from Initialize */
+    unsigned char *buffer,                   /* buffer to put              */
+    long length                              /* length of buffer           */
+  );
+
+  void *(*malloc_ptr)(long length);          /* utility routine            */
+
+  void (*free_ptr)(void *buffer);            /* utility routine            */
+
+  unsigned long  runtimetypeid2;             /* to detect run-time errors  */
+};
+
+/*
+ * Error handling macro
+ */
+
+#define ERROREXIT(is) {(is)->errorencountered = TRUE; return TRUE;}
+
+/*
+ * Macros for handling data in the input buffer
+ *
+ * Note that the NEEDBITS and DUMPBITS macros
+ * need to be bracketed by the TRY/CATCH macros
+ *
+ * The usage is:
+ *
+ *      TRY
+ *      {
+ *        NEEDBITS(j)
+ *        x = b & mask_bits[j];
+ *        DUMPBITS(j)
+ *      }
+ *      CATCH_BEGIN
+ *        cleanup code
+ *      CATCH_END
+ *
+ * Note that there can only be one TRY/CATCH pair per routine
+ * because of the use of goto in the implementation of the macros.
+ *
+ * NEEDBITS makes sure that b has at least j bits in it, and
+ * DUMPBITS removes the bits from b.  The macros use the variable k
+ * for the number of bits in b.  Normally, b and k are register
+ * variables for speed, and are initialized at the beginning of a
+ * routine that uses these macros from a global bit buffer and count.
+ *
+ * In order to not ask for more bits than there are in the compressed
+ * stream, the Huffman tables are constructed to only ask for just
+ * enough bits to make up the end-of-block code (value 256).  Then no
+ * bytes need to be "returned" to the buffer at the end of the last
+ * block.  See the huft_build() routine.
+ */
+
+#define TRY              \
+  is->catch_bb = b;      \
+  is->catch_bk = k;      \
+  is->catch_bp = is->bp; \
+  is->catch_bs = is->bs;
+
+#define CATCH_BEGIN      \
+  goto cleanup_done;     \
+  cleanup:               \
+  b      = is->catch_bb; \
+  k      = is->catch_bk; \
+  is->bb = b;            \
+  is->bk = k;            \
+  is->bp = is->catch_bp; \
+  is->bs = is->catch_bs;
+
+#define CATCH_END \
+  cleanup_done: ;
+
+#define NEEDBITS(n)                                      \
+{                                                        \
+  while (k < (n))                                        \
+  {                                                      \
+    if (is->bs <= 0)                                     \
+    {                                                    \
+      goto cleanup;                                      \
+    }                                                    \
+    b |= ((ulg) (is->buffer[is->bp & BUFFERMASK])) << k; \
+    is->bs--;                                            \
+    is->bp++;                                            \
+    k += 8;                                              \
+  }                                                      \
+}
+
+#define DUMPBITS(n) \
+{                   \
+  b >>= (n);        \
+  k -= (n);         \
+}
+
+/*
+ * Macro for flushing the output window to the putbuffer callout.
+ *
+ * Note that the window is always flushed when it fills to 32K,
+ * and before returning to the application.
+ */
+
+#define FLUSHWINDOW(w, now)                               \
+if ((now && (is->wp > is->wf)) || ((w) >= WINDOWSIZE))    \
+{                                                         \
+  is->wp = (w);                                           \
+  if ((*(is->putbuffer_ptr))                              \
+        (is->AppState, is->window+is->wf, is->wp-is->wf)) \
+    ERROREXIT(is);                                        \
+  is->wp &= WINDOWMASK;                                   \
+  is->wf  = is->wp;                                       \
+  (w) = is->wp;                                           \
+}
+
+/*
+ * Inflate deflated (PKZIP's method 8 compressed) data.  The compression
+ * method searches for as much of the current string of bytes (up to a
+ * length of 258) in the previous 32K bytes.  If it doesn't find any
+ * matches (of at least length 3), it codes the next byte.  Otherwise, it
+ * codes the length of the matched string and its distance backwards from
+ * the current position.  There is a single Huffman code that codes both
+ * single bytes (called "literals") and match lengths.  A second Huffman
+ * code codes the distance information, which follows a length code.  Each
+ * length or distance code actually represents a base value and a number
+ * of "extra" (sometimes zero) bits to get to add to the base value.  At
+ * the end of each deflated block is a special end-of-block (EOB) literal/
+ * length code.  The decoding process is basically: get a literal/length
+ * code; if EOB then done; if a literal, emit the decoded byte; if a
+ * length then get the distance and emit the referred-to bytes from the
+ * sliding window of previously emitted data.
+ *
+ * There are (currently) three kinds of inflate blocks: stored, fixed, and
+ * dynamic.  The compressor outputs a chunk of data at a time and decides
+ * which method to use on a chunk-by-chunk basis.  A chunk might typically
+ * be 32K to 64K, uncompressed.  If the chunk is uncompressible, then the
+ * "stored" method is used.  In this case, the bytes are simply stored as
+ * is, eight bits per byte, with none of the above coding.  The bytes are
+ * preceded by a count, since there is no longer an EOB code.
+ *
+ * If the data is compressible, then either the fixed or dynamic methods
+ * are used.  In the dynamic method, the compressed data is preceded by
+ * an encoding of the literal/length and distance Huffman codes that are
+ * to be used to decode this block.  The representation is itself Huffman
+ * coded, and so is preceded by a description of that code.  These code
+ * descriptions take up a little space, and so for small blocks, there is
+ * a predefined set of codes, called the fixed codes.  The fixed method is
+ * used if the block ends up smaller that way (usually for quite small
+ * chunks); otherwise the dynamic method is used.  In the latter case, the
+ * codes are customized to the probabilities in the current block and so
+ * can code it much better than the pre-determined fixed codes can.
+ *
+ * The Huffman codes themselves are decoded using a mutli-level table
+ * lookup, in order to maximize the speed of decoding plus the speed of
+ * building the decoding tables.  See the comments below that precede the
+ * lbits and dbits tuning parameters.
+ */
+
+/*
+ * Notes beyond the 1.93a appnote.txt:
+ *
+ * 1. Distance pointers never point before the beginning of the output
+ *    stream.
+ * 2. Distance pointers can point back across blocks, up to 32k away.
+ * 3. There is an implied maximum of 7 bits for the bit length table and
+ *    15 bits for the actual data.
+ * 4. If only one code exists, then it is encoded using one bit.  (Zero
+ *    would be more efficient, but perhaps a little confusing.)  If two
+ *    codes exist, they are coded using one bit each (0 and 1).
+ * 5. There is no way of sending zero distance codes--a dummy must be
+ *    sent if there are none.  (History: a pre 2.0 version of PKZIP would
+ *    store blocks with no distance codes, but this was discovered to be
+ *    too harsh a criterion.)  Valid only for 1.93a.  2.04c does allow
+ *    zero distance codes, which is sent as one code of zero bits in
+ *    length.
+ * 6. There are up to 286 literal/length codes.  Code 256 represents the
+ *    end-of-block.  Note however that the static length tree defines
+ *    288 codes just to fill out the Huffman codes.  Codes 286 and 287
+ *    cannot be used though, since there is no length base or extra bits
+ *    defined for them.  Similarly, there are up to 30 distance codes.
+ *    However, static trees define 32 codes (all 5 bits) to fill out the
+ *    Huffman codes, but the last two had better not show up in the data.
+ * 7. Unzip can check dynamic Huffman blocks for complete code sets.
+ *    The exception is that a single code would not be complete (see #4).
+ * 8. The five bits following the block type is really the number of
+ *    literal codes sent minus 257.
+ * 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits
+ *    (1+6+6).  Therefore, to output three times the length, you output
+ *    three codes (1+1+1), whereas to output four times the same length,
+ *    you only need two codes (1+3).  Hmm.
+ *10. In the tree reconstruction algorithm, Code = Code + Increment
+ *    only if BitLength(i) is not zero.  (Pretty obvious.)
+ *11. Correction: 4 Bits: # of Bit Length codes - 4     (4 - 19)
+ *12. Note: length code 284 can represent 227-258, but length code 285
+ *    really is 258.  The last length deserves its own, short code
+ *    since it gets used a lot in very redundant files.  The length
+ *    258 is special since 258 - 3 (the min match length) is 255.
+ *13. The literal/length and distance code bit lengths are read as a
+ *    single stream of lengths.  It is possible (and advantageous) for
+ *    a repeat code (16, 17, or 18) to go across the boundary between
+ *    the two sets of lengths.
+ */
+
+/*
+ * Huffman code lookup table entry--this entry is four bytes for machines
+ * that have 16-bit pointers (e.g. PC's in the small or medium model).
+ * Valid extra bits are 0..13.  e == 15 is EOB (end of block), e == 16
+ * means that v is a literal, 16 < e < 32 means that v is a pointer to
+ * the next table, which codes e - 16 bits, and lastly e == 99 indicates
+ * an unused code.  If a code with e == 99 is looked up, this implies an
+ * error in the data.
+ */
+
+struct huft {
+  uch e;                /* number of extra bits or operation */
+  uch b;                /* number of bits in this code or subcode */
+  union {
+    ush n;              /* literal, length base, or distance base */
+    struct huft *t;     /* pointer to next level of table */
+  } v;
+};
+
+/*
+ * Tables for deflate from PKZIP's appnote.txt.
+ */
+
+static const unsigned border[] = { /* Order of the bit length code lengths */
+        16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+
+static const ush cplens[] = {      /* Copy lengths for literal codes 257..285 */
+        3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
+        35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
+        /* note: see note #13 above about the 258 in this list. */
+
+static const ush cplext[] = {      /* Extra bits for literal codes 257..285 */
+        0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
+        3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99}; /* 99==invalid */
+
+static const ush cpdist[] = {      /* Copy offsets for distance codes 0..29 */
+        1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
+        257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
+        8193, 12289, 16385, 24577};
+
+static const ush cpdext[] = {      /* Extra bits for distance codes */
+        0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
+        7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
+        12, 12, 13, 13};
+
+/*
+ * Constants for run-time computation of mask
+ */
+
+static const ush mask_bits[] = {
+    0x0000,
+    0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
+    0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
+};
+
+/*
+ * Huffman code decoding is performed using a multi-level table lookup.
+ * The fastest way to decode is to simply build a lookup table whose
+ * size is determined by the longest code.  However, the time it takes
+ * to build this table can also be a factor if the data being decoded
+ * is not very long.  The most common codes are necessarily the
+ * shortest codes, so those codes dominate the decoding time, and hence
+ * the speed.  The idea is you can have a shorter table that decodes the
+ * shorter, more probable codes, and then point to subsidiary tables for
+ * the longer codes.  The time it costs to decode the longer codes is
+ * then traded against the time it takes to make longer tables.
+ *
+ * This results of this trade are in the variables lbits and dbits
+ * below.  lbits is the number of bits the first level table for literal/
+ * length codes can decode in one step, and dbits is the same thing for
+ * the distance codes.  Subsequent tables are also less than or equal to
+ * those sizes.  These values may be adjusted either when all of the
+ * codes are shorter than that, in which case the longest code length in
+ * bits is used, or when the shortest code is *longer* than the requested
+ * table size, in which case the length of the shortest code in bits is
+ * used.
+ *
+ * There are two different values for the two tables, since they code a
+ * different number of possibilities each.  The literal/length table
+ * codes 286 possible values, or in a flat code, a little over eight
+ * bits.  The distance table codes 30 possible values, or a little less
+ * than five bits, flat.  The optimum values for speed end up being
+ * about one bit more than those, so lbits is 8+1 and dbits is 5+1.
+ * The optimum values may differ though from machine to machine, and
+ * possibly even between compilers.  Your mileage may vary.
+ */
+
+static const int lbits = 9;  /* bits in base literal/length lookup table */
+static const int dbits = 6;  /* bits in base distance lookup table */
+
+/* If BMAX needs to be larger than 16, then h and x[] should be ulg. */
+#define BMAX 16         /* maximum bit length of any code (16 for explode) */
+#define N_MAX 288       /* maximum number of codes in any set */
+
+/*
+ * Free the malloc'ed tables built by huft_build(), which makes a linked
+ * list of the tables it made, with the links in a dummy first entry of
+ * each table.
+ */
+
+static int huft_free(
+  struct InflateState *is, /* Inflate state */
+  struct huft *t           /* table to free */
+)
+{
+  struct huft *p, *q;
+
+  /* Go through linked list, freeing from the malloced (t[-1]) address. */
+  p = t;
+  while (p != (struct huft *)NULL)
+  {
+    q = (--p)->v.t;
+    (*is->free_ptr)((char*)p);
+    p = q;
+  }
+  return 0;
+}
+
+/*
+ * Given a list of code lengths and a maximum table size, make a set of
+ * tables to decode that set of codes.  Return zero on success, one if
+ * the given code set is incomplete (the tables are still built in this
+ * case), two if the input is invalid (all zero length codes or an
+ * oversubscribed set of lengths), and three if not enough memory.
+ * The code with value 256 is special, and the tables are constructed
+ * so that no bits beyond that code are fetched when that code is
+ * decoded.
+ */
+
+static int huft_build(
+  struct InflateState *is, /* Inflate state */
+  unsigned *b,             /* code lengths in bits (all assumed <= BMAX) */
+  unsigned n,              /* number of codes (assumed <= N_MAX) */
+  unsigned s,              /* number of simple-valued codes (0..s-1) */
+  const ush *d,            /* list of base values for non-simple codes */
+  const ush *e,            /* list of extra bits for non-simple codes */
+  struct huft **t,         /* result: starting table */
+  int *m                   /* maximum lookup bits, returns actual */
+)
+{
+  unsigned a;                   /* counter for codes of length k */
+  unsigned c[BMAX+1];           /* bit length count table */
+  unsigned el;                  /* length of EOB code (value 256) */
+  unsigned f;                   /* i repeats in table every f entries */
+  int g;                        /* maximum code length */
+  int h;                        /* table level */
+  unsigned i;                   /* counter, current code */
+  unsigned j;                   /* counter */
+  int k;                        /* number of bits in current code */
+  int lx[BMAX+1];               /* memory for l[-1..BMAX-1] */
+  int *l = lx+1;                /* stack of bits per table */
+  unsigned *p;                  /* pointer into c[], b[], or v[] */
+  struct huft *q;               /* points to current table */
+  struct huft r;                /* table entry for structure assignment */
+  struct huft *u[BMAX];         /* table stack */
+  unsigned v[N_MAX];            /* values in order of bit length */
+  int w;                        /* bits before this table == (l * h) */
+  unsigned x[BMAX+1];           /* bit offsets, then code stack */
+  unsigned *xp;                 /* pointer into x */
+  int y;                        /* number of dummy codes added */
+  unsigned z;                   /* number of entries in current table */
+
+  /* clear the bit length count table */
+  for (i=0; i<(BMAX+1); i++)
+  {
+    c[i] = 0;
+  }
+
+  /* Generate counts for each bit length */
+  el = n > 256 ? b[256] : BMAX; /* set length of EOB code, if any */
+  p = b;  i = n;
+  do {
+    c[*p]++; p++;               /* assume all entries <= BMAX */
+  } while (--i);
+  if (c[0] == n)                /* null input--all zero length codes */
+  {
+    *t = (struct huft *)NULL;
+    *m = 0;
+    return 0;
+  }
+
+  /* Find minimum and maximum length, bound *m by those */
+  for (j = 1; j <= BMAX; j++)
+    if (c[j])
+      break;
+  k = j;                        /* minimum code length */
+  if ((unsigned)*m < j)
+    *m = j;
+  for (i = BMAX; i; i--)
+    if (c[i])
+      break;
+  g = i;                        /* maximum code length */
+  if ((unsigned)*m > i)
+    *m = i;
+
+  /* Adjust last length count to fill out codes, if needed */
+  for (y = 1 << j; j < i; j++, y <<= 1)
+    if ((y -= c[j]) < 0)
+      return 2;                 /* bad input: more codes than bits */
+  if ((y -= c[i]) < 0)
+    return 2;
+  c[i] += y;
+
+  /* Generate starting offsets into the value table for each length */
+  x[1] = j = 0;
+  p = c + 1;  xp = x + 2;
+  while (--i) {                 /* note that i == g from above */
+    *xp++ = (j += *p++);
+  }
+
+  /* Make a table of values in order of bit lengths */
+  p = b;  i = 0;
+  do {
+    if ((j = *p++) != 0)
+      v[x[j]++] = i;
+  } while (++i < n);
+
+  /* Generate the Huffman codes and for each, make the table entries */
+  x[0] = i = 0;                 /* first Huffman code is zero */
+  p = v;                        /* grab values in bit order */
+  h = -1;                       /* no tables yet--level -1 */
+  w = l[-1] = 0;                /* no bits decoded yet */
+  u[0] = (struct huft *)NULL;   /* just to keep compilers happy */
+  q = (struct huft *)NULL;      /* ditto */
+  z = 0;                        /* ditto */
+
+  /* go through the bit lengths (k already is bits in shortest code) */
+  for (; k <= g; k++)
+  {
+    a = c[k];
+    while (a--)
+    {
+      /* here i is the Huffman code of length k bits for value *p */
+      /* make tables up to required level */
+      while (k > w + l[h])
+      {
+        w += l[h++];            /* add bits already decoded */
+
+        /* compute minimum size table less than or equal to *m bits */
+        z = (z = g - w) > (unsigned)*m ? *m : z;        /* upper limit */
+        if ((f = 1 << (j = k - w)) > a + 1)     /* try a k-w bit table */
+        {                       /* too few codes for k-w bit table */
+          f -= a + 1;           /* deduct codes from patterns left */
+          xp = c + k;
+          while (++j < z)       /* try smaller tables up to z bits */
+          {
+            if ((f <<= 1) <= *++xp)
+              break;            /* enough codes to use up j bits */
+            f -= *xp;           /* else deduct codes from patterns */
+          }
+        }
+        if ((unsigned)w + j > el && (unsigned)w < el)
+          j = el - w;           /* make EOB code end at table */
+        z = 1 << j;             /* table entries for j-bit table */
+        l[h] = j;               /* set table size in stack */
+
+        /* allocate and link in new table */
+        if ((q = (struct huft *)
+                   ((*is->malloc_ptr)((z + 1)*sizeof(struct huft)))) ==
+                 (struct huft *)NULL)
+        {
+          if (h)
+            huft_free(is, u[0]);
+          return 3;             /* not enough memory */
+        }
+        *t = q + 1;             /* link to list for huft_free() */
+        *(t = &(q->v.t)) = (struct huft *)NULL;
+        u[h] = ++q;             /* table starts after link */
+
+        /* connect to last table, if there is one */
+        if (h)
+        {
+          x[h] = i;             /* save pattern for backing up */
+          r.b = (uch)l[h-1];    /* bits to dump before this table */
+          r.e = (uch)(16 + j);  /* bits in this table */
+          r.v.t = q;            /* pointer to this table */
+          j = (i & ((1 << w) - 1)) >> (w - l[h-1]);
+          u[h-1][j] = r;        /* connect to last table */
+        }
+      }
+
+      /* set up table entry in r */
+      r.b = (uch)(k - w);
+      if (p >= v + n)
+        r.e = 99;               /* out of values--invalid code */
+      else if (*p < s)
+      {
+        r.e = (uch)(*p < 256 ? 16 : 15);    /* 256 is end-of-block code */
+        r.v.n = (ush) *p++;                 /* simple code is just the value */
+      }
+      else
+      {
+        r.e = (uch)e[*p - s];   /* non-simple--look up in lists */
+        r.v.n = d[*p++ - s];
+      }
+
+      /* fill code-like entries with r */
+      f = 1 << (k - w);
+      for (j = i >> w; j < z; j += f)
+        q[j] = r;
+
+      /* backwards increment the k-bit code i */
+      for (j = 1 << (k - 1); i & j; j >>= 1)
+        i ^= j;
+      i ^= j;
+
+      /* backup over finished tables */
+      while ((i & ((1 << w) - 1)) != x[h])
+        w -= l[--h];            /* don't need to update q */
+    }
+  }
+
+  /* return actual size of base table */
+  *m = l[0];
+
+  /* Return true (1) if we were given an incomplete table */
+  return y != 0 && g != 1;
+}
+
+/*
+ * inflate (decompress) the codes in a stored (uncompressed) block.
+ * Return an error code or zero if it all goes ok.
+ */
+
+static int inflate_stored(
+  struct InflateState *is  /* Inflate state */
+)
+{
+  ulg b;                /* bit buffer */
+  unsigned k;           /* number of bits in bit buffer */
+  unsigned w;           /* current window position */
+
+  /* make local copies of state */
+  b = is->bb;           /* initialize bit buffer */
+  k = is->bk;           /* initialize bit count */
+  w = is->wp;           /* initialize window position */
+
+  /*
+   * Note that this code knows that NEEDBITS jumps to cleanup
+   */
+
+  while (is->storelength > 0)  /* do until end of block */
+  {
+    NEEDBITS(8)
+    is->window[w++] = (uch) b;
+    DUMPBITS(8)
+    FLUSHWINDOW(w, FALSE);
+    is->storelength--;
+  }
+
+  cleanup:
+
+  /* restore the state from the locals */
+  is->bb = b;              /* restore bit buffer */
+  is->bk = k;              /* restore bit count */
+  is->wp = w;              /* restore window pointer */
+
+  if (is->storelength > 0)
+    return -1;
+  else
+    return 0;
+}
+
+static int inflate_codes(
+  struct InflateState *is, /* Inflate state */
+  struct huft *tl,         /* literal/length decoder table */
+  struct huft *td,         /* distance decoder table */
+  int bl,                  /* number of bits decoded by tl[] */
+  int bd                   /* number of bits decoded by td[] */
+)
+{
+  unsigned e;           /* table entry flag/number of extra bits */
+  unsigned n, d;        /* length and index for copy */
+  unsigned w;           /* current window position */
+  struct huft *t;       /* pointer to table entry */
+  unsigned ml, md;      /* masks for bl and bd bits */
+  ulg b;                /* bit buffer */
+  unsigned k;           /* number of bits in bit buffer */
+
+  /* make local copies of state */
+  b = is->bb;           /* initialize bit buffer */
+  k = is->bk;           /* initialize bit count */
+  w = is->wp;           /* initialize window position */
+
+  /* inflate the coded data */
+  ml = mask_bits[bl];           /* precompute masks for speed */
+  md = mask_bits[bd];
+  for (;;)                      /* do until end of block */
+  {
+    TRY
+    {
+      NEEDBITS((unsigned)bl)
+      if ((e = (t = tl + ((unsigned)b & ml))->e) > 16)
+        do {
+          if (e == 99)
+            return 1;
+          DUMPBITS(t->b)
+          e -= 16;
+          NEEDBITS(e)
+        } while ((e = (t = t->v.t + ((unsigned)b & mask_bits[e]))->e) > 16);
+      DUMPBITS(t->b)
+
+      if (e == 16)                /* it's a literal */
+      {
+        is->window[w++] = (uch)t->v.n;
+        FLUSHWINDOW(w, FALSE);
+      }
+      else if (e == 15)           /* it's an EOB */
+      {
+        break;
+      }
+      else                        /* it's a length */
+      {
+        /* get length of block to copy */
+        NEEDBITS(e)
+        n = t->v.n + ((unsigned)b & mask_bits[e]);
+        DUMPBITS(e);
+
+        /* decode distance of block to copy */
+        NEEDBITS((unsigned)bd)
+        if ((e = (t = td + ((unsigned)b & md))->e) > 16)
+          do {
+            if (e == 99)
+              return 1;
+            DUMPBITS(t->b)
+            e -= 16;
+            NEEDBITS(e)
+          } while ((e = (t = t->v.t + ((unsigned)b & mask_bits[e]))->e) > 16);
+        DUMPBITS(t->b)
+        NEEDBITS(e)
+        d = w - t->v.n - ((unsigned)b & mask_bits[e]);
+        DUMPBITS(e)
+
+        /* do the copy */
+        do {
+          n -= (e = ((e = WINDOWSIZE - ((d &= WINDOWMASK) > w ? d : w)) > n)
+                    ? n : e
+               );
+#if defined(MEMCPY)
+          if (w - d >= e)         /* (this test assumes unsigned comparison) */
+          {
+            memcpy(is->window + w, is->window + d, e);
+            w += e;
+            d += e;
+          }
+          else                      /* do it slow to avoid memcpy() overlap */
+#endif /* MEMCPY */
+            do {
+              is->window[w++] = is->window[d++];
+            } while (--e);
+          FLUSHWINDOW(w, FALSE);
+        } while (n);
+      }
+    }
+    CATCH_BEGIN
+      is->wp = w;          /* restore window pointer */
+      return -1;
+    CATCH_END
+  }
+
+  /* restore the state from the locals */
+  is->bb = b;              /* restore bit buffer */
+  is->bk = k;              /* restore bit count */
+  is->wp = w;              /* restore window pointer */
+
+  /* done */
+  return 0;
+}
+
+/*
+ * "decompress" an inflated type 0 (stored) block.
+ */
+
+static int inflate_stored_setup(
+  struct InflateState *is  /* Inflate state */
+)
+{
+  unsigned n;           /* number of bytes in block */
+  ulg b;                /* bit buffer */
+  unsigned k;           /* number of bits in bit buffer */
+
+  /* make local copies of state */
+  b = is->bb;           /* initialize bit buffer */
+  k = is->bk;           /* initialize bit count */
+
+  TRY
+  {
+    /* go to byte boundary */
+    n = k & 7;
+    DUMPBITS(n);
+
+    /* get the length and its complement */
+    NEEDBITS(16)
+    n = ((unsigned)b & 0xffff);
+    DUMPBITS(16)
+    NEEDBITS(16)
+    if (n != (unsigned)((~b) & 0xffff))
+      return 1;                   /* error in compressed data */
+    DUMPBITS(16)
+  }
+  CATCH_BEGIN
+    return -1;
+  CATCH_END
+
+  /* Save store state for this block */
+  is->storelength = n;
+
+  /* restore the state from the locals */
+  is->bb = b;              /* restore bit buffer */
+  is->bk = k;              /* restore bit count */
+  
+  return 0;
+}
+
+/*
+ * decompress an inflated type 1 (fixed Huffman codes) block.  We should
+ * either replace this with a custom decoder, or at least precompute the
+ * Huffman tables.
+ */
+
+static int inflate_fixed_setup(
+  struct InflateState *is  /* Inflate state */
+)
+{
+  int i;                /* temporary variable */
+  struct huft *tl;      /* literal/length code table */
+  struct huft *td;      /* distance code table */
+  int bl;               /* lookup bits for tl */
+  int bd;               /* lookup bits for td */
+  unsigned l[288];      /* length list for huft_build */
+
+  /* set up literal table */
+  for (i = 0; i < 144; i++)
+    l[i] = 8;
+  for (; i < 256; i++)
+    l[i] = 9;
+  for (; i < 280; i++)
+    l[i] = 7;
+  for (; i < 288; i++)          /* make a complete, but wrong code set */
+    l[i] = 8;
+  bl = 7;
+  if ((i = huft_build(is, l, 288, 257, cplens, cplext, &tl, &bl)) != 0)
+    return i;
+
+  /* set up distance table */
+  for (i = 0; i < 30; i++)      /* make an incomplete code set */
+    l[i] = 5;
+  bd = 5;
+  if ((i = huft_build(is, l, 30, 0, cpdist, cpdext, &td, &bd)) > 1)
+  {
+    huft_free(is, tl);
+    return i;
+  }
+
+  /* Save inflate state for this block */
+  is->tl = tl;
+  is->td = td;
+  is->bl = bl;
+  is->bd = bd;
+
+  return 0;
+}
+
+/*
+ * decompress an inflated type 2 (dynamic Huffman codes) block.
+ */
+
+#define PKZIP_BUG_WORKAROUND
+
+static int inflate_dynamic_setup(
+  struct InflateState *is  /* Inflate state */
+)
+{
+  int i;                /* temporary variables */
+  unsigned j;
+  unsigned l;           /* last length */
+  unsigned m;           /* mask for bit lengths table */
+  unsigned n;           /* number of lengths to get */
+  struct huft *tl;      /* literal/length code table */
+  struct huft *td;      /* distance code table */
+  int bl;               /* lookup bits for tl */
+  int bd;               /* lookup bits for td */
+  unsigned nb;          /* number of bit length codes */
+  unsigned nl;          /* number of literal/length codes */
+  unsigned nd;          /* number of distance codes */
+#ifdef PKZIP_BUG_WORKAROUND
+  unsigned ll[288+32];  /* literal/length and distance code lengths */
+#else
+  unsigned ll[286+30];  /* literal/length and distance code lengths */
+#endif
+  ulg b;                /* bit buffer */
+  unsigned k;           /* number of bits in bit buffer */
+
+  /* make local copies of state */
+  b = is->bb;           /* initialize bit buffer */
+  k = is->bk;           /* initialize bit count */
+
+  /* initialize tl for cleanup */
+  tl = NULL;
+
+  TRY
+  {
+    /* read in table lengths */
+    NEEDBITS(5)
+    nl = 257 + ((unsigned)b & 0x1f);      /* number of literal/length codes */
+    DUMPBITS(5)
+    NEEDBITS(5)
+    nd = 1 + ((unsigned)b & 0x1f);        /* number of distance codes */
+    DUMPBITS(5)
+    NEEDBITS(4)
+    nb = 4 + ((unsigned)b & 0xf);         /* number of bit length codes */
+    DUMPBITS(4)
+#ifdef PKZIP_BUG_WORKAROUND
+    if (nl > 288 || nd > 32)
+#else
+    if (nl > 286 || nd > 30)
+#endif
+      return 1;                   /* bad lengths */
+
+    /* read in bit-length-code lengths */
+    for (j = 0; j < 19; j++) ll[j] = 0;
+    for (j = 0; j < nb; j++)
+    {
+      NEEDBITS(3)
+      ll[border[j]] = (unsigned)b & 7;
+      DUMPBITS(3)
+    }
+
+    /* build decoding table for trees--single level, 7 bit lookup */
+    bl = 7;
+    if ((i = huft_build(is, ll, 19, 19, NULL, NULL, &tl, &bl)) != 0)
+    {
+      if (i == 1)
+        huft_free(is, tl);
+      return i;                   /* incomplete code set */
+    }
+
+    /* read in literal and distance code lengths */
+    n = nl + nd;
+    m = mask_bits[bl];
+    i = l = 0;
+    while ((unsigned)i < n)
+    {
+      NEEDBITS((unsigned)bl)
+      j = (td = tl + ((unsigned)b & m))->b;
+      DUMPBITS(j)
+      j = td->v.n;
+      if (j < 16)                 /* length of code in bits (0..15) */
+        ll[i++] = l = j;          /* save last length in l */
+      else if (j == 16)           /* repeat last length 3 to 6 times */
+      {
+        NEEDBITS(2)
+        j = 3 + ((unsigned)b & 3);
+        DUMPBITS(2)
+        if ((unsigned)i + j > n)
+          return 1;
+        while (j--)
+          ll[i++] = l;
+      }
+      else if (j == 17)           /* 3 to 10 zero length codes */
+      {
+        NEEDBITS(3)
+        j = 3 + ((unsigned)b & 7);
+        DUMPBITS(3)
+        if ((unsigned)i + j > n)
+          return 1;
+        while (j--)
+          ll[i++] = 0;
+        l = 0;
+      }
+      else                        /* j == 18: 11 to 138 zero length codes */
+      {
+        NEEDBITS(7)
+        j = 11 + ((unsigned)b & 0x7f);
+        DUMPBITS(7)
+        if ((unsigned)i + j > n)
+          return 1;
+        while (j--)
+          ll[i++] = 0;
+        l = 0;
+      }
+    }
+
+    /* free decoding table for trees */
+    huft_free(is, tl);
+  }
+  CATCH_BEGIN
+    if (tl) huft_free(is, tl);
+    return -1;
+  CATCH_END
+
+  /* restore the state from the locals */
+  is->bb = b;              /* restore bit buffer */
+  is->bk = k;              /* restore bit count */
+
+  /* build the decoding tables for literal/length and distance codes */
+  bl = lbits;
+  if ((i = huft_build(is, ll, nl, 257, cplens, cplext, &tl, &bl)) != 0)
+  {
+    if (i == 1) {
+      /* incomplete literal tree */
+      huft_free(is, tl);
+    }
+    return i;                   /* incomplete code set */
+  }
+  bd = dbits;
+  if ((i = huft_build(is, ll + nl, nd, 0, cpdist, cpdext, &td, &bd)) != 0)
+  {
+    if (i == 1) {
+      /* incomplete distance tree */
+#ifdef PKZIP_BUG_WORKAROUND
+    }
+#else
+      huft_free(is, td);
+    }
+    huft_free(is, tl);
+    return i;                   /* incomplete code set */
+#endif
+  }
+
+  /* Save inflate state for this block */
+  is->tl = tl;
+  is->td = td;
+  is->bl = bl;
+  is->bd = bd;
+
+  return 0;
+}
+
+/* Routine to initialize inflate decompression */
+void *InflateInitialize(                      /* returns InflateState       */
+  void *AppState,                             /* for passing to putbuffer   */
+  int (*putbuffer_ptr)(                       /* returns 0 on success       */
+    void *AppState,                           /* opaque ptr from Initialize */
+    unsigned char *buffer,                    /* buffer to put              */
+    long length                               /* length of buffer           */
+  ),
+  void *(*malloc_ptr)(long length),           /* utility routine            */
+  void (*free_ptr)(void *buffer)              /* utility routine            */
+)
+{
+  struct InflateState *is;
+
+  /* Do some argument checking */
+  if ((!putbuffer_ptr) || (!malloc_ptr) || (!free_ptr)) return NULL;
+
+  /* Allocate the InflateState memory area */
+  is = (struct InflateState *) (*malloc_ptr)(sizeof(struct InflateState));
+  if (!is) return NULL;
+
+  /* Set up the initial values of the inflate state */
+  is->runtimetypeid1   = INFLATESTATETYPE;
+  is->errorencountered = FALSE;
+
+  is->bb               = 0;
+  is->bk               = 0;
+  is->bp               = 0;
+  is->bs               = 0;
+
+  is->wp               = 0;
+  is->wf               = 0;
+
+  is->state            = -1;
+  is->lastblock        = FALSE;
+
+  is->AppState         = AppState;
+
+  is->putbuffer_ptr    = putbuffer_ptr;
+  is->malloc_ptr       = malloc_ptr;
+  is->free_ptr         = free_ptr;
+
+  is->runtimetypeid2   = INFLATESTATETYPE;
+
+  /* Return this state info to the caller */
+  return is;
+}
+
+/* Call-in routine to put a buffer into inflate decompression */
+int InflatePutBuffer(                         /* returns 0 on success       */
+  void *InflateState,                         /* opaque ptr from Initialize */
+  unsigned char *buffer,                      /* buffer to put              */
+  long length                                 /* length of buffer           */
+)
+{
+  struct InflateState *is;
+
+  int beginstate;
+
+  /* Get (and check) the InflateState structure */
+  is = (struct InflateState *) InflateState;
+  if (!is || (is->runtimetypeid1 != INFLATESTATETYPE)
+          || (is->runtimetypeid2 != INFLATESTATETYPE)) return TRUE;
+  if (is->errorencountered) return TRUE;
+
+  do
+  {
+    int size, i;
+    
+
+    if ((is->state == -1) && (is->lastblock)) break;
+
+    /* Save the beginning state */
+    beginstate = is->state;
+
+    /* Push as much as possible into input buffer */
+    size = BUFFERSIZE - is->bs;
+    if (size > length) size = (int) length;
+    i = is->bp + is->bs;
+
+    while (size-- > 0)
+    {
+      is->buffer[i++ & BUFFERMASK] = *buffer;
+      is->bs++;
+      buffer++;
+      length--;
+    }
+
+    /* Process some more data */
+    if (is->state == -1)
+    {
+      int e;                /* last block flag */
+      unsigned t;           /* block type */
+
+      ulg b;                /* bit buffer */
+      unsigned k;           /* number of bits in bit buffer */
+
+      /* make local copies of state */
+      b = is->bb;           /* initialize bit buffer */
+      k = is->bk;           /* initialize bit count */
+
+      TRY
+      {
+        /* read in last block bit */
+        NEEDBITS(1)
+        e = (int)b & 1;
+        DUMPBITS(1)
+
+        /* read in block type */
+        NEEDBITS(2)
+        t = (unsigned)b & 3;
+        DUMPBITS(2)
+
+        if (t <= 2)
+        {
+          is->state     = t;
+          is->lastblock = e;
+        }
+        else
+        {
+          ERROREXIT(is);
+        }
+      }
+      CATCH_BEGIN
+      CATCH_END
+        
+      /* restore the state from the locals */
+      is->bb = b;              /* restore bit buffer */
+      is->bk = k;              /* restore bit count */
+    }
+    else if (is->state == 0)
+    {
+      int ret;
+
+      ret = inflate_stored_setup(is);
+
+      if (ret > 0)
+        ERROREXIT(is);
+
+      if (ret == 0) is->state += 10;
+    }
+    else if (is->state == 1)
+    {
+      int ret;
+
+      ret = inflate_fixed_setup(is);
+
+      if (ret > 0)
+        ERROREXIT(is);
+
+      if (ret == 0) is->state += 10;
+    }
+    else if (is->state == 2)
+    {
+      int ret;
+
+      ret = inflate_dynamic_setup(is);
+      
+      if (ret > 0)
+        ERROREXIT(is);
+
+      if (ret == 0) is->state += 10;
+    }
+    else if (is->state == 10)
+    {
+      int ret;
+
+      ret = inflate_stored(is);
+
+      if (ret > 0)
+        ERROREXIT(is);
+
+      if (ret == 0)
+      {
+        is->state = -1;
+      }
+    }
+    else if ((is->state == 11) ||
+             (is->state == 12)    )
+    {
+      int ret;
+
+      ret = inflate_codes(is, is->tl, is->td, is->bl, is->bd);
+
+      if (ret > 0)
+        ERROREXIT(is);
+
+      if (ret == 0)
+      {
+        /* free the decoding tables */
+        huft_free(is, is->tl);
+        huft_free(is, is->td);
+        is->state = -1;
+      }
+    }
+    else
+    {
+      ERROREXIT(is);
+    }
+  }
+  while (length || (is->state != beginstate));
+  
+  FLUSHWINDOW(is->wp, TRUE);
+
+  return is->errorencountered;
+}
+
+/* Routine to terminate inflate decompression */
+int InflateTerminate(                         /* returns 0 on success       */
+  void *InflateState                          /* opaque ptr from Initialize */
+)
+{
+  int err;
+  void (*free_ptr)(void *buffer);
+
+  struct InflateState *is;
+
+  /* Get (and check) the InflateState structure */
+  is = (struct InflateState *) InflateState;
+  if (!is || (is->runtimetypeid1 != INFLATESTATETYPE)
+          || (is->runtimetypeid2 != INFLATESTATETYPE)) return TRUE;
+
+  /* save the error return */
+  err = is->errorencountered || (is->bs > 0)
+                             || (is->state != -1)
+                             || (!is->lastblock);
+
+  /* save the address of the free routine */
+  free_ptr = is->free_ptr;
+
+  /* Deallocate everything */
+  (*free_ptr)(is);
+
+  return err;
+}
diff --git a/externals/figlet/run-tests.sh b/externals/figlet/run-tests.sh
new file mode 100755
--- /dev/null
+++ b/externals/figlet/run-tests.sh
@@ -0,0 +1,92 @@
+#!/bin/sh
+
+LC_ALL=POSIX
+export LC_ALL
+
+TESTDIR=tests
+OUTPUT=.test-output.txt
+LOGFILE=tests.log
+CMD="./figlet"
+FONTDIR="$1"
+
+run_test() {
+	test_dsc=$1
+	test_cmd=$2
+
+	total=`expr $total + 1`
+	test_num=`printf %03d $total`
+
+	echo >> $LOGFILE
+	printf "Run test $test_num: ${test_dsc}... " | tee -a $LOGFILE
+	echo >> $LOGFILE
+	echo "Command: $test_cmd" >> $LOGFILE
+	eval "$test_cmd" > "$OUTPUT" 2>> $LOGFILE
+	cmp "$OUTPUT" "tests/res${test_num}.txt" >> $LOGFILE 2>&1
+	if [ $? -eq 0 ]; then
+		echo "pass" | tee -a $LOGFILE
+	else
+		echo "**fail**" | tee -a $LOGFILE
+		result=1
+		fail=`expr $fail + 1`
+	fi
+}
+
+result=0
+fail=0
+$CMD -v > $LOGFILE
+
+file="$TESTDIR/input.txt"
+cmd="cat $file|$CMD"
+
+printf "Default font dir: "; $CMD -I2
+if [ -n "$FONTDIR" ]; then
+	FIGLET_FONTDIR="$FONTDIR"
+	export FIGLET_FONTDIR
+fi
+printf "Current font dir: "; $CMD -I2
+printf "Default font: "; $CMD -I3
+$CMD -f small "Test results" | tee -a $LOGFILE
+
+total=0
+
+run_test "showfigfonts output" "./showfigfonts"
+run_test "text rendering in all fonts" \
+  "for i in fonts/*.flf; do $cmd -f \$i; done"
+run_test "long text rendering" "cat tests/longtext.txt|$CMD"
+run_test "left-to-right text" "$cmd -L"
+run_test "right-to-left text" "$cmd -R"
+run_test "flush-left justification" "$cmd -l"
+run_test "flush-right justification" "$cmd -r"
+run_test "center justification" "$cmd -c"
+run_test "kerning mode" "$cmd -k"
+run_test "full width mode" "$cmd -W"
+run_test "overlap mode" "$cmd -o"
+run_test "tlf2 font rendering" "$cmd -f tests/emboss"
+run_test "kerning flush-left right-to-left mode" "$cmd -klR"
+run_test "kerning centered right-to-left mode (slant)" "$cmd -kcR -f slant"
+run_test "full-width flush-right right-to-left mode" "$cmd -WrR"
+run_test "overlap flush-right mode (big)" "$cmd -or -f big"
+run_test "tlf2 kerning flush-right mode" "$cmd -kr -f tests/emboss"
+run_test "tlf2 overlap centered mode" "$cmd -oc -f tests/emboss"
+run_test "tlf2 full-width flush-left right-to-left mode" \
+  "$cmd -WRl -f tests/emboss"
+run_test "specify font directory" \
+  "X=.t;mkdir \$X;cp fonts/script.flf \$X/foo.flf;$cmd -d\$X -ffoo;rm -Rf \$X"
+run_test "paragraph mode long line output" "$cmd -p -w250"
+run_test "short line output" "$cmd -w5"
+run_test "kerning paragraph centered mode (small)" "$cmd -kpc -fsmall"
+run_test "list of control files" "ls fonts/*flc"
+run_test "uskata control file" "printf 'ABCDE'|$CMD -fbanner -Cuskata"
+run_test "jis0201 control file" "printf '\261\262\263\264\265'|$CMD -fbanner -Cjis0201"
+run_test "right-to-left smushing with JavE font" "$cmd -f tests/flowerpower -R"
+
+rm -f "$OUTPUT"
+
+echo
+if [ $result -ne 0 ]; then
+	echo " $fail tests failed. See $LOGFILE for result details"
+else
+	echo " All tests passed."
+fi
+
+exit $result
diff --git a/externals/figlet/showfigfonts b/externals/figlet/showfigfonts
new file mode 100755
--- /dev/null
+++ b/externals/figlet/showfigfonts
@@ -0,0 +1,55 @@
+#!/bin/sh -
+# showfigfonts by Glenn Chappell <ggc@uiuc.edu>
+# figlet release 2.1.1 -- 25 Aug 1994
+# Based on showfigfonts by Greg Galperin <grg@ai.mit.edu>, Nov 1993.
+#
+# Prints a list of available figlet fonts, along with a sample of each
+# font.  If directory is given, lists fonts in that directory; otherwise
+# uses the default font directory.  If word is given, prints that word
+# in each font; otherwise prints the font name.
+#
+# Usage: showfigfonts [ -d directory ] [ word ]
+
+DIR=`dirname $0`
+FIGLET=$DIR/figlet
+
+# Get figlet version
+FIGLETVERSION=`$FIGLET -I1 2>/dev/null`
+if [ -z "$FIGLETVERSION" ]; then
+  FIGLETVERSION=20000
+fi
+
+USAGE="Usage: `basename $0` [ -d directory ] [ word ]"
+
+if [ "$1" = '-d' ]; then
+  FONTDIR="$2"
+  WORD="$3"
+  if [ $# -gt 3 ] || [ $# -lt 2 ]; then
+    echo "$USAGE"
+    exit 1
+  fi
+else
+  WORD="$1"
+  if [ $# -gt 1 ]; then
+    echo "$USAGE"
+    exit 1
+  fi
+  if [ "$FIGLETVERSION" -lt 20100 ]; then
+    # figlet 2.0
+    FONTDIR="`$FIGLET -F | sed -e '1d' -e '3,$d' -e 's/Font directory: //'`"
+  else
+    # figlet 2.1 or later
+    FONTDIR="`$FIGLET -I2`"
+  fi
+fi
+
+FONTLIST=`ls "$FONTDIR"/*.flf | sed 's!.*/\(.*\)\.flf$!\1!'`
+for F in $FONTLIST ; do
+  echo "$F :"
+  if [ -n "$WORD" ]; then
+    echo "$WORD" | $FIGLET -d "$FONTDIR" -f "$F"
+  else
+    echo "$F" | $FIGLET -d "$FONTDIR" -f "$F"
+  fi
+  echo "" ; echo ""
+done
diff --git a/externals/figlet/showfigfonts.6 b/externals/figlet/showfigfonts.6
new file mode 100644
--- /dev/null
+++ b/externals/figlet/showfigfonts.6
@@ -0,0 +1,67 @@
+.\" showfigfonts by Glenn Chappell <ggc@uiuc.edu>
+.\" figlet release 2.1.1 -- 25 Aug 1994
+.\" Based on showfigfonts by Greg Galperin <grg@ai.mit.edu>, Nov 1993.
+.\"
+.\" Prints a list of available figlet fonts, along with a sample of each
+.\" font.  If directory is given, lists fonts in that directory; otherwise
+.\" uses the default font directory.  If word is given, prints that word
+.\" in each font; otherwise prints the font name.
+.\"
+.\" Usage: showfigfonts [ -d directory ] [ word ]
+.\"
+.\" Manual page by Jonathon Abbott, for the Debian Project
+.\" slightly modified by Francesco Tapparo, for the Debian Project
+.TH SHOWFIGFONTS 6 "31 May 2012" "v2.2.5"
+
+.SH NAME
+showfigfonts \- prints a list of available figlet fonts
+
+.SH SYNOPSIS
+.B showfigfonts
+[
+.B \-d
+.I directory
+]
+[
+.I word
+]
+
+.SH "DESCRIPTION"
+Prints a list of available figlet fonts, along with a sample of each
+font.  If directory is given, lists fonts in that directory; otherwise
+uses the default font directory.  If word is given, prints that word
+in each font; otherwise prints the font name.
+
+.SH EXAMPLES
+To use
+.B showfigfonts
+with its default settings, simply type
+.RS
+
+.B example% showfigfonts
+
+.RE
+
+To print all the fonts in /usr/share/fonts/figlet
+.RS
+
+.B example% showfigfonts -d /usr/share/fonts/figlet
+
+.RE
+
+To print the word foo using all available fonts
+.RS
+
+.B example% showfigfonts foo
+
+.RE
+
+.SH "AUTHORS"
+showfigfonts was written by Glenn Chappell <ggc@uiuc.edu>
+
+This manual page was written by Jonathon Abbott for the Debian Project.
+
+.SH "SEE ALSO"
+.BR figlet (6),
+.BR chkfont (6),
+.BR figlist (6)
diff --git a/externals/figlet/tests/emboss.tlf b/externals/figlet/tests/emboss.tlf
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/emboss.tlf
@@ -0,0 +1,325 @@
+tlf2a 3 3 8 -1 18 0 0 0
+===============================================================================
+  This is emboss.tlf, or “Emboss”, by Sam Hocevar <sam@hocevar.net>. It was
+created on September 30th, 2006.
+
+  This font is free software. It comes without any warranty, to the extent
+permitted by applicable law. You can redistribute it and/or modify it under
+the terms of the Do What The Fuck You Want To Public License, Version 2,
+as published by Sam Hocevar. See http://sam.zoy.org/wtfpl/COPYING for more
+details.
+
+  Missing characters: # $ % , ; < >
+
+  To create emboss2.tlf, use the following command:
+  $ sed '/@@/,$y/━┃┏┓┗┛/═║╔╗╚╝/' < emboss.tlf > emboss2.tlf
+
+  This font is part of TOIlet’s official distribution. More information
+on the TOIlet website at http://caca.zoy.org/wiki/toilet
+===============================================================================
+ @
+ @
+ @@
+┃!
+┛!
+┛!!
+┛┛"
+  "
+  ""
+ @
+ @
+#@@
+ @
+ @
+$@@
+ @
+ @
+%@@
+┏┛┃ &
+┃━┏┛&
+━━┛ &&
+┛'
+ '
+ ''
+ ┛(
+┃ (
+ ┛((
+━ )
+ ┃)
+━ ))
+┛ ┛*
+━┏┛*
+┛ ┛**
+ ┃ +
+━┏┛+
+ ┛ ++
+ @
+ @
+,@@
+  -
+━┛-
+  --
+ .
+ .
+┛..
+  ┛/
+ ┛ /
+┛  //
+┏━┃0
+┃┛┃0
+━━┛00
+━┃ 1
+ ┃ 1
+━━┛11
+━━┃2
+┏━┛2
+━━┛22
+━━┃3
+━━┃3
+━━┛33
+┃ ┃4
+━━┃4
+  ┛44
+┏━┛5
+━━┃5
+━━┛55
+┏━┛6
+┏━┃6
+━━┛66
+┏━┃7
+  ┃7
+  ┛77
+┏━┃8
+┏━┃8
+━━┛88
+┏━┃9
+━━┃9
+━━┛99
+ :
+┛:
+┛::
+ @
+ @
+;@@
+ @
+ @
+<@@
+   =
+━━┛=
+━━┛==
+ @
+ @
+>@@
+┏━┃?
+  ┛?
+ ┛ ??
+┏━┃@
+┃┛┛@
+━━┛@@
+┏━┃A
+┏━┃A
+┛ ┛AA
+┏━ B
+┏━┃B
+━━ BB
+┏━┛C
+┃  C
+━━┛CC
+┏━ D
+┃ ┃D
+━━ DD
+┏━┛E
+┏━┛E
+━━┛EE
+┏━┛F
+┏━┛F
+┛  FF
+┏━┛G
+┃ ┃G
+━━┛GG
+┃ ┃H
+┏━┃H
+┛ ┛HH
+┛I
+┃I
+┛II
+ ┛J
+ ┃J
+━┛JJ
+┃ ┃K
+┏┛ K
+┛ ┛KK
+┃  L
+┃  L
+━━┛LL
+┏┏ M
+┃┃┃M
+┛┛┛MM
+┏━ N
+┃ ┃N
+┛ ┛NN
+┏━┃O
+┃ ┃O
+━━┛OO
+┏━┃p
+┏━┛P
+┛  PP
+┏━┃ Q
+┃ ┃ Q
+━━━┛QQ
+┏━┃R
+┏┏┛R
+┛ ┛RR
+┏━┛S
+━━┃S
+━━┛SS
+━┏┛T
+ ┃ T
+ ┛ TT
+┃ ┃U
+┃ ┃U
+━━┛UU
+┃ ┃V
+┃ ┃V
+ ┛ VV
+┃┃┃W
+┃┃┃W
+━━┛WW
+┃ ┃X
+ ┛ X
+┛ ┛XX
+┃ ┃Y
+━┏┛Y
+ ┛ YY
+━━┃Z
+┏┛ Z
+━━┛ZZ
+┏┛[
+┃ [
+━┛[[
+┛  \
+ ┛ \
+  ┛\\
+━┃]
+ ┃]
+━┛]]
+ ┛ ^
+┛ ┛^
+   ^^
+   _
+   _
+━━┛__
+┛ `
+ ┛`
+  ``
+┏━┃a
+┏━┃a
+┛ ┛aa
+┏━ b
+┏━┃b
+━━ bb
+┏━┛c
+┃  c
+━━┛cc
+┏━ d
+┃ ┃d
+━━ dd
+┏━┛e
+┏━┛e
+━━┛ee
+┏━┛f
+┏━┛f
+┛  ff
+┏━┛g
+┃ ┃g
+━━┛gg
+┃ ┃h
+┏━┃h
+┛ ┛hh
+┛i
+┃i
+┛ii
+ ┛j
+ ┃j
+━┛jj
+┃ ┃k
+┏┛ k
+┛ ┛kk
+┃  l
+┃  l
+━━┛ll
+┏┏ m
+┃┃┃m
+┛┛┛mm
+┏━ n
+┃ ┃n
+┛ ┛nn
+┏━┃o
+┃ ┃o
+━━┛oo
+┏━┃p
+┏━┛p
+┛  pp
+┏━┃ q
+┃ ┃ q
+━━━┛qq
+┏━┃r
+┏┏┛r
+┛ ┛rr
+┏━┛s
+━━┃s
+━━┛ss
+━┏┛t
+ ┃ t
+ ┛ tt
+┃ ┃u
+┃ ┃u
+━━┛uu
+┃ ┃v
+┃ ┃v
+ ┛ vv
+┃┃┃w
+┃┃┃w
+━━┛ww
+┃ ┃x
+ ┛ x
+┛ ┛xx
+┃ ┃y
+━┏┛y
+ ┛ yy
+━━┃z
+┏┛ z
+━━┛zz
+ ┏┛{
+━┃ {
+ ━┛{{
+┃|
+┃|
+┛||
+━┃ }
+ ┏┛}
+━┛ }}
+ ┛ ┛~
+┛ ┛ ~
+    ~~
+┏━┃┏━┛Ä
+┏━┃┏━┛Ä
+┛ ┛━━┛ÄÄ
+┏━┃┏━┛Ö
+┃ ┃┏━┛Ö
+━━┛━━┛ÖÖ
+┃ ┃┏━┛Ü
+┃ ┃┏━┛Ü
+━━┛━━┛ÜÜ
+┏━┃┏━┛ä
+┏━┃┏━┛ä
+┛ ┛━━┛ää
+┏━┃┏━┛ö
+┃ ┃┏━┛ö
+━━┛━━┛öö
+┃ ┃┏━┛ü
+┃ ┃┏━┛ü
+━━┛━━┛üü
+┏━┛┏━┛ß
+━━┃━━┃ß
+━━┛━━┛ßß
diff --git a/externals/figlet/tests/flowerpower.flf b/externals/figlet/tests/flowerpower.flf
new file mode 100644
index 0000000000000000000000000000000000000000..3f294fb374013527434fb6d2485b8b164d204016
GIT binary patch
literal 3070
zc$@+L3jy>{O9KQ7000080BTO-Fv(cP>wXIW0B1h{01p5F0A_4&cV%*LZ+B&KE@o_I
z?OSbc8@UnwZovOx5FbDZkjNz092x~J(4xJUq6PXP=%)opT`Zr~Q!K+)k_)>1t^F$<
z&Kt?q%66PXdquTD>?L=X96mGi%y4#nvAKA@`~sdmg_rQ`*YFgcz05zpdj8@CJUu=6
z-Mii8_U0BA@RyGloApmK`13dL`_=O1{Pg4x%iRj_SitkAPk$A@3eUg9Ar@c0T)e<1
z|F*ihU2m`O>NAhc`KKPICy#pQ_2v2&F1A-YxLn@C_p8+vyt!GSr04MNc762&{Av0A
zkM0(}{_dO2YR7l3e!AY?>|l9&yT08muXg_Q<lE)@6)a)1-Tny6-2yImyX!>=A3l8W
zf5%Jye3j)pJ^4C6|9ZXKtZ<<ho9&0y&2|3aFE$tX`s?j(x!HU~Vb0<D-OUQFSLe$O
zT(95!n1#7`cO}5WVtRT4FrOR1z!>~>b@O(8OHks<E>}0J??1v1>-V^@-4@<%&({|p
zVW+E};VMvS92$S`E>TLlW4*e;HD4{?uJRz)o8=qC14mrKo9)}TD_p~7eYNturZ3>^
zlYZb&@Cd$#+yNb$MBvjNPkTPaZtUb!cn^9S@gJW~;&*XMr;|AO%@ohuUXbIgdQN)s
zec)hP4L6DZc=gXXm2MtshHdVy#-r|Lf->l5cVG{Rd+&dK6s3=4s5r@@_Ze1R5o{rg
znxV7>!6eP+PNq&-2TtzKD)ISVG)&V=!h0)?&{5Qq`WSmRwiFW(NJJGcqJ*IqE>u`o
z1LJ8Z!v@hEwE~aBtze79)-(oD&OjUy#?MnqgpQ3RB6ik=OZ5p{hwHMtIsvLY7#w&+
zD`g|b3)qE_CA#czz4$D4<pC1j=0sqH6tWGm)HFPb6r=Zt?5Z{3%5;m-RuDFZ|HxB0
z_p&rnz)Wo>L{m(qh*}NMD52vu^Eh2ztj<;0VVT$~(0HEjtsjn^o>z!AP&OC@wI@`8
zSrbh<Sg@_Qf?PZNd{%YL=DyFXh-E?GVjjGgj+ka4-yn94y2{2Bz(j}iB+zq}uJDGG
zp1_FmM;SsTtDxd8Vb8WJ)?H|4p1{Ljj7>(vwC6l_xop~Oj(+aFyL<S(E<|_);t`}j
z`Sh{We>b9sdL&>B+-^SK^S(VN#Cs0;@`HMQCXA4f9>fxMUY^ZI6$x`|5C;e2giuQ(
zEovfhgd*USJi?mAR`!69Bq8x3sRHtlba;+weZYHs$bxoEx;<V%m-KGhO9xu_1Z9oZ
zk*R?KUFpCum!2f)=o}I<9o|u}f~w=NPtHn4gDeRpY~rOTjae2JrrcoiaEVd<ElCN~
zK#Y9$aOTG>+}zn{jzMe0FwQo#j0B0bh;f7>V+`uJ)fjnY!A6ZaY<bcRn^j(rcSTcV
z9g`flBuc1((9ze<K!@9ht%POg98=lZFev8^%rQcuETsVI2?EU*a7hRXGFs$S3M&;4
zpin%oZMfUBVni*+;j-otQHz#~<zq(<3dQzO_P%s*x>7ncW6_QPoV4_P6cZ-~&Ff=p
zOoCwF_brO<u&6WL-iV}mGP2*^+SBp?wVmEhZHf;O2z8!8=s;4*XzJEfN1zlFN}j;<
zV-hl!z7a4#=c&;t3IQZVkO_PvAP8NFfc-$g9$EprPZiJ*6!WH_NXKkqPC{lHf+9rW
zCs^d?$W(G#x?W|qg&MhCxRKk318MCz1J8+?!*fs1nUVvuKQTXV&f^`2`kbta@+Gg!
z!}RRix|0ZvZ|CF|3MFO_^6Wqdy`33dc`_)7U8}^t)#1R#`pSdBXpH<MS(A8)%!r!P
zL-f6$Tt6^up6dQa96~eFIw3t2Z6A@zd~R^Bh0a?Si8?t_VLORF)QM>1Lg|FJruF<B
zZw`IYeJ0>3jLkQ;_Rr6&{!{tc-ijtEQLvHQlLj6mN>ojWwlufmLh}kiu%n0<PO?tM
zJZA*KS;d1)7@didsz^_4QbKyF!$qCy)rnr4=8eH5N}NZf9)n&aIcstOidbG?_a$5q
zAt{?U&|L((E4g+TIa6tTU6+&GT&d;&Ip(Jg!R+_gOqxYzx$>Y)I~*75O&mD{Hz`8U
zNGiIxy2O=I$T*`!k%{pD&qx+2Vs$E|W-UEK*lUv!2u;M>3wVQgw-=A|f)8h}YTm76
zVwfVEgc8hR1F3~gLQ>hvP)j~*z*|zQRUpf3V~|`|(%VM8s3{ZpkWUtY4IhLjIRhx?
z+*62(5W?l6%aaO3o@7It;P!;Z${gklLf?5;;ZHY+NRE@VWJ?`GHAm=@EqbTHPJ*AX
zxHw7KhBrFYauQptZ2QG21h-HqxkWL1$zdmnru1rk#Y4U2?b+!2a;N48mK*pirJ^W7
zqW1HGSha%~qU8&vuq){_Vu5{0oY{=M&?&nwPp5gJByC)vnX}poW(oFcnnTp?*at}A
zr4+DbnV7&AL7=aRHFvmr{~@Rpg3ad2xtqE_KV1sq@^tCoylr$lSVZ+9O~pB};ik-g
z*={;>z9&fnlI>rsGW_`I{-hQsbxyme`*H2C{djp?_TwN{nTyyimAwiuHM-J~bo*C_
zhboy)YWR03(Su}(#du;Uqavjy2h%bt6%wYguv>4H&f-IT$62$vQLaZMj`U`tU9mT*
zN2WVAb9Je&P;v3AhKPqW+>&rh!FpZl3+mtIv%1*>-Ga{3D3Mq~GE>KsK*rc95;N=y
z^vkg6Xam&`Vr!`IQ%>v$tT@0Jcp^zBjAz{8!h;I!2O{^az|Ax$ZZ{OR+Y_}Fv>S*y
z6mnEVb*7o^ku8KsN!pc-b16!*2fb>_(hC)~6sBqZMN^u7C4N+j(@KXp5tpaySS-P>
z$hD8JZkN5KI+HYwC0n7W(W+EE1c&!!-(N+Lwv~;mSbe%Xy8KtMR6jB-Lw3gjmTA;f
zhgcdAmP#lU>CPFNXj#*lWTuZNE9V|SR;8XtO?`JKuOKs}27U8mwFnta3K5dQ3F~#h
zxRV_6I<g}DvL!eawcB!z*`ppB2lJI#U8(FVeDkjbLcXZlvPsvr?%xkx2g`rPy<L*o
z>a|SIflmzIJ8R}s7p+OJaG>+qcBwhRq&B8Ztm<r4z@^vfo_;ZIO#kCs17XRA*z4+X
zZ?Ay7vvy?3YnIe@r=G8B>xQp>J5{QsV_eobfSbK9tckp5lPiW@GS-spD_0l#&T_Pb
zPh!-RpR<mRUiF$@Ac)Xbt#x2xkH;P;TbHQ&@H_-n5rUaCzuBNFmb1Ggm-1>!MY$Cn
zv)qmSmR(i{%64>LCw+C`bcagzd%J7P8Em>zbE9@t`E@YXg+&t_NR*)~B7-7r*oxYe
zZzSm(N&5~)CYIiNU7=+=y)|hNxr*oBC{bs$_q*QtQu@pHO`_ZSD#_>KJ~ef}75kxR
zR@afOU7s5=f9xMz^y`iO@x<w1`^wz=BBmN$+s*r&YMvU|u4~)YVRLo$yQq9{k-N0h
zsG(WVn`vyH*@g}A=vCr-zk}%Iv0U+#Q>_#4;Xw(X2^(VZo%)ND`b&pkq;W=HpX3F{
zNxPbdHpYzgXYW##M+q}hEuH6zC<d!JFOad6c*b|ho4j(@aQMoic#wO`+SQwpq0slA
z4p@lT@>t_L*7%M!zHw_j*7!zHJJ$I6yH1ZazO!SEPX#>I_!?1<HNInw?^xqI*7%M!
zzGIDVJoX%Ge8(E!*e<-P@=@3*e^|pGS&Q0At#1nLcguBst83V63e}(2q!INRc~?a_
z@ouq2m(+5yTJ_uX36T9csV90-irL(gG%}i`J+Lo=R`w*O&*ZyTR$CX%csbm4_09+;
zC5V*WT(IxxsHmf(xw+EH7z$Mfn|sr?Z(u<^Q2&;$3S$HVBZLvZ>pcCzfX$ZtcyZ(2
z_Q3y0H@}eT7W_{qtiR9*d{p-Tk+T1l`|kaJ_HR&20Rj{Q3IG5A2moqM<1oos#_N6y
z003t{000jF0000000000005+c00000W^8YFWpZ$DcV%)eW^86qO9ci1000010096!
M000213jhEB04JaVH2?qr

literal 0
Hc$@<O00001

diff --git a/externals/figlet/tests/input.txt b/externals/figlet/tests/input.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/input.txt
@@ -0,0 +1,7 @@
+<joshk> joshk@influx:/etc/logrotate.d> sh -n *
+<joshk> apache: line 14: syntax error near unexpected token `}'
+<joshk> apache: line 14: `}'
+<joshk> the plot thickens
+<asuffield> those aren't shell scripts
+<erich> this wasn't chicken.
+                -- in #debian-devel
diff --git a/externals/figlet/tests/longtext.txt b/externals/figlet/tests/longtext.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/longtext.txt
@@ -0,0 +1,14 @@
+        What is involved in such [close] relationships is a form of emotional
+chemistry, so far unexplained by any school of psychiatry I am aware of, that
+conditions nothing so simple as a choice between the poles of attraction and
+repulsion.  You can meet some people thirty, forty times down the years, and
+they remain amiable bystanders, like the shore lights of towns that a sailor
+passes at stated times but never calls at on the regular run.  Conversely,
+all considerations of sex aside, you can meet some other people once or twice
+and they remain permanent influences on your life.
+        Everyone is aware of this discrepancy between the acquaintance seen
+as familiar wallpaper or instant friend.  The chemical action it entails is
+less worth analyzing than enjoying.  At any rate, these six pieces are about
+men with whom I felt an immediate sympat - to use a coining of Max Beerbohm's
+more satisfactory to me than the opaque vogue word "empathy".
+                -- Alistair Cooke, "Six Men"
diff --git a/externals/figlet/tests/res001.txt b/externals/figlet/tests/res001.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res001.txt
@@ -0,0 +1,148 @@
+banner :
+                                          
+#####    ##   #    # #    # ###### #####  
+#    #  #  #  ##   # ##   # #      #    # 
+#####  #    # # #  # # #  # #####  #    # 
+#    # ###### #  # # #  # # #      #####  
+#    # #    # #   ## #   ## #      #   #  
+#####  #    # #    # #    # ###### #    # 
+                                          
+
+
+big :
+ _     _       
+| |   (_)      
+| |__  _  __ _ 
+| '_ \| |/ _` |
+| |_) | | (_| |
+|_.__/|_|\__, |
+          __/ |
+         |___/ 
+
+
+block :
+                                            
+_|        _|                      _|        
+_|_|_|    _|    _|_|      _|_|_|  _|  _|    
+_|    _|  _|  _|    _|  _|        _|_|      
+_|    _|  _|  _|    _|  _|        _|  _|    
+_|_|_|    _|    _|_|      _|_|_|  _|    _|  
+                                            
+                                            
+
+
+bubble :
+  _   _   _   _   _   _  
+ / \ / \ / \ / \ / \ / \ 
+( b | u | b | b | l | e )
+ \_/ \_/ \_/ \_/ \_/ \_/ 
+
+
+digital :
++-+-+-+-+-+-+-+
+|d|i|g|i|t|a|l|
++-+-+-+-+-+-+-+
+
+
+ivrit :
+                                                            _   _            _ 
+                                                           | |_(_)_ ____   _(_)
+                                                           | __| | '__\ \ / / |
+                                                           | |_| | |   \ V /| |
+                                                            \__|_|_|    \_/ |_|
+                                                                               
+
+
+lean :
+                                     
+    _/                               
+   _/    _/_/      _/_/_/  _/_/_/    
+  _/  _/_/_/_/  _/    _/  _/    _/   
+ _/  _/        _/    _/  _/    _/    
+_/    _/_/_/    _/_/_/  _/    _/     
+                                     
+                                     
+
+
+mini :
+           
+._ _ o._ o 
+| | ||| || 
+           
+
+
+mnemonic :
+mnemonic
+
+
+script :
+                          
+               o          
+ ,   __   ,_        _ _|_ 
+/ \_/    /  |  |  |/ \_|  
+ \/ \___/   |_/|_/|__/ |_/
+                 /|       
+                 \|       
+
+
+shadow :
+      |               |                
+  __| __ \   _` |  _` |  _ \\ \  \   / 
+\__ \ | | | (   | (   | (   |\ \  \ /  
+____/_| |_|\__,_|\__,_|\___/  \_/\_/   
+                                       
+
+
+slant :
+         __            __ 
+   _____/ /___ _____  / /_
+  / ___/ / __ `/ __ \/ __/
+ (__  ) / /_/ / / / / /_  
+/____/_/\__,_/_/ /_/\__/  
+                          
+
+
+small :
+               _ _ 
+ ____ __  __ _| | |
+(_-< '  \/ _` | | |
+/__/_|_|_\__,_|_|_|
+                   
+
+
+smscript :
+                                  
+ ,           ,   _   ,_  o    _|_ 
+/ \_/|/|/|  / \_/   /  | | |/\_|  
+ \/  | | |_/ \/ \__/   |/|/|_/ |_/
+                          (|      
+
+
+smshadow :
+               |              |              
+(_-<  ` \ (_-<   \   _` |  _` |  _ \\ \  \ / 
+___/_|_|_|___/_| _|\__,_|\__,_|\___/ \_/\_/  
+                                             
+
+
+smslant :
+                 __          __ 
+  ___ __ _  ___ / /__ ____  / /_
+ (_-</  ' \(_-</ / _ `/ _ \/ __/
+/___/_/_/_/___/_/\_,_/_//_/\__/ 
+                                
+
+
+standard :
+     _                  _               _ 
+ ___| |_ __ _ _ __   __| | __ _ _ __ __| |
+/ __| __/ _` | '_ \ / _` |/ _` | '__/ _` |
+\__ \ || (_| | | | | (_| | (_| | | | (_| |
+|___/\__\__,_|_| |_|\__,_|\__,_|_|  \__,_|
+                                          
+
+
+term :
+term
+
+
diff --git a/externals/figlet/tests/res002.txt b/externals/figlet/tests/res002.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res002.txt
@@ -0,0 +1,1992 @@
+   #                                    #    
+  #       #  ####   ####  #    # #    #  #   
+ #        # #    # #      #    # #   #    #  
+#         # #    #  ####  ###### ####      # 
+ #        # #    #      # #    # #  #     #  
+  #  #    # #    # #    # #    # #   #   #   
+   #  ####   ####   ####  #    # #    # #    
+                                             
+                                    #####                                
+     #  ####   ####  #    # #    # #     # # #    # ###### #      #    # 
+     # #    # #      #    # #   #  # ### # # ##   # #      #      #    # 
+     # #    #  ####  ###### ####   # ### # # # #  # #####  #      #    # 
+     # #    #      # #    # #  #   # ####  # #  # # #      #      #    # 
+#    # #    # #    # #    # #   #  #       # #   ## #      #      #    # 
+ ####   ####   ####  #    # #    #  #####  # #    # #      ######  ####  
+                                                                         
+        #        #                           #                             
+#    # ###      #  ###### #####  ####       #  #       ####   ####  #####  
+ #  #   #      #   #        #   #    #     #   #      #    # #    # #    # 
+  ##          #    #####    #   #         #    #      #    # #      #    # 
+  ##    #    #     #        #   #        #     #      #    # #  ### #####  
+ #  #  ###  #      #        #   #    #  #      #      #    # #    # #   #  
+#    #  #  #       ######   #    ####  #       ######  ####   ####  #    # 
+                                                                           
+                                            #                     
+ ####  #####   ##   ##### ######     #####   #       ####  #    # 
+#    #   #    #  #    #   #          #    #   #     #      #    # 
+#    #   #   #    #   #   #####      #    #    #     ####  ###### 
+#    #   #   ######   #   #      ### #    #   #          # #    # 
+#    #   #   #    #   #   #      ### #    #  #      #    # #    # 
+ ####    #   #    #   #   ###### ### #####  #        ####  #    # 
+                                                                  
+                        
+      #    #     #   #  
+      ##   #      # #   
+##### # #  #    ####### 
+      #  # #      # #   
+      #   ##     #   #  
+      #    #            
+                        
+   #                                    #    
+  #       #  ####   ####  #    # #    #  #   
+ #        # #    # #      #    # #   #    #  
+#         # #    #  ####  ###### ####      # 
+ #        # #    #      # #    # #  #     #  
+  #  #    # #    # #    # #    # #   #   #   
+   #  ####   ####   ####  #    # #    # #    
+                                             
+                                           #                            
+  ##   #####    ##    ####  #    # ###### ###    #      # #    # ###### 
+ #  #  #    #  #  #  #    # #    # #       #     #      # ##   # #      
+#    # #    # #    # #      ###### #####         #      # # #  # #####  
+###### #####  ###### #      #    # #       #     #      # #  # # #      
+#    # #      #    # #    # #    # #      ###    #      # #   ## #      
+#    # #      #    #  ####  #    # ######  #     ###### # #    # ###### 
+                                                                        
+  #   #        #                                             
+ ##   #    #  ###     ####  #   # #    # #####   ##   #    # 
+# #   #    #   #     #       # #  ##   #   #    #  #   #  #  
+  #   #    #          ####    #   # #  #   #   #    #   ##   
+  #   #######  #          #   #   #  # #   #   ######   ##   
+  #        #  ###    #    #   #   #   ##   #   #    #  #  #  
+#####      #   #      ####    #   #    #   #   #    # #    # 
+                                                             
+                                                                  
+###### #####  #####   ####  #####     #    # ######   ##   #####  
+#      #    # #    # #    # #    #    ##   # #       #  #  #    # 
+#####  #    # #    # #    # #    #    # #  # #####  #    # #    # 
+#      #####  #####  #    # #####     #  # # #      ###### #####  
+#      #   #  #   #  #    # #   #     #   ## #      #    # #   #  
+###### #    # #    #  ####  #    #    #    # ###### #    # #    # 
+                                                                  
+                                                                     
+#    # #    # ###### #    # #####  ######  ####  ##### ###### #####  
+#    # ##   # #       #  #  #    # #      #    #   #   #      #    # 
+#    # # #  # #####    ##   #    # #####  #        #   #####  #    # 
+#    # #  # # #        ##   #####  #      #        #   #      #    # 
+#    # #   ## #       #  #  #      #      #    #   #   #      #    # 
+ ####  #    # ###### #    # #      ######  ####    #   ###### #####  
+                                                                     
+                                     ### ###   ### 
+#####  ####  #    # ###### #    #    ###    #  ### 
+  #   #    # #   #  #      ##   #     #     #   #  
+  #   #    # ####   #####  # #  #      #    ## #   
+  #   #    # #  #   #      #  # #           #      
+  #   #    # #   #  #      #   ##           #      
+  #    ####  #    # ###### #    #        ###       
+                                                   
+   #                                    #    
+  #       #  ####   ####  #    # #    #  #   
+ #        # #    # #      #    # #   #    #  
+#         # #    #  ####  ###### ####      # 
+ #        # #    #      # #    # #  #     #  
+  #  #    # #    # #    # #    # #   #   #   
+   #  ####   ####   ####  #    # #    # #    
+                                             
+                                           #                            
+  ##   #####    ##    ####  #    # ###### ###    #      # #    # ###### 
+ #  #  #    #  #  #  #    # #    # #       #     #      # ##   # #      
+#    # #    # #    # #      ###### #####         #      # # #  # #####  
+###### #####  ###### #      #    # #       #     #      # #  # # #      
+#    # #      #    # #    # #    # #      ###    #      # #   ## #      
+#    # #      #    #  ####  #    # ######  #     ###### # #    # ###### 
+                                                                        
+  #   #        #     ### ###   ### 
+ ##   #    #  ###    ###    #  ### 
+# #   #    #   #      #     #   #  
+  #   #    #           #    ## #   
+  #   #######  #            #      
+  #        #  ###           #      
+#####      #   #         ###       
+                                   
+   #                                    #                           
+  #       #  ####   ####  #    # #    #  #      ##### #    # ###### 
+ #        # #    # #      #    # #   #    #       #   #    # #      
+#         # #    #  ####  ###### ####      #      #   ###### #####  
+ #        # #    #      # #    # #  #     #       #   #    # #      
+  #  #    # #    # #    # #    # #   #   #        #   #    # #      
+   #  ####   ####   ####  #    # #    # #         #   #    # ###### 
+                                                                    
+                           
+#####  #       ####  ##### 
+#    # #      #    #   #   
+#    # #      #    #   #   
+#####  #      #    #   #   
+#      #      #    #   #   
+#      ######  ####    #   
+                           
+                                                  
+##### #    # #  ####  #    # ###### #    #  ####  
+  #   #    # # #    # #   #  #      ##   # #      
+  #   ###### # #      ####   #####  # #  #  ####  
+  #   #    # # #      #  #   #      #  # #      # 
+  #   #    # # #    # #   #  #      #   ## #    # 
+  #   #    # #  ####  #    # ###### #    #  ####  
+                                                  
+   #                                                           #    
+  #    ##    ####  #    # ###### ###### # ###### #      #####   #   
+ #    #  #  #      #    # #      #      # #      #      #    #   #  
+#    #    #  ####  #    # #####  #####  # #####  #      #    #    # 
+ #   ######      # #    # #      #      # #      #      #    #   #  
+  #  #    # #    # #    # #      #      # #      #      #    #  #   
+   # #    #  ####   ####  #      #      # ###### ###### #####  #    
+                                                                    
+                                                                 ###       
+##### #    #  ####   ####  ######      ##   #####  ###### #    # ### ##### 
+  #   #    # #    # #      #          #  #  #    # #      ##   #  #    #   
+  #   ###### #    #  ####  #####     #    # #    # #####  # #  # #     #   
+  #   #    # #    #      # #         ###### #####  #      #  # #       #   
+  #   #    # #    # #    # #         #    # #   #  #      #   ##       #   
+  #   #    #  ####   ####  ######    #    # #    # ###### #    #       #   
+                                                                           
+                                   
+ ####  #    # ###### #      #      
+#      #    # #      #      #      
+ ####  ###### #####  #      #      
+     # #    # #      #      #      
+#    # #    # #      #      #      
+ ####  #    # ###### ###### ###### 
+                                   
+                                           
+ ####   ####  #####  # #####  #####  ####  
+#      #    # #    # # #    #   #   #      
+ ####  #      #    # # #    #   #    ####  
+     # #      #####  # #####    #        # 
+#    # #    # #   #  # #        #   #    # 
+ ####   ####  #    # # #        #    ####  
+                                           
+   #                               #                             
+  #  ###### #####  #  ####  #    #  #      ##### #    # #  ####  
+ #   #      #    # # #    # #    #   #       #   #    # # #      
+#    #####  #    # # #      ######    #      #   ###### #  ####  
+ #   #      #####  # #      #    #   #       #   #    # #      # 
+  #  #      #   #  # #    # #    #  #        #   #    # # #    # 
+   # ###### #    # #  ####  #    # #         #   #    # #  ####  
+                                                                 
+                            ###       
+#    #   ##    ####  #    # ### ##### 
+#    #  #  #  #      ##   #  #    #   
+#    # #    #  ####  # #  # #     #   
+# ## # ######      # #  # #       #   
+##  ## #    # #    # #   ##       #   
+#    # #    #  ####  #    #       #   
+                                      
+                                                
+ ####  #    # #  ####  #    # ###### #    #     
+#    # #    # # #    # #   #  #      ##   #     
+#      ###### # #      ####   #####  # #  #     
+#      #    # # #      #  #   #      #  # # ### 
+#    # #    # # #    # #   #  #      #   ## ### 
+ ####  #    # #  ####  #    # ###### #    # ### 
+                                                
+                                                                        
+                                                               # #    # 
+                                                               # ##   # 
+                                                ##### #####    # # #  # 
+                                                               # #  # # 
+                                                               # #   ## 
+                                                               # #    # 
+                                                                        
+  # #                                                                          
+  # #   #####  ###### #####  #   ##   #    #       #####  ###### #    # ###### 
+####### #    # #      #    # #  #  #  ##   #       #    # #      #    # #      
+  # #   #    # #####  #####  # #    # # #  # ##### #    # #####  #    # #####  
+####### #    # #      #    # # ###### #  # #       #    # #      #    # #      
+  # #   #    # #      #    # # #    # #   ##       #    # #       #  #  #      
+  # #   #####  ###### #####  # #    # #    #       #####  ######   ##   ###### 
+                                                                               
+       
+#      
+#      
+#      
+#      
+#      
+###### 
+       
+   ___           _     _    __   
+  / (_)         | |   | |   \ \  
+ / / _  ___  ___| |__ | | __ \ \ 
+< < | |/ _ \/ __| '_ \| |/ /  > >
+ \ \| | (_) \__ \ | | |   <  / / 
+  \_\ |\___/|___/_| |_|_|\_\/_/  
+   _/ |                          
+  |__/                           
+   _           _     _           _        __ _                  __  _       
+  (_)         | |   | |    ____ (_)      / _| |           _    / / | |      
+   _  ___  ___| |__ | | __/ __ \ _ _ __ | |_| |_   ___  _(_)  / /__| |_ ___ 
+  | |/ _ \/ __| '_ \| |/ / / _` | | '_ \|  _| | | | \ \/ /   / / _ \ __/ __|
+  | | (_) \__ \ | | |   < | (_| | | | | | | | | |_| |>  < _ / /  __/ || (__ 
+  | |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___|
+ _/ |                     \____/                                            
+|__/                                                                        
+     ___                       _        _            ___         _     
+    / / |                     | |      | |          | \ \       | |    
+   / /| | ___   __ _ _ __ ___ | |_ __ _| |_ ___   __| |\ \   ___| |__  
+  / / | |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` | > > / __| '_ \ 
+ / /  | | (_) | (_| | | | (_) | || (_| | ||  __/| (_| |/ /  \__ \ | | |
+/_/   |_|\___/ \__, |_|  \___/ \__\__,_|\__\___(_)__,_/_/   |___/_| |_|
+                __/ |                                                  
+               |___/                                                   
+                   _    
+                /\| |/\ 
+ ______ _ __    \ ` ' / 
+|______| '_ \  |_     _|
+       | | | |  / , . \ 
+       |_| |_|  \/|_|\/ 
+                        
+                        
+   ___           _     _    __                            _            
+  / (_)         | |   | |   \ \                          | |         _ 
+ / / _  ___  ___| |__ | | __ \ \    __ _ _ __   __ _  ___| |__   ___(_)
+< < | |/ _ \/ __| '_ \| |/ /  > >  / _` | '_ \ / _` |/ __| '_ \ / _ \  
+ \ \| | (_) \__ \ | | |   <  / /  | (_| | |_) | (_| | (__| | | |  __/_ 
+  \_\ |\___/|___/_| |_|_|\_\/_/    \__,_| .__/ \__,_|\___|_| |_|\___(_)
+   _/ |                                 | |                            
+  |__/                                  |_|                            
+ _ _              __ _  _                       _             
+| (_)            /_ | || |  _                  | |            
+| |_ _ __   ___   | | || |_(_)  ___ _   _ _ __ | |_ __ ___  __
+| | | '_ \ / _ \  | |__   _|   / __| | | | '_ \| __/ _` \ \/ /
+| | | | | |  __/  | |  | |  _  \__ \ |_| | | | | || (_| |>  < 
+|_|_|_| |_|\___|  |_|  |_| (_) |___/\__, |_| |_|\__\__,_/_/\_\
+                                     __/ |                    
+                                    |___/                     
+                                                  
+                                                  
+  ___ _ __ _ __ ___  _ __   _ __   ___  __ _ _ __ 
+ / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__|
+|  __/ |  | | | (_) | |    | | | |  __/ (_| | |   
+ \___|_|  |_|  \___/|_|    |_| |_|\___|\__,_|_|   
+                                                  
+                                                  
+                                       _           _   _        _              
+                                      | |         | | | |      | |             
+ _   _ _ __   _____  ___ __   ___  ___| |_ ___  __| | | |_ ___ | | _____ _ __  
+| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \ 
+| |_| | | | |  __/>  <| |_) |  __/ (__| ||  __/ (_| | | || (_) |   <  __/ | | |
+ \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_|  \__\___/|_|\_\___|_| |_|
+                      | |                                                      
+                      |_|                                                      
+ ___   _ 
+( ) \ ( )
+ \|| ||/ 
+    \ \  
+    / /  
+   | |   
+  /_/    
+         
+   ___           _     _    __                            _            
+  / (_)         | |   | |   \ \                          | |         _ 
+ / / _  ___  ___| |__ | | __ \ \    __ _ _ __   __ _  ___| |__   ___(_)
+< < | |/ _ \/ __| '_ \| |/ /  > >  / _` | '_ \ / _` |/ __| '_ \ / _ \  
+ \ \| | (_) \__ \ | | |   <  / /  | (_| | |_) | (_| | (__| | | |  __/_ 
+  \_\ |\___/|___/_| |_|_|\_\/_/    \__,_| .__/ \__,_|\___|_| |_|\___(_)
+   _/ |                                 | |                            
+  |__/                                  |_|                            
+ _ _              __ _  _       ___   _ 
+| (_)            /_ | || |  _  ( ) \ ( )
+| |_ _ __   ___   | | || |_(_)  \|| ||/ 
+| | | '_ \ / _ \  | |__   _|       \ \  
+| | | | | |  __/  | |  | |  _      / /  
+|_|_|_| |_|\___|  |_|  |_| (_)    | |   
+                                 /_/    
+                                        
+   ___           _     _    __     _   _                  _       _   
+  / (_)         | |   | |   \ \   | | | |                | |     | |  
+ / / _  ___  ___| |__ | | __ \ \  | |_| |__   ___   _ __ | | ___ | |_ 
+< < | |/ _ \/ __| '_ \| |/ /  > > | __| '_ \ / _ \ | '_ \| |/ _ \| __|
+ \ \| | (_) \__ \ | | |   <  / /  | |_| | | |  __/ | |_) | | (_) | |_ 
+  \_\ |\___/|___/_| |_|_|\_\/_/    \__|_| |_|\___| | .__/|_|\___/ \__|
+   _/ |                                            | |                
+  |__/                                             |_|                
+ _   _     _      _                  
+| | | |   (_)    | |                 
+| |_| |__  _  ___| | _____ _ __  ___ 
+| __| '_ \| |/ __| |/ / _ \ '_ \/ __|
+| |_| | | | | (__|   <  __/ | | \__ \
+ \__|_| |_|_|\___|_|\_\___|_| |_|___/
+                                     
+                                     
+   __                __  __ _      _     ___     _   _                    
+  / /               / _|/ _(_)    | |   | \ \   | | | |                   
+ / / __ _ ___ _   _| |_| |_ _  ___| | __| |\ \  | |_| |__   ___  ___  ___ 
+< < / _` / __| | | |  _|  _| |/ _ \ |/ _` | > > | __| '_ \ / _ \/ __|/ _ \
+ \ \ (_| \__ \ |_| | | | | | |  __/ | (_| |/ /  | |_| | | | (_) \__ \  __/
+  \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/    \__|_| |_|\___/|___/\___|
+                                                                          
+                                                                          
+                      _ _         _          _ _ 
+                     ( ) |       | |        | | |
+  __ _ _ __ ___ _ __ |/| |_   ___| |__   ___| | |
+ / _` | '__/ _ \ '_ \  | __| / __| '_ \ / _ \ | |
+| (_| | | |  __/ | | | | |_  \__ \ | | |  __/ | |
+ \__,_|_|  \___|_| |_|  \__| |___/_| |_|\___|_|_|
+                                                 
+                                                 
+               _       _       
+              (_)     | |      
+ ___  ___ _ __ _ _ __ | |_ ___ 
+/ __|/ __| '__| | '_ \| __/ __|
+\__ \ (__| |  | | |_) | |_\__ \
+|___/\___|_|  |_| .__/ \__|___/
+                | |            
+                |_|            
+   __         _      _    __     _   _     _     
+  / /        (_)    | |   \ \   | | | |   (_)    
+ / / ___ _ __ _  ___| |__  \ \  | |_| |__  _ ___ 
+< < / _ \ '__| |/ __| '_ \  > > | __| '_ \| / __|
+ \ \  __/ |  | | (__| | | |/ /  | |_| | | | \__ \
+  \_\___|_|  |_|\___|_| |_/_/    \__|_| |_|_|___/
+                                                 
+                                                 
+                         _ _          _     _      _                
+                        ( ) |        | |   (_)    | |               
+__      ____ _ ___ _ __ |/| |_    ___| |__  _  ___| | _____ _ __    
+\ \ /\ / / _` / __| '_ \  | __|  / __| '_ \| |/ __| |/ / _ \ '_ \   
+ \ V  V / (_| \__ \ | | | | |_  | (__| | | | | (__|   <  __/ | | |_ 
+  \_/\_/ \__,_|___/_| |_|  \__|  \___|_| |_|_|\___|_|\_\___|_| |_(_)
+                                                                    
+                                                                    
+                                 _       
+                                (_)      
+                 ______ ______   _ _ __  
+                |______|______| | | '_ \ 
+                                | | | | |
+                                |_|_| |_|
+                                         
+                                         
+   _  _       _      _     _                      _                _ 
+ _| || |_    | |    | |   (_)                    | |              | |
+|_  __  _| __| | ___| |__  _  __ _ _ __ ______ __| | _____   _____| |
+ _| || |_ / _` |/ _ \ '_ \| |/ _` | '_ \______/ _` |/ _ \ \ / / _ \ |
+|_  __  _| (_| |  __/ |_) | | (_| | | | |    | (_| |  __/\ V /  __/ |
+  |_||_|  \__,_|\___|_.__/|_|\__,_|_| |_|     \__,_|\___| \_/ \___|_|
+                                                                     
+                                                                     
+                                                            
+    _|  _|                      _|        _|        _|      
+  _|          _|_|      _|_|_|  _|_|_|    _|  _|      _|    
+_|      _|  _|    _|  _|_|      _|    _|  _|_|          _|  
+  _|    _|  _|    _|      _|_|  _|    _|  _|  _|      _|    
+    _|  _|    _|_|    _|_|_|    _|    _|  _|    _|  _|      
+        _|                                                  
+      _|                                                    
+                                                                              
+  _|                      _|        _|            _|_|_|_|_|    _|            
+        _|_|      _|_|_|  _|_|_|    _|  _|      _|          _|      _|_|_|    
+  _|  _|    _|  _|_|      _|    _|  _|_|      _|    _|_|_|  _|  _|  _|    _|  
+  _|  _|    _|      _|_|  _|    _|  _|  _|    _|  _|    _|  _|  _|  _|    _|  
+  _|    _|_|    _|_|_|    _|    _|  _|    _|  _|    _|_|_|_|    _|  _|    _|  
+  _|                                            _|                            
+_|                                                _|_|_|_|_|_|                
+                                                                              
+    _|_|  _|                                  _|            _|                
+  _|      _|  _|    _|  _|    _|  _|        _|    _|_|    _|_|_|_|    _|_|_|  
+_|_|_|_|  _|  _|    _|    _|_|            _|    _|_|_|_|    _|      _|        
+  _|      _|  _|    _|  _|    _|        _|      _|          _|      _|        
+  _|      _|    _|_|_|  _|    _|  _|  _|          _|_|_|      _|_|    _|_|_|  
+                                                                              
+                                                                              
+                                                                            
+        _|  _|                                            _|                
+      _|    _|    _|_|      _|_|_|  _|  _|_|    _|_|    _|_|_|_|    _|_|_|  
+    _|      _|  _|    _|  _|    _|  _|_|      _|    _|    _|      _|    _|  
+  _|        _|  _|    _|  _|    _|  _|        _|    _|    _|      _|    _|  
+_|          _|    _|_|      _|_|_|  _|          _|_|        _|_|    _|_|_|  
+                                _|                                          
+                            _|_|                                            
+                                                                  
+  _|                          _|  _|                    _|        
+_|_|_|_|    _|_|          _|_|_|    _|          _|_|_|  _|_|_|    
+  _|      _|_|_|_|      _|    _|      _|      _|_|      _|    _|  
+  _|      _|            _|    _|    _|            _|_|  _|    _|  
+    _|_|    _|_|_|  _|    _|_|_|  _|          _|_|_|    _|    _|  
+                                                                  
+                                                                  
+                                      
+                          _|  _|  _|  
+            _|_|_|          _|_|_|    
+_|_|_|_|_|  _|    _|      _|_|_|_|_|  
+            _|    _|        _|_|_|    
+            _|    _|      _|  _|  _|  
+                                      
+                                      
+                                                            
+    _|  _|                      _|        _|        _|      
+  _|          _|_|      _|_|_|  _|_|_|    _|  _|      _|    
+_|      _|  _|    _|  _|_|      _|    _|  _|_|          _|  
+  _|    _|  _|    _|      _|_|  _|    _|  _|  _|      _|    
+    _|  _|    _|_|    _|_|_|    _|    _|  _|    _|  _|      
+        _|                                                  
+      _|                                                    
+                                                                
+                                        _|                      
+  _|_|_|  _|_|_|      _|_|_|    _|_|_|  _|_|_|      _|_|    _|  
+_|    _|  _|    _|  _|    _|  _|        _|    _|  _|_|_|_|      
+_|    _|  _|    _|  _|    _|  _|        _|    _|  _|            
+  _|_|_|  _|_|_|      _|_|_|    _|_|_|  _|    _|    _|_|_|  _|  
+          _|                                                    
+          _|                                                    
+                                                    
+_|  _|                            _|  _|  _|        
+_|      _|_|_|      _|_|        _|_|  _|  _|    _|  
+_|  _|  _|    _|  _|_|_|_|        _|  _|_|_|_|      
+_|  _|  _|    _|  _|              _|      _|        
+_|  _|  _|    _|    _|_|_|        _|      _|    _|  
+                                                    
+                                                    
+                                                            
+                                _|                          
+  _|_|_|  _|    _|  _|_|_|    _|_|_|_|    _|_|_|  _|    _|  
+_|_|      _|    _|  _|    _|    _|      _|    _|    _|_|    
+    _|_|  _|    _|  _|    _|    _|      _|    _|  _|    _|  
+_|_|_|      _|_|_|  _|    _|      _|_|    _|_|_|  _|    _|  
+                _|                                          
+            _|_|                                            
+                                                  
+                                                  
+  _|_|    _|  _|_|  _|  _|_|    _|_|    _|  _|_|  
+_|_|_|_|  _|_|      _|_|      _|    _|  _|_|      
+_|        _|        _|        _|    _|  _|        
+  _|_|_|  _|        _|          _|_|    _|        
+                                                  
+                                                  
+                                        
+                                        
+_|_|_|      _|_|      _|_|_|  _|  _|_|  
+_|    _|  _|_|_|_|  _|    _|  _|_|      
+_|    _|  _|        _|    _|  _|        
+_|    _|    _|_|_|    _|_|_|  _|        
+                                        
+                                        
+                                                                      
+                                                                      
+_|    _|  _|_|_|      _|_|    _|    _|  _|_|_|      _|_|      _|_|_|  
+_|    _|  _|    _|  _|_|_|_|    _|_|    _|    _|  _|_|_|_|  _|        
+_|    _|  _|    _|  _|        _|    _|  _|    _|  _|        _|        
+  _|_|_|  _|    _|    _|_|_|  _|    _|  _|_|_|      _|_|_|    _|_|_|  
+                                        _|                            
+                                        _|                            
+                              
+  _|                      _|  
+_|_|_|_|    _|_|      _|_|_|  
+  _|      _|_|_|_|  _|    _|  
+  _|      _|        _|    _|  
+    _|_|    _|_|_|    _|_|_|  
+                              
+                              
+                                                      _|    _|        _|  
+  _|                _|                                  _|    _|    _|    
+_|_|_|_|    _|_|    _|  _|      _|_|    _|_|_|                _|          
+  _|      _|    _|  _|_|      _|_|_|_|  _|    _|                _|        
+  _|      _|    _|  _|  _|    _|        _|    _|              _|          
+    _|_|    _|_|    _|    _|    _|_|_|  _|    _|              _|          
+                                                            _|            
+                                                                          
+                                                            
+    _|  _|                      _|        _|        _|      
+  _|          _|_|      _|_|_|  _|_|_|    _|  _|      _|    
+_|      _|  _|    _|  _|_|      _|    _|  _|_|          _|  
+  _|    _|  _|    _|      _|_|  _|    _|  _|  _|      _|    
+    _|  _|    _|_|    _|_|_|    _|    _|  _|    _|  _|      
+        _|                                                  
+      _|                                                    
+                                                                
+                                        _|                      
+  _|_|_|  _|_|_|      _|_|_|    _|_|_|  _|_|_|      _|_|    _|  
+_|    _|  _|    _|  _|    _|  _|        _|    _|  _|_|_|_|      
+_|    _|  _|    _|  _|    _|  _|        _|    _|  _|            
+  _|_|_|  _|_|_|      _|_|_|    _|_|_|  _|    _|    _|_|_|  _|  
+          _|                                                    
+          _|                                                    
+                                                        _|    _|        _|  
+_|  _|                            _|  _|  _|              _|    _|    _|    
+_|      _|_|_|      _|_|        _|_|  _|  _|    _|              _|          
+_|  _|  _|    _|  _|_|_|_|        _|  _|_|_|_|                    _|        
+_|  _|  _|    _|  _|              _|      _|                    _|          
+_|  _|  _|    _|    _|_|_|        _|      _|    _|              _|          
+                                                              _|            
+                                                                            
+                                                            
+    _|  _|                      _|        _|        _|      
+  _|          _|_|      _|_|_|  _|_|_|    _|  _|      _|    
+_|      _|  _|    _|  _|_|      _|    _|  _|_|          _|  
+  _|    _|  _|    _|      _|_|  _|    _|  _|  _|      _|    
+    _|  _|    _|_|    _|_|_|    _|    _|  _|    _|  _|      
+        _|                                                  
+      _|                                                    
+                                                                    
+  _|      _|                                _|              _|      
+_|_|_|_|  _|_|_|      _|_|        _|_|_|    _|    _|_|    _|_|_|_|  
+  _|      _|    _|  _|_|_|_|      _|    _|  _|  _|    _|    _|      
+  _|      _|    _|  _|            _|    _|  _|  _|    _|    _|      
+    _|_|  _|    _|    _|_|_|      _|_|_|    _|    _|_|        _|_|  
+                                  _|                                
+                                  _|                                
+                                                                          
+  _|      _|        _|            _|                                      
+_|_|_|_|  _|_|_|          _|_|_|  _|  _|      _|_|    _|_|_|      _|_|_|  
+  _|      _|    _|  _|  _|        _|_|      _|_|_|_|  _|    _|  _|_|      
+  _|      _|    _|  _|  _|        _|  _|    _|        _|    _|      _|_|  
+    _|_|  _|    _|  _|    _|_|_|  _|    _|    _|_|_|  _|    _|  _|_|_|    
+                                                                          
+                                                                          
+                                                                            
+    _|                                    _|_|      _|_|  _|            _|  
+  _|      _|_|_|    _|_|_|  _|    _|    _|        _|            _|_|    _|  
+_|      _|    _|  _|_|      _|    _|  _|_|_|_|  _|_|_|_|  _|  _|_|_|_|  _|  
+  _|    _|    _|      _|_|  _|    _|    _|        _|      _|  _|        _|  
+    _|    _|_|_|  _|_|_|      _|_|_|    _|        _|      _|    _|_|_|  _|  
+                                                                            
+                                                                            
+                                                                        
+      _|  _|            _|      _|                                      
+  _|_|_|    _|        _|_|_|_|  _|_|_|      _|_|      _|_|_|    _|_|    
+_|    _|      _|        _|      _|    _|  _|    _|  _|_|      _|_|_|_|  
+_|    _|    _|          _|      _|    _|  _|    _|      _|_|  _|        
+  _|_|_|  _|              _|_|  _|    _|    _|_|    _|_|_|      _|_|_|  
+                                                                        
+                                                                        
+                                          _|          
+                                        _|    _|      
+  _|_|_|  _|  _|_|    _|_|    _|_|_|        _|_|_|_|  
+_|    _|  _|_|      _|_|_|_|  _|    _|        _|      
+_|    _|  _|        _|        _|    _|        _|      
+  _|_|_|  _|          _|_|_|  _|    _|          _|_|  
+                                                      
+                                                      
+                                      
+          _|                  _|  _|  
+  _|_|_|  _|_|_|      _|_|    _|  _|  
+_|_|      _|    _|  _|_|_|_|  _|  _|  
+    _|_|  _|    _|  _|        _|  _|  
+_|_|_|    _|    _|    _|_|_|  _|  _|  
+                                      
+                                      
+                                                                
+                              _|              _|                
+  _|_|_|    _|_|_|  _|  _|_|      _|_|_|    _|_|_|_|    _|_|_|  
+_|_|      _|        _|_|      _|  _|    _|    _|      _|_|      
+    _|_|  _|        _|        _|  _|    _|    _|          _|_|  
+_|_|_|      _|_|_|  _|        _|  _|_|_|        _|_|  _|_|_|    
+                                  _|                            
+                                  _|                            
+                                                            
+    _|                      _|            _|        _|      
+  _|      _|_|    _|  _|_|        _|_|_|  _|_|_|      _|    
+_|      _|_|_|_|  _|_|      _|  _|        _|    _|      _|  
+  _|    _|        _|        _|  _|        _|    _|    _|    
+    _|    _|_|_|  _|        _|    _|_|_|  _|    _|  _|      
+                                                            
+                                                            
+                                  
+  _|      _|        _|            
+_|_|_|_|  _|_|_|          _|_|_|  
+  _|      _|    _|  _|  _|_|      
+  _|      _|    _|  _|      _|_|  
+    _|_|  _|    _|  _|  _|_|_|    
+                                  
+                                  
+                                                    _|          
+                                                  _|    _|      
+_|      _|      _|    _|_|_|    _|_|_|  _|_|_|        _|_|_|_|  
+_|      _|      _|  _|    _|  _|_|      _|    _|        _|      
+  _|  _|  _|  _|    _|    _|      _|_|  _|    _|        _|      
+    _|      _|        _|_|_|  _|_|_|    _|    _|          _|_|  
+                                                                
+                                                                
+                                                                    
+          _|        _|            _|                                
+  _|_|_|  _|_|_|          _|_|_|  _|  _|      _|_|    _|_|_|        
+_|        _|    _|  _|  _|        _|_|      _|_|_|_|  _|    _|      
+_|        _|    _|  _|  _|        _|  _|    _|        _|    _|      
+  _|_|_|  _|    _|  _|    _|_|_|  _|    _|    _|_|_|  _|    _|  _|  
+                                                                    
+                                                                    
+                                                                            
+                                                                            
+                                                                            
+                                                                _|_|_|_|_|  
+                                                                            
+                                                                            
+                                                                            
+                                                                            
+                              
+                _|            
+                    _|_|_|    
+_|_|_|_|_|      _|  _|    _|  
+                _|  _|    _|  
+                _|  _|    _|  
+                              
+                              
+                                                                              
+  _|  _|          _|            _|        _|                                  
+_|_|_|_|_|    _|_|_|    _|_|    _|_|_|          _|_|_|  _|_|_|                
+  _|  _|    _|    _|  _|_|_|_|  _|    _|  _|  _|    _|  _|    _|  _|_|_|_|_|  
+_|_|_|_|_|  _|    _|  _|        _|    _|  _|  _|    _|  _|    _|              
+  _|  _|      _|_|_|    _|_|_|  _|_|_|    _|    _|_|_|  _|    _|              
+                                                                              
+                                                                              
+                                              
+      _|                                  _|  
+  _|_|_|    _|_|    _|      _|    _|_|    _|  
+_|    _|  _|_|_|_|  _|      _|  _|_|_|_|  _|  
+_|    _|  _|          _|  _|    _|        _|  
+  _|_|_|    _|_|_|      _|        _|_|_|  _|  
+                                              
+                                              
+  _   _   _   _   _   _   _  
+ / \ / \ / \ / \ / \ / \ / \ 
+( < | j | o | s | h | k | > )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ 
+  _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _  
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ 
+( j | o | s | h | k | @ | i | n | f | l | u | x | : | / | e | t | c | / | l )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ 
+  _   _   _   _   _   _   _   _   _   _   _     _   _     _   _     _  
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \   / \ / \   / \ / \   / \ 
+( o | g | r | o | t | a | t | e | . | d | > ) ( s | h ) ( - | n ) ( * )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/   \_/ \_/   \_/ \_/   \_/ 
+  _   _   _   _   _   _   _     _   _   _   _   _   _   _     _   _   _   _  
+ / \ / \ / \ / \ / \ / \ / \   / \ / \ / \ / \ / \ / \ / \   / \ / \ / \ / \ 
+( < | j | o | s | h | k | > ) ( a | p | a | c | h | e | : ) ( l | i | n | e )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/   \_/ \_/ \_/ \_/ \_/ \_/ \_/   \_/ \_/ \_/ \_/ 
+  _   _   _     _   _   _   _   _   _     _   _   _   _   _     _   _   _   _  
+ / \ / \ / \   / \ / \ / \ / \ / \ / \   / \ / \ / \ / \ / \   / \ / \ / \ / \ 
+( 1 | 4 | : ) ( s | y | n | t | a | x ) ( e | r | r | o | r ) ( n | e | a | r )
+ \_/ \_/ \_/   \_/ \_/ \_/ \_/ \_/ \_/   \_/ \_/ \_/ \_/ \_/   \_/ \_/ \_/ \_/ 
+  _   _   _   _   _   _   _   _   _   _     _   _   _   _   _     _   _   _  
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \   / \ / \ / \ / \ / \   / \ / \ / \ 
+( u | n | e | x | p | e | c | t | e | d ) ( t | o | k | e | n ) ( ` | } | ' )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/   \_/ \_/ \_/ \_/ \_/   \_/ \_/ \_/ 
+  _   _   _   _   _   _   _     _   _   _   _   _   _   _     _   _   _   _  
+ / \ / \ / \ / \ / \ / \ / \   / \ / \ / \ / \ / \ / \ / \   / \ / \ / \ / \ 
+( < | j | o | s | h | k | > ) ( a | p | a | c | h | e | : ) ( l | i | n | e )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/   \_/ \_/ \_/ \_/ \_/ \_/ \_/   \_/ \_/ \_/ \_/ 
+  _   _   _     _   _   _  
+ / \ / \ / \   / \ / \ / \ 
+( 1 | 4 | : ) ( ` | } | ' )
+ \_/ \_/ \_/   \_/ \_/ \_/ 
+  _   _   _   _   _   _   _     _   _   _     _   _   _   _  
+ / \ / \ / \ / \ / \ / \ / \   / \ / \ / \   / \ / \ / \ / \ 
+( < | j | o | s | h | k | > ) ( t | h | e ) ( p | l | o | t )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/   \_/ \_/ \_/   \_/ \_/ \_/ \_/ 
+  _   _   _   _   _   _   _   _  
+ / \ / \ / \ / \ / \ / \ / \ / \ 
+( t | h | i | c | k | e | n | s )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ 
+  _   _   _   _   _   _   _   _   _   _   _     _   _   _   _   _  
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \   / \ / \ / \ / \ / \ 
+( < | a | s | u | f | f | i | e | l | d | > ) ( t | h | o | s | e )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/   \_/ \_/ \_/ \_/ \_/ 
+  _   _   _   _   _   _     _   _   _   _   _     _   _   _   _   _   _   _  
+ / \ / \ / \ / \ / \ / \   / \ / \ / \ / \ / \   / \ / \ / \ / \ / \ / \ / \ 
+( a | r | e | n | ' | t ) ( s | h | e | l | l ) ( s | c | r | i | p | t | s )
+ \_/ \_/ \_/ \_/ \_/ \_/   \_/ \_/ \_/ \_/ \_/   \_/ \_/ \_/ \_/ \_/ \_/ \_/ 
+  _   _   _   _   _   _   _     _   _   _   _     _   _   _   _   _   _  
+ / \ / \ / \ / \ / \ / \ / \   / \ / \ / \ / \   / \ / \ / \ / \ / \ / \ 
+( < | e | r | i | c | h | > ) ( t | h | i | s ) ( w | a | s | n | ' | t )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/   \_/ \_/ \_/ \_/   \_/ \_/ \_/ \_/ \_/ \_/ 
+  _   _   _   _   _   _   _   _  
+ / \ / \ / \ / \ / \ / \ / \ / \ 
+( c | h | i | c | k | e | n | . )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ 
+                  _   _     _   _  
+                 / \ / \   / \ / \ 
+                ( - | - ) ( i | n )
+                 \_/ \_/   \_/ \_/ 
+  _   _   _   _   _   _   _   _   _   _   _   _   _  
+ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ 
+( # | d | e | b | i | a | n | - | d | e | v | e | l )
+ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ 
++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+|<|j|o|s|h|k|>| |j|o|s|h|k|@|i|n|f|l|u|x|:|/|e|t|c|/|l|o|g|r|o|t|a|t|e|.|d|>|
++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
++-+-+ +-+-+ +-+
+|s|h| |-|n| |*|
++-+-+ +-+-+ +-+
++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+
+|<|j|o|s|h|k|>| |a|p|a|c|h|e|:| |l|i|n|e| |1|4|:| |s|y|n|t|a|x| |e|r|r|o|r|
++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+
++-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+
+|n|e|a|r| |u|n|e|x|p|e|c|t|e|d| |t|o|k|e|n| |`|}|'|
++-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+
++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+ +-+-+-+
+|<|j|o|s|h|k|>| |a|p|a|c|h|e|:| |l|i|n|e| |1|4|:| |`|}|'|
++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+ +-+-+-+
++-+-+-+-+-+-+-+ +-+-+-+ +-+-+-+-+ +-+-+-+-+-+-+-+-+
+|<|j|o|s|h|k|>| |t|h|e| |p|l|o|t| |t|h|i|c|k|e|n|s|
++-+-+-+-+-+-+-+ +-+-+-+ +-+-+-+-+ +-+-+-+-+-+-+-+-+
++-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+-+-+-+-+
+|<|a|s|u|f|f|i|e|l|d|>| |t|h|o|s|e| |a|r|e|n|'|t| |s|h|e|l|l| |s|c|r|i|p|t|s|
++-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+-+-+-+-+
++-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
+|<|e|r|i|c|h|>| |t|h|i|s| |w|a|s|n|'|t| |c|h|i|c|k|e|n|.|
++-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
+                +-+-+ +-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+
+                |-|-| |i|n| |#|d|e|b|i|a|n|-|d|e|v|e|l|
+                +-+-+ +-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+
+                                                 __  _    _               _  __
+                                                 \ \| | _| |__  ___  ___ (_)/ /
+                                                  \ \ |/ / '_ \/ __|/ _ \| / / 
+                                                  / /   <| | | \__ \ (_) | \ \ 
+                                                 /_/|_|\_\_| |_|___/\___// |\_\
+                                                                       |__/    
+         _          __            _  __       _   ____  _    _               _ 
+     ___| |_ ___   / /__  ___   _| |/ _|_ __ (_) / __ \| | _| |__  ___  ___ (_)
+    / __| __/ _ \ / (_) \/ / | | | | |_| '_ \| |/ / _` | |/ / '_ \/ __|/ _ \| |
+   | (__| ||  __// / _ >  <| |_| | |  _| | | | | | (_| |   <| | | \__ \ (_) | |
+    \___|\__\___/_/ (_)_/\_\\__,_|_|_| |_| |_|_|\ \__,_|_|\_\_| |_|___/\___// |
+                                                 \____/                   |__/ 
+           _          __      _       _        _                        _    __
+          | |__  ___  \ \  __| |  ___| |_ __ _| |_ ___  _ __ __ _  ___ | |  / /
+          | '_ \/ __|  \ \/ _` | / _ \ __/ _` | __/ _ \| '__/ _` |/ _ \| | / / 
+          | | | \__ \  / / (_| ||  __/ || (_| | || (_) | | | (_| | (_) | |/ /  
+          |_| |_|___/ /_/ \__,_(_)___|\__\__,_|\__\___/|_|  \__, |\___/|_/_/   
+                                                            |___/              
+                                                                               
+                                                           __/\__  _ __        
+                                                           \    / | '_ \ _____ 
+                                                           /_  _\ | | | |_____|
+                                                             \/   |_| |_|      
+                                                                               
+                    _                            __  _    _               _  __
+              _ ___| |__   ___ __ _ _ __   __ _  \ \| | _| |__  ___  ___ (_)/ /
+             (_) _ \ '_ \ / __/ _` | '_ \ / _` |  \ \ |/ / '_ \/ __|/ _ \| / / 
+              |  __/ | | | (_| (_| | |_) | (_| |  / /   <| | | \__ \ (_) | \ \ 
+             (_)___|_| |_|\___\__,_| .__/ \__,_| /_/|_|\_\_| |_|___/\___// |\_\
+                                   |_|                                 |__/    
+                             _                       _  _   _              _ _ 
+                  __  ____ _| |_ _ __  _   _ ___   _| || | / |   ___ _ __ (_) |
+                  \ \/ / _` | __| '_ \| | | / __| (_) || |_| |  / _ \ '_ \| | |
+                   >  < (_| | |_| | | | |_| \__ \  _|__   _| | |  __/ | | | | |
+                  /_/\_\__,_|\__|_| |_|\__, |___/ (_)  |_| |_|  \___|_| |_|_|_|
+                                       |___/                                   
+                                                                               
+                                _ __ __ _  ___ _ __    _ __ ___  _ __ _ __ ___ 
+                               | '__/ _` |/ _ \ '_ \  | '__/ _ \| '__| '__/ _ \
+                               | | | (_| |  __/ | | | | | | (_) | |  | | |  __/
+                               |_|  \__,_|\___|_| |_| |_|  \___/|_|  |_|  \___|
+                                                                               
+              _         _         _      _                                     
+   _ __   ___| | _____ | |_    __| | ___| |_ ___ ___ _ ____  _____ _ __  _   _ 
+  | '_ \ / _ \ |/ / _ \| __|  / _` |/ _ \ __/ __/ _ \ '_ \ \/ / _ \ '_ \| | | |
+  | | | |  __/   < (_) | |_  | (_| |  __/ || (_|  __/ |_) >  <  __/ | | | |_| |
+  |_| |_|\___|_|\_\___/ \__|  \__,_|\___|\__\___\___| .__/_/\_\___|_| |_|\__,_|
+                                                    |_|                        
+                                                                       ___   _ 
+                                                                      ( ) \ ( )
+                                                                      |/ | | \|
+                                                                          > >  
+                                                                         | |   
+                                                                        /_/    
+                    _                            __  _    _               _  __
+              _ ___| |__   ___ __ _ _ __   __ _  \ \| | _| |__  ___  ___ (_)/ /
+             (_) _ \ '_ \ / __/ _` | '_ \ / _` |  \ \ |/ / '_ \/ __|/ _ \| / / 
+              |  __/ | | | (_| (_| | |_) | (_| |  / /   <| | | \__ \ (_) | \ \ 
+             (_)___|_| |_|\___\__,_| .__/ \__,_| /_/|_|\_\_| |_|___/\___// |\_\
+                                   |_|                                 |__/    
+                                         ___   _     _  _   _              _ _ 
+                                        ( ) \ ( )  _| || | / |   ___ _ __ (_) |
+                                        |/ | | \| (_) || |_| |  / _ \ '_ \| | |
+                                            > >    _|__   _| | |  __/ | | | | |
+                                           | |    (_)  |_| |_|  \___|_| |_|_|_|
+                                          /_/                                  
+              _        _              _     _    __  _    _               _  __
+             | |_ ___ | |_ __     ___| |__ | |_  \ \| | _| |__  ___  ___ (_)/ /
+             | __/ _ \| | '_ \   / _ \ '_ \| __|  \ \ |/ / '_ \/ __|/ _ \| / / 
+             | || (_) | | |_) | |  __/ | | | |_   / /   <| | | \__ \ (_) | \ \ 
+              \__\___/|_| .__/   \___|_| |_|\__| /_/|_|\_\_| |_|___/\___// |\_\
+                        |_|                                            |__/    
+                                                          _        _ _     _   
+                                           ___ _ __   ___| | _____(_) |__ | |_ 
+                                          / __| '_ \ / _ \ |/ / __| | '_ \| __|
+                                          \__ \ | | |  __/   < (__| | | | | |_ 
+                                          |___/_| |_|\___|_|\_\___|_|_| |_|\__|
+                                                                               
+                      _     _    __      _ _      _  __  __                  __
+       ___  ___  ___ | |__ | |_  \ \  __| | | ___(_)/ _|/ _|_   _ ___  __ _ / /
+      / _ \/ __|/ _ \| '_ \| __|  \ \/ _` | |/ _ \ | |_| |_| | | / __|/ _` / / 
+     |  __/\__ \ (_) | | | | |_   / / (_| | |  __/ |  _|  _| |_| \__ \ (_| \ \ 
+      \___||___/\___/|_| |_|\__| /_/ \__,_|_|\___|_|_| |_|  \__,_|___/\__,_|\_\
+                                                                               
+                               _ _      _           _   _                      
+                              | | | ___| |__  ___  | |_( )_ __   ___ _ __ __ _ 
+                              | | |/ _ \ '_ \/ __| | __|/| '_ \ / _ \ '__/ _` |
+                              | | |  __/ | | \__ \ | |_  | | | |  __/ | | (_| |
+                              |_|_|\___|_| |_|___/  \__| |_| |_|\___|_|  \__,_|
+                                                                               
+                                                      _         _              
+                                                  ___| |_ _ __ (_)_ __ ___ ___ 
+                                                 / __| __| '_ \| | '__/ __/ __|
+                                                 \__ \ |_| |_) | | | | (__\__ \
+                                                 |___/\__| .__/|_|_|  \___|___/
+                                                         |_|                   
+                                    _ _     _    __  _          _            __
+                                ___(_) |__ | |_  \ \| |__   ___(_)_ __ ___  / /
+                               / __| | '_ \| __|  \ \ '_ \ / __| | '__/ _ \/ / 
+                               \__ \ | | | | |_   / / | | | (__| | | |  __/\ \ 
+                               |___/_|_| |_|\__| /_/|_| |_|\___|_|_|  \___| \_\
+                                                                               
+                        _        _ _            _   _                          
+             _ __   ___| | _____(_) |__   ___  | |_( )_ __  ___  __ ___      __
+            | '_ \ / _ \ |/ / __| | '_ \ / __| | __|/| '_ \/ __|/ _` \ \ /\ / /
+           _| | | |  __/   < (__| | | | | (__  | |_  | | | \__ \ (_| |\ V  V / 
+          (_)_| |_|\___|_|\_\___|_|_| |_|\___|  \__| |_| |_|___/\__,_| \_/\_/  
+                                                                               
+                                               _                               
+                                         _ __ (_)                              
+                                        | '_ \| |  _____ _____                 
+                                        | | | | | |_____|_____|                
+                                        |_| |_|_|                              
+                                                                               
+          _                    _                   _ _              _   _  _   
+         | | _____   _____  __| |      _ __   __ _(_) |__   ___  __| |_| || |_ 
+         | |/ _ \ \ / / _ \/ _` |_____| '_ \ / _` | | '_ \ / _ \/ _` |_  ..  _|
+         | |  __/\ V /  __/ (_| |_____| | | | (_| | | |_) |  __/ (_| |_      _|
+         |_|\___| \_/ \___|\__,_|     |_| |_|\__,_|_|_.__/ \___|\__,_| |_||_|  
+                                                                               
+                                                             
+      _/  _/                      _/        _/        _/     
+   _/          _/_/      _/_/_/  _/_/_/    _/  _/      _/    
+_/      _/  _/    _/  _/_/      _/    _/  _/_/          _/   
+ _/    _/  _/    _/      _/_/  _/    _/  _/  _/      _/      
+  _/  _/    _/_/    _/_/_/    _/    _/  _/    _/  _/         
+     _/                                                      
+  _/                                                         
+                                                                           
+        _/                      _/        _/            _/_/_/_/_/    _/   
+             _/_/      _/_/_/  _/_/_/    _/  _/      _/          _/        
+      _/  _/    _/  _/_/      _/    _/  _/_/      _/    _/_/_/  _/  _/     
+     _/  _/    _/      _/_/  _/    _/  _/  _/    _/  _/    _/  _/  _/      
+    _/    _/_/    _/_/_/    _/    _/  _/    _/  _/    _/_/_/_/    _/       
+   _/                                            _/                        
+_/                                                _/_/_/_/_/_/             
+                                                                       
+                  _/_/  _/                                  _/         
+   _/_/_/      _/      _/  _/    _/  _/    _/  _/        _/    _/_/    
+  _/    _/  _/_/_/_/  _/  _/    _/    _/_/            _/    _/_/_/_/   
+ _/    _/    _/      _/  _/    _/  _/    _/        _/      _/          
+_/    _/    _/      _/    _/_/_/  _/    _/  _/  _/          _/_/_/     
+                                                                       
+                                                                       
+                                                                            
+   _/                        _/  _/                                         
+_/_/_/_/    _/_/_/        _/    _/    _/_/      _/_/_/  _/  _/_/    _/_/    
+ _/      _/            _/      _/  _/    _/  _/    _/  _/_/      _/    _/   
+_/      _/          _/        _/  _/    _/  _/    _/  _/        _/    _/    
+ _/_/    _/_/_/  _/          _/    _/_/      _/_/_/  _/          _/_/       
+                                                _/                          
+                                           _/_/                             
+                                                              
+   _/                  _/                          _/  _/     
+_/_/_/_/    _/_/_/  _/_/_/_/    _/_/          _/_/_/    _/    
+ _/      _/    _/    _/      _/_/_/_/      _/    _/      _/   
+_/      _/    _/    _/      _/            _/    _/    _/      
+ _/_/    _/_/_/      _/_/    _/_/_/  _/    _/_/_/  _/         
+                                                              
+                                                              
+                                                                   
+              _/                                      _/  _/  _/   
+     _/_/_/  _/_/_/                    _/_/_/          _/_/_/      
+  _/_/      _/    _/      _/_/_/_/_/  _/    _/      _/_/_/_/_/     
+     _/_/  _/    _/                  _/    _/        _/_/_/        
+_/_/_/    _/    _/                  _/    _/      _/  _/  _/       
+                                                                   
+                                                                   
+                                                             
+      _/  _/                      _/        _/        _/     
+   _/          _/_/      _/_/_/  _/_/_/    _/  _/      _/    
+_/      _/  _/    _/  _/_/      _/    _/  _/_/          _/   
+ _/    _/  _/    _/      _/_/  _/    _/  _/  _/      _/      
+  _/  _/    _/_/    _/_/_/    _/    _/  _/    _/  _/         
+     _/                                                      
+  _/                                                         
+                                                                   
+                                           _/                      
+    _/_/_/  _/_/_/      _/_/_/    _/_/_/  _/_/_/      _/_/    _/   
+ _/    _/  _/    _/  _/    _/  _/        _/    _/  _/_/_/_/        
+_/    _/  _/    _/  _/    _/  _/        _/    _/  _/               
+ _/_/_/  _/_/_/      _/_/_/    _/_/_/  _/    _/    _/_/_/  _/      
+        _/                                                         
+       _/                                                          
+                                                        
+    _/  _/                            _/  _/  _/        
+   _/      _/_/_/      _/_/        _/_/  _/  _/    _/   
+  _/  _/  _/    _/  _/_/_/_/        _/  _/_/_/_/        
+ _/  _/  _/    _/  _/              _/      _/           
+_/  _/  _/    _/    _/_/_/        _/      _/    _/      
+                                                        
+                                                        
+                                                                
+                                    _/                          
+     _/_/_/  _/    _/  _/_/_/    _/_/_/_/    _/_/_/  _/    _/   
+  _/_/      _/    _/  _/    _/    _/      _/    _/    _/_/      
+     _/_/  _/    _/  _/    _/    _/      _/    _/  _/    _/     
+_/_/_/      _/_/_/  _/    _/      _/_/    _/_/_/  _/    _/      
+               _/                                               
+          _/_/                                                  
+                                                     
+                                                     
+    _/_/    _/  _/_/  _/  _/_/    _/_/    _/  _/_/   
+ _/_/_/_/  _/_/      _/_/      _/    _/  _/_/        
+_/        _/        _/        _/    _/  _/           
+ _/_/_/  _/        _/          _/_/    _/            
+                                                     
+                                                     
+                                            
+                                            
+   _/_/_/      _/_/      _/_/_/  _/  _/_/   
+  _/    _/  _/_/_/_/  _/    _/  _/_/        
+ _/    _/  _/        _/    _/  _/           
+_/    _/    _/_/_/    _/_/_/  _/            
+                                            
+                                            
+                                                                         
+                                                                         
+  _/    _/  _/_/_/      _/_/    _/    _/  _/_/_/      _/_/      _/_/_/   
+ _/    _/  _/    _/  _/_/_/_/    _/_/    _/    _/  _/_/_/_/  _/          
+_/    _/  _/    _/  _/        _/    _/  _/    _/  _/        _/           
+ _/_/_/  _/    _/    _/_/_/  _/    _/  _/_/_/      _/_/_/    _/_/_/      
+                                      _/                                 
+                                     _/                                  
+                                
+   _/                      _/   
+_/_/_/_/    _/_/      _/_/_/    
+ _/      _/_/_/_/  _/    _/     
+_/      _/        _/    _/      
+ _/_/    _/_/_/    _/_/_/       
+                                
+                                
+                                                        _/    _/        _/  
+   _/                _/                                  _/    _/    _/     
+_/_/_/_/    _/_/    _/  _/      _/_/    _/_/_/                _/            
+ _/      _/    _/  _/_/      _/_/_/_/  _/    _/                _/           
+_/      _/    _/  _/  _/    _/        _/    _/              _/              
+ _/_/    _/_/    _/    _/    _/_/_/  _/    _/              _/               
+                                                        _/                  
+                                                                            
+                                                             
+      _/  _/                      _/        _/        _/     
+   _/          _/_/      _/_/_/  _/_/_/    _/  _/      _/    
+_/      _/  _/    _/  _/_/      _/    _/  _/_/          _/   
+ _/    _/  _/    _/      _/_/  _/    _/  _/  _/      _/      
+  _/  _/    _/_/    _/_/_/    _/    _/  _/    _/  _/         
+     _/                                                      
+  _/                                                         
+                                                                   
+                                           _/                      
+    _/_/_/  _/_/_/      _/_/_/    _/_/_/  _/_/_/      _/_/    _/   
+ _/    _/  _/    _/  _/    _/  _/        _/    _/  _/_/_/_/        
+_/    _/  _/    _/  _/    _/  _/        _/    _/  _/               
+ _/_/_/  _/_/_/      _/_/_/    _/_/_/  _/    _/    _/_/_/  _/      
+        _/                                                         
+       _/                                                          
+                                                        
+    _/  _/                            _/  _/  _/        
+   _/      _/_/_/      _/_/        _/_/  _/  _/    _/   
+  _/  _/  _/    _/  _/_/_/_/        _/  _/_/_/_/        
+ _/  _/  _/    _/  _/              _/      _/           
+_/  _/  _/    _/    _/_/_/        _/      _/    _/      
+                                                        
+                                                        
+   _/    _/        _/  
+    _/    _/    _/     
+         _/            
+          _/           
+       _/              
+      _/               
+   _/                  
+                       
+                                                             
+      _/  _/                      _/        _/        _/     
+   _/          _/_/      _/_/_/  _/_/_/    _/  _/      _/    
+_/      _/  _/    _/  _/_/      _/    _/  _/_/          _/   
+ _/    _/  _/    _/      _/_/  _/    _/  _/  _/      _/      
+  _/  _/    _/_/    _/_/_/    _/    _/  _/    _/  _/         
+     _/                                                      
+  _/                                                         
+                                                                     
+   _/      _/                                _/              _/      
+_/_/_/_/  _/_/_/      _/_/        _/_/_/    _/    _/_/    _/_/_/_/   
+ _/      _/    _/  _/_/_/_/      _/    _/  _/  _/    _/    _/        
+_/      _/    _/  _/            _/    _/  _/  _/    _/    _/         
+ _/_/  _/    _/    _/_/_/      _/_/_/    _/    _/_/        _/_/      
+                              _/                                     
+                             _/                                      
+                                                                           
+   _/      _/        _/            _/                                      
+_/_/_/_/  _/_/_/          _/_/_/  _/  _/      _/_/    _/_/_/      _/_/_/   
+ _/      _/    _/  _/  _/        _/_/      _/_/_/_/  _/    _/  _/_/        
+_/      _/    _/  _/  _/        _/  _/    _/        _/    _/      _/_/     
+ _/_/  _/    _/  _/    _/_/_/  _/    _/    _/_/_/  _/    _/  _/_/_/        
+                                                                           
+                                                                           
+                                                                             
+      _/                                    _/_/    _/_/  _/            _/   
+   _/      _/_/_/    _/_/_/  _/    _/    _/      _/            _/_/    _/    
+_/      _/    _/  _/_/      _/    _/  _/_/_/_/_/_/_/_/  _/  _/_/_/_/  _/     
+ _/    _/    _/      _/_/  _/    _/    _/      _/      _/  _/        _/      
+  _/    _/_/_/  _/_/_/      _/_/_/    _/      _/      _/    _/_/_/  _/       
+                                                                             
+                                                                             
+                                                                          
+         _/  _/            _/      _/                                     
+    _/_/_/    _/        _/_/_/_/  _/_/_/      _/_/      _/_/_/    _/_/    
+ _/    _/      _/        _/      _/    _/  _/    _/  _/_/      _/_/_/_/   
+_/    _/    _/          _/      _/    _/  _/    _/      _/_/  _/          
+ _/_/_/  _/              _/_/  _/    _/    _/_/    _/_/_/      _/_/_/     
+                                                                          
+                                                                          
+                                              _/         
+                                           _/    _/      
+    _/_/_/  _/  _/_/    _/_/    _/_/_/        _/_/_/_/   
+ _/    _/  _/_/      _/_/_/_/  _/    _/        _/        
+_/    _/  _/        _/        _/    _/        _/         
+ _/_/_/  _/          _/_/_/  _/    _/          _/_/      
+                                                         
+                                                         
+                                           
+              _/                  _/  _/   
+     _/_/_/  _/_/_/      _/_/    _/  _/    
+  _/_/      _/    _/  _/_/_/_/  _/  _/     
+     _/_/  _/    _/  _/        _/  _/      
+_/_/_/    _/    _/    _/_/_/  _/  _/       
+                                           
+                                           
+                                                                    
+                                  _/              _/                
+     _/_/_/    _/_/_/  _/  _/_/      _/_/_/    _/_/_/_/    _/_/_/   
+  _/_/      _/        _/_/      _/  _/    _/    _/      _/_/        
+     _/_/  _/        _/        _/  _/    _/    _/          _/_/     
+_/_/_/      _/_/_/  _/        _/  _/_/_/        _/_/  _/_/_/        
+                                 _/                                 
+                                _/                                  
+                                                             
+      _/                      _/            _/        _/     
+   _/      _/_/    _/  _/_/        _/_/_/  _/_/_/      _/    
+_/      _/_/_/_/  _/_/      _/  _/        _/    _/      _/   
+ _/    _/        _/        _/  _/        _/    _/    _/      
+  _/    _/_/_/  _/        _/    _/_/_/  _/    _/  _/         
+                                                             
+                                                             
+                                   
+   _/      _/        _/            
+_/_/_/_/  _/_/_/          _/_/_/   
+ _/      _/    _/  _/  _/_/        
+_/      _/    _/  _/      _/_/     
+ _/_/  _/    _/  _/  _/_/_/        
+                                   
+                                   
+                                                       _/         
+                                                    _/    _/      
+ _/      _/      _/    _/_/_/    _/_/_/  _/_/_/        _/_/_/_/   
+_/      _/      _/  _/    _/  _/_/      _/    _/        _/        
+ _/  _/  _/  _/    _/    _/      _/_/  _/    _/        _/         
+  _/      _/        _/_/_/  _/_/_/    _/    _/          _/_/      
+                                                                  
+                                                                  
+                                                                    
+             _/        _/            _/                             
+    _/_/_/  _/_/_/          _/_/_/  _/  _/      _/_/    _/_/_/      
+ _/        _/    _/  _/  _/        _/_/      _/_/_/_/  _/    _/     
+_/        _/    _/  _/  _/        _/  _/    _/        _/    _/      
+ _/_/_/  _/    _/  _/    _/_/_/  _/    _/    _/_/_/  _/    _/  _/   
+                                                                    
+                                                                    
+                                                                       
+                                                                       
+                                                                       
+                                                                       
+                                                                       
+                                                                       
+                                                                       
+                                                                       
+                                           
+                              _/           
+                                 _/_/_/    
+_/_/_/_/_/  _/_/_/_/_/      _/  _/    _/   
+                           _/  _/    _/    
+                          _/  _/    _/     
+                                           
+                                           
+                                                                    
+     _/  _/          _/            _/        _/                     
+  _/_/_/_/_/    _/_/_/    _/_/    _/_/_/          _/_/_/  _/_/_/    
+   _/  _/    _/    _/  _/_/_/_/  _/    _/  _/  _/    _/  _/    _/   
+_/_/_/_/_/  _/    _/  _/        _/    _/  _/  _/    _/  _/    _/    
+ _/  _/      _/_/_/    _/_/_/  _/_/_/    _/    _/_/_/  _/    _/     
+                                                                    
+                                                                    
+                                                             
+                    _/                                  _/   
+               _/_/_/    _/_/    _/      _/    _/_/    _/    
+_/_/_/_/_/  _/    _/  _/_/_/_/  _/      _/  _/_/_/_/  _/     
+           _/    _/  _/          _/  _/    _/        _/      
+            _/_/_/    _/_/_/      _/        _/_/_/  _/       
+                                                             
+                                                             
+              
+/o _  _|_ | \ 
+\|(_)_>| ||</ 
+_|            
+              __      _                                                   
+ o _  _|_ |  /  \o.__|_|     o /__|_ _ /| _  _ .___|_ _._|_ _   _|\  _|_  
+ |(_)_>| ||<| (|/|| || ||_|><o/(/_|_(_/ |(_)(_||(_)|_(_| |_(/_o(_|/ _>| | 
+_|           \__                             _|                           
+          
+__._  \|/ 
+  | | /|\ 
+          
+                                                                             
+/o _  _|_ | \  _.._  _. _|_  _ o |o._  _  /||_|_o  _  .__|_ _.    _ ._.__ ._ 
+\|(_)_>| ||</ (_||_)(_|(_| |(/_o ||| |(/_  |  | o _>\/| ||_(_|>< (/_| |(_)|  
+_|               |                                  /                        
+                                                        -.   
+._  _  _.._    ._  _   ._  _  __|_ _  _| _|_ _ |  _ ._  \|_/ 
+| |(/_(_||  |_|| |(/_><|_)(/_(_ |_(/_(_|  |_(_)|<(/_| |  |   
+                       |                                -'   
+                                                  -.   
+/o _  _|_ | \  _.._  _. _|_  _ o |o._  _  /||_|_o \|_/ 
+\|(_)_>| ||</ (_||_)(_|(_| |(/_o ||| |(/_  |  | o  |   
+_|               |                                -'   
+                                                      
+/o _  _|_ | \ _|_|_  _  ._ | __|_ _|_|_ o _|  _ ._  _ 
+\|(_)_>| ||</  |_| |(/_ |_)|(_)|_  |_| ||(_|<(/_| |_> 
+_|                      |                             
+          _  _                                                                 
+/ _. _  _|__|_o _ | _|\ _|_|_  _  _ _   _..__ ._/_|_  _|_  _ ||  _ _._o.__|_ _ 
+\(_|_>|_||  | |(/_|(_|/  |_| |(_)_>(/_ (_||(/_| | |_ _>| |(/_|| _>(_| ||_)|__> 
+                                                                       |       
+                                                          
+/ _ ._o _|_ \ _|_|_ o _      _. _._/_|_  _|_ o _|  _ ._   
+\(/_| |(_| |/  |_| ||_> \/\/(_|_>| | |_ (_| ||(_|<(/_| |o 
+                                                          
+                                                            
+                ____ o._  -|-|- _| _ |_ o _..____| _    _ | 
+                     || | -|-|-(_|(/_|_)|(_|| |(_|(/_\/(/_| 
+                                                            
+<joshk>&SPjoshk&Atinflux:/etc/logrotate.d>&SPsh&SP-n&SP*
+<joshk>&SPapache:&SPline&SP14:&SPsyntax&SPerror&SPnear&SPunexpected&SPtoken
+&'!&!)'
+<joshk>&SPapache:&SPline&SP14:&SP&'!&!)'
+<joshk>&SPthe&SPplot&SPthickens
+<asuffield>&SPthose&SParen't&SPshell&SPscripts
+<erich>&SPthis&SPwasn't&SPchicken.
+&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP--&SPin&SP&Nbdebian-devel
+              _      _     
+ /o          | |    | |  \ 
+/    __   ,  | |    | |   \
+\ | /  \_/ \_|/ \   |/_)  /
+ \|/\__/  \/ |   |_/| \_// 
+ /|                        
+ \|                        
+             _      _                       _   _                             
+ o          | |    | |    ____  o          | | | |             o   /          
+    __   ,  | |    | |   / __,\     _  _   | | | |                /_ _|_  __  
+ | /  \_/ \_|/ \   |/_) | /  | ||  / |/ |  |/  |/  |   |  /\/    /|/  |  /    
+ |/\__/  \/ |   |_/| \_/| \_/|/ |_/  |  |_/|__/|__/ \_/|_/ /\_/o/ |__/|_/\___/
+/|                       \____/            |\                                 
+\|                                         |/                                 
+     _                                                       _     
+   /| |                                          |  \       | |    
+  / | |  __   __,  ,_    __ _|_  __, _|_  _    __|   \   ,  | |    
+ /  |/  /  \_/  | /  |  /  \_|  /  |  |  |/   /  |   /  / \_|/ \   
+/   |__/\__/ \_/|/   |_/\__/ |_/\_/|_/|_/|__/o\_/|_//    \/ |   |_/
+               /|                                                  
+               \|                                                  
+                    
+                    
+      _  _      \|/ 
+-----/ |/ |    --*--
+       |  |_/   /|\ 
+                    
+                    
+              _      _                              _          
+ /o          | |    | |  \                         | |        o
+/    __   ,  | |    | |   \   __,    _   __,   __  | |     _   
+\ | /  \_/ \_|/ \   |/_)  /  /  |  |/ \_/  |  /    |/ \   |/   
+ \|/\__/  \/ |   |_/| \_//   \_/|_/|__/ \_/|_/\___/|   |_/|__/o
+ /|                               /|                           
+ \|                               \|                           
+ _                    ,                                        
+| | o                /||  | o                                  
+| |     _  _    _     ||__|_    ,         _  _  _|_  __,       
+|/  |  / |/ |  |/     |   |    / \_|   | / |/ |  |  /  |  /\/  
+|__/|_/  |  |_/|__/   |   | o   \/  \_/|/  |  |_/|_/\_/|_/ /\_/
+                                      /|                       
+                                      \|                       
+                                                     
+                                                     
+ _   ,_    ,_    __   ,_      _  _    _   __,   ,_   
+|/  /  |  /  |  /  \_/  |    / |/ |  |/  /  |  /  |  
+|__/   |_/   |_/\__/    |_/    |  |_/|__/\_/|_/   |_/
+                                                     
+                                                     
+                                                               _               
+                                                |             | |              
+        _  _    _         _   _   __ _|_  _   __|    _|_  __  | |   _   _  _   
+|   |  / |/ |  |/  /\/  |/ \_|/  /    |  |/  /  |     |  /  \_|/_) |/  / |/ |  
+ \_/|_/  |  |_/|__/ /\_/|__/ |__/\___/|_/|__/\_/|_/   |_/\__/ | \_/|__/  |  |_/
+                       /|                                                      
+                       \|                                                      
+o   o
+\\  /
+  |  
+   > 
+  |  
+ /   
+     
+              _      _                              _          
+ /o          | |    | |  \                         | |        o
+/    __   ,  | |    | |   \   __,    _   __,   __  | |     _   
+\ | /  \_/ \_|/ \   |/_)  /  /  |  |/ \_/  |  /    |/ \   |/   
+ \|/\__/  \/ |   |_/| \_//   \_/|_/|__/ \_/|_/\___/|   |_/|__/o
+ /|                               /|                           
+ \|                               \|                           
+ _                    ,        o   o
+| | o                /||  | o  \\  /
+| |     _  _    _     ||__|_     |  
+|/  |  / |/ |  |/     |   |       > 
+|__/|_/  |  |_/|__/   |   | o    |  
+                                /   
+                                    
+              _      _            _                  _          
+ /o          | |    | |  \       | |                | |         
+/    __   ,  | |    | |   \  _|_ | |     _       _  | |  __ _|_ 
+\ | /  \_/ \_|/ \   |/_)  /   |  |/ \   |/     |/ \_|/  /  \_|  
+ \|/\__/  \/ |   |_/| \_//    |_/|   |_/|__/   |__/ |__/\__/ |_/
+ /|                                           /|                
+ \|                                           \|                
+     _              _                   
+    | |    o       | |                  
+_|_ | |        __  | |   _   _  _    ,  
+ |  |/ \   |  /    |/_) |/  / |/ |  / \_
+ |_/|   |_/|_/\___/| \_/|__/  |  |_/ \/ 
+                                        
+                                        
+                    _   _          _                 _                  
+ /                 | | | | o      | |    |  \       | |                 
+/  __,   ,         | | | |     _  | |  __|   \  _|_ | |     __   ,   _  
+\ /  |  / \_|   |  |/  |/  |  |/  |/  /  |   /   |  |/ \   /  \_/ \_|/  
+ \\_/|_/ \/  \_/|_/|__/|__/|_/|__/|__/\_/|_//    |_/|   |_/\__/  \/ |__/
+                   |\  |\                                               
+                   |/  |/                                               
+                        o           _          _   _  
+                        /          | |        | | | | 
+ __,   ,_    _   _  _    _|_    ,  | |     _  | | | | 
+/  |  /  |  |/  / |/ |    |    / \_|/ \   |/  |/  |/  
+\_/|_/   |_/|__/  |  |_/  |_/   \/ |   |_/|__/|__/|__/
+                                                      
+                                                      
+                              
+               o              
+ ,   __   ,_        _ _|_  ,  
+/ \_/    /  |  |  |/ \_|  / \_
+ \/ \___/   |_/|_/|__/ |_/ \/ 
+                 /|           
+                 \|           
+                     _              _            
+ /          o       | |    \       | |    o      
+/  _   ,_       __  | |     \  _|_ | |        ,  
+\ |/  /  |  |  /    |/ \    /   |  |/ \   |  / \_
+ \|__/   |_/|_/\___/|   |_//    |_/|   |_/|_/ \/ 
+                                                 
+                                                 
+                          o            _              _                
+                          /           | |    o       | |               
+         __,   ,   _  _    _|_    __  | |        __  | |   _   _  _    
+|  |  |_/  |  / \_/ |/ |    |    /    |/ \   |  /    |/_) |/  / |/ |   
+ \/ \/  \_/|_/ \/   |  |_/  |_/  \___/|   |_/|_/\___/| \_/|__/  |  |_/o
+                                                                       
+                                                                       
+                                                       
+                                            o          
+                                                _  _   
+                                ----------  |  / |/ |  
+                                            |_/  |  |_/
+                                                       
+                                                       
+                  _                                           _  
+  |  |     |     | |  o                      |               | | 
+--+--+-- __|   _ | |      __,   _  _       __|   _        _  | | 
+--+--+--/  |  |/ |/ \_|  /  |  / |/ |-----/  |  |/  |  |_|/  |/  
+  |  |  \_/|_/|__/\_/ |_/\_/|_/  |  |_/   \_/|_/|__/ \/  |__/|__/
+                                                                 
+                                                                 
+   /_)            |     |  \ \  
+  /  |  _ \   __| __ \  |  /\ \ 
+\ \  | (   |\__ \ | | |   <   / 
+ \_\ |\___/ ____/_| |_|_|\_\_/  
+ ___/                           
+   _)            |     |      __ \ _)        _| |                  /    |   
+    |  _ \   __| __ \  |  /  / _` | | __ \  |   | |   |\ \  /_)   / _ \ __| 
+    | (   |\__ \ | | |   <  | (   | | |   | __| | |   | `  <     /  __/ |   
+    |\___/ ____/_| |_|_|\_\\ \__,_|_|_|  _|_|  _|\__,_| _/\_\_)_/ \___|\__| 
+___/                        \____/                                          
+         / |                       |         |              |\ \        |     
+  __|   /  |  _ \   _` |  __| _ \  __|  _` | __|  _ \    _` | \ \   __| __ \  
+ (     /   | (   | (   | |   (   | |   (   | |    __/   (   |   / \__ \ | | | 
+\___|_/   _|\___/ \__, |_|  \___/ \__|\__,_|\__|\___|_)\__,_| _/  ____/_| |_| 
+                  |___/                                                       
+                \   
+       __ \  \    / 
+_____| |   |  _  _\ 
+      _|  _|   \/   
+                    
+   /_)            |     |  \ \                          |            
+  /  |  _ \   __| __ \  |  /\ \   _` | __ \   _` |  __| __ \   _ \_) 
+\ \  | (   |\__ \ | | |   <   /  (   | |   | (   | (    | | |  __/   
+ \_\ |\___/ ____/_| |_|_|\_\_/  \__,_| .__/ \__,_|\___|_| |_|\___|_) 
+ ___/                                 _|                             
+ |_)            _ | |  |                       |               
+ | | __ \   _ \   | |  |  _)   __| |   | __ \  __|  _` |\ \  / 
+ | | |   |  __/   |___ __|   \__ \ |   | |   | |   (   | `  <  
+_|_|_|  _|\___|  _|   _|  _) ____/\__, |_|  _|\__|\__,_| _/\_\ 
+                                  ____/                        
+                                                 
+  _ \  __|  __| _ \   __|  __ \   _ \  _` |  __| 
+  __/ |    |   (   | |     |   |  __/ (   | |    
+\___|_|   _|  \___/ _|    _|  _|\___|\__,_|_|    
+                                                 
+                                        |            | 
+ |   | __ \   _ \\ \  / __ \   _ \  __| __|  _ \  _` | 
+ |   | |   |  __/ `  <  |   |  __/ (    |    __/ (   | 
+\__,_|_|  _|\___| _/\_\ .__/ \___|\___|\__|\___|\__,_| 
+                       _|                              
+ |         |                )\ \   ) 
+ __|  _ \  |  /  _ \ __ \  \|   | /  
+ |   (   |   <   __/ |   |     ` >   
+\__|\___/ _|\_\\___|_|  _|      |    
+                              _/     
+   /_)            |     |  \ \                          |            
+  /  |  _ \   __| __ \  |  /\ \   _` | __ \   _` |  __| __ \   _ \_) 
+\ \  | (   |\__ \ | | |   <   /  (   | |   | (   | (    | | |  __/   
+ \_\ |\___/ ____/_| |_|_|\_\_/  \__,_| .__/ \__,_|\___|_| |_|\___|_) 
+ ___/                                 _|                             
+ |_)            _ | |  |      )\ \   ) 
+ | | __ \   _ \   | |  |  _) \|   | /  
+ | | |   |  __/   |___ __|       ` >   
+_|_|_|  _|\___|  _|   _|  _)      |    
+                                _/     
+   /_)            |     |  \ \   |   |                 |       |   
+  /  |  _ \   __| __ \  |  /\ \  __| __ \   _ \  __ \  |  _ \  __| 
+\ \  | (   |\__ \ | | |   <   /  |   | | |  __/  |   | | (   | |   
+ \_\ |\___/ ____/_| |_|_|\_\_/  \__|_| |_|\___|  .__/ _|\___/ \__| 
+ ___/                                           _|                 
+ |   |    _)      |                    
+ __| __ \  |  __| |  /  _ \ __ \   __| 
+ |   | | | | (      <   __/ |   |\__ \ 
+\__|_| |_|_|\___|_|\_\\___|_|  _|____/ 
+                                       
+   /                   _|  _|_)      |     |\ \   |   |                     
+  /   _` |  __| |   | |   |   |  _ \ |  _` | \ \  __| __ \   _ \   __|  _ \ 
+\ \  (   |\__ \ |   | __| __| |  __/ | (   |   /  |   | | | (   |\__ \  __/ 
+ \_\\__,_|____/\__,_|_|  _|  _|\___|_|\__,_| _/  \__|_| |_|\___/ ____/\___| 
+                                                                            
+                      ) |         |          | | 
+  _` |  __| _ \ __ \ /  __|   __| __ \   _ \ | | 
+ (   | |    __/ |   |   |   \__ \ | | |  __/ | | 
+\__,_|_|  \___|_|  _|  \__| ____/_| |_|\___|_|_| 
+                                                 
+               _)       |        
+  __|  __|  __| | __ \  __|  __| 
+\__ \ (    |    | |   | |  \__ \ 
+____/\___|_|   _| .__/ \__|____/ 
+                 _|              
+   /          _)      |   \ \   |   |    _)      
+  /   _ \  __| |  __| __ \ \ \  __| __ \  |  __| 
+\ \   __/ |    | (    | | |  /  |   | | | |\__ \ 
+ \_\\___|_|   _|\___|_| |_|_/  \__|_| |_|_|____/ 
+                                                 
+                           ) |         |    _)      |                 
+\ \  \   / _` |  __| __ \ /  __|   __| __ \  |  __| |  /  _ \ __ \    
+ \ \  \ / (   |\__ \ |   |   |    (    | | | | (      <   __/ |   |   
+  \_/\_/ \__,_|____/_|  _|  \__| \___|_| |_|_|\___|_|\_\\___|_|  _|_) 
+                                                                      
+                             _)       
+                              | __ \  
+                _____|_____|  | |   | 
+                             _|_|  _| 
+                                      
+   |  |       |      |    _)                       |                 | 
+_  |_ |_|  _` |  _ \ __ \  |  _` | __ \         _` |  _ \\ \   / _ \ | 
+_  |_ |_| (   |  __/ |   | | (   | |   |_____| (   |  __/ \ \ /  __/ | 
+  _| _|  \__,_|\___|_.__/ _|\__,_|_|  _|      \__,_|\___|  \_/ \___|_| 
+                                                                       
+  __     _            __    __ __  
+ / /    (_)___  _____/ /_  / /_\ \ 
+/ /    / / __ \/ ___/ __ \/ //_/\ \
+\ \   / / /_/ (__  ) / / / ,<   / /
+ \_\_/ /\____/____/_/ /_/_/|_| /_/ 
+  /___/                            
+       _            __    __   ______  _       ______                __     __ 
+      (_)___  _____/ /_  / /__/ ____ \(_)___  / __/ /_  ___  ___   _/_/__  / /_
+     / / __ \/ ___/ __ \/ //_/ / __ `/ / __ \/ /_/ / / / / |/_(_)_/_// _ \/ __/
+    / / /_/ (__  ) / / / ,< / / /_/ / / / / / __/ / /_/ />  <_ _/_/ /  __/ /_  
+ __/ /\____/____/_/ /_/_/|_|\ \__,_/_/_/ /_/_/ /_/\__,_/_/|_(_)_/   \___/\__/  
+/___/                        \____/                                            
+           ____                       __        __            ____  
+  _____  _/_/ /___  ____ __________  / /_____ _/ /____   ____/ /\ \ 
+ / ___/_/_// / __ \/ __ `/ ___/ __ \/ __/ __ `/ __/ _ \ / __  /  \ \
+/ /___/_/ / / /_/ / /_/ / /  / /_/ / /_/ /_/ / /_/  __// /_/ /   / /
+\___/_/  /_/\____/\__, /_/   \____/\__/\__,_/\__/\___(_)__,_/   /_/ 
+                 /____/                                             
+         __                          
+   _____/ /_           ____     __/|_
+  / ___/ __ \   ______/ __ \   |    /
+ (__  ) / / /  /_____/ / / /  /_ __| 
+/____/_/ /_/        /_/ /_/    |/    
+                                     
+  __     _            __    __ __                              __          
+ / /    (_)___  _____/ /_  / /_\ \     ____ _____  ____ ______/ /_  ___  _ 
+/ /    / / __ \/ ___/ __ \/ //_/\ \   / __ `/ __ \/ __ `/ ___/ __ \/ _ \(_)
+\ \   / / /_/ (__  ) / / / ,<   / /  / /_/ / /_/ / /_/ / /__/ / / /  __/   
+ \_\_/ /\____/____/_/ /_/_/|_| /_/   \__,_/ .___/\__,_/\___/_/ /_/\___(_)  
+  /___/                                  /_/                               
+    ___               _____ __                        __            
+   / (_)___  ___     <  / // / _    _______  ______  / /_____ __  __
+  / / / __ \/ _ \    / / // /_(_)  / ___/ / / / __ \/ __/ __ `/ |/_/
+ / / / / / /  __/   / /__  __/    (__  ) /_/ / / / / /_/ /_/ />  <  
+/_/_/_/ /_/\___/   /_/  /_/ (_)  /____/\__, /_/ /_/\__/\__,_/_/|_|  
+                                      /____/                        
+                                                     
+  ___  ______________  _____   ____  ___  ____ ______
+ / _ \/ ___/ ___/ __ \/ ___/  / __ \/ _ \/ __ `/ ___/
+/  __/ /  / /  / /_/ / /     / / / /  __/ /_/ / /    
+\___/_/  /_/   \____/_/     /_/ /_/\___/\__,_/_/     
+                                                     
+                                         __           __
+  __  ______  ___  _  ______  ___  _____/ /____  ____/ /
+ / / / / __ \/ _ \| |/_/ __ \/ _ \/ ___/ __/ _ \/ __  / 
+/ /_/ / / / /  __/>  </ /_/ /  __/ /__/ /_/  __/ /_/ /  
+\__,_/_/ /_/\___/_/|_/ .___/\___/\___/\__/\___/\__,_/   
+                    /_/                                 
+   __        __                 _  _  _ 
+  / /_____  / /_____  ____     ( )| |( )
+ / __/ __ \/ //_/ _ \/ __ \     V / /|/ 
+/ /_/ /_/ / ,< /  __/ / / /      _>_>   
+\__/\____/_/|_|\___/_/ /_/     _/_/     
+                              /_/       
+  __     _            __    __ __                              __          
+ / /    (_)___  _____/ /_  / /_\ \     ____ _____  ____ ______/ /_  ___  _ 
+/ /    / / __ \/ ___/ __ \/ //_/\ \   / __ `/ __ \/ __ `/ ___/ __ \/ _ \(_)
+\ \   / / /_/ (__  ) / / / ,<   / /  / /_/ / /_/ / /_/ / /__/ / / /  __/   
+ \_\_/ /\____/____/_/ /_/_/|_| /_/   \__,_/ .___/\__,_/\___/_/ /_/\___(_)  
+  /___/                                  /_/                               
+    ___               _____ __       _  _  _ 
+   / (_)___  ___     <  / // / _    ( )| |( )
+  / / / __ \/ _ \    / / // /_(_)    V / /|/ 
+ / / / / / /  __/   / /__  __/        _>_>   
+/_/_/_/ /_/\___/   /_/  /_/ (_)     _/_/     
+                                   /_/       
+  __     _            __    __ __       __  __                  __      __ 
+ / /    (_)___  _____/ /_  / /_\ \     / /_/ /_  ___     ____  / /___  / /_
+/ /    / / __ \/ ___/ __ \/ //_/\ \   / __/ __ \/ _ \   / __ \/ / __ \/ __/
+\ \   / / /_/ (__  ) / / / ,<   / /  / /_/ / / /  __/  / /_/ / / /_/ / /_  
+ \_\_/ /\____/____/_/ /_/_/|_| /_/   \__/_/ /_/\___/  / .___/_/\____/\__/  
+  /___/                                              /_/                   
+   __  __    _      __                  
+  / /_/ /_  (_)____/ /_____  ____  _____
+ / __/ __ \/ / ___/ //_/ _ \/ __ \/ ___/
+/ /_/ / / / / /__/ ,< /  __/ / / (__  ) 
+\__/_/ /_/_/\___/_/|_|\___/_/ /_/____/  
+                                        
+  __                   _________      __    ____       __  __                  
+ / / ____ ________  __/ __/ __(_)__  / /___/ /\ \     / /_/ /_  ____  ________ 
+/ / / __ `/ ___/ / / / /_/ /_/ / _ \/ / __  /  \ \   / __/ __ \/ __ \/ ___/ _ \
+\ \/ /_/ (__  ) /_/ / __/ __/ /  __/ / /_/ /   / /  / /_/ / / / /_/ (__  )  __/
+ \_\__,_/____/\__,_/_/ /_/ /_/\___/_/\__,_/   /_/   \__/_/ /_/\____/____/\___/ 
+                                                                               
+                        _  __          __         ____
+  ____ _________  ____ ( )/ /_   _____/ /_  ___  / / /
+ / __ `/ ___/ _ \/ __ \|// __/  / ___/ __ \/ _ \/ / / 
+/ /_/ / /  /  __/ / / / / /_   (__  ) / / /  __/ / /  
+\__,_/_/   \___/_/ /_/  \__/  /____/_/ /_/\___/_/_/   
+                                                      
+                   _       __      
+   _______________(_)___  / /______
+  / ___/ ___/ ___/ / __ \/ __/ ___/
+ (__  ) /__/ /  / / /_/ / /_(__  ) 
+/____/\___/_/  /_/ .___/\__/____/  
+                /_/                
+  __            _      ____       __  __    _     
+ / / ___  _____(_)____/ /\ \     / /_/ /_  (_)____
+/ / / _ \/ ___/ / ___/ __ \ \   / __/ __ \/ / ___/
+\ \/  __/ /  / / /__/ / / / /  / /_/ / / / (__  ) 
+ \_\___/_/  /_/\___/_/ /_/_/   \__/_/ /_/_/____/  
+                                                  
+                           _  __          __    _      __             
+ _      ______ __________ ( )/ /_   _____/ /_  (_)____/ /_____  ____  
+| | /| / / __ `/ ___/ __ \|// __/  / ___/ __ \/ / ___/ //_/ _ \/ __ \ 
+| |/ |/ / /_/ (__  ) / / / / /_   / /__/ / / / / /__/ ,< /  __/ / / / 
+|__/|__/\__,_/____/_/ /_/  \__/   \___/_/ /_/_/\___/_/|_|\___/_/ /_(_)
+                                                                      
+                                                    _     
+                                                   (_)___ 
+                                   ____________   / / __ \
+                                  /_____/_____/  / / / / /
+                                                /_/_/ /_/ 
+                                                          
+     __ __      __     __    _                       __               __
+  __/ // /_____/ /__  / /_  (_)___ _____        ____/ /__ _   _____  / /
+ /_  _  __/ __  / _ \/ __ \/ / __ `/ __ \______/ __  / _ \ | / / _ \/ / 
+/_  _  __/ /_/ /  __/ /_/ / / /_/ / / / /_____/ /_/ /  __/ |/ /  __/ /  
+ /_//_/  \__,_/\___/_.___/_/\__,_/_/ /_/      \__,_/\___/|___/\___/_/   
+                                                                        
+  __ _        _    _   __  
+ / /(_)___ __| |_ | |__\ \ 
+< < | / _ (_-< ' \| / / > >
+ \_\/ \___/__/_||_|_\_\/_/ 
+  |__/                     
+   _        _    _    ____  _       __ _          _   __   _        ___     
+  (_)___ __| |_ | |__/ __ \(_)_ _  / _| |_  ___ _(_) / /__| |_ __  / / |___ 
+  | / _ (_-< ' \| / / / _` | | ' \|  _| | || \ \ /_ / / -_)  _/ _|/ /| / _ \
+ _/ \___/__/_||_|_\_\ \__,_|_|_||_|_| |_|\_,_/_\_(_)_/\___|\__\__/_/ |_\___/
+|__/                 \____/                                                 
+              _        _            ___       _                    
+ __ _ _ _ ___| |_ __ _| |_ ___   __| \ \   __| |_    ___ _ _   _/\_
+/ _` | '_/ _ \  _/ _` |  _/ -_)_/ _` |> > (_-< ' \  |___| ' \  >  <
+\__, |_| \___/\__\__,_|\__\___(_)__,_/_/  /__/_||_|     |_||_|  \/ 
+|___/                                                              
+  __ _        _    _   __                       _        _   _ _          
+ / /(_)___ __| |_ | |__\ \   __ _ _ __  __ _ __| |_  ___(_) | (_)_ _  ___ 
+< < | / _ (_-< ' \| / / > > / _` | '_ \/ _` / _| ' \/ -_)_  | | | ' \/ -_)
+ \_\/ \___/__/_||_|_\_\/_/  \__,_| .__/\__,_\__|_||_\___(_) |_|_|_||_\___|
+  |__/                           |_|                                      
+ _ _ _ _               _                                                      
+/ | | (_)  ____  _ _ _| |_ __ ___ __  ___ _ _ _ _ ___ _ _   _ _  ___ __ _ _ _ 
+| |_  _|  (_-< || | ' \  _/ _` \ \ / / -_) '_| '_/ _ \ '_| | ' \/ -_) _` | '_|
+|_| |_(_) /__/\_, |_||_\__\__,_/_\_\ \___|_| |_| \___/_|   |_||_\___\__,_|_|  
+              |__/                                                            
+                                _          _   _       _              ___   _ 
+ _  _ _ _  _____ ___ __  ___ __| |_ ___ __| | | |_ ___| |_____ _ _   ( ) \ ( )
+| || | ' \/ -_) \ / '_ \/ -_) _|  _/ -_) _` | |  _/ _ \ / / -_) ' \   \|| ||/ 
+ \_,_|_||_\___/_\_\ .__/\___\__|\__\___\__,_|  \__\___/_\_\___|_||_|    | |   
+                  |_|                                                  /_/    
+  __ _        _    _   __                       _        _   _ _          
+ / /(_)___ __| |_ | |__\ \   __ _ _ __  __ _ __| |_  ___(_) | (_)_ _  ___ 
+< < | / _ (_-< ' \| / / > > / _` | '_ \/ _` / _| ' \/ -_)_  | | | ' \/ -_)
+ \_\/ \___/__/_||_|_\_\/_/  \__,_| .__/\__,_\__|_||_\___(_) |_|_|_||_\___|
+  |__/                           |_|                                      
+ _ _ _ _   ___   _ 
+/ | | (_) ( ) \ ( )
+| |_  _|   \|| ||/ 
+|_| |_(_)    | |   
+            /_/    
+  __ _        _    _   __    _   _               _     _   
+ / /(_)___ __| |_ | |__\ \  | |_| |_  ___   _ __| |___| |_ 
+< < | / _ (_-< ' \| / / > > |  _| ' \/ -_) | '_ \ / _ \  _|
+ \_\/ \___/__/_||_|_\_\/_/   \__|_||_\___| | .__/_\___/\__|
+  |__/                                     |_|             
+ _   _    _    _               
+| |_| |_ (_)__| |_____ _ _  ___
+|  _| ' \| / _| / / -_) ' \(_-<
+ \__|_||_|_\__|_\_\___|_||_/__/
+                               
+  __              __  __ _     _    ___    _   _                
+ / /__ _ ____  _ / _|/ _(_)___| |__| \ \  | |_| |_  ___ ___ ___ 
+< </ _` (_-< || |  _|  _| / -_) / _` |> > |  _| ' \/ _ (_-</ -_)
+ \_\__,_/__/\_,_|_| |_| |_\___|_\__,_/_/   \__|_||_\___/__/\___|
+                                                                
+                   _ _        _        _ _              _      _      
+ __ _ _ _ ___ _ _ ( ) |_   __| |_  ___| | |  ___ __ _ _(_)_ __| |_ ___
+/ _` | '_/ -_) ' \|/|  _| (_-< ' \/ -_) | | (_-</ _| '_| | '_ \  _(_-<
+\__,_|_| \___|_||_|  \__| /__/_||_\___|_|_| /__/\__|_| |_| .__/\__/__/
+                                                         |_|          
+  __        _    _   __    _   _    _                          _ _   
+ / /___ _ _(_)__| |_ \ \  | |_| |_ (_)___ __ __ ____ _ ____ _ ( ) |_ 
+< </ -_) '_| / _| ' \ > > |  _| ' \| (_-< \ V  V / _` (_-< ' \|/|  _|
+ \_\___|_| |_\__|_||_/_/   \__|_||_|_/__/  \_/\_/\__,_/__/_||_|  \__|
+                                                                     
+    _    _    _              
+ __| |_ (_)__| |_____ _ _    
+/ _| ' \| / _| / / -_) ' \ _ 
+\__|_||_|_\__|_\_\___|_||_(_)
+                             
+                           _      
+                 ___ ___  (_)_ _  
+                |___|___| | | ' \ 
+                          |_|_||_|
+                                  
+   _ _      _     _    _                 _             _ 
+ _| | |_ __| |___| |__(_)__ _ _ _ ___ __| |_____ _____| |
+|_  .  _/ _` / -_) '_ \ / _` | ' \___/ _` / -_) V / -_) |
+|_     _\__,_\___|_.__/_\__,_|_||_|  \__,_\___|\_/\___|_|
+  |_|_|                                                  
+                       
+ /o  _   ,  |)   |)  \ 
+< | / \_/ \_|/\  |/)  >
+ \|/\_/  \/ |  |/| \// 
+ (|                    
+                      ____                                                     
+ o  _   ,  |)   |)   / __,\ o       |\ |\           o  /__|_  _    /|\  _   _, 
+ | / \_/ \_|/\  |/) | /  | || /|/|  |/ |/ |  |  /\/   /|/ |  /    / |/ / \_/ | 
+ |/\_/  \/ |  |/| \/| \_/|/ |/ | |_/|_/|_/ \/|_/ /\/o/ |_/|_/\__//  |_/\_/ \/|/
+(|                   \____/         |)                                      (| 
+                                                                
+ ,_   _ _|_  _, _|_  _   _|  \     ,  |)                    \|/ 
+/  | / \_|  / |  |  |/  / |   >   / \_|/\     ----/|/|     --*--
+   |/\_/ |_/\/|_/|_/|_/o\/|_//     \/ |  |/        | |_/    /|\ 
+                                                                
+                                                                      
+ /o  _   ,  |)   |)  \     _,       _,   _  |)    _ o   |\ o        _ 
+< | / \_/ \_|/\  |/)  >   / |  |/\_/ |  /   |/\  |/     |/ | /|/|  |/ 
+ \|/\_/  \/ |  |/| \//    \/|_/|_/ \/|_/\__/|  |/|_/o   |_/|/ | |_/|_/
+ (|                           (|                                      
+ ,                                                             
+/||  | o    ,            _|_  _,          _  ,_   ,_   _   ,_  
+ ||__|_    / \_|  | /|/|  |  / |  /\/    |/ /  | /  | / \_/  | 
+ |   | o    \/  \/|/ | |_/|_/\/|_/ /\/   |_/   |/   |/\_/    |/
+                 (|                                            
+                                                               
+       _  _,   ,_                  _          _  _ _|_  _  _|  
+/|/|  |/ / |  /  |    |  |  /|/|  |/ /\/ |/\_|/ /   |  |/ / |  
+ | |_/|_/\/|_/   |/    \/|_/ | |_/|_/ /\/|_/ |_/\__/|_/|_/\/|_/
+                                        (|                     
+                        o   o
+_|_  _  |)   _          \\  /
+ |  / \_|/) |/ /|/|       |_ 
+ |_/\_/ | \/|_/ | |_/     |  
+                         /   
+                                                                      
+ /o  _   ,  |)   |)  \     _,       _,   _  |)    _ o   |\ o        _ 
+< | / \_/ \_|/\  |/)  >   / |  |/\_/ |  /   |/\  |/     |/ | /|/|  |/ 
+ \|/\_/  \/ |  |/| \//    \/|_/|_/ \/|_/\__/|  |/|_/o   |_/|/ | |_/|_/
+ (|                           (|                                      
+ ,         o   o
+/||  | o   \\  /
+ ||__|_      |_ 
+ |   | o     |  
+            /   
+                                                        
+ /o  _   ,  |)   |)  \    _|_ |)    _         |\  _ _|_ 
+< | / \_/ \_|/\  |/)  >    |  |/\  |/     |/\_|/ / \_|  
+ \|/\_/  \/ |  |/| \//     |_/|  |/|_/    |_/ |_/\_/ |_/
+ (|                                      (|             
+                                
+_|_ |)   o  _  |)   _        ,  
+ |  |/\  | /   |/) |/ /|/|  / \_
+ |_/|  |/|/\__/| \/|_/ | |_/ \/ 
+                                
+                                                             
+ / _,   ,        |\ |\ o  _ |\  _|  \    _|_ |)    _   ,   _ 
+< / |  / \_|  |  |/ |/ | |/ |/ / |   >    |  |/\  / \_/ \_|/ 
+ \\/|_/ \/  \/|_/|_/|_/|/|_/|_/\/|_//     |_/|  |/\_/  \/ |_/
+                 |) |)                                       
+                   o                                                      
+ _,   ,_   _       /_|_     ,  |)    _ |\ |\     ,   _   ,_  o    _|_  ,  
+/ |  /  | |/ /|/|    |     / \_|/\  |/ |/ |/    / \_/   /  | | |/\_|  / \_
+\/|_/   |/|_/ | |_/  |_/    \/ |  |/|_/|_/|_/    \/ \__/   |/|/|_/ |_/ \/ 
+                                                              (|          
+                                                                   o    
+ / _  ,_  o  _  |)   \    _|_ |)   o  ,              _,   ,        /_|_ 
+< |/ /  | | /   |/\   >    |  |/\  | / \_   |  |  |_/ |  / \_/|/|    |  
+ \|_/   |/|/\__/|  |//     |_/|  |/|/ \/     \/ \/  \/|_/ \/  | |_/  |_/
+                                                                        
+                             
+ _  |)   o  _  |)   _        
+/   |/\  | /   |/) |/ /|/|   
+\__/|  |/|/\__/| \/|_/ | |_/o
+                             
+                                                                   
+                                                           o       
+                                                --------   | /|/|  
+                                                           |/ | |_/
+                                                                   
+                                                  
+_|_|_ _|   _|)  o  _,           _|   _       _ |\ 
+_|_|_/ |  |/|/\_| / |  /|/|----/ |  |/ |  |_|/ |/ 
+ | | \/|_/|_/\/ |/\/|_/ | |_/  \/|_/|_/ \/  |_/|_/
+                                                  
+   /_)          |    | \ \  
+< <  |  _ \(_-<   \  | /> > 
+ \_\ |\___/___/_| _|_\_\_/  
+  __/                       
+  _)          |    |   __ \ _)       _||          _)   /    |         /|      
+   |  _ \(_-<   \  | // _` | |   \   _|| |  |\ \ /    / -_)  _|  _|  / |  _ \ 
+   |\___/___/_| _|_\_\\__,_|_|_| _|_| _|\_,_| _\_\_)_/\___|\__|\__|_/ _|\___/ 
+__/                  \____/                                                   
+              |         |              |\ \       |            \ \ /  
+  _` |  _|_ \  _|  _` |  _|  -_)    _` | > > (_-<   \  ____|\  _   _| 
+\__, |_|\___/\__|\__,_|\__|\___|_)\__,_| _/  ___/_| _|   _| _| _/ _\  
+____/                                                                 
+   /_)          |    | \ \                       |        _)  |_)           
+< <  |  _ \(_-<   \  | /> >   _` | _ \  _` |  _|   \   -_)    | |   \   -_) 
+ \_\ |\___/___/_| _|_\_\_/  \__,_|.__/\__,_|\__|_| _|\___|_) _|_|_| _|\___| 
+  __/                            _|                                         
+_ | | |_)                |                                 
+  |__ _|  (_-< |  |   \   _|  _` |\ \ /   -_)  _|_|_ \  _| 
+ _|  _|_) ___/\_, |_| _|\__|\__,_| _\_\ \___|_|_|\___/_|   
+              ___/                                         
+                                                       |            | 
+   \   -_)  _` |  _|  |  |   \   -_)\ \ / _ \  -_)  _|  _|  -_)  _` | 
+_| _|\___|\__,_|_|   \_,_|_| _|\___| _\_\.__/\___|\__|\__|\___|\__,_| 
+                                        _|                            
+ |        |              )\ \   ) 
+  _|  _ \ | /  -_)   \  \|   |_/  
+\__|\___/_\_\\___|_| _|      |    
+                           _/     
+   /_)          |    | \ \                       |        _)  |_)           
+< <  |  _ \(_-<   \  | /> >   _` | _ \  _` |  _|   \   -_)    | |   \   -_) 
+ \_\ |\___/___/_| _|_\_\_/  \__,_|.__/\__,_|\__|_| _|\___|_) _|_|_| _|\___| 
+  __/                            _|                                         
+_ | | |_)  )\ \   ) 
+  |__ _|  \|   |_/  
+ _|  _|_)      |    
+             _/     
+   /_)          |    | \ \   |   |               |      |   
+< <  |  _ \(_-<   \  | /> >   _|   \   -_)   _ \ |  _ \  _| 
+ \_\ |\___/___/_| _|_\_\_/  \__|_| _|\___|  .__/_|\___/\__| 
+  __/                                      _|               
+ |   |   _)     |                 
+  _|   \  |  _| | /  -_)   \ (_-< 
+\__|_| _|_|\__|_\_\\___|_| _|___/ 
+                                  
+   /                 _|_|_)      |     |\ \   |   |                  
+< <   _` |(_-< |  |  _|_| |  -_) |  _` | > >   _|   \   _ \(_-<  -_) 
+ \_\\__,_|___/\_,_|_|_|  _|\___|_|\__,_| _/  \__|_| _|\___/___/\___| 
+                                                                     
+                  )|        |         | |            _)     |       
+  _` |  _|-_)   \/  _| (_-<   \   -_) | | (_-<  _|  _|| _ \  _|(_-< 
+\__,_|_|\___|_| _|\__| ___/_| _|\___|_|_| ___/\__|_| _|.__/\__|___/ 
+                                                      _|            
+   /        _)     |  \ \   |   |   _)                           )|   
+< <   -_)  _||  _|   \ > >   _|   \  |(_-< \ \  \ / _` |(_-<   \/  _| 
+ \_\\___|_| _|\__|_| _|_/  \__|_| _|_|___/  \_/\_/\__,_|___/_| _|\__| 
+                                                                      
+     |   _)     |               
+  _|   \  |  _| | /  -_)   \    
+\__|_| _|_|\__|_\_\\___|_| _|_) 
+                                
+                           _)      
+                ____|____|  |   \  
+                           _|_| _| 
+                                   
+  |  |       |      |   _)                  |               | 
+_ |_ |_|  _` |  -_)  _ \ |  _` |   \____|_` |  -_)\ \ / -_) | 
+_ |_ |_|\__,_|\___|_.__/_|\__,_|_| _|  \__,_|\___| \_/\___|_| 
+ _| _|                                                        
+  __    _          __   __ __  
+ / /   (_)__  ___ / /  / /_\ \ 
+< <   / / _ \(_-</ _ \/  '_/> >
+ \_\_/ /\___/___/_//_/_/\_\/_/ 
+  |___/                        
+      _          __   __   _____  _      _____          _   __    __        __
+     (_)__  ___ / /  / /__/ ___ \(_)__  / _/ /_ ____ __(_)_/_/__ / /_____ _/_/
+    / / _ \(_-</ _ \/  '_/ / _ `/ / _ \/ _/ / // /\ \ / _/_// -_) __/ __//_/  
+ __/ /\___/___/_//_/_/\_\\ \_,_/_/_//_/_//_/\_,_//_\_(_)_/  \__/\__/\__/_/    
+|___/                     \___/                                               
+   __                   __       __          ____         __                  
+  / /__  ___ ________  / /____ _/ /____  ___/ /\ \   ___ / /    _______    _/|
+ / / _ \/ _ `/ __/ _ \/ __/ _ `/ __/ -_)/ _  /  > > (_-</ _ \  /___/ _ \  > _<
+/_/\___/\_, /_/  \___/\__/\_,_/\__/\__(_)_,_/  /_/ /___/_//_/     /_//_/  |/  
+       /___/                                                                  
+  __    _          __   __ __                        __       _   ___         
+ / /   (_)__  ___ / /  / /_\ \   ___ ____  ___ _____/ /  ___ (_) / (_)__  ___ 
+< <   / / _ \(_-</ _ \/  '_/> > / _ `/ _ \/ _ `/ __/ _ \/ -_)   / / / _ \/ -_)
+ \_\_/ /\___/___/_//_/_/\_\/_/  \_,_/ .__/\_,_/\__/_//_/\__(_) /_/_/_//_/\__/ 
+  |___/                            /_/                                        
+  _______ _                 __                                  
+ <  / / /(_) ___ __ _____  / /____ ___ __  ___ ___________  ____
+ / /_  _/   (_-</ // / _ \/ __/ _ `/\ \ / / -_) __/ __/ _ \/ __/
+/_/ /_/(_) /___/\_, /_//_/\__/\_,_//_\_\  \__/_/ /_/  \___/_/   
+               /___/                                            
+                                                       __         __
+  ___  ___ ___ _____  __ _____  _____ __ ___  ___ ____/ /____ ___/ /
+ / _ \/ -_) _ `/ __/ / // / _ \/ -_) \ // _ \/ -_) __/ __/ -_) _  / 
+/_//_/\__/\_,_/_/    \_,_/_//_/\__/_\_\/ .__/\__/\__/\__/\__/\_,_/  
+                                      /_/                           
+  __       __              _ __  _ 
+ / /____  / /_____ ___    ( )\ \( )
+/ __/ _ \/  '_/ -_) _ \    V / /|/ 
+\__/\___/_/\_\\__/_//_/    _/_/    
+                          /_/      
+  __    _          __   __ __                        __       _   ___         
+ / /   (_)__  ___ / /  / /_\ \   ___ ____  ___ _____/ /  ___ (_) / (_)__  ___ 
+< <   / / _ \(_-</ _ \/  '_/> > / _ `/ _ \/ _ `/ __/ _ \/ -_)   / / / _ \/ -_)
+ \_\_/ /\___/___/_//_/_/\_\/_/  \_,_/ .__/\_,_/\__/_//_/\__(_) /_/_/_//_/\__/ 
+  |___/                            /_/                                        
+  _______ _   _ __  _ 
+ <  / / /(_) ( )\ \( )
+ / /_  _/     V / /|/ 
+/_/ /_/(_)    _/_/    
+             /_/      
+  __    _          __   __ __     __  __              __     __ 
+ / /   (_)__  ___ / /  / /_\ \   / /_/ /  ___   ___  / /__  / /_
+< <   / / _ \(_-</ _ \/  '_/> > / __/ _ \/ -_) / _ \/ / _ \/ __/
+ \_\_/ /\___/___/_//_/_/\_\/_/  \__/_//_/\__/ / .__/_/\___/\__/ 
+  |___/                                      /_/                
+  __  __   _     __              
+ / /_/ /  (_)___/ /_____ ___  ___
+/ __/ _ \/ / __/  '_/ -_) _ \(_-<
+\__/_//_/_/\__/_/\_\\__/_//_/___/
+                                 
+  __               _______     __   ____     __  __               
+ / /___ ____ __ __/ _/ _(_)__ / /__/ /\ \   / /_/ /  ___  ___ ___ 
+< </ _ `(_-</ // / _/ _/ / -_) / _  /  > > / __/ _ \/ _ \(_-</ -_)
+ \_\_,_/___/\_,_/_//_//_/\__/_/\_,_/  /_/  \__/_//_/\___/___/\__/ 
+                                                                  
+                   _ __        __       ____              _      __    
+ ___ ________ ___ ( ) /_  ___ / /  ___ / / / ___ ________(_)__  / /____
+/ _ `/ __/ -_) _ \|/ __/ (_-</ _ \/ -_) / / (_-</ __/ __/ / _ \/ __(_-<
+\_,_/_/  \__/_//_/ \__/ /___/_//_/\__/_/_/ /___/\__/_/ /_/ .__/\__/___/
+                                                        /_/            
+  __         _     ____     __  __   _                           _ __ 
+ / /___ ____(_)___/ /\ \   / /_/ /  (_)__   _    _____ ____ ___ ( ) /_
+< </ -_) __/ / __/ _ \> > / __/ _ \/ (_-<  | |/|/ / _ `(_-</ _ \|/ __/
+ \_\__/_/ /_/\__/_//_/_/  \__/_//_/_/___/  |__,__/\_,_/___/_//_/ \__/ 
+                                                                      
+      __   _     __            
+ ____/ /  (_)___/ /_____ ___   
+/ __/ _ \/ / __/  '_/ -_) _ \_ 
+\__/_//_/_/\__/_/\_\\__/_//_(_)
+                               
+                              _    
+                   ________  (_)__ 
+                  /___/___/ / / _ \
+                           /_/_//_/
+                                   
+     ____     __    __   _                  __             __
+  __/ / /____/ /__ / /  (_)__ ____  _______/ /__ _  _____ / /
+ /_  . __/ _  / -_) _ \/ / _ `/ _ \/___/ _  / -_) |/ / -_) / 
+/_    __/\_,_/\__/_.__/_/\_,_/_//_/    \_,_/\__/|___/\__/_/  
+ /_/_/                                                       
+  __ _           _     _    __  
+ / /(_) ___  ___| |__ | | __\ \ 
+/ / | |/ _ \/ __| '_ \| |/ / \ \
+\ \ | | (_) \__ \ | | |   <  / /
+ \_\/ |\___/|___/_| |_|_|\_\/_/ 
+  |__/                          
+   _           _     _     ____  _        __ _                 __   _       
+  (_) ___  ___| |__ | | __/ __ \(_)_ __  / _| |_   ___  ___   / /__| |_ ___ 
+  | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ \ __/ __|
+  | | (_) \__ \ | | |   < | (_| | | | | |  _| | |_| |>  < _ / /  __/ || (__ 
+ _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___|
+|__/                      \____/                                            
+    ___                       _        _            ___        _     
+   / / | ___   __ _ _ __ ___ | |_ __ _| |_ ___   __| \ \   ___| |__  
+  / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \ 
+ / / | | (_) | (_| | | | (_) | || (_| | ||  __/| (_| |/ / \__ \ | | |
+/_/  |_|\___/ \__, |_|  \___/ \__\__,_|\__\___(_)__,_/_/  |___/_| |_|
+              |___/                                                  
+                    
+       _ __   __/\__
+ _____| '_ \  \    /
+|_____| | | | /_  _\
+      |_| |_|   \/  
+                    
+  __ _           _     _    __                           _            
+ / /(_) ___  ___| |__ | | __\ \    __ _ _ __   __ _  ___| |__   ___ _ 
+/ / | |/ _ \/ __| '_ \| |/ / \ \  / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ \ | | |   <  / / | (_| | |_) | (_| | (__| | | |  __/_ 
+ \_\/ |\___/|___/_| |_|_|\_\/_/   \__,_| .__/ \__,_|\___|_| |_|\___(_)
+  |__/                                 |_|                            
+ _ _              _ _  _                      _             
+| (_)_ __   ___  / | || | _   ___ _   _ _ __ | |_ __ ___  __
+| | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ /
+| | | | | |  __/ | |__   _|  \__ \ |_| | | | | || (_| |>  < 
+|_|_|_| |_|\___| |_|  |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\
+                                  |___/                     
+                                                  
+  ___ _ __ _ __ ___  _ __   _ __   ___  __ _ _ __ 
+ / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__|
+|  __/ |  | | | (_) | |    | | | |  __/ (_| | |   
+ \___|_|  |_|  \___/|_|    |_| |_|\___|\__,_|_|   
+                                                  
+                                       _           _   _        _              
+ _   _ _ __   _____  ___ __   ___  ___| |_ ___  __| | | |_ ___ | | _____ _ __  
+| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \ 
+| |_| | | | |  __/>  <| |_) |  __/ (__| ||  __/ (_| | | || (_) |   <  __/ | | |
+ \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_|  \__\___/|_|\_\___|_| |_|
+                      |_|                                                      
+ ___   _ 
+( ) \ ( )
+ \|| ||/ 
+    > >  
+   | |   
+  /_/    
+  __ _           _     _    __                           _            
+ / /(_) ___  ___| |__ | | __\ \    __ _ _ __   __ _  ___| |__   ___ _ 
+/ / | |/ _ \/ __| '_ \| |/ / \ \  / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ \ | | |   <  / / | (_| | |_) | (_| | (__| | | |  __/_ 
+ \_\/ |\___/|___/_| |_|_|\_\/_/   \__,_| .__/ \__,_|\___|_| |_|\___(_)
+  |__/                                 |_|                            
+ _ _              _ _  _      ___   _ 
+| (_)_ __   ___  / | || | _  ( ) \ ( )
+| | | '_ \ / _ \ | | || |(_)  \|| ||/ 
+| | | | | |  __/ | |__   _|      > >  
+|_|_|_| |_|\___| |_|  |_|(_)    | |   
+                               /_/    
+  __ _           _     _    __    _   _                  _       _   
+ / /(_) ___  ___| |__ | | __\ \  | |_| |__   ___   _ __ | | ___ | |_ 
+/ / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __|
+\ \ | | (_) \__ \ | | |   <  / / | |_| | | |  __/ | |_) | | (_) | |_ 
+ \_\/ |\___/|___/_| |_|_|\_\/_/   \__|_| |_|\___| | .__/|_|\___/ \__|
+  |__/                                            |_|                
+ _   _     _      _                  
+| |_| |__ (_) ___| | _____ _ __  ___ 
+| __| '_ \| |/ __| |/ / _ \ '_ \/ __|
+| |_| | | | | (__|   <  __/ | | \__ \
+ \__|_| |_|_|\___|_|\_\___|_| |_|___/
+                                     
+  __                __  __ _      _     ___    _   _                    
+ / /__ _ ___ _   _ / _|/ _(_) ___| | __| \ \  | |_| |__   ___  ___  ___ 
+/ // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \
+\ \ (_| \__ \ |_| |  _|  _| |  __/ | (_| |/ / | |_| | | | (_) \__ \  __/
+ \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/   \__|_| |_|\___/|___/\___|
+                                                                        
+                      _ _         _          _ _ 
+  __ _ _ __ ___ _ __ ( ) |_   ___| |__   ___| | |
+ / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | |
+| (_| | | |  __/ | | | | |_  \__ \ | | |  __/ | |
+ \__,_|_|  \___|_| |_|  \__| |___/_| |_|\___|_|_|
+                                                 
+               _       _       
+ ___  ___ _ __(_)_ __ | |_ ___ 
+/ __|/ __| '__| | '_ \| __/ __|
+\__ \ (__| |  | | |_) | |_\__ \
+|___/\___|_|  |_| .__/ \__|___/
+                |_|            
+  __         _      _    __    _   _     _                               _ _   
+ / /___ _ __(_) ___| |__ \ \  | |_| |__ (_)___  __      ____ _ ___ _ __ ( ) |_ 
+/ // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __|
+\ \  __/ |  | | (__| | | |/ / | |_| | | | \__ \  \ V  V / (_| \__ \ | | | | |_ 
+ \_\___|_|  |_|\___|_| |_/_/   \__|_| |_|_|___/   \_/\_/ \__,_|___/_| |_|  \__|
+                                                                               
+      _     _      _                
+  ___| |__ (_) ___| | _____ _ __    
+ / __| '_ \| |/ __| |/ / _ \ '_ \   
+| (__| | | | | (__|   <  __/ | | |_ 
+ \___|_| |_|_|\___|_|\_\___|_| |_(_)
+                                    
+                               _       
+                              (_)_ __  
+                 _____ _____  | | '_ \ 
+                |_____|_____| | | | | |
+                              |_|_| |_|
+                                       
+   _  _       _      _     _                       _                _ 
+ _| || |_  __| | ___| |__ (_) __ _ _ __         __| | _____   _____| |
+|_  ..  _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ |
+|_      _| (_| |  __/ |_) | | (_| | | | |_____| (_| |  __/\ V /  __/ |
+  |_||_|  \__,_|\___|_.__/|_|\__,_|_| |_|      \__,_|\___| \_/ \___|_|
+                                                                      
+<joshk> joshk@influx:/etc/logrotate.d> sh -n *
+<joshk> apache: line 14: syntax error near unexpected token `}'
+<joshk> apache: line 14: `}'
+<joshk> the plot thickens
+<asuffield> those aren't shell scripts
+<erich> this wasn't chicken.
+                -- in #debian-devel
diff --git a/externals/figlet/tests/res003.txt b/externals/figlet/tests/res003.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res003.txt
@@ -0,0 +1,432 @@
+        __        ___           _     _     
+        \ \      / / |__   __ _| |_  (_)___ 
+         \ \ /\ / /| '_ \ / _` | __| | / __|
+          \ V  V / | | | | (_| | |_  | \__ \
+           \_/\_/  |_| |_|\__,_|\__| |_|___/
+                                            
+ _                 _               _   _                        _     
+(_)_ ____   _____ | |_   _____  __| | (_)_ __    ___ _   _  ___| |__  
+| | '_ \ \ / / _ \| \ \ / / _ \/ _` | | | '_ \  / __| | | |/ __| '_ \ 
+| | | | \ V / (_) | |\ V /  __/ (_| | | | | | | \__ \ |_| | (__| | | |
+|_|_| |_|\_/ \___/|_| \_/ \___|\__,_| |_|_| |_| |___/\__,_|\___|_| |_|
+                                                                      
+ __     _               __ 
+| _|___| | ___  ___  __|_ |
+| |/ __| |/ _ \/ __|/ _ \ |
+| | (__| | (_) \__ \  __/ |
+| |\___|_|\___/|___/\___| |
+|__|                   |__|
+          _       _   _                 _     _             _             
+ _ __ ___| | __ _| |_(_) ___  _ __  ___| |__ (_)_ __  ___  (_)___    __ _ 
+| '__/ _ \ |/ _` | __| |/ _ \| '_ \/ __| '_ \| | '_ \/ __| | / __|  / _` |
+| | |  __/ | (_| | |_| | (_) | | | \__ \ | | | | |_) \__ \ | \__ \ | (_| |
+|_|  \___|_|\__,_|\__|_|\___/|_| |_|___/_| |_|_| .__/|___/ |_|___/  \__,_|
+                                               |_|                        
+  __                               __ 
+ / _| ___  _ __ _ __ ___     ___  / _|
+| |_ / _ \| '__| '_ ` _ \   / _ \| |_ 
+|  _| (_) | |  | | | | | | | (_) |  _|
+|_|  \___/|_|  |_| |_| |_|  \___/|_|  
+                                      
+                      _   _                   _ 
+  ___ _ __ ___   ___ | |_(_) ___  _ __   __ _| |
+ / _ \ '_ ` _ \ / _ \| __| |/ _ \| '_ \ / _` | |
+|  __/ | | | | | (_) | |_| | (_) | | | | (_| | |
+ \___|_| |_| |_|\___/ \__|_|\___/|_| |_|\__,_|_|
+                                                
+      _                    _     _                               __            
+  ___| |__   ___ _ __ ___ (_)___| |_ _ __ _   _     ___  ___    / _| __ _ _ __ 
+ / __| '_ \ / _ \ '_ ` _ \| / __| __| '__| | | |   / __|/ _ \  | |_ / _` | '__|
+| (__| | | |  __/ | | | | | \__ \ |_| |  | |_| |_  \__ \ (_) | |  _| (_| | |   
+ \___|_| |_|\___|_| |_| |_|_|___/\__|_|   \__, ( ) |___/\___/  |_|  \__,_|_|   
+                                          |___/|/                              
+                             _       _                _   _           
+ _   _ _ __   _____  ___ __ | | __ _(_)_ __   ___  __| | | |__  _   _ 
+| | | | '_ \ / _ \ \/ / '_ \| |/ _` | | '_ \ / _ \/ _` | | '_ \| | | |
+| |_| | | | |  __/>  <| |_) | | (_| | | | | |  __/ (_| | | |_) | |_| |
+ \__,_|_| |_|\___/_/\_\ .__/|_|\__,_|_|_| |_|\___|\__,_| |_.__/ \__, |
+                      |_|                                       |___/ 
+                              _                 _          __ 
+  __ _ _ __  _   _   ___  ___| |__   ___   ___ | |   ___  / _|
+ / _` | '_ \| | | | / __|/ __| '_ \ / _ \ / _ \| |  / _ \| |_ 
+| (_| | | | | |_| | \__ \ (__| | | | (_) | (_) | | | (_) |  _|
+ \__,_|_| |_|\__, | |___/\___|_| |_|\___/ \___/|_|  \___/|_|  
+             |___/                                            
+                      _     _       _                ___                   
+ _ __  ___ _   _  ___| |__ (_) __ _| |_ _ __ _   _  |_ _|   __ _ _ __ ___  
+| '_ \/ __| | | |/ __| '_ \| |/ _` | __| '__| | | |  | |   / _` | '_ ` _ \ 
+| |_) \__ \ |_| | (__| | | | | (_| | |_| |  | |_| |  | |  | (_| | | | | | |
+| .__/|___/\__, |\___|_| |_|_|\__,_|\__|_|   \__, | |___|  \__,_|_| |_| |_|
+|_|        |___/                             |___/                         
+                                       __    _   _           _   
+  __ ___      ____ _ _ __ ___    ___  / _|  | |_| |__   __ _| |_ 
+ / _` \ \ /\ / / _` | '__/ _ \  / _ \| |_   | __| '_ \ / _` | __|
+| (_| |\ V  V / (_| | | |  __/ | (_) |  _|  | |_| | | | (_| | |_ 
+ \__,_| \_/\_/ \__,_|_|  \___|  \___/|_|( )  \__|_| |_|\__,_|\__|
+                                        |/                       
+                     _ _ _   _                 
+  ___ ___  _ __   __| (_) |_(_) ___  _ __  ___ 
+ / __/ _ \| '_ \ / _` | | __| |/ _ \| '_ \/ __|
+| (_| (_) | | | | (_| | | |_| | (_) | | | \__ \
+ \___\___/|_| |_|\__,_|_|\__|_|\___/|_| |_|___/
+                                               
+             _   _     _                         
+ _ __   ___ | |_| |__ (_)_ __   __ _   ___  ___  
+| '_ \ / _ \| __| '_ \| | '_ \ / _` | / __|/ _ \ 
+| | | | (_) | |_| | | | | | | | (_| | \__ \ (_) |
+|_| |_|\___/ \__|_| |_|_|_| |_|\__, | |___/\___/ 
+                               |___/             
+     _                 _                          
+ ___(_)_ __ ___  _ __ | | ___    __ _ ___    __ _ 
+/ __| | '_ ` _ \| '_ \| |/ _ \  / _` / __|  / _` |
+\__ \ | | | | | | |_) | |  __/ | (_| \__ \ | (_| |
+|___/_|_| |_| |_| .__/|_|\___|  \__,_|___/  \__,_|
+                |_|                               
+      _           _            _          _                           
+  ___| |__   ___ (_) ___ ___  | |__   ___| |___      _____  ___ _ __  
+ / __| '_ \ / _ \| |/ __/ _ \ | '_ \ / _ \ __\ \ /\ / / _ \/ _ \ '_ \ 
+| (__| | | | (_) | | (_|  __/ | |_) |  __/ |_ \ V  V /  __/  __/ | | |
+ \___|_| |_|\___/|_|\___\___| |_.__/ \___|\__| \_/\_/ \___|\___|_| |_|
+                                                                      
+ _   _                        _                    __ 
+| |_| |__   ___   _ __   ___ | | ___  ___    ___  / _|
+| __| '_ \ / _ \ | '_ \ / _ \| |/ _ \/ __|  / _ \| |_ 
+| |_| | | |  __/ | |_) | (_) | |  __/\__ \ | (_) |  _|
+ \__|_| |_|\___| | .__/ \___/|_|\___||___/  \___/|_|  
+                 |_|                                  
+       _   _                  _   _                               _ 
+  __ _| |_| |_ _ __ __ _  ___| |_(_) ___  _ __     __ _ _ __   __| |
+ / _` | __| __| '__/ _` |/ __| __| |/ _ \| '_ \   / _` | '_ \ / _` |
+| (_| | |_| |_| | | (_| | (__| |_| | (_) | | | | | (_| | | | | (_| |
+ \__,_|\__|\__|_|  \__,_|\___|\__|_|\___/|_| |_|  \__,_|_| |_|\__,_|
+                                                                    
+                      _     _                 __   __          
+ _ __ ___ _ __  _   _| |___(_) ___  _ __      \ \ / /__  _   _ 
+| '__/ _ \ '_ \| | | | / __| |/ _ \| '_ \      \ V / _ \| | | |
+| | |  __/ |_) | |_| | \__ \ | (_) | | | |_     | | (_) | |_| |
+|_|  \___| .__/ \__,_|_|___/_|\___/|_| |_(_)    |_|\___/ \__,_|
+         |_|                                                   
+                                       _                              
+  ___ __ _ _ __    _ __ ___   ___  ___| |_   ___  ___  _ __ ___   ___ 
+ / __/ _` | '_ \  | '_ ` _ \ / _ \/ _ \ __| / __|/ _ \| '_ ` _ \ / _ \
+| (_| (_| | | | | | | | | | |  __/  __/ |_  \__ \ (_) | | | | | |  __/
+ \___\__,_|_| |_| |_| |_| |_|\___|\___|\__| |___/\___/|_| |_| |_|\___|
+                                                                      
+                        _        _   _     _      _           
+ _ __   ___  ___  _ __ | | ___  | |_| |__ (_)_ __| |_ _   _   
+| '_ \ / _ \/ _ \| '_ \| |/ _ \ | __| '_ \| | '__| __| | | |  
+| |_) |  __/ (_) | |_) | |  __/ | |_| | | | | |  | |_| |_| |_ 
+| .__/ \___|\___/| .__/|_|\___|  \__|_| |_|_|_|   \__|\__, ( )
+|_|              |_|                                  |___/|/ 
+  __            _           _   _                     
+ / _| ___  _ __| |_ _   _  | |_(_)_ __ ___   ___  ___ 
+| |_ / _ \| '__| __| | | | | __| | '_ ` _ \ / _ \/ __|
+|  _| (_) | |  | |_| |_| | | |_| | | | | | |  __/\__ \
+|_|  \___/|_|   \__|\__, |  \__|_|_| |_| |_|\___||___/
+                    |___/                             
+     _                       _   _                                        
+  __| | _____      ___ __   | |_| |__   ___   _   _  ___  __ _ _ __ ___   
+ / _` |/ _ \ \ /\ / / '_ \  | __| '_ \ / _ \ | | | |/ _ \/ _` | '__/ __|  
+| (_| | (_) \ V  V /| | | | | |_| | | |  __/ | |_| |  __/ (_| | |  \__ \_ 
+ \__,_|\___/ \_/\_/ |_| |_|  \__|_| |_|\___|  \__, |\___|\__,_|_|  |___( )
+                                              |___/                    |/ 
+                 _ 
+  __ _ _ __   __| |
+ / _` | '_ \ / _` |
+| (_| | | | | (_| |
+ \__,_|_| |_|\__,_|
+                   
+ _   _                                           _       
+| |_| |__   ___ _   _   _ __ ___ _ __ ___   __ _(_)_ __  
+| __| '_ \ / _ \ | | | | '__/ _ \ '_ ` _ \ / _` | | '_ \ 
+| |_| | | |  __/ |_| | | | |  __/ | | | | | (_| | | | | |
+ \__|_| |_|\___|\__, | |_|  \___|_| |_| |_|\__,_|_|_| |_|
+                |___/                                    
+                 _       _     _      
+  __ _ _ __ ___ (_) __ _| |__ | | ___ 
+ / _` | '_ ` _ \| |/ _` | '_ \| |/ _ \
+| (_| | | | | | | | (_| | |_) | |  __/
+ \__,_|_| |_| |_|_|\__,_|_.__/|_|\___|
+                                      
+ _               _                  _                   _ _ _        
+| |__  _   _ ___| |_ __ _ _ __   __| | ___ _ __ ___    | (_) | _____ 
+| '_ \| | | / __| __/ _` | '_ \ / _` |/ _ \ '__/ __|   | | | |/ / _ \
+| |_) | |_| \__ \ || (_| | | | | (_| |  __/ |  \__ \_  | | |   <  __/
+|_.__/ \__, |___/\__\__,_|_| |_|\__,_|\___|_|  |___( ) |_|_|_|\_\___|
+       |___/                                       |/                
+ _   _                _                      _ _       _     _       
+| |_| |__   ___   ___| |__   ___  _ __ ___  | (_) __ _| |__ | |_ ___ 
+| __| '_ \ / _ \ / __| '_ \ / _ \| '__/ _ \ | | |/ _` | '_ \| __/ __|
+| |_| | | |  __/ \__ \ | | | (_) | | |  __/ | | | (_| | | | | |_\__ \
+ \__|_| |_|\___| |___/_| |_|\___/|_|  \___| |_|_|\__, |_| |_|\__|___/
+                                                 |___/               
+        __   _                            _   _           _           
+  ___  / _| | |_ _____      ___ __  ___  | |_| |__   __ _| |_    __ _ 
+ / _ \| |_  | __/ _ \ \ /\ / / '_ \/ __| | __| '_ \ / _` | __|  / _` |
+| (_) |  _| | || (_) \ V  V /| | | \__ \ | |_| | | | (_| | |_  | (_| |
+ \___/|_|    \__\___/ \_/\_/ |_| |_|___/  \__|_| |_|\__,_|\__|  \__,_|
+                                                                      
+           _ _            
+ ___  __ _(_) | ___  _ __ 
+/ __|/ _` | | |/ _ \| '__|
+\__ \ (_| | | | (_) | |   
+|___/\__,_|_|_|\___/|_|   
+                          
+                                       _         _        _           _ 
+ _ __   __ _ ___ ___  ___  ___    __ _| |_   ___| |_ __ _| |_ ___  __| |
+| '_ \ / _` / __/ __|/ _ \/ __|  / _` | __| / __| __/ _` | __/ _ \/ _` |
+| |_) | (_| \__ \__ \  __/\__ \ | (_| | |_  \__ \ || (_| | ||  __/ (_| |
+| .__/ \__,_|___/___/\___||___/  \__,_|\__| |___/\__\__,_|\__\___|\__,_|
+|_|                                                                     
+ _   _                       _           _                               
+| |_(_)_ __ ___   ___  ___  | |__  _   _| |_   _ __   _____   _____ _ __ 
+| __| | '_ ` _ \ / _ \/ __| | '_ \| | | | __| | '_ \ / _ \ \ / / _ \ '__|
+| |_| | | | | | |  __/\__ \ | |_) | |_| | |_  | | | |  __/\ V /  __/ |   
+ \__|_|_| |_| |_|\___||___/ |_.__/ \__,_|\__| |_| |_|\___| \_/ \___|_|   
+                                                                         
+           _ _             _                   _   _          
+  ___ __ _| | |___    __ _| |_    ___  _ __   | |_| |__   ___ 
+ / __/ _` | | / __|  / _` | __|  / _ \| '_ \  | __| '_ \ / _ \
+| (_| (_| | | \__ \ | (_| | |_  | (_) | | | | | |_| | | |  __/
+ \___\__,_|_|_|___/  \__,_|\__|  \___/|_| |_|  \__|_| |_|\___|
+                                                              
+                      _                                 
+ _ __ ___  __ _ _   _| | __ _ _ __   _ __ _   _ _ __    
+| '__/ _ \/ _` | | | | |/ _` | '__| | '__| | | | '_ \   
+| | |  __/ (_| | |_| | | (_| | |    | |  | |_| | | | |_ 
+|_|  \___|\__, |\__,_|_|\__,_|_|    |_|   \__,_|_| |_(_)
+          |___/                                         
+  ____                                   _         
+ / ___|___  _ ____   _____ _ __ ___  ___| |_   _   
+| |   / _ \| '_ \ \ / / _ \ '__/ __|/ _ \ | | | |  
+| |__| (_) | | | \ V /  __/ |  \__ \  __/ | |_| |_ 
+ \____\___/|_| |_|\_/ \___|_|  |___/\___|_|\__, ( )
+                                           |___/|/ 
+       _ _                       _     _                _   _                 
+  __ _| | |   ___ ___  _ __  ___(_) __| | ___ _ __ __ _| |_(_) ___  _ __  ___ 
+ / _` | | |  / __/ _ \| '_ \/ __| |/ _` |/ _ \ '__/ _` | __| |/ _ \| '_ \/ __|
+| (_| | | | | (_| (_) | | | \__ \ | (_| |  __/ | | (_| | |_| | (_) | | | \__ \
+ \__,_|_|_|  \___\___/|_| |_|___/_|\__,_|\___|_|  \__,_|\__|_|\___/|_| |_|___/
+                                                                              
+        __                             _     _                            
+  ___  / _|  ___  _____  __   __ _ ___(_) __| | ___     _   _  ___  _   _ 
+ / _ \| |_  / __|/ _ \ \/ /  / _` / __| |/ _` |/ _ \   | | | |/ _ \| | | |
+| (_) |  _| \__ \  __/>  <  | (_| \__ \ | (_| |  __/_  | |_| | (_) | |_| |
+ \___/|_|   |___/\___/_/\_\  \__,_|___/_|\__,_|\___( )  \__, |\___/ \__,_|
+                                                   |/   |___/             
+                                       _                              
+  ___ __ _ _ __    _ __ ___   ___  ___| |_   ___  ___  _ __ ___   ___ 
+ / __/ _` | '_ \  | '_ ` _ \ / _ \/ _ \ __| / __|/ _ \| '_ ` _ \ / _ \
+| (_| (_| | | | | | | | | | |  __/  __/ |_  \__ \ (_) | | | | | |  __/
+ \___\__,_|_| |_| |_| |_| |_|\___|\___|\__| |___/\___/|_| |_| |_|\___|
+                                                                      
+       _   _                                        _      
+  ___ | |_| |__   ___ _ __   _ __   ___  ___  _ __ | | ___ 
+ / _ \| __| '_ \ / _ \ '__| | '_ \ / _ \/ _ \| '_ \| |/ _ \
+| (_) | |_| | | |  __/ |    | |_) |  __/ (_) | |_) | |  __/
+ \___/ \__|_| |_|\___|_|    | .__/ \___|\___/| .__/|_|\___|
+                            |_|              |_|           
+                                     _            _          
+  ___  _ __   ___ ___    ___  _ __  | |___      _(_) ___ ___ 
+ / _ \| '_ \ / __/ _ \  / _ \| '__| | __\ \ /\ / / |/ __/ _ \
+| (_) | | | | (_|  __/ | (_) | |    | |_ \ V  V /| | (_|  __/
+ \___/|_| |_|\___\___|  \___/|_|     \__| \_/\_/ |_|\___\___|
+                                                             
+                 _   _   _                                           _       
+  __ _ _ __   __| | | |_| |__   ___ _   _   _ __ ___ _ __ ___   __ _(_)_ __  
+ / _` | '_ \ / _` | | __| '_ \ / _ \ | | | | '__/ _ \ '_ ` _ \ / _` | | '_ \ 
+| (_| | | | | (_| | | |_| | | |  __/ |_| | | | |  __/ | | | | | (_| | | | | |
+ \__,_|_| |_|\__,_|  \__|_| |_|\___|\__, | |_|  \___|_| |_| |_|\__,_|_|_| |_|
+                                    |___/                                    
+                                                  _   
+ _ __   ___ _ __ _ __ ___   __ _ _ __   ___ _ __ | |_ 
+| '_ \ / _ \ '__| '_ ` _ \ / _` | '_ \ / _ \ '_ \| __|
+| |_) |  __/ |  | | | | | | (_| | | | |  __/ | | | |_ 
+| .__/ \___|_|  |_| |_| |_|\__,_|_| |_|\___|_| |_|\__|
+|_|                                                   
+ _        __ _                                              
+(_)_ __  / _| |_   _  ___ _ __   ___ ___  ___    ___  _ __  
+| | '_ \| |_| | | | |/ _ \ '_ \ / __/ _ \/ __|  / _ \| '_ \ 
+| | | | |  _| | |_| |  __/ | | | (_|  __/\__ \ | (_) | | | |
+|_|_| |_|_| |_|\__,_|\___|_| |_|\___\___||___/  \___/|_| |_|
+                                                            
+                          _ _  __        
+ _   _  ___  _   _ _ __  | (_)/ _| ___   
+| | | |/ _ \| | | | '__| | | | |_ / _ \  
+| |_| | (_) | |_| | |    | | |  _|  __/_ 
+ \__, |\___/ \__,_|_|    |_|_|_|  \___(_)
+ |___/                                   
+         _____                                         _     
+        | ____|_   _____ _ __ _   _  ___  _ __   ___  (_)___ 
+        |  _| \ \ / / _ \ '__| | | |/ _ \| '_ \ / _ \ | / __|
+        | |___ \ V /  __/ |  | |_| | (_) | | | |  __/ | \__ \
+        |_____| \_/ \___|_|   \__, |\___/|_| |_|\___| |_|___/
+                              |___/                          
+                                       __   _   _     _     
+  __ ___      ____ _ _ __ ___    ___  / _| | |_| |__ (_)___ 
+ / _` \ \ /\ / / _` | '__/ _ \  / _ \| |_  | __| '_ \| / __|
+| (_| |\ V  V / (_| | | |  __/ | (_) |  _| | |_| | | | \__ \
+ \__,_| \_/\_/ \__,_|_|  \___|  \___/|_|    \__|_| |_|_|___/
+                                                            
+     _ _                                                
+  __| (_)___  ___ _ __ ___ _ __   __ _ _ __   ___ _   _ 
+ / _` | / __|/ __| '__/ _ \ '_ \ / _` | '_ \ / __| | | |
+| (_| | \__ \ (__| | |  __/ |_) | (_| | | | | (__| |_| |
+ \__,_|_|___/\___|_|  \___| .__/ \__,_|_| |_|\___|\__, |
+                          |_|                     |___/ 
+ _          _                             _   _          
+| |__   ___| |___      _____  ___ _ __   | |_| |__   ___ 
+| '_ \ / _ \ __\ \ /\ / / _ \/ _ \ '_ \  | __| '_ \ / _ \
+| |_) |  __/ |_ \ V  V /  __/  __/ | | | | |_| | | |  __/
+|_.__/ \___|\__| \_/\_/ \___|\___|_| |_|  \__|_| |_|\___|
+                                                         
+                             _       _                       
+  __ _  ___ __ _ _   _  __ _(_)_ __ | |_ __ _ _ __   ___ ___ 
+ / _` |/ __/ _` | | | |/ _` | | '_ \| __/ _` | '_ \ / __/ _ \
+| (_| | (_| (_| | |_| | (_| | | | | | || (_| | | | | (_|  __/
+ \__,_|\___\__, |\__,_|\__,_|_|_| |_|\__\__,_|_| |_|\___\___|
+              |_|                                            
+                     
+ ___  ___  ___ _ __  
+/ __|/ _ \/ _ \ '_ \ 
+\__ \  __/  __/ | | |
+|___/\___|\___|_| |_|
+                     
+              __                 _ _ _            
+  __ _ ___   / _| __ _ _ __ ___ (_) (_) __ _ _ __ 
+ / _` / __| | |_ / _` | '_ ` _ \| | | |/ _` | '__|
+| (_| \__ \ |  _| (_| | | | | | | | | | (_| | |   
+ \__,_|___/ |_|  \__,_|_| |_| |_|_|_|_|\__,_|_|   
+                                                  
+               _ _                                          
+__      ____ _| | |_ __   __ _ _ __   ___ _ __    ___  _ __ 
+\ \ /\ / / _` | | | '_ \ / _` | '_ \ / _ \ '__|  / _ \| '__|
+ \ V  V / (_| | | | |_) | (_| | |_) |  __/ |    | (_) | |   
+  \_/\_/ \__,_|_|_| .__/ \__,_| .__/ \___|_|     \___/|_|   
+                  |_|         |_|                           
+ _           _              _      __      _                _   
+(_)_ __  ___| |_ __ _ _ __ | |_   / _|_ __(_) ___ _ __   __| |  
+| | '_ \/ __| __/ _` | '_ \| __| | |_| '__| |/ _ \ '_ \ / _` |  
+| | | | \__ \ || (_| | | | | |_  |  _| |  | |  __/ | | | (_| |_ 
+|_|_| |_|___/\__\__,_|_| |_|\__| |_| |_|  |_|\___|_| |_|\__,_(_)
+                                                                
+ _____ _                 _                    _           _ 
+|_   _| |__   ___    ___| |__   ___ _ __ ___ (_) ___ __ _| |
+  | | | '_ \ / _ \  / __| '_ \ / _ \ '_ ` _ \| |/ __/ _` | |
+  | | | | | |  __/ | (__| | | |  __/ | | | | | | (_| (_| | |
+  |_| |_| |_|\___|  \___|_| |_|\___|_| |_| |_|_|\___\__,_|_|
+                                                            
+            _   _               _ _                _        _ _       _     
+  __ _  ___| |_(_) ___  _ __   (_) |_    ___ _ __ | |_ __ _(_) |___  (_)___ 
+ / _` |/ __| __| |/ _ \| '_ \  | | __|  / _ \ '_ \| __/ _` | | / __| | / __|
+| (_| | (__| |_| | (_) | | | | | | |_  |  __/ | | | || (_| | | \__ \ | \__ \
+ \__,_|\___|\__|_|\___/|_| |_| |_|\__|  \___|_| |_|\__\__,_|_|_|___/ |_|___/
+                                                                            
+ _                                    _   _     
+| | ___  ___ ___  __      _____  _ __| |_| |__  
+| |/ _ \/ __/ __| \ \ /\ / / _ \| '__| __| '_ \ 
+| |  __/\__ \__ \  \ V  V / (_) | |  | |_| | | |
+|_|\___||___/___/   \_/\_/ \___/|_|   \__|_| |_|
+                                                
+                   _           _               _   _                 
+  __ _ _ __   __ _| |_   _ ___(_)_ __   __ _  | |_| |__   __ _ _ __  
+ / _` | '_ \ / _` | | | | |_  / | '_ \ / _` | | __| '_ \ / _` | '_ \ 
+| (_| | | | | (_| | | |_| |/ /| | | | | (_| | | |_| | | | (_| | | | |
+ \__,_|_| |_|\__,_|_|\__, /___|_|_| |_|\__, |  \__|_| |_|\__,_|_| |_|
+                     |___/             |___/                         
+             _             _                     _   _                       
+  ___ _ __  (_) ___  _   _(_)_ __   __ _        / \ | |_    __ _ _ __  _   _ 
+ / _ \ '_ \ | |/ _ \| | | | | '_ \ / _` |      / _ \| __|  / _` | '_ \| | | |
+|  __/ | | || | (_) | |_| | | | | | (_| |_    / ___ \ |_  | (_| | | | | |_| |
+ \___|_| |_|/ |\___/ \__, |_|_| |_|\__, (_)  /_/   \_\__|  \__,_|_| |_|\__, |
+          |__/       |___/         |___/                               |___/ 
+           _           _   _                          _      
+ _ __ __ _| |_ ___    | |_| |__   ___  ___  ___   ___(_)_  __
+| '__/ _` | __/ _ \   | __| '_ \ / _ \/ __|/ _ \ / __| \ \/ /
+| | | (_| | ||  __/_  | |_| | | |  __/\__ \  __/ \__ \ |>  < 
+|_|  \__,_|\__\___( )  \__|_| |_|\___||___/\___| |___/_/_/\_\
+                  |/                                         
+       _                                             _                 _   
+ _ __ (_) ___  ___ ___  ___    __ _ _ __ ___    __ _| |__   ___  _   _| |_ 
+| '_ \| |/ _ \/ __/ _ \/ __|  / _` | '__/ _ \  / _` | '_ \ / _ \| | | | __|
+| |_) | |  __/ (_|  __/\__ \ | (_| | | |  __/ | (_| | |_) | (_) | |_| | |_ 
+| .__/|_|\___|\___\___||___/  \__,_|_|  \___|  \__,_|_.__/ \___/ \__,_|\__|
+|_|                                                                        
+                                 _ _   _                _                     
+ _ __ ___   ___ _ __   __      _(_) |_| |__   __      _| |__   ___  _ __ ___  
+| '_ ` _ \ / _ \ '_ \  \ \ /\ / / | __| '_ \  \ \ /\ / / '_ \ / _ \| '_ ` _ \ 
+| | | | | |  __/ | | |  \ V  V /| | |_| | | |  \ V  V /| | | | (_) | | | | | |
+|_| |_| |_|\___|_| |_|   \_/\_/ |_|\__|_| |_|   \_/\_/ |_| |_|\___/|_| |_| |_|
+                                                                              
+ ___    __      _ _                 
+|_ _|  / _| ___| | |_    __ _ _ __  
+ | |  | |_ / _ \ | __|  / _` | '_ \ 
+ | |  |  _|  __/ | |_  | (_| | | | |
+|___| |_|  \___|_|\__|  \__,_|_| |_|
+                                    
+ _                              _ _       _       
+(_)_ __ ___  _ __ ___   ___  __| (_) __ _| |_ ___ 
+| | '_ ` _ \| '_ ` _ \ / _ \/ _` | |/ _` | __/ _ \
+| | | | | | | | | | | |  __/ (_| | | (_| | ||  __/
+|_|_| |_| |_|_| |_| |_|\___|\__,_|_|\__,_|\__\___|
+                                                  
+                                 _             _                         
+ ___ _   _ _ __ ___  _ __   __ _| |_          | |_ ___    _   _ ___  ___ 
+/ __| | | | '_ ` _ \| '_ \ / _` | __|  _____  | __/ _ \  | | | / __|/ _ \
+\__ \ |_| | | | | | | |_) | (_| | |_  |_____| | || (_) | | |_| \__ \  __/
+|___/\__, |_| |_| |_| .__/ \__,_|\__|          \__\___/   \__,_|___/\___|
+     |___/          |_|                                                  
+                   _       _                      __   __  __            
+  __ _    ___ ___ (_)_ __ (_)_ __   __ _    ___  / _| |  \/  | __ ___  __
+ / _` |  / __/ _ \| | '_ \| | '_ \ / _` |  / _ \| |_  | |\/| |/ _` \ \/ /
+| (_| | | (_| (_) | | | | | | | | | (_| | | (_) |  _| | |  | | (_| |>  < 
+ \__,_|  \___\___/|_|_| |_|_|_| |_|\__, |  \___/|_|   |_|  |_|\__,_/_/\_\
+                                   |___/                                 
+ ____                 _           _               _     
+| __ )  ___  ___ _ __| |__   ___ | |__  _ __ ___ ( )___ 
+|  _ \ / _ \/ _ \ '__| '_ \ / _ \| '_ \| '_ ` _ \|// __|
+| |_) |  __/  __/ |  | |_) | (_) | | | | | | | | | \__ \
+|____/ \___|\___|_|  |_.__/ \___/|_| |_|_| |_| |_| |___/
+                                                        
+                          
+ _ __ ___   ___  _ __ ___ 
+| '_ ` _ \ / _ \| '__/ _ \
+| | | | | | (_) | | |  __/
+|_| |_| |_|\___/|_|  \___|
+                          
+           _   _      __            _                     _        
+ ___  __ _| |_(_)___ / _| __ _  ___| |_ ___  _ __ _   _  | |_ ___  
+/ __|/ _` | __| / __| |_ / _` |/ __| __/ _ \| '__| | | | | __/ _ \ 
+\__ \ (_| | |_| \__ \  _| (_| | (__| || (_) | |  | |_| | | || (_) |
+|___/\__,_|\__|_|___/_|  \__,_|\___|\__\___/|_|   \__, |  \__\___/ 
+                                                  |___/            
+                  _   _                   _   _          
+ _ __ ___   ___  | |_| |__   __ _ _ __   | |_| |__   ___ 
+| '_ ` _ \ / _ \ | __| '_ \ / _` | '_ \  | __| '_ \ / _ \
+| | | | | |  __/ | |_| | | | (_| | | | | | |_| | | |  __/
+|_| |_| |_|\___|  \__|_| |_|\__,_|_| |_|  \__|_| |_|\___|
+                                                         
+                                                                  
+  ___  _ __   __ _  __ _ _   _  ___  __   _____   __ _ _   _  ___ 
+ / _ \| '_ \ / _` |/ _` | | | |/ _ \ \ \ / / _ \ / _` | | | |/ _ \
+| (_) | |_) | (_| | (_| | |_| |  __/  \ V / (_) | (_| | |_| |  __/
+ \___/| .__/ \__,_|\__, |\__,_|\___|   \_/ \___/ \__, |\__,_|\___|
+      |_|             |_|                        |___/            
+                       _   _ _                           _   _           _ _  
+__      _____  _ __ __| | ( | )___ _ __ ___  _ __   __ _| |_| |__  _   _( | ) 
+\ \ /\ / / _ \| '__/ _` |  V V/ _ \ '_ ` _ \| '_ \ / _` | __| '_ \| | | |V V  
+ \ V  V / (_) | | | (_| |    |  __/ | | | | | |_) | (_| | |_| | | | |_| |   _ 
+  \_/\_/ \___/|_|  \__,_|     \___|_| |_| |_| .__/ \__,_|\__|_| |_|\__, |  (_)
+                                            |_|                    |___/      
+                                  _    _ _     _        _      
+                                 / \  | (_)___| |_ __ _(_)_ __ 
+                 _____ _____    / _ \ | | / __| __/ _` | | '__|
+                |_____|_____|  / ___ \| | \__ \ || (_| | | |   
+                              /_/   \_\_|_|___/\__\__,_|_|_|   
+                                                               
+  ____            _            _ _ ____  _        __  __           _ _ 
+ / ___|___   ___ | | _____    ( | ) ___|(_)_  __ |  \/  | ___ _ __( | )
+| |   / _ \ / _ \| |/ / _ \    V V\___ \| \ \/ / | |\/| |/ _ \ '_ \V V 
+| |__| (_) | (_) |   <  __/_       ___) | |>  <  | |  | |  __/ | | |   
+ \____\___/ \___/|_|\_\___( )     |____/|_/_/\_\ |_|  |_|\___|_| |_|   
+                          |/                                           
diff --git a/externals/figlet/tests/res004.txt b/externals/figlet/tests/res004.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res004.txt
@@ -0,0 +1,120 @@
+  __ _           _     _    __  
+ / /(_) ___  ___| |__ | | __\ \ 
+/ / | |/ _ \/ __| '_ \| |/ / \ \
+\ \ | | (_) \__ \ | | |   <  / /
+ \_\/ |\___/|___/_| |_|_|\_\/_/ 
+  |__/                          
+   _           _     _     ____  _        __ _                 __   _       
+  (_) ___  ___| |__ | | __/ __ \(_)_ __  / _| |_   ___  ___   / /__| |_ ___ 
+  | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ \ __/ __|
+  | | (_) \__ \ | | |   < | (_| | | | | |  _| | |_| |>  < _ / /  __/ || (__ 
+ _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___|
+|__/                      \____/                                            
+    ___                       _        _            ___        _     
+   / / | ___   __ _ _ __ ___ | |_ __ _| |_ ___   __| \ \   ___| |__  
+  / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \ 
+ / / | | (_) | (_| | | | (_) | || (_| | ||  __/| (_| |/ / \__ \ | | |
+/_/  |_|\___/ \__, |_|  \___/ \__\__,_|\__\___(_)__,_/_/  |___/_| |_|
+              |___/                                                  
+                    
+       _ __   __/\__
+ _____| '_ \  \    /
+|_____| | | | /_  _\
+      |_| |_|   \/  
+                    
+  __ _           _     _    __                           _            
+ / /(_) ___  ___| |__ | | __\ \    __ _ _ __   __ _  ___| |__   ___ _ 
+/ / | |/ _ \/ __| '_ \| |/ / \ \  / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ \ | | |   <  / / | (_| | |_) | (_| | (__| | | |  __/_ 
+ \_\/ |\___/|___/_| |_|_|\_\/_/   \__,_| .__/ \__,_|\___|_| |_|\___(_)
+  |__/                                 |_|                            
+ _ _              _ _  _                      _             
+| (_)_ __   ___  / | || | _   ___ _   _ _ __ | |_ __ ___  __
+| | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ /
+| | | | | |  __/ | |__   _|  \__ \ |_| | | | | || (_| |>  < 
+|_|_|_| |_|\___| |_|  |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\
+                                  |___/                     
+                                                  
+  ___ _ __ _ __ ___  _ __   _ __   ___  __ _ _ __ 
+ / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__|
+|  __/ |  | | | (_) | |    | | | |  __/ (_| | |   
+ \___|_|  |_|  \___/|_|    |_| |_|\___|\__,_|_|   
+                                                  
+                                       _           _   _        _              
+ _   _ _ __   _____  ___ __   ___  ___| |_ ___  __| | | |_ ___ | | _____ _ __  
+| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \ 
+| |_| | | | |  __/>  <| |_) |  __/ (__| ||  __/ (_| | | || (_) |   <  __/ | | |
+ \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_|  \__\___/|_|\_\___|_| |_|
+                      |_|                                                      
+ ___   _ 
+( ) \ ( )
+ \|| ||/ 
+    > >  
+   | |   
+  /_/    
+  __ _           _     _    __                           _            
+ / /(_) ___  ___| |__ | | __\ \    __ _ _ __   __ _  ___| |__   ___ _ 
+/ / | |/ _ \/ __| '_ \| |/ / \ \  / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ \ | | |   <  / / | (_| | |_) | (_| | (__| | | |  __/_ 
+ \_\/ |\___/|___/_| |_|_|\_\/_/   \__,_| .__/ \__,_|\___|_| |_|\___(_)
+  |__/                                 |_|                            
+ _ _              _ _  _      ___   _ 
+| (_)_ __   ___  / | || | _  ( ) \ ( )
+| | | '_ \ / _ \ | | || |(_)  \|| ||/ 
+| | | | | |  __/ | |__   _|      > >  
+|_|_|_| |_|\___| |_|  |_|(_)    | |   
+                               /_/    
+  __ _           _     _    __    _   _                  _       _   
+ / /(_) ___  ___| |__ | | __\ \  | |_| |__   ___   _ __ | | ___ | |_ 
+/ / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __|
+\ \ | | (_) \__ \ | | |   <  / / | |_| | | |  __/ | |_) | | (_) | |_ 
+ \_\/ |\___/|___/_| |_|_|\_\/_/   \__|_| |_|\___| | .__/|_|\___/ \__|
+  |__/                                            |_|                
+ _   _     _      _                  
+| |_| |__ (_) ___| | _____ _ __  ___ 
+| __| '_ \| |/ __| |/ / _ \ '_ \/ __|
+| |_| | | | | (__|   <  __/ | | \__ \
+ \__|_| |_|_|\___|_|\_\___|_| |_|___/
+                                     
+  __                __  __ _      _     ___    _   _                    
+ / /__ _ ___ _   _ / _|/ _(_) ___| | __| \ \  | |_| |__   ___  ___  ___ 
+/ // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \
+\ \ (_| \__ \ |_| |  _|  _| |  __/ | (_| |/ / | |_| | | | (_) \__ \  __/
+ \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/   \__|_| |_|\___/|___/\___|
+                                                                        
+                      _ _         _          _ _ 
+  __ _ _ __ ___ _ __ ( ) |_   ___| |__   ___| | |
+ / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | |
+| (_| | | |  __/ | | | | |_  \__ \ | | |  __/ | |
+ \__,_|_|  \___|_| |_|  \__| |___/_| |_|\___|_|_|
+                                                 
+               _       _       
+ ___  ___ _ __(_)_ __ | |_ ___ 
+/ __|/ __| '__| | '_ \| __/ __|
+\__ \ (__| |  | | |_) | |_\__ \
+|___/\___|_|  |_| .__/ \__|___/
+                |_|            
+  __         _      _    __    _   _     _                               _ _   
+ / /___ _ __(_) ___| |__ \ \  | |_| |__ (_)___  __      ____ _ ___ _ __ ( ) |_ 
+/ // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __|
+\ \  __/ |  | | (__| | | |/ / | |_| | | | \__ \  \ V  V / (_| \__ \ | | | | |_ 
+ \_\___|_|  |_|\___|_| |_/_/   \__|_| |_|_|___/   \_/\_/ \__,_|___/_| |_|  \__|
+                                                                               
+      _     _      _                
+  ___| |__ (_) ___| | _____ _ __    
+ / __| '_ \| |/ __| |/ / _ \ '_ \   
+| (__| | | | | (__|   <  __/ | | |_ 
+ \___|_| |_|_|\___|_|\_\___|_| |_(_)
+                                    
+                               _       
+                              (_)_ __  
+                 _____ _____  | | '_ \ 
+                |_____|_____| | | | | |
+                              |_|_| |_|
+                                       
+   _  _       _      _     _                       _                _ 
+ _| || |_  __| | ___| |__ (_) __ _ _ __         __| | _____   _____| |
+|_  ..  _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ |
+|_      _| (_| |  __/ |_) | | (_| | | | |_____| (_| |  __/\ V /  __/ |
+  |_||_|  \__,_|\___|_.__/|_|\__,_|_| |_|      \__,_|\___| \_/ \___|_|
+                                                                      
diff --git a/externals/figlet/tests/res005.txt b/externals/figlet/tests/res005.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res005.txt
@@ -0,0 +1,120 @@
+                                                 __  _    _               _  __
+                                                 \ \| | _| |__  ___  ___ (_)/ /
+                                                  \ \ |/ / '_ \/ __|/ _ \| / / 
+                                                  / /   <| | | \__ \ (_) | \ \ 
+                                                 /_/|_|\_\_| |_|___/\___// |\_\
+                                                                       |__/    
+         _          __            _  __       _   ____  _    _               _ 
+     ___| |_ ___   / /__  ___   _| |/ _|_ __ (_) / __ \| | _| |__  ___  ___ (_)
+    / __| __/ _ \ / (_) \/ / | | | | |_| '_ \| |/ / _` | |/ / '_ \/ __|/ _ \| |
+   | (__| ||  __// / _ >  <| |_| | |  _| | | | | | (_| |   <| | | \__ \ (_) | |
+    \___|\__\___/_/ (_)_/\_\\__,_|_|_| |_| |_|_|\ \__,_|_|\_\_| |_|___/\___// |
+                                                 \____/                   |__/ 
+           _          __      _       _        _                        _    __
+          | |__  ___  \ \  __| |  ___| |_ __ _| |_ ___  _ __ __ _  ___ | |  / /
+          | '_ \/ __|  \ \/ _` | / _ \ __/ _` | __/ _ \| '__/ _` |/ _ \| | / / 
+          | | | \__ \  / / (_| ||  __/ || (_| | || (_) | | | (_| | (_) | |/ /  
+          |_| |_|___/ /_/ \__,_(_)___|\__\__,_|\__\___/|_|  \__, |\___/|_/_/   
+                                                            |___/              
+                                                                               
+                                                           __/\__  _ __        
+                                                           \    / | '_ \ _____ 
+                                                           /_  _\ | | | |_____|
+                                                             \/   |_| |_|      
+                                                                               
+                    _                            __  _    _               _  __
+              _ ___| |__   ___ __ _ _ __   __ _  \ \| | _| |__  ___  ___ (_)/ /
+             (_) _ \ '_ \ / __/ _` | '_ \ / _` |  \ \ |/ / '_ \/ __|/ _ \| / / 
+              |  __/ | | | (_| (_| | |_) | (_| |  / /   <| | | \__ \ (_) | \ \ 
+             (_)___|_| |_|\___\__,_| .__/ \__,_| /_/|_|\_\_| |_|___/\___// |\_\
+                                   |_|                                 |__/    
+                             _                       _  _   _              _ _ 
+                  __  ____ _| |_ _ __  _   _ ___   _| || | / |   ___ _ __ (_) |
+                  \ \/ / _` | __| '_ \| | | / __| (_) || |_| |  / _ \ '_ \| | |
+                   >  < (_| | |_| | | | |_| \__ \  _|__   _| | |  __/ | | | | |
+                  /_/\_\__,_|\__|_| |_|\__, |___/ (_)  |_| |_|  \___|_| |_|_|_|
+                                       |___/                                   
+                                                                               
+                                _ __ __ _  ___ _ __    _ __ ___  _ __ _ __ ___ 
+                               | '__/ _` |/ _ \ '_ \  | '__/ _ \| '__| '__/ _ \
+                               | | | (_| |  __/ | | | | | | (_) | |  | | |  __/
+                               |_|  \__,_|\___|_| |_| |_|  \___/|_|  |_|  \___|
+                                                                               
+              _         _         _      _                                     
+   _ __   ___| | _____ | |_    __| | ___| |_ ___ ___ _ ____  _____ _ __  _   _ 
+  | '_ \ / _ \ |/ / _ \| __|  / _` |/ _ \ __/ __/ _ \ '_ \ \/ / _ \ '_ \| | | |
+  | | | |  __/   < (_) | |_  | (_| |  __/ || (_|  __/ |_) >  <  __/ | | | |_| |
+  |_| |_|\___|_|\_\___/ \__|  \__,_|\___|\__\___\___| .__/_/\_\___|_| |_|\__,_|
+                                                    |_|                        
+                                                                       ___   _ 
+                                                                      ( ) \ ( )
+                                                                      |/ | | \|
+                                                                          > >  
+                                                                         | |   
+                                                                        /_/    
+                    _                            __  _    _               _  __
+              _ ___| |__   ___ __ _ _ __   __ _  \ \| | _| |__  ___  ___ (_)/ /
+             (_) _ \ '_ \ / __/ _` | '_ \ / _` |  \ \ |/ / '_ \/ __|/ _ \| / / 
+              |  __/ | | | (_| (_| | |_) | (_| |  / /   <| | | \__ \ (_) | \ \ 
+             (_)___|_| |_|\___\__,_| .__/ \__,_| /_/|_|\_\_| |_|___/\___// |\_\
+                                   |_|                                 |__/    
+                                         ___   _     _  _   _              _ _ 
+                                        ( ) \ ( )  _| || | / |   ___ _ __ (_) |
+                                        |/ | | \| (_) || |_| |  / _ \ '_ \| | |
+                                            > >    _|__   _| | |  __/ | | | | |
+                                           | |    (_)  |_| |_|  \___|_| |_|_|_|
+                                          /_/                                  
+              _        _              _     _    __  _    _               _  __
+             | |_ ___ | |_ __     ___| |__ | |_  \ \| | _| |__  ___  ___ (_)/ /
+             | __/ _ \| | '_ \   / _ \ '_ \| __|  \ \ |/ / '_ \/ __|/ _ \| / / 
+             | || (_) | | |_) | |  __/ | | | |_   / /   <| | | \__ \ (_) | \ \ 
+              \__\___/|_| .__/   \___|_| |_|\__| /_/|_|\_\_| |_|___/\___// |\_\
+                        |_|                                            |__/    
+                                                          _        _ _     _   
+                                           ___ _ __   ___| | _____(_) |__ | |_ 
+                                          / __| '_ \ / _ \ |/ / __| | '_ \| __|
+                                          \__ \ | | |  __/   < (__| | | | | |_ 
+                                          |___/_| |_|\___|_|\_\___|_|_| |_|\__|
+                                                                               
+                      _     _    __      _ _      _  __  __                  __
+       ___  ___  ___ | |__ | |_  \ \  __| | | ___(_)/ _|/ _|_   _ ___  __ _ / /
+      / _ \/ __|/ _ \| '_ \| __|  \ \/ _` | |/ _ \ | |_| |_| | | / __|/ _` / / 
+     |  __/\__ \ (_) | | | | |_   / / (_| | |  __/ |  _|  _| |_| \__ \ (_| \ \ 
+      \___||___/\___/|_| |_|\__| /_/ \__,_|_|\___|_|_| |_|  \__,_|___/\__,_|\_\
+                                                                               
+                               _ _      _           _   _                      
+                              | | | ___| |__  ___  | |_( )_ __   ___ _ __ __ _ 
+                              | | |/ _ \ '_ \/ __| | __|/| '_ \ / _ \ '__/ _` |
+                              | | |  __/ | | \__ \ | |_  | | | |  __/ | | (_| |
+                              |_|_|\___|_| |_|___/  \__| |_| |_|\___|_|  \__,_|
+                                                                               
+                                                      _         _              
+                                                  ___| |_ _ __ (_)_ __ ___ ___ 
+                                                 / __| __| '_ \| | '__/ __/ __|
+                                                 \__ \ |_| |_) | | | | (__\__ \
+                                                 |___/\__| .__/|_|_|  \___|___/
+                                                         |_|                   
+                                    _ _     _    __  _          _            __
+                                ___(_) |__ | |_  \ \| |__   ___(_)_ __ ___  / /
+                               / __| | '_ \| __|  \ \ '_ \ / __| | '__/ _ \/ / 
+                               \__ \ | | | | |_   / / | | | (__| | | |  __/\ \ 
+                               |___/_|_| |_|\__| /_/|_| |_|\___|_|_|  \___| \_\
+                                                                               
+                        _        _ _            _   _                          
+             _ __   ___| | _____(_) |__   ___  | |_( )_ __  ___  __ ___      __
+            | '_ \ / _ \ |/ / __| | '_ \ / __| | __|/| '_ \/ __|/ _` \ \ /\ / /
+           _| | | |  __/   < (__| | | | | (__  | |_  | | | \__ \ (_| |\ V  V / 
+          (_)_| |_|\___|_|\_\___|_|_| |_|\___|  \__| |_| |_|___/\__,_| \_/\_/  
+                                                                               
+                                               _                               
+                                         _ __ (_)                              
+                                        | '_ \| |  _____ _____                 
+                                        | | | | | |_____|_____|                
+                                        |_| |_|_|                              
+                                                                               
+          _                    _                   _ _              _   _  _   
+         | | _____   _____  __| |      _ __   __ _(_) |__   ___  __| |_| || |_ 
+         | |/ _ \ \ / / _ \/ _` |_____| '_ \ / _` | | '_ \ / _ \/ _` |_  ..  _|
+         | |  __/\ V /  __/ (_| |_____| | | | (_| | | |_) |  __/ (_| |_      _|
+         |_|\___| \_/ \___|\__,_|     |_| |_|\__,_|_|_.__/ \___|\__,_| |_||_|  
+                                                                               
diff --git a/externals/figlet/tests/res006.txt b/externals/figlet/tests/res006.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res006.txt
@@ -0,0 +1,120 @@
+  __ _           _     _    __  
+ / /(_) ___  ___| |__ | | __\ \ 
+/ / | |/ _ \/ __| '_ \| |/ / \ \
+\ \ | | (_) \__ \ | | |   <  / /
+ \_\/ |\___/|___/_| |_|_|\_\/_/ 
+  |__/                          
+   _           _     _     ____  _        __ _                 __   _       
+  (_) ___  ___| |__ | | __/ __ \(_)_ __  / _| |_   ___  ___   / /__| |_ ___ 
+  | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ \ __/ __|
+  | | (_) \__ \ | | |   < | (_| | | | | |  _| | |_| |>  < _ / /  __/ || (__ 
+ _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___|
+|__/                      \____/                                            
+    ___                       _        _            ___        _     
+   / / | ___   __ _ _ __ ___ | |_ __ _| |_ ___   __| \ \   ___| |__  
+  / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \ 
+ / / | | (_) | (_| | | | (_) | || (_| | ||  __/| (_| |/ / \__ \ | | |
+/_/  |_|\___/ \__, |_|  \___/ \__\__,_|\__\___(_)__,_/_/  |___/_| |_|
+              |___/                                                  
+                    
+       _ __   __/\__
+ _____| '_ \  \    /
+|_____| | | | /_  _\
+      |_| |_|   \/  
+                    
+  __ _           _     _    __                           _            
+ / /(_) ___  ___| |__ | | __\ \    __ _ _ __   __ _  ___| |__   ___ _ 
+/ / | |/ _ \/ __| '_ \| |/ / \ \  / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ \ | | |   <  / / | (_| | |_) | (_| | (__| | | |  __/_ 
+ \_\/ |\___/|___/_| |_|_|\_\/_/   \__,_| .__/ \__,_|\___|_| |_|\___(_)
+  |__/                                 |_|                            
+ _ _              _ _  _                      _             
+| (_)_ __   ___  / | || | _   ___ _   _ _ __ | |_ __ ___  __
+| | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ /
+| | | | | |  __/ | |__   _|  \__ \ |_| | | | | || (_| |>  < 
+|_|_|_| |_|\___| |_|  |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\
+                                  |___/                     
+                                                  
+  ___ _ __ _ __ ___  _ __   _ __   ___  __ _ _ __ 
+ / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__|
+|  __/ |  | | | (_) | |    | | | |  __/ (_| | |   
+ \___|_|  |_|  \___/|_|    |_| |_|\___|\__,_|_|   
+                                                  
+                                       _           _   _        _              
+ _   _ _ __   _____  ___ __   ___  ___| |_ ___  __| | | |_ ___ | | _____ _ __  
+| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \ 
+| |_| | | | |  __/>  <| |_) |  __/ (__| ||  __/ (_| | | || (_) |   <  __/ | | |
+ \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_|  \__\___/|_|\_\___|_| |_|
+                      |_|                                                      
+ ___   _ 
+( ) \ ( )
+ \|| ||/ 
+    > >  
+   | |   
+  /_/    
+  __ _           _     _    __                           _            
+ / /(_) ___  ___| |__ | | __\ \    __ _ _ __   __ _  ___| |__   ___ _ 
+/ / | |/ _ \/ __| '_ \| |/ / \ \  / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ \ | | |   <  / / | (_| | |_) | (_| | (__| | | |  __/_ 
+ \_\/ |\___/|___/_| |_|_|\_\/_/   \__,_| .__/ \__,_|\___|_| |_|\___(_)
+  |__/                                 |_|                            
+ _ _              _ _  _      ___   _ 
+| (_)_ __   ___  / | || | _  ( ) \ ( )
+| | | '_ \ / _ \ | | || |(_)  \|| ||/ 
+| | | | | |  __/ | |__   _|      > >  
+|_|_|_| |_|\___| |_|  |_|(_)    | |   
+                               /_/    
+  __ _           _     _    __    _   _                  _       _   
+ / /(_) ___  ___| |__ | | __\ \  | |_| |__   ___   _ __ | | ___ | |_ 
+/ / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __|
+\ \ | | (_) \__ \ | | |   <  / / | |_| | | |  __/ | |_) | | (_) | |_ 
+ \_\/ |\___/|___/_| |_|_|\_\/_/   \__|_| |_|\___| | .__/|_|\___/ \__|
+  |__/                                            |_|                
+ _   _     _      _                  
+| |_| |__ (_) ___| | _____ _ __  ___ 
+| __| '_ \| |/ __| |/ / _ \ '_ \/ __|
+| |_| | | | | (__|   <  __/ | | \__ \
+ \__|_| |_|_|\___|_|\_\___|_| |_|___/
+                                     
+  __                __  __ _      _     ___    _   _                    
+ / /__ _ ___ _   _ / _|/ _(_) ___| | __| \ \  | |_| |__   ___  ___  ___ 
+/ // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \
+\ \ (_| \__ \ |_| |  _|  _| |  __/ | (_| |/ / | |_| | | | (_) \__ \  __/
+ \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/   \__|_| |_|\___/|___/\___|
+                                                                        
+                      _ _         _          _ _ 
+  __ _ _ __ ___ _ __ ( ) |_   ___| |__   ___| | |
+ / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | |
+| (_| | | |  __/ | | | | |_  \__ \ | | |  __/ | |
+ \__,_|_|  \___|_| |_|  \__| |___/_| |_|\___|_|_|
+                                                 
+               _       _       
+ ___  ___ _ __(_)_ __ | |_ ___ 
+/ __|/ __| '__| | '_ \| __/ __|
+\__ \ (__| |  | | |_) | |_\__ \
+|___/\___|_|  |_| .__/ \__|___/
+                |_|            
+  __         _      _    __    _   _     _                               _ _   
+ / /___ _ __(_) ___| |__ \ \  | |_| |__ (_)___  __      ____ _ ___ _ __ ( ) |_ 
+/ // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __|
+\ \  __/ |  | | (__| | | |/ / | |_| | | | \__ \  \ V  V / (_| \__ \ | | | | |_ 
+ \_\___|_|  |_|\___|_| |_/_/   \__|_| |_|_|___/   \_/\_/ \__,_|___/_| |_|  \__|
+                                                                               
+      _     _      _                
+  ___| |__ (_) ___| | _____ _ __    
+ / __| '_ \| |/ __| |/ / _ \ '_ \   
+| (__| | | | | (__|   <  __/ | | |_ 
+ \___|_| |_|_|\___|_|\_\___|_| |_(_)
+                                    
+                               _       
+                              (_)_ __  
+                 _____ _____  | | '_ \ 
+                |_____|_____| | | | | |
+                              |_|_| |_|
+                                       
+   _  _       _      _     _                       _                _ 
+ _| || |_  __| | ___| |__ (_) __ _ _ __         __| | _____   _____| |
+|_  ..  _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ |
+|_      _| (_| |  __/ |_) | | (_| | | | |_____| (_| |  __/\ V /  __/ |
+  |_||_|  \__,_|\___|_.__/|_|\__,_|_| |_|      \__,_|\___| \_/ \___|_|
+                                                                      
diff --git a/externals/figlet/tests/res007.txt b/externals/figlet/tests/res007.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res007.txt
@@ -0,0 +1,120 @@
+                                                 __ _           _     _    __  
+                                                / /(_) ___  ___| |__ | | __\ \ 
+                                               / / | |/ _ \/ __| '_ \| |/ / \ \
+                                               \ \ | | (_) \__ \ | | |   <  / /
+                                                \_\/ |\___/|___/_| |_|_|\_\/_/ 
+                                                 |__/                          
+      _           _     _     ____  _        __ _                 __   _       
+     (_) ___  ___| |__ | | __/ __ \(_)_ __  / _| |_   ___  ___   / /__| |_ ___ 
+     | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ \ __/ __|
+     | | (_) \__ \ | | |   < | (_| | | | | |  _| | |_| |>  < _ / /  __/ || (__ 
+    _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___|
+   |__/                      \____/                                            
+              ___                       _        _            ___        _     
+             / / | ___   __ _ _ __ ___ | |_ __ _| |_ ___   __| \ \   ___| |__  
+            / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \ 
+           / / | | (_) | (_| | | | (_) | || (_| | ||  __/| (_| |/ / \__ \ | | |
+          /_/  |_|\___/ \__, |_|  \___/ \__\__,_|\__\___(_)__,_/_/  |___/_| |_|
+                        |___/                                                  
+                                                                               
+                                                                  _ __   __/\__
+                                                            _____| '_ \  \    /
+                                                           |_____| | | | /_  _\
+                                                                 |_| |_|   \/  
+                                                                               
+           __ _           _     _    __                           _            
+          / /(_) ___  ___| |__ | | __\ \    __ _ _ __   __ _  ___| |__   ___ _ 
+         / / | |/ _ \/ __| '_ \| |/ / \ \  / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+         \ \ | | (_) \__ \ | | |   <  / / | (_| | |_) | (_| | (__| | | |  __/_ 
+          \_\/ |\___/|___/_| |_|_|\_\/_/   \__,_| .__/ \__,_|\___|_| |_|\___(_)
+           |__/                                 |_|                            
+                    _ _              _ _  _                      _             
+                   | (_)_ __   ___  / | || | _   ___ _   _ _ __ | |_ __ ___  __
+                   | | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ /
+                   | | | | | |  __/ | |__   _|  \__ \ |_| | | | | || (_| |>  < 
+                   |_|_|_| |_|\___| |_|  |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\
+                                                     |___/                     
+                                                                               
+                               ___ _ __ _ __ ___  _ __   _ __   ___  __ _ _ __ 
+                              / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__|
+                             |  __/ |  | | | (_) | |    | | | |  __/ (_| | |   
+                              \___|_|  |_|  \___/|_|    |_| |_|\___|\__,_|_|   
+                                                                               
+                                       _           _   _        _              
+ _   _ _ __   _____  ___ __   ___  ___| |_ ___  __| | | |_ ___ | | _____ _ __  
+| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \ 
+| |_| | | | |  __/>  <| |_) |  __/ (__| ||  __/ (_| | | || (_) |   <  __/ | | |
+ \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_|  \__\___/|_|\_\___|_| |_|
+                      |_|                                                      
+                                                                       ___   _ 
+                                                                      ( ) \ ( )
+                                                                       \|| ||/ 
+                                                                          > >  
+                                                                         | |   
+                                                                        /_/    
+           __ _           _     _    __                           _            
+          / /(_) ___  ___| |__ | | __\ \    __ _ _ __   __ _  ___| |__   ___ _ 
+         / / | |/ _ \/ __| '_ \| |/ / \ \  / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+         \ \ | | (_) \__ \ | | |   <  / / | (_| | |_) | (_| | (__| | | |  __/_ 
+          \_\/ |\___/|___/_| |_|_|\_\/_/   \__,_| .__/ \__,_|\___|_| |_|\___(_)
+           |__/                                 |_|                            
+                                          _ _              _ _  _      ___   _ 
+                                         | (_)_ __   ___  / | || | _  ( ) \ ( )
+                                         | | | '_ \ / _ \ | | || |(_)  \|| ||/ 
+                                         | | | | | |  __/ | |__   _|      > >  
+                                         |_|_|_| |_|\___| |_|  |_|(_)    | |   
+                                                                        /_/    
+            __ _           _     _    __    _   _                  _       _   
+           / /(_) ___  ___| |__ | | __\ \  | |_| |__   ___   _ __ | | ___ | |_ 
+          / / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __|
+          \ \ | | (_) \__ \ | | |   <  / / | |_| | | |  __/ | |_) | | (_) | |_ 
+           \_\/ |\___/|___/_| |_|_|\_\/_/   \__|_| |_|\___| | .__/|_|\___/ \__|
+            |__/                                            |_|                
+                                           _   _     _      _                  
+                                          | |_| |__ (_) ___| | _____ _ __  ___ 
+                                          | __| '_ \| |/ __| |/ / _ \ '_ \/ __|
+                                          | |_| | | | | (__|   <  __/ | | \__ \
+                                           \__|_| |_|_|\___|_|\_\___|_| |_|___/
+                                                                               
+         __                __  __ _      _     ___    _   _                    
+        / /__ _ ___ _   _ / _|/ _(_) ___| | __| \ \  | |_| |__   ___  ___  ___ 
+       / // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \
+       \ \ (_| \__ \ |_| |  _|  _| |  __/ | (_| |/ / | |_| | | | (_) \__ \  __/
+        \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/   \__|_| |_|\___/|___/\___|
+                                                                               
+                                                    _ _         _          _ _ 
+                                __ _ _ __ ___ _ __ ( ) |_   ___| |__   ___| | |
+                               / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | |
+                              | (_| | | |  __/ | | | | |_  \__ \ | | |  __/ | |
+                               \__,_|_|  \___|_| |_|  \__| |___/_| |_|\___|_|_|
+                                                                               
+                                                               _       _       
+                                                 ___  ___ _ __(_)_ __ | |_ ___ 
+                                                / __|/ __| '__| | '_ \| __/ __|
+                                                \__ \ (__| |  | | |_) | |_\__ \
+                                                |___/\___|_|  |_| .__/ \__|___/
+                                                                |_|            
+  __         _      _    __    _   _     _                               _ _   
+ / /___ _ __(_) ___| |__ \ \  | |_| |__ (_)___  __      ____ _ ___ _ __ ( ) |_ 
+/ // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __|
+\ \  __/ |  | | (__| | | |/ / | |_| | | | \__ \  \ V  V / (_| \__ \ | | | | |_ 
+ \_\___|_|  |_|\___|_| |_/_/   \__|_| |_|_|___/   \_/\_/ \__,_|___/_| |_|  \__|
+                                                                               
+                                                 _     _      _                
+                                             ___| |__ (_) ___| | _____ _ __    
+                                            / __| '_ \| |/ __| |/ / _ \ '_ \   
+                                           | (__| | | | | (__|   <  __/ | | |_ 
+                                            \___|_| |_|_|\___|_|\_\___|_| |_(_)
+                                                                               
+                                                                       _       
+                                                                      (_)_ __  
+                                                         _____ _____  | | '_ \ 
+                                                        |_____|_____| | | | | |
+                                                                      |_|_| |_|
+                                                                               
+            _  _       _      _     _                       _                _ 
+          _| || |_  __| | ___| |__ (_) __ _ _ __         __| | _____   _____| |
+         |_  ..  _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ |
+         |_      _| (_| |  __/ |_) | | (_| | | | |_____| (_| |  __/\ V /  __/ |
+           |_||_|  \__,_|\___|_.__/|_|\__,_|_| |_|      \__,_|\___| \_/ \___|_|
+                                                                               
diff --git a/externals/figlet/tests/res008.txt b/externals/figlet/tests/res008.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res008.txt
@@ -0,0 +1,120 @@
+                          __ _           _     _    __  
+                         / /(_) ___  ___| |__ | | __\ \ 
+                        / / | |/ _ \/ __| '_ \| |/ / \ \
+                        \ \ | | (_) \__ \ | | |   <  / /
+                         \_\/ |\___/|___/_| |_|_|\_\/_/ 
+                          |__/                          
+     _           _     _     ____  _        __ _                 __   _       
+    (_) ___  ___| |__ | | __/ __ \(_)_ __  / _| |_   ___  ___   / /__| |_ ___ 
+    | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ \ __/ __|
+    | | (_) \__ \ | | |   < | (_| | | | | |  _| | |_| |>  < _ / /  __/ || (__ 
+   _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___|
+  |__/                      \____/                                            
+         ___                       _        _            ___        _     
+        / / | ___   __ _ _ __ ___ | |_ __ _| |_ ___   __| \ \   ___| |__  
+       / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \ 
+      / / | | (_) | (_| | | | (_) | || (_| | ||  __/| (_| |/ / \__ \ | | |
+     /_/  |_|\___/ \__, |_|  \___/ \__\__,_|\__\___(_)__,_/_/  |___/_| |_|
+                   |___/                                                  
+                                                  
+                                     _ __   __/\__
+                               _____| '_ \  \    /
+                              |_____| | | | /_  _\
+                                    |_| |_|   \/  
+                                                  
+       __ _           _     _    __                           _            
+      / /(_) ___  ___| |__ | | __\ \    __ _ _ __   __ _  ___| |__   ___ _ 
+     / / | |/ _ \/ __| '_ \| |/ / \ \  / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+     \ \ | | (_) \__ \ | | |   <  / / | (_| | |_) | (_| | (__| | | |  __/_ 
+      \_\/ |\___/|___/_| |_|_|\_\/_/   \__,_| .__/ \__,_|\___|_| |_|\___(_)
+       |__/                                 |_|                            
+           _ _              _ _  _                      _             
+          | (_)_ __   ___  / | || | _   ___ _   _ _ __ | |_ __ ___  __
+          | | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ /
+          | | | | | |  __/ | |__   _|  \__ \ |_| | | | | || (_| |>  < 
+          |_|_|_| |_|\___| |_|  |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\
+                                            |___/                     
+                                                                 
+                 ___ _ __ _ __ ___  _ __   _ __   ___  __ _ _ __ 
+                / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__|
+               |  __/ |  | | | (_) | |    | | | |  __/ (_| | |   
+                \___|_|  |_|  \___/|_|    |_| |_|\___|\__,_|_|   
+                                                                 
+                                       _           _   _        _              
+ _   _ _ __   _____  ___ __   ___  ___| |_ ___  __| | | |_ ___ | | _____ _ __  
+| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \ 
+| |_| | | | |  __/>  <| |_) |  __/ (__| ||  __/ (_| | | || (_) |   <  __/ | | |
+ \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_|  \__\___/|_|\_\___|_| |_|
+                      |_|                                                      
+                                    ___   _ 
+                                   ( ) \ ( )
+                                    \|| ||/ 
+                                       > >  
+                                      | |   
+                                     /_/    
+       __ _           _     _    __                           _            
+      / /(_) ___  ___| |__ | | __\ \    __ _ _ __   __ _  ___| |__   ___ _ 
+     / / | |/ _ \/ __| '_ \| |/ / \ \  / _` | '_ \ / _` |/ __| '_ \ / _ (_)
+     \ \ | | (_) \__ \ | | |   <  / / | (_| | |_) | (_| | (__| | | |  __/_ 
+      \_\/ |\___/|___/_| |_|_|\_\/_/   \__,_| .__/ \__,_|\___|_| |_|\___(_)
+       |__/                                 |_|                            
+                      _ _              _ _  _      ___   _ 
+                     | (_)_ __   ___  / | || | _  ( ) \ ( )
+                     | | | '_ \ / _ \ | | || |(_)  \|| ||/ 
+                     | | | | | |  __/ | |__   _|      > >  
+                     |_|_|_| |_|\___| |_|  |_|(_)    | |   
+                                                    /_/    
+       __ _           _     _    __    _   _                  _       _   
+      / /(_) ___  ___| |__ | | __\ \  | |_| |__   ___   _ __ | | ___ | |_ 
+     / / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __|
+     \ \ | | (_) \__ \ | | |   <  / / | |_| | | |  __/ | |_) | | (_) | |_ 
+      \_\/ |\___/|___/_| |_|_|\_\/_/   \__|_| |_|\___| | .__/|_|\___/ \__|
+       |__/                                            |_|                
+                      _   _     _      _                  
+                     | |_| |__ (_) ___| | _____ _ __  ___ 
+                     | __| '_ \| |/ __| |/ / _ \ '_ \/ __|
+                     | |_| | | | | (__|   <  __/ | | \__ \
+                      \__|_| |_|_|\___|_|\_\___|_| |_|___/
+                                                          
+      __                __  __ _      _     ___    _   _                    
+     / /__ _ ___ _   _ / _|/ _(_) ___| | __| \ \  | |_| |__   ___  ___  ___ 
+    / // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \
+    \ \ (_| \__ \ |_| |  _|  _| |  __/ | (_| |/ / | |_| | | | (_) \__ \  __/
+     \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/   \__|_| |_|\___/|___/\___|
+                                                                            
+                                     _ _         _          _ _ 
+                 __ _ _ __ ___ _ __ ( ) |_   ___| |__   ___| | |
+                / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | |
+               | (_| | | |  __/ | | | | |_  \__ \ | | |  __/ | |
+                \__,_|_|  \___|_| |_|  \__| |___/_| |_|\___|_|_|
+                                                                
+                                       _       _       
+                         ___  ___ _ __(_)_ __ | |_ ___ 
+                        / __|/ __| '__| | '_ \| __/ __|
+                        \__ \ (__| |  | | |_) | |_\__ \
+                        |___/\___|_|  |_| .__/ \__|___/
+                                        |_|            
+  __         _      _    __    _   _     _                               _ _   
+ / /___ _ __(_) ___| |__ \ \  | |_| |__ (_)___  __      ____ _ ___ _ __ ( ) |_ 
+/ // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __|
+\ \  __/ |  | | (__| | | |/ / | |_| | | | \__ \  \ V  V / (_| \__ \ | | | | |_ 
+ \_\___|_|  |_|\___|_| |_/_/   \__|_| |_|_|___/   \_/\_/ \__,_|___/_| |_|  \__|
+                                                                               
+                            _     _      _                
+                        ___| |__ (_) ___| | _____ _ __    
+                       / __| '_ \| |/ __| |/ / _ \ '_ \   
+                      | (__| | | | | (__|   <  __/ | | |_ 
+                       \___|_| |_|_|\___|_|\_\___|_| |_(_)
+                                                          
+                                                   _       
+                                                  (_)_ __  
+                                     _____ _____  | | '_ \ 
+                                    |_____|_____| | | | | |
+                                                  |_|_| |_|
+                                                           
+        _  _       _      _     _                       _                _ 
+      _| || |_  __| | ___| |__ (_) __ _ _ __         __| | _____   _____| |
+     |_  ..  _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ |
+     |_      _| (_| |  __/ |_) | | (_| | | | |_____| (_| |  __/\ V /  __/ |
+       |_||_|  \__,_|\___|_.__/|_|\__,_|_| |_|      \__,_|\___| \_/ \___|_|
+                                                                           
diff --git a/externals/figlet/tests/res009.txt b/externals/figlet/tests/res009.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res009.txt
@@ -0,0 +1,138 @@
+  __  _              _      _    __  
+ / / (_)  ___   ___ | |__  | | __\ \ 
+/ /  | | / _ \ / __|| '_ \ | |/ / \ \
+\ \  | || (_) |\__ \| | | ||   <  / /
+ \_\_/ | \___/ |___/|_| |_||_|\_\/_/ 
+   |__/                              
+   _              _      _      ____   _          __  _                     __
+  (_)  ___   ___ | |__  | | __ / __ \ (_) _ __   / _|| | _   _ __  __ _    / /
+  | | / _ \ / __|| '_ \ | |/ // / _` || || '_ \ | |_ | || | | |\ \/ /(_)  / / 
+  | || (_) |\__ \| | | ||   <| | (_| || || | | ||  _|| || |_| | >  <  _  / /  
+ _/ | \___/ |___/|_| |_||_|\_\\ \__,_||_||_| |_||_|  |_| \__,_|/_/\_\(_)/_/   
+|__/                           \____/                                         
+       _            __ _                            _          _           
+  ___ | |_  ___    / /| |  ___    __ _  _ __  ___  | |_  __ _ | |_  ___    
+ / _ \| __|/ __|  / / | | / _ \  / _` || '__|/ _ \ | __|/ _` || __|/ _ \   
+|  __/| |_| (__  / /  | || (_) || (_| || |  | (_) || |_| (_| || |_|  __/ _ 
+ \___| \__|\___|/_/   |_| \___/  \__, ||_|   \___/  \__|\__,_| \__|\___|(_)
+                                 |___/                                     
+     _ __         _                           
+  __| |\ \   ___ | |__           _ __   __/\__
+ / _` | \ \ / __|| '_ \   _____ | '_ \  \    /
+| (_| | / / \__ \| | | | |_____|| | | | /_  _\
+ \__,_|/_/  |___/|_| |_|        |_| |_|   \/  
+                                              
+  __  _              _      _    __  
+ / / (_)  ___   ___ | |__  | | __\ \ 
+/ /  | | / _ \ / __|| '_ \ | |/ / \ \
+\ \  | || (_) |\__ \| | | ||   <  / /
+ \_\_/ | \___/ |___/|_| |_||_|\_\/_/ 
+   |__/                              
+                            _                _  _                _  _  _     
+  __ _  _ __    __ _   ___ | |__    ___  _  | |(_) _ __    ___  / || || |  _ 
+ / _` || '_ \  / _` | / __|| '_ \  / _ \(_) | || || '_ \  / _ \ | || || |_(_)
+| (_| || |_) || (_| || (__ | | | ||  __/ _  | || || | | ||  __/ | ||__   _|_ 
+ \__,_|| .__/  \__,_| \___||_| |_| \___|(_) |_||_||_| |_| \___| |_|   |_| (_)
+       |_|                                                                   
+                    _                                              
+ ___  _   _  _ __  | |_  __ _ __  __   ___  _ __  _ __  ___   _ __ 
+/ __|| | | || '_ \ | __|/ _` |\ \/ /  / _ \| '__|| '__|/ _ \ | '__|
+\__ \| |_| || | | || |_| (_| | >  <  |  __/| |   | |  | (_) || |   
+|___/ \__, ||_| |_| \__|\__,_|/_/\_\  \___||_|   |_|   \___/ |_|   
+      |___/                                                        
+                          
+ _ __    ___   __ _  _ __ 
+| '_ \  / _ \ / _` || '__|
+| | | ||  __/| (_| || |   
+|_| |_| \___| \__,_||_|   
+                          
+                                              _             _ 
+ _   _  _ __    ___ __  __ _ __    ___   ___ | |_  ___   __| |
+| | | || '_ \  / _ \\ \/ /| '_ \  / _ \ / __|| __|/ _ \ / _` |
+| |_| || | | ||  __/ >  < | |_) ||  __/| (__ | |_|  __/| (_| |
+ \__,_||_| |_| \___|/_/\_\| .__/  \___| \___| \__|\___| \__,_|
+                          |_|                                 
+ _          _                  _ __   _ 
+| |_  ___  | | __ ___  _ __   ( )\ \ ( )
+| __|/ _ \ | |/ // _ \| '_ \   \| | ||/ 
+| |_| (_) ||   <|  __/| | | |      > >  
+ \__|\___/ |_|\_\\___||_| |_|     | |   
+                                 /_/    
+  __  _              _      _    __  
+ / / (_)  ___   ___ | |__  | | __\ \ 
+/ /  | | / _ \ / __|| '_ \ | |/ / \ \
+\ \  | || (_) |\__ \| | | ||   <  / /
+ \_\_/ | \___/ |___/|_| |_||_|\_\/_/ 
+   |__/                              
+                            _                _  _                _  _  _     
+  __ _  _ __    __ _   ___ | |__    ___  _  | |(_) _ __    ___  / || || |  _ 
+ / _` || '_ \  / _` | / __|| '_ \  / _ \(_) | || || '_ \  / _ \ | || || |_(_)
+| (_| || |_) || (_| || (__ | | | ||  __/ _  | || || | | ||  __/ | ||__   _|_ 
+ \__,_|| .__/  \__,_| \___||_| |_| \___|(_) |_||_||_| |_| \___| |_|   |_| (_)
+       |_|                                                                   
+ _ __   _ 
+( )\ \ ( )
+ \| | ||/ 
+     > >  
+    | |   
+   /_/    
+  __  _              _      _    __    _    _                    _         _   
+ / / (_)  ___   ___ | |__  | | __\ \  | |_ | |__    ___   _ __  | |  ___  | |_ 
+/ /  | | / _ \ / __|| '_ \ | |/ / \ \ | __|| '_ \  / _ \ | '_ \ | | / _ \ | __|
+\ \  | || (_) |\__ \| | | ||   <  / / | |_ | | | ||  __/ | |_) || || (_) || |_ 
+ \_\_/ | \___/ |___/|_| |_||_|\_\/_/   \__||_| |_| \___| | .__/ |_| \___/  \__|
+   |__/                                                  |_|                   
+ _    _      _        _                     
+| |_ | |__  (_)  ___ | | __ ___  _ __   ___ 
+| __|| '_ \ | | / __|| |/ // _ \| '_ \ / __|
+| |_ | | | || || (__ |   <|  __/| | | |\__ \
+ \__||_| |_||_| \___||_|\_\\___||_| |_||___/
+                                            
+  __                    __   __  _        _      _ __  
+ / / __ _  ___  _   _  / _| / _|(_)  ___ | |  __| |\ \ 
+/ / / _` |/ __|| | | || |_ | |_ | | / _ \| | / _` | \ \
+\ \| (_| |\__ \| |_| ||  _||  _|| ||  __/| || (_| | / /
+ \_\\__,_||___/ \__,_||_|  |_|  |_| \___||_| \__,_|/_/ 
+                                                       
+ _    _                                                 _  _   
+| |_ | |__    ___   ___   ___    __ _  _ __  ___  _ __ ( )| |_ 
+| __|| '_ \  / _ \ / __| / _ \  / _` || '__|/ _ \| '_ \|/ | __|
+| |_ | | | || (_) |\__ \|  __/ | (_| || |  |  __/| | | |  | |_ 
+ \__||_| |_| \___/ |___/ \___|  \__,_||_|   \___||_| |_|   \__|
+                                                               
+      _            _  _                    _         _        
+ ___ | |__    ___ | || |  ___   ___  _ __ (_) _ __  | |_  ___ 
+/ __|| '_ \  / _ \| || | / __| / __|| '__|| || '_ \ | __|/ __|
+\__ \| | | ||  __/| || | \__ \| (__ | |   | || |_) || |_ \__ \
+|___/|_| |_| \___||_||_| |___/ \___||_|   |_|| .__/  \__||___/
+                                             |_|              
+  __            _        _     __    _    _      _      
+ / / ___  _ __ (_)  ___ | |__  \ \  | |_ | |__  (_) ___ 
+/ / / _ \| '__|| | / __|| '_ \  \ \ | __|| '_ \ | |/ __|
+\ \|  __/| |   | || (__ | | | | / / | |_ | | | || |\__ \
+ \_\\___||_|   |_| \___||_| |_|/_/   \__||_| |_||_||___/
+                                                        
+                            _  _           _      _        _                   
+__      __ __ _  ___  _ __ ( )| |_    ___ | |__  (_)  ___ | | __ ___  _ __     
+\ \ /\ / // _` |/ __|| '_ \|/ | __|  / __|| '_ \ | | / __|| |/ // _ \| '_ \    
+ \ V  V /| (_| |\__ \| | | |  | |_  | (__ | | | || || (__ |   <|  __/| | | | _ 
+  \_/\_/  \__,_||___/|_| |_|   \__|  \___||_| |_||_| \___||_|\_\\___||_| |_|(_)
+                                                                               
+                                _        
+                               (_) _ __  
+                 _____  _____  | || '_ \ 
+                |_____||_____| | || | | |
+                               |_||_| |_|
+                                         
+   _  _        _        _      _                           _                   
+ _| || |_   __| |  ___ | |__  (_)  __ _  _ __           __| |  ___ __   __ ___ 
+|_  ..  _| / _` | / _ \| '_ \ | | / _` || '_ \  _____  / _` | / _ \\ \ / // _ \
+|_      _|| (_| ||  __/| |_) || || (_| || | | ||_____|| (_| ||  __/ \ V /|  __/
+  |_||_|   \__,_| \___||_.__/ |_| \__,_||_| |_|        \__,_| \___|  \_/  \___|
+                                                                               
+ _ 
+| |
+| |
+| |
+|_|
+   
diff --git a/externals/figlet/tests/res010.txt b/externals/figlet/tests/res010.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res010.txt
@@ -0,0 +1,156 @@
+   __    _                 _       _     __  
+  / /   (_)   ___    ___  | |__   | | __ \ \ 
+ / /    | |  / _ \  / __| | '_ \  | |/ /  \ \
+ \ \    | | | (_) | \__ \ | | | | |   <   / /
+  \_\  _/ |  \___/  |___/ |_| |_| |_|\_\ /_/ 
+      |__/                                   
+    _                 _       _        ____    _            __   _         
+   (_)   ___    ___  | |__   | | __   / __ \  (_)  _ __    / _| | |  _   _ 
+   | |  / _ \  / __| | '_ \  | |/ /  / / _` | | | | '_ \  | |_  | | | | | |
+   | | | (_) | \__ \ | | | | |   <  | | (_| | | | | | | | |  _| | | | |_| |
+  _/ |  \___/  |___/ |_| |_| |_|\_\  \ \__,_| |_| |_| |_| |_|   |_|  \__,_|
+ |__/                                 \____/                               
+                __         _               __  _                        
+ __  __  _     / /   ___  | |_    ___     / / | |   ___     __ _   _ __ 
+ \ \/ / (_)   / /   / _ \ | __|  / __|   / /  | |  / _ \   / _` | | '__|
+  >  <   _   / /   |  __/ | |_  | (__   / /   | | | (_) | | (_| | | |   
+ /_/\_\ (_) /_/     \___|  \__|  \___| /_/    |_|  \___/   \__, | |_|   
+                                                           |___/        
+          _             _                    _  __            _     
+   ___   | |_    __ _  | |_    ___        __| | \ \     ___  | |__  
+  / _ \  | __|  / _` | | __|  / _ \      / _` |  \ \   / __| | '_ \ 
+ | (_) | | |_  | (_| | | |_  |  __/  _  | (_| |  / /   \__ \ | | | |
+  \___/   \__|  \__,_|  \__|  \___| (_)  \__,_| /_/    |___/ |_| |_|
+                                                                    
+                         
+          _ __     __/\__
+  _____  | '_ \    \    /
+ |_____| | | | |   /_  _\
+         |_| |_|     \/  
+                         
+   __    _                 _       _     __  
+  / /   (_)   ___    ___  | |__   | | __ \ \ 
+ / /    | |  / _ \  / __| | '_ \  | |/ /  \ \
+ \ \    | | | (_) | \__ \ | | | | |   <   / /
+  \_\  _/ |  \___/  |___/ |_| |_| |_|\_\ /_/ 
+      |__/                                   
+                                 _                    _   _                
+   __ _   _ __     __ _    ___  | |__     ___   _    | | (_)  _ __     ___ 
+  / _` | | '_ \   / _` |  / __| | '_ \   / _ \ (_)   | | | | | '_ \   / _ \
+ | (_| | | |_) | | (_| | | (__  | | | | |  __/  _    | | | | | | | | |  __/
+  \__,_| | .__/   \__,_|  \___| |_| |_|  \___| (_)   |_| |_| |_| |_|  \___|
+         |_|                                                               
+  _   _  _                                 _                  
+ / | | || |    _     ___   _   _   _ __   | |_    __ _  __  __
+ | | | || |_  (_)   / __| | | | | | '_ \  | __|  / _` | \ \/ /
+ | | |__   _|  _    \__ \ | |_| | | | | | | |_  | (_| |  >  < 
+ |_|    |_|   (_)   |___/  \__, | |_| |_|  \__|  \__,_| /_/\_\
+                           |___/                              
+                                                                    
+   ___   _ __   _ __    ___    _ __     _ __     ___    __ _   _ __ 
+  / _ \ | '__| | '__|  / _ \  | '__|   | '_ \   / _ \  / _` | | '__|
+ |  __/ | |    | |    | (_) | | |      | | | | |  __/ | (_| | | |   
+  \___| |_|    |_|     \___/  |_|      |_| |_|  \___|  \__,_| |_|   
+                                                                    
+                                                      _                _ 
+  _   _   _ __     ___  __  __  _ __     ___    ___  | |_    ___    __| |
+ | | | | | '_ \   / _ \ \ \/ / | '_ \   / _ \  / __| | __|  / _ \  / _` |
+ | |_| | | | | | |  __/  >  <  | |_) | |  __/ | (__  | |_  |  __/ | (_| |
+  \__,_| |_| |_|  \___| /_/\_\ | .__/   \___|  \___|  \__|  \___|  \__,_|
+                               |_|                                       
+  _             _                       _  __     _ 
+ | |_    ___   | | __   ___   _ __     ( ) \ \   ( )
+ | __|  / _ \  | |/ /  / _ \ | '_ \     \|  | |  |/ 
+ | |_  | (_) | |   <  |  __/ | | | |         > >    
+  \__|  \___/  |_|\_\  \___| |_| |_|        | |     
+                                           /_/      
+   __    _                 _       _     __  
+  / /   (_)   ___    ___  | |__   | | __ \ \ 
+ / /    | |  / _ \  / __| | '_ \  | |/ /  \ \
+ \ \    | | | (_) | \__ \ | | | | |   <   / /
+  \_\  _/ |  \___/  |___/ |_| |_| |_|\_\ /_/ 
+      |__/                                   
+                                 _                    _   _                
+   __ _   _ __     __ _    ___  | |__     ___   _    | | (_)  _ __     ___ 
+  / _` | | '_ \   / _` |  / __| | '_ \   / _ \ (_)   | | | | | '_ \   / _ \
+ | (_| | | |_) | | (_| | | (__  | | | | |  __/  _    | | | | | | | | |  __/
+  \__,_| | .__/   \__,_|  \___| |_| |_|  \___| (_)   |_| |_| |_| |_|  \___|
+         |_|                                                               
+  _   _  _           _  __     _ 
+ / | | || |    _    ( ) \ \   ( )
+ | | | || |_  (_)    \|  | |  |/ 
+ | | |__   _|  _          > >    
+ |_|    |_|   (_)        | |     
+                        /_/      
+   __    _                 _       _     __      _     _            
+  / /   (_)   ___    ___  | |__   | | __ \ \    | |_  | |__     ___ 
+ / /    | |  / _ \  / __| | '_ \  | |/ /  \ \   | __| | '_ \   / _ \
+ \ \    | | | (_) | \__ \ | | | | |   <   / /   | |_  | | | | |  __/
+  \_\  _/ |  \___/  |___/ |_| |_| |_|\_\ /_/     \__| |_| |_|  \___|
+      |__/                                                          
+          _           _   
+  _ __   | |   ___   | |_ 
+ | '_ \  | |  / _ \  | __|
+ | |_) | | | | (_) | | |_ 
+ | .__/  |_|  \___/   \__|
+ |_|                      
+  _     _       _          _                         
+ | |_  | |__   (_)   ___  | | __   ___   _ __    ___ 
+ | __| | '_ \  | |  / __| | |/ /  / _ \ | '_ \  / __|
+ | |_  | | | | | | | (__  |   <  |  __/ | | | | \__ \
+  \__| |_| |_| |_|  \___| |_|\_\  \___| |_| |_| |___/
+                                                     
+   __                         __    __   _          _       _  __  
+  / /   __ _   ___   _   _   / _|  / _| (_)   ___  | |   __| | \ \ 
+ / /   / _` | / __| | | | | | |_  | |_  | |  / _ \ | |  / _` |  \ \
+ \ \  | (_| | \__ \ | |_| | |  _| |  _| | | |  __/ | | | (_| |  / /
+  \_\  \__,_| |___/  \__,_| |_|   |_|   |_|  \___| |_|  \__,_| /_/ 
+                                                                   
+  _     _                                                            _   _   
+ | |_  | |__     ___    ___    ___      __ _   _ __    ___   _ __   ( ) | |_ 
+ | __| | '_ \   / _ \  / __|  / _ \    / _` | | '__|  / _ \ | '_ \  |/  | __|
+ | |_  | | | | | (_) | \__ \ |  __/   | (_| | | |    |  __/ | | | |     | |_ 
+  \__| |_| |_|  \___/  |___/  \___|    \__,_| |_|     \___| |_| |_|      \__|
+                                                                             
+        _              _   _                         _           _         
+  ___  | |__     ___  | | | |    ___    ___   _ __  (_)  _ __   | |_   ___ 
+ / __| | '_ \   / _ \ | | | |   / __|  / __| | '__| | | | '_ \  | __| / __|
+ \__ \ | | | | |  __/ | | | |   \__ \ | (__  | |    | | | |_) | | |_  \__ \
+ |___/ |_| |_|  \___| |_| |_|   |___/  \___| |_|    |_| | .__/   \__| |___/
+                                                        |_|                
+   __                _          _      __      _     _       _       
+  / /   ___   _ __  (_)   ___  | |__   \ \    | |_  | |__   (_)  ___ 
+ / /   / _ \ | '__| | |  / __| | '_ \   \ \   | __| | '_ \  | | / __|
+ \ \  |  __/ | |    | | | (__  | | | |  / /   | |_  | | | | | | \__ \
+  \_\  \___| |_|    |_|  \___| |_| |_| /_/     \__| |_| |_| |_| |___/
+                                                                     
+                                   _   _   
+ __      __   __ _   ___   _ __   ( ) | |_ 
+ \ \ /\ / /  / _` | / __| | '_ \  |/  | __|
+  \ V  V /  | (_| | \__ \ | | | |     | |_ 
+   \_/\_/    \__,_| |___/ |_| |_|      \__|
+                                           
+         _       _          _                       
+   ___  | |__   (_)   ___  | | __   ___   _ __      
+  / __| | '_ \  | |  / __| | |/ /  / _ \ | '_ \     
+ | (__  | | | | | | | (__  |   <  |  __/ | | | |  _ 
+  \___| |_| |_| |_|  \___| |_|\_\  \___| |_| |_| (_)
+                                                    
+                                                    _         
+                                                   (_)  _ __  
+                                  _____   _____    | | | '_ \ 
+                                 |_____| |_____|   | | | | | |
+                                                   |_| |_| |_|
+                                                              
+    _  _         _          _       _                               _        
+  _| || |_    __| |   ___  | |__   (_)   __ _   _ __             __| |   ___ 
+ |_  ..  _|  / _` |  / _ \ | '_ \  | |  / _` | | '_ \   _____   / _` |  / _ \
+ |_      _| | (_| | |  __/ | |_) | | | | (_| | | | | | |_____| | (_| | |  __/
+   |_||_|    \__,_|  \___| |_.__/  |_|  \__,_| |_| |_|          \__,_|  \___|
+                                                                             
+                 _ 
+ __   __   ___  | |
+ \ \ / /  / _ \ | |
+  \ V /  |  __/ | |
+   \_/    \___| |_|
+                   
diff --git a/externals/figlet/tests/res011.txt b/externals/figlet/tests/res011.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res011.txt
@@ -0,0 +1,114 @@
+  __ _           _     _   __  
+ / /(_) ___  ___| |__ | | _\ \ 
+/ / | |/ _ \/ __| '_ \| |/ /\ \
+\ \ | | (_) \__ | | | |   < / /
+ \__/ |\___/|___|_| |_|_|\_/_/ 
+  |__/                         
+   _           _     _     ____  _        __ _                 __   _       
+  (_) ___  ___| |__ | | __/ __ \(_)_ __  / _| |_   ___  ___   / ___| |_ ___ 
+  | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ | __/ __|
+  | | (_) \__ | | | |   | | (_| | | | | |  _| | |_| |>  < _ / |  __| || (__ 
+ _/ |\___/|___|_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_/_/ \___|\__\___|
+|__/                      \____/                                            
+    ___                       _        _            ___      _                 
+   / | | ___   __ _ _ __ ___ | |_ __ _| |_ ___   __| \ \ ___| |__        _ __  
+  / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ / __| '_ \ _____| '_ \ 
+ / / | | (_) | (_| | | | (_) | || (_| | ||  __/| (_| |/ \__ | | | |_____| | | |
+/_/  |_|\___/ \__, |_|  \___/ \__\__,_|\__\___(_\__,_/_/|___|_| |_|     |_| |_|
+              |___/                                                            
+      
+__/\__
+\    /
+/_  _\
+  \/  
+      
+  __ _           _     _   __                         _            
+ / /(_) ___  ___| |__ | | _\ \  __ _ _ __   __ _  ___| |__   ___ _ 
+/ / | |/ _ \/ __| '_ \| |/ /\ \/ _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ | | | |   < / | (_| | |_) | (_| | (__| | | |  __/_ 
+ \__/ |\___/|___|_| |_|_|\_/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+  |__/                              |_|                            
+ _ _            _ _  _                    _             
+| (_)_ __   ___/ | || | _ ___ _   _ _ __ | |_ __ ___  __
+| | | '_ \ / _ | | || |(_/ __| | | | '_ \| __/ _` \ \/ /
+| | | | | |  __| |__   __\__ | |_| | | | | || (_| |>  < 
+|_|_|_| |_|\___|_|  |_|(_|___/\__, |_| |_|\__\__,_/_/\_\
+                              |___/                     
+                                                
+  ___ _ __ _ __ ___  _ __ _ __   ___  __ _ _ __ 
+ / _ | '__| '__/ _ \| '__| '_ \ / _ \/ _` | '__|
+|  __| |  | | | (_) | |  | | | |  __| (_| | |   
+ \___|_|  |_|  \___/|_|  |_| |_|\___|\__,_|_|   
+                                                
+                                       _           _ _        _              
+ _   _ _ __   _____  ___ __   ___  ___| |_ ___  __| | |_ ___ | | _____ _ __  
+| | | | '_ \ / _ \ \/ | '_ \ / _ \/ __| __/ _ \/ _` | __/ _ \| |/ / _ | '_ \ 
+| |_| | | | |  __/>  <| |_) |  __| (__| ||  __| (_| | || (_) |   |  __| | | |
+ \__,_|_| |_|\___/_/\_| .__/ \___|\___|\__\___|\__,_|\__\___/|_|\_\___|_| |_|
+                      |_|                                                    
+ ___  _ 
+( \ \( )
+ \|| |/ 
+    > > 
+   | |  
+  /_/   
+  __ _           _     _   __                         _            
+ / /(_) ___  ___| |__ | | _\ \  __ _ _ __   __ _  ___| |__   ___ _ 
+/ / | |/ _ \/ __| '_ \| |/ /\ \/ _` | '_ \ / _` |/ __| '_ \ / _ (_)
+\ \ | | (_) \__ | | | |   < / | (_| | |_) | (_| | (__| | | |  __/_ 
+ \__/ |\___/|___|_| |_|_|\_/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_)
+  |__/                              |_|                            
+ _ _            _ _  _    ___  _ 
+| (_)_ __   ___/ | || | _( \ \( )
+| | | '_ \ / _ | | || |(_)\|| |/ 
+| | | | | |  __| |__   __    > > 
+|_|_|_| |_|\___|_|  |_|(_)  | |  
+                           /_/   
+  __ _           _     _   __  _   _                _       _   
+ / /(_) ___  ___| |__ | | _\ \| |_| |__   ___ _ __ | | ___ | |_ 
+/ / | |/ _ \/ __| '_ \| |/ /\ | __| '_ \ / _ | '_ \| |/ _ \| __|
+\ \ | | (_) \__ | | | |   < / | |_| | | |  __| |_) | | (_) | |_ 
+ \__/ |\___/|___|_| |_|_|\_/_/ \__|_| |_|\___| .__/|_|\___/ \__|
+  |__/                                       |_|                
+ _   _     _      _                  
+| |_| |__ (_) ___| | _____ _ __  ___ 
+| __| '_ \| |/ __| |/ / _ | '_ \/ __|
+| |_| | | | | (__|   |  __| | | \__ \
+ \__|_| |_|_|\___|_|\_\___|_| |_|___/
+                                     
+  __                __  __ _      _     ___  _   _                    
+ / /__ _ ___ _   _ / _|/ _(_) ___| | __| \ \| |_| |__   ___  ___  ___ 
+/ // _` / __| | | | |_| |_| |/ _ | |/ _` |\ | __| '_ \ / _ \/ __|/ _ \
+\ | (_| \__ | |_| |  _|  _| |  __| | (_| |/ | |_| | | | (_) \__ |  __/
+ \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___|
+                                                                      
+                     _ _       _          _ _               _       _       
+  __ _ _ __ ___ _ __( | |_ ___| |__   ___| | |___  ___ _ __(_)_ __ | |_ ___ 
+ / _` | '__/ _ | '_ |/| __/ __| '_ \ / _ | | / __|/ __| '__| | '_ \| __/ __|
+| (_| | | |  __| | | || |_\__ | | | |  __| | \__ | (__| |  | | |_) | |_\__ \
+ \__,_|_|  \___|_| |_| \__|___|_| |_|\___|_|_|___/\___|_|  |_| .__/ \__|___/
+                                                             |_|            
+  __         _      _    __  _   _     _                            _ _   
+ / /___ _ __(_) ___| |__ \ \| |_| |__ (_)_____      ____ _ ___ _ __( | |_ 
+/ // _ | '__| |/ __| '_ \ \ | __| '_ \| / __\ \ /\ / / _` / __| '_ |/| __|
+\ |  __| |  | | (__| | | |/ | |_| | | | \__ \\ V  V | (_| \__ | | | || |_ 
+ \_\___|_|  |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___|_| |_| \__|
+                                                                          
+      _     _      _                
+  ___| |__ (_) ___| | _____ _ __    
+ / __| '_ \| |/ __| |/ / _ | '_ \   
+| (__| | | | | (__|   |  __| | | |_ 
+ \___|_| |_|_|\___|_|\_\___|_| |_(_)
+                                    
+             _       
+            (_)_ __  
+ _____ _____| | '_ \ 
+|_____|_____| | | | |
+            |_|_| |_|
+                     
+   _  _       _      _     _                       _                _ 
+ _| || |_  __| | ___| |__ (_) __ _ _ __         __| | _____   _____| |
+|_  ..  _|/ _` |/ _ | '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ | |
+|_      _| (_| |  __| |_) | | (_| | | | |_____| (_| |  __/\ V |  __| |
+  |_||_|  \__,_|\___|_.__/|_|\__,_|_| |_|      \__,_|\___| \_/ \___|_|
+                                                                      
diff --git a/externals/figlet/tests/res012.txt b/externals/figlet/tests/res012.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res012.txt
@@ -0,0 +1,36 @@
+  ┛┏━┃┏━┛┃ ┃┃ ┃ 
+  ┃┃ ┃━━┃┏━┃┏┛  
+<━┛━━┛━━┛┛ ┛┛ ┛>
+ ┛┏━┃┏━┛┃ ┃┃ ┃┏━┃┛┏━ ┏━┛┃  ┃ ┃┃ ┃   ┛┏━┛━┏┛┏━┛  ┛┃  ┏━┃┏━┛┏━┃┏━┃━┏┛┏━┃━┏┛┏━┛ 
+ ┃┃ ┃━━┃┏━┃┏┛ ┃┛┛┃┃ ┃┏━┛┃  ┃ ┃ ┛ ┛ ┛ ┏━┛ ┃ ┃   ┛ ┃  ┃ ┃┃ ┃┏┏┛┃ ┃ ┃ ┏━┃ ┃ ┏━┛ 
+━┛━━┛━━┛┛ ┛┛ ┛━━┛┛┛ ┛┛  ━━┛━━┛┛ ┛┛┛  ━━┛ ┛ ━━┛┛  ━━┛━━┛━━┛┛ ┛━━┛ ┛ ┛ ┛ ┛ ━━┛┛
+┏━    ┏━┛┃ ┃    ┏━   ┛ ┛
+┃ ┃   ━━┃┏━┃  ━┛┃ ┃  ━┏┛
+━━ >  ━━┛┛ ┛    ┛ ┛  ┛ ┛
+  ┛┏━┃┏━┛┃ ┃┃ ┃   ┏━┃┏━┃┏━┃┏━┛┃ ┃┏━┛   ┃  ┛┏━ ┏━┛  ━┃ ┃ ┃   ┏━┛┃ ┃┏━ ━┏┛┏━┃┃ ┃
+  ┃┃ ┃━━┃┏━┃┏┛    ┏━┃┏━┛┏━┃┃  ┏━┃┏━┛┛  ┃  ┃┃ ┃┏━┛   ┃ ━━┃┛  ━━┃━┏┛┃ ┃ ┃ ┏━┃ ┛ 
+<━┛━━┛━━┛┛ ┛┛ ┛>  ┛ ┛┛  ┛ ┛━━┛┛ ┛━━┛┛  ━━┛┛┛ ┛━━┛  ━━┛  ┛┛  ━━┛ ┛ ┛ ┛ ┛ ┛ ┛┛ ┛
+┏━┛┏━┃┏━┃┏━┃┏━┃  ┏━ ┏━┛┏━┃┏━┃  ┃ ┃┏━ ┏━┛┃ ┃┏━┃┏━┛┏━┛━┏┛┏━┛┏━   ━┏┛┏━┃┃ ┃┏━┛┏━ 
+┏━┛┏┏┛┏┏┛┃ ┃┏┏┛  ┃ ┃┏━┛┏━┃┏┏┛  ┃ ┃┃ ┃┏━┛ ┛ ┏━┛┏━┛┃   ┃ ┏━┛┃ ┃   ┃ ┃ ┃┏┛ ┏━┛┃ ┃
+━━┛┛ ┛┛ ┛━━┛┛ ┛  ┛ ┛━━┛┛ ┛┛ ┛  ━━┛┛ ┛━━┛┛ ┛┛  ━━┛━━┛ ┛ ━━┛━━    ┛ ━━┛┛ ┛━━┛┛ ┛
+┛ ━┃ ┛
+ ┛ ┏┛ 
+  ━┛  
+  ┛┏━┃┏━┛┃ ┃┃ ┃   ┏━┃┏━┃┏━┃┏━┛┃ ┃┏━┛   ┃  ┛┏━ ┏━┛  ━┃ ┃ ┃   ┛ ━┃ ┛
+  ┃┃ ┃━━┃┏━┃┏┛    ┏━┃┏━┛┏━┃┃  ┏━┃┏━┛┛  ┃  ┃┃ ┃┏━┛   ┃ ━━┃┛   ┛ ┏┛ 
+<━┛━━┛━━┛┛ ┛┛ ┛>  ┛ ┛┛  ┛ ┛━━┛┛ ┛━━┛┛  ━━┛┛┛ ┛━━┛  ━━┛  ┛┛    ━┛  
+  ┛┏━┃┏━┛┃ ┃┃ ┃   ━┏┛┃ ┃┏━┛  ┏━┃┃  ┏━┃━┏┛  ━┏┛┃ ┃┛┏━┛┃ ┃┏━┛┏━ ┏━┛
+  ┃┃ ┃━━┃┏━┃┏┛     ┃ ┏━┃┏━┛  ┏━┛┃  ┃ ┃ ┃    ┃ ┏━┃┃┃  ┏┛ ┏━┛┃ ┃━━┃
+<━┛━━┛━━┛┛ ┛┛ ┛>   ┛ ┛ ┛━━┛  ┛  ━━┛━━┛ ┛    ┛ ┛ ┛┛━━┛┛ ┛━━┛┛ ┛━━┛
+ ┏━┃┏━┛┃ ┃┏━┛┏━┛┛┏━┛┃  ┏━    ━┏┛┃ ┃┏━┃┏━┛┏━┛  ┏━┃┏━┃┏━┛┏━ ┛━┏┛  ┏━┛┃ ┃┏━┛┃  ┃  
+ ┏━┃━━┃┃ ┃┏━┛┏━┛┃┏━┛┃  ┃ ┃    ┃ ┏━┃┃ ┃━━┃┏━┛  ┏━┃┏┏┛┏━┛┃ ┃  ┃   ━━┃┏━┃┏━┛┃  ┃  
+<┛ ┛━━┛━━┛┛  ┛  ┛━━┛━━┛━━ >   ┛ ┛ ┛━━┛━━┛━━┛  ┛ ┛┛ ┛━━┛┛ ┛  ┛   ━━┛┛ ┛━━┛━━┛━━┛
+┏━┛┏━┛┏━┃┛┏━┃━┏┛┏━┛
+━━┃┃  ┏┏┛┃┏━┛ ┃ ━━┃
+━━┛━━┛┛ ┛┛┛   ┛ ━━┛
+ ┏━┛┏━┃┛┏━┛┃ ┃   ━┏┛┃ ┃┛┏━┛  ┃┃┃┏━┃┏━┛┏━ ┛━┏┛  ┏━┛┃ ┃┛┏━┛┃ ┃┏━┛┏━  
+ ┏━┛┏┏┛┃┃  ┏━┃    ┃ ┏━┃┃━━┃  ┃┃┃┏━┃━━┃┃ ┃  ┃   ┃  ┏━┃┃┃  ┏┛ ┏━┛┃ ┃ 
+<━━┛┛ ┛┛━━┛┛ ┛>   ┛ ┛ ┛┛━━┛  ━━┛┛ ┛━━┛┛ ┛  ┛   ━━┛┛ ┛┛━━┛┛ ┛━━┛┛ ┛┛
+                                      ┛┏━    ┏━ ┏━┛┏━ ┛┏━┃┏━   ┏━ ┏━┛┃ ┃┏━┛┃  
+                                ━┛━┛  ┃┃ ┃   ┃ ┃┏━┛┏━┃┃┏━┃┃ ┃━┛┃ ┃┏━┛┃ ┃┏━┛┃  
+                                      ┛┛ ┛  #━━ ━━┛━━ ┛┛ ┛┛ ┛  ━━ ━━┛ ┛ ━━┛━━┛
diff --git a/externals/figlet/tests/res013.txt b/externals/figlet/tests/res013.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res013.txt
@@ -0,0 +1,132 @@
+ __   _     _                  _   __
+ \ \ | | __| |__   ___   ___  (_) / /
+  \ \| |/ /| '_ \ / __| / _ \ | |/ / 
+  / /|   < | | | |\__ \| (_) || |\ \ 
+ /_/ |_|\_\|_| |_||___/ \___/_/ | \_\
+                            |__/     
+     __                _   __         _    ____   _     _                  _ 
+    / /_ __  __ _   _ | | / _| _ __  (_)  / __ \ | | __| |__   ___   ___  (_)
+   / /(_)\ \/ /| | | || || |_ | '_ \ | | / / _` || |/ /| '_ \ / __| / _ \ | |
+  / /  _  >  < | |_| || ||  _|| | | || || | (_| ||   < | | | |\__ \| (_) || |
+ /_/  (_)/_/\_\ \__,_||_||_|  |_| |_||_| \ \__,_||_|\_\|_| |_||___/ \___/_/ |
+                                          \____/                        |__/ 
+          _          _                             _     __     _        
+     ___ | |_  __ _ | |_  ___   _ __  __ _   ___  | |   / /___ | |_  ___ 
+    / _ \| __|/ _` || __|/ _ \ | '__|/ _` | / _ \ | |  / // __|| __|/ _ \
+  _|  __/| |_| (_| || |_| (_) || |  | (_| || (_) || | / /| (__ | |_|  __/
+ (_)\___| \__|\__,_| \__|\___/ |_|   \__, | \___/ |_|/_/  \___| \__|\___|
+                                     |___/                               
+                        _           __       _ 
+ __/\__  _ __          | |__   ___  \ \   __| |
+ \    / | '_ \  _____  | '_ \ / __|  \ \ / _` |
+ /_  _\ | | | ||_____| | | | |\__ \  / /| (_| |
+   \/   |_| |_|        |_| |_||___/ /_/  \__,_|
+                                               
+          _                                __   _     _                  _   __
+  _  ___ | |__    ___  __ _  _ __    __ _  \ \ | | __| |__   ___   ___  (_) / /
+ (_)/ _ \| '_ \  / __|/ _` || '_ \  / _` |  \ \| |/ /| '_ \ / __| / _ \ | |/ / 
+  _|  __/| | | || (__| (_| || |_) || (_| |  / /|   < | | | |\__ \| (_) || |\ \ 
+ (_)\___||_| |_| \___|\__,_|| .__/  \__,_| /_/ |_|\_\|_| |_||___/ \___/_/ | \_\
+                            |_|                                       |__/     
+              _                           _  _    _                _  _ 
+ __  __ __ _ | |_  _ __   _   _  ___   _ | || |  / |   ___  _ __  (_)| |
+ \ \/ // _` || __|| '_ \ | | | |/ __| (_)| || |_ | |  / _ \| '_ \ | || |
+  >  <| (_| || |_ | | | || |_| |\__ \  _ |__   _|| | |  __/| | | || || |
+ /_/\_\\__,_| \__||_| |_| \__, ||___/ (_)   |_|  |_|  \___||_| |_||_||_|
+                          |___/                                         
+                                                        
+  _ __  __ _   ___  _ __    _ __  ___   _ __  _ __  ___ 
+ | '__|/ _` | / _ \| '_ \  | '__|/ _ \ | '__|| '__|/ _ \
+ | |  | (_| ||  __/| | | | | |  | (_) || |   | |  |  __/
+ |_|   \__,_| \___||_| |_| |_|   \___/ |_|   |_|   \___|
+                                                        
+      _        _                                            
+   __| |  ___ | |_  ___  ___  _ __ __  __ ___  _ __   _   _ 
+  / _` | / _ \| __|/ __|/ _ \| '_ \\ \/ // _ \| '_ \ | | | |
+ | (_| ||  __/| |_| (__|  __/| |_) |>  <|  __/| | | || |_| |
+  \__,_| \___| \__|\___|\___|| .__//_/\_\\___||_| |_| \__,_|
+                             |_|                            
+  _ __   _                _           _   
+ ( )\ \ ( )  _ __    ___ | | __ ___  | |_ 
+ |/  | | \| | '_ \  / _ \| |/ // _ \ | __|
+      > >   | | | ||  __/|   <| (_) || |_ 
+     | |    |_| |_| \___||_|\_\\___/  \__|
+    /_/                                   
+          _                                __   _     _                  _   __
+  _  ___ | |__    ___  __ _  _ __    __ _  \ \ | | __| |__   ___   ___  (_) / /
+ (_)/ _ \| '_ \  / __|/ _` || '_ \  / _` |  \ \| |/ /| '_ \ / __| / _ \ | |/ / 
+  _|  __/| | | || (__| (_| || |_) || (_| |  / /|   < | | | |\__ \| (_) || |\ \ 
+ (_)\___||_| |_| \___|\__,_|| .__/  \__,_| /_/ |_|\_\|_| |_||___/ \___/_/ | \_\
+                            |_|                                       |__/     
+  _ __   _      _  _    _                _  _ 
+ ( )\ \ ( )  _ | || |  / |   ___  _ __  (_)| |
+ |/  | | \| (_)| || |_ | |  / _ \| '_ \ | || |
+      > >    _ |__   _|| | |  __/| | | || || |
+     | |    (_)   |_|  |_|  \___||_| |_||_||_|
+    /_/                                       
+  _          _                _      _    __   _     _                  _   __
+ | |_  ___  | | _ __     ___ | |__  | |_  \ \ | | __| |__   ___   ___  (_) / /
+ | __|/ _ \ | || '_ \   / _ \| '_ \ | __|  \ \| |/ /| '_ \ / __| / _ \ | |/ / 
+ | |_| (_) || || |_) | |  __/| | | || |_   / /|   < | | | |\__ \| (_) || |\ \ 
+  \__|\___/ |_|| .__/   \___||_| |_| \__| /_/ |_|\_\|_| |_||___/ \___/_/ | \_\
+               |_|                                                   |__/     
+                    _          _  _      _   
+  ___  _ __    ___ | | __ ___ (_)| |__  | |_ 
+ / __|| '_ \  / _ \| |/ // __|| || '_ \ | __|
+ \__ \| | | ||  __/|   <| (__ | || | | || |_ 
+ |___/|_| |_| \___||_|\_\\___||_||_| |_| \__|
+                                             
+ __       _  _        _   __   __                      __
+ \ \   __| || |  ___ (_) / _| / _| _   _  ___   __ _  / /
+  \ \ / _` || | / _ \| || |_ | |_ | | | |/ __| / _` |/ / 
+  / /| (_| || ||  __/| ||  _||  _|| |_| |\__ \| (_| |\ \ 
+ /_/  \__,_||_| \___||_||_|  |_|   \__,_||___/ \__,_| \_\
+                                                         
+  _    _                                             _      _   
+ | |_ ( )_ __    ___  _ __  __ _    ___  ___   ___  | |__  | |_ 
+ | __||/| '_ \  / _ \| '__|/ _` |  / _ \/ __| / _ \ | '_ \ | __|
+ | |_   | | | ||  __/| |  | (_| | |  __/\__ \| (_) || | | || |_ 
+  \__|  |_| |_| \___||_|   \__,_|  \___||___/ \___/ |_| |_| \__|
+                                                                
+       _           _                   _  _        _          
+  ___ | |_  _ __  (_) _ __  ___  ___  | || |  ___ | |__   ___ 
+ / __|| __|| '_ \ | || '__|/ __|/ __| | || | / _ \| '_ \ / __|
+ \__ \| |_ | |_) || || |  | (__ \__ \ | || ||  __/| | | |\__ \
+ |___/ \__|| .__/ |_||_|   \___||___/ |_||_| \___||_| |_||___/
+           |_|                                                
+       _  _      _    __   _            _              __
+  ___ (_)| |__  | |_  \ \ | |__    ___ (_) _ __  ___  / /
+ / __|| || '_ \ | __|  \ \| '_ \  / __|| || '__|/ _ \/ / 
+ \__ \| || | | || |_   / /| | | || (__ | || |  |  __/\ \ 
+ |___/|_||_| |_| \__| /_/ |_| |_| \___||_||_|   \___| \_\
+                                                         
+  _    _                             
+ | |_ ( )_ __   ___   __ _ __      __
+ | __||/| '_ \ / __| / _` |\ \ /\ / /
+ | |_   | | | |\__ \| (_| | \ V  V / 
+  \__|  |_| |_||___/ \__,_|  \_/\_/  
+                                     
+                  _          _  _           
+     _ __    ___ | | __ ___ (_)| |__    ___ 
+    | '_ \  / _ \| |/ // __|| || '_ \  / __|
+  _ | | | ||  __/|   <| (__ | || | | || (__ 
+ (_)|_| |_| \___||_|\_\\___||_||_| |_| \___|
+                                            
+         _                                
+  _ __  (_)                               
+ | '_ \ | |  _____  _____                 
+ | | | || | |_____||_____|                
+ |_| |_||_|                               
+                                          
+                  _                       _  _                _    _  _   
+ __   __ ___   __| |        _ __    __ _ (_)| |__    ___   __| | _| || |_ 
+ \ \ / // _ \ / _` | _____ | '_ \  / _` || || '_ \  / _ \ / _` ||_  ..  _|
+  \ V /|  __/| (_| ||_____|| | | || (_| || || |_) ||  __/| (_| ||_      _|
+   \_/  \___| \__,_|       |_| |_| \__,_||_||_.__/  \___| \__,_|  |_||_|  
+                                                                          
+  _       
+ | |  ___ 
+ | | / _ \
+ | ||  __/
+ |_| \___|
+          
diff --git a/externals/figlet/tests/res014.txt b/externals/figlet/tests/res014.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res014.txt
@@ -0,0 +1,144 @@
+                    __     __    __                    _  __
+                    \ \   / /__ / /_   _____ ____     (_)/ /
+                     \ \ / //_// __ \ / ___// __ \   / // / 
+                     / // ,<  / / / /(__  )/ /_/ /  / / \ \ 
+                    /_//_/|_|/_/ /_//____/ \____/__/ /   \_\
+                                                /___/       
+                     __ ____        _  ______   __    __                    _ 
+    _  _  __ __  __ / // __/____   (_)/ ____ \ / /__ / /_   _____ ____     (_)
+   (_)| |/_// / / // // /_ / __ \ / // / __ `// //_// __ \ / ___// __ \   / / 
+  _  _>  < / /_/ // // __// / / // // / /_/ // ,<  / / / /(__  )/ /_/ /  / /  
+ (_)/_/|_| \__,_//_//_/  /_/ /_//_/ \ \__,_//_/|_|/_/ /_//____/ \____/__/ /   
+                                     \____/                          /___/    
+    __          __                              __    __       __            __
+   / /_ ____ _ / /_ ____   _____ ____ _ ____   / /  _/_/_____ / /_ ___     _/_/
+  / __// __ `// __// __ \ / ___// __ `// __ \ / / _/_/ / ___// __// _ \  _/_/  
+ / /_ / /_/ // /_ / /_/ // /   / /_/ // /_/ // /_/_/  / /__ / /_ /  __/_/_/    
+ \__/ \__,_/ \__/ \____//_/    \__, / \____//_//_/    \___/ \__/ \___//_/      
+                              /____/                                           
+                                    __             __         __      
+           __/|_   ____            / /_   _____    \ \   ____/ /  ___ 
+          |    /  / __ \ ______   / __ \ / ___/     \ \ / __  /  / _ \
+         /_ __|  / / / //_____/  / / / /(__  )      / // /_/ /_ /  __/
+          |/    /_/ /_/         /_/ /_//____/      /_/ \__,_/(_)\___/ 
+                                                                      
+                    __     __    __                    _  __
+                    \ \   / /__ / /_   _____ ____     (_)/ /
+                     \ \ / //_// __ \ / ___// __ \   / // / 
+                     / // ,<  / / / /(__  )/ /_/ /  / / \ \ 
+                    /_//_/|_|/_/ /_//____/ \____/__/ /   \_\
+                                                /___/       
+                       _  __            __                              
+         ___   ____   (_)/ /  _  ___   / /_   _____ ____ _ ____   ____ _
+        / _ \ / __ \ / // /  (_)/ _ \ / __ \ / ___// __ `// __ \ / __ `/
+       /  __// / / // // /  _  /  __// / / // /__ / /_/ // /_/ // /_/ / 
+       \___//_/ /_//_//_/  (_) \___//_/ /_/ \___/ \__,_// .___/ \__,_/  
+                                                       /_/              
+                            __                            __ __  ___
+              _  __ ____ _ / /_ ____   __  __ _____   _  / // / <  /
+             | |/_// __ `// __// __ \ / / / // ___/  (_)/ // /_ / / 
+            _>  < / /_/ // /_ / / / // /_/ /(__  )  _  /__  __// /  
+           /_/|_| \__,_/ \__//_/ /_/ \__, //____/  (_)   /_/  /_/   
+                                    /____/                          
+                                                                      
+             _____ ____ _ ___   ____     _____ ____   _____ _____ ___ 
+            / ___// __ `// _ \ / __ \   / ___// __ \ / ___// ___// _ \
+           / /   / /_/ //  __// / / /  / /   / /_/ // /   / /   /  __/
+          /_/    \__,_/ \___//_/ /_/  /_/    \____//_/   /_/    \___/ 
+                                                                      
+               __       __                                              
+          ____/ /___   / /_ _____ ___   ____   _  __ ___   ____   __  __
+         / __  // _ \ / __// ___// _ \ / __ \ | |/_// _ \ / __ \ / / / /
+        / /_/ //  __// /_ / /__ /  __// /_/ /_>  < /  __// / / // /_/ / 
+        \__,_/ \___/ \__/ \___/ \___// .___//_/|_| \___//_/ /_/ \__,_/  
+                                    /_/                                 
+                     _  _  _                 __           __ 
+                    ( )| |( )  ____   ___   / /__ ____   / /_
+                    |/ / / V  / __ \ / _ \ / //_// __ \ / __/
+                      _>_>   / / / //  __// ,<  / /_/ // /_  
+                    _/_/    /_/ /_/ \___//_/|_| \____/ \__/  
+                   /_/                                       
+                    __     __    __                    _  __
+                    \ \   / /__ / /_   _____ ____     (_)/ /
+                     \ \ / //_// __ \ / ___// __ \   / // / 
+                     / // ,<  / / / /(__  )/ /_/ /  / / \ \ 
+                    /_//_/|_|/_/ /_//____/ \____/__/ /   \_\
+                                                /___/       
+                       _  __            __                              
+         ___   ____   (_)/ /  _  ___   / /_   _____ ____ _ ____   ____ _
+        / _ \ / __ \ / // /  (_)/ _ \ / __ \ / ___// __ `// __ \ / __ `/
+       /  __// / / // // /  _  /  __// / / // /__ / /_/ // /_/ // /_/ / 
+       \___//_/ /_//_//_/  (_) \___//_/ /_/ \___/ \__,_// .___/ \__,_/  
+                                                       /_/              
+                             _  _  _       __ __  ___
+                            ( )| |( )  _  / // / <  /
+                            |/ / / V  (_)/ // /_ / / 
+                              _>_>   _  /__  __// /  
+                            _/_/    (_)   /_/  /_/   
+                           /_/                       
+                 __     __     __     __    __                    _  __
+          ___   / /_   / /_    \ \   / /__ / /_   _____ ____     (_)/ /
+         / _ \ / __ \ / __/     \ \ / //_// __ \ / ___// __ \   / // / 
+        /  __// / / // /_       / // ,<  / / / /(__  )/ /_/ /  / / \ \ 
+        \___//_/ /_/ \__/      /_//_/|_|/_/ /_//____/ \____/__/ /   \_\
+                                                           /___/       
+                           __          _  __     __     __          __     
+       _____ ____   ___   / /__ _____ (_)/ /_   / /_   / /_ ____   / /____ 
+      / ___// __ \ / _ \ / //_// ___// // __ \ / __/  / __// __ \ / // __ \
+     (__  )/ / / //  __// ,<  / /__ / // / / // /_   / /_ / /_/ // // /_/ /
+    /____//_/ /_/ \___//_/|_| \___//_//_/ /_/ \__/   \__/ \____//_// .___/ 
+                                                                  /_/      
+           __         __ __       _  ____ ____                     __
+           \ \   ____/ // /___   (_)/ __// __/__  __ _____ ____ _ / /
+            \ \ / __  // // _ \ / // /_ / /_ / / / // ___// __ `// / 
+            / // /_/ // //  __// // __// __// /_/ /(__  )/ /_/ / \ \ 
+           /_/ \__,_//_/ \___//_//_/  /_/   \__,_//____/ \__,_/   \_\
+                                                                     
+         __  _                                                 __     __ 
+        / /_( )____   ___   _____ ____ _   ___   _____ ____   / /_   / /_
+       / __/|// __ \ / _ \ / ___// __ `/  / _ \ / ___// __ \ / __ \ / __/
+      / /_   / / / //  __// /   / /_/ /  /  __/(__  )/ /_/ // / / // /_  
+      \__/  /_/ /_/ \___//_/    \__,_/   \___//____/ \____//_/ /_/ \__/  
+                                                                         
+                __          _                      __ __       __         
+         _____ / /_ ____   (_)_____ _____ _____   / // /___   / /_   _____
+        / ___// __// __ \ / // ___// ___// ___/  / // // _ \ / __ \ / ___/
+       (__  )/ /_ / /_/ // // /   / /__ (__  )  / // //  __// / / /(__  ) 
+      /____/ \__// .___//_//_/    \___//____/  /_//_/ \___//_/ /_//____/  
+                /_/                                                       
+                  _  __     __     __     __           _             __
+           _____ (_)/ /_   / /_    \ \   / /_   _____ (_)_____ ___  / /
+          / ___// // __ \ / __/     \ \ / __ \ / ___// // ___// _ \/ / 
+         (__  )/ // / / // /_       / // / / // /__ / // /   /  __/\ \ 
+        /____//_//_/ /_/ \__/      /_//_/ /_/ \___//_//_/    \___/  \_\
+                                                                       
+                        __  _                              
+                       / /_( )____   _____ ____ _ _      __
+                      / __/|// __ \ / ___// __ `/| | /| / /
+                     / /_   / / / /(__  )/ /_/ / | |/ |/ / 
+                     \__/  /_/ /_//____/ \__,_/  |__/|__/  
+                                                           
+                                     __          _  __         
+                       ____   ___   / /__ _____ (_)/ /_   _____
+                      / __ \ / _ \ / //_// ___// // __ \ / ___/
+                  _  / / / //  __// ,<  / /__ / // / / // /__  
+                 (_)/_/ /_/ \___//_/|_| \___//_//_/ /_/ \___/  
+                                                               
+                    _                                                  
+            ____   (_)                                                 
+           / __ \ / /  ______ ______                                   
+          / / / // /  /_____//_____/                                   
+         /_/ /_//_/                                                    
+                                                                       
+                      __                      _  __               __   __ __ 
+    _   __ ___   ____/ /       ____   ____ _ (_)/ /_   ___   ____/ /__/ // /_
+   | | / // _ \ / __  /______ / __ \ / __ `// // __ \ / _ \ / __  //_  _  __/
+   | |/ //  __// /_/ //_____// / / // /_/ // // /_/ //  __// /_/ //_  _  __/ 
+   |___/ \___/ \__,_/       /_/ /_/ \__,_//_//_.___/ \___/ \__,_/  /_//_/    
+                                                                             
+                                       __    
+                                      / /___ 
+                                     / // _ \
+                                    / //  __/
+                                   /_/ \___/ 
+                                             
diff --git a/externals/figlet/tests/res015.txt b/externals/figlet/tests/res015.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res015.txt
@@ -0,0 +1,156 @@
+                                   __    _      _                       _    __
+                                   \ \  | | __ | |__    ___    ___     (_)  / /
+                                    \ \ | |/ / | '_ \  / __|  / _ \    | | / / 
+                                    / / |   <  | | | | \__ \ | (_) |   | | \ \ 
+                                   /_/  |_|\_\ |_| |_| |___/  \___/   _/ |  \_\
+                                                                     |__/      
+              _    __           _     ____    _      _                       _ 
+      _   _  | |  / _|  _ __   (_)   / __ \  | | __ | |__    ___    ___     (_)
+     | | | | | | | |_  | '_ \  | |  / / _` | | |/ / | '_ \  / __|  / _ \    | |
+     | |_| | | | |  _| | | | | | | | | (_| | |   <  | | | | \__ \ | (_) |   | |
+      \__,_| |_| |_|   |_| |_| |_|  \ \__,_| |_|\_\ |_| |_| |___/  \___/   _/ |
+                                     \____/                               |__/ 
+                                _      __         _               __           
+         _ __    __ _    ___   | |    / /   ___  | |_    ___     / /  _  __  __
+        | '__|  / _` |  / _ \  | |   / /   / __| | __|  / _ \   / /  (_) \ \/ /
+        | |    | (_| | | (_) | | |  / /   | (__  | |_  |  __/  / /    _   >  < 
+        |_|     \__, |  \___/  |_| /_/     \___|  \__|  \___| /_/    (_) /_/\_\
+                |___/                                                          
+             _              __        _              _             _           
+            | |__    ___    \ \    __| |       ___  | |_    __ _  | |_    ___  
+            | '_ \  / __|    \ \  / _` |      / _ \ | __|  / _` | | __|  / _ \ 
+            | | | | \__ \    / / | (_| |  _  |  __/ | |_  | (_| | | |_  | (_) |
+            |_| |_| |___/   /_/   \__,_| (_)  \___|  \__|  \__,_|  \__|  \___/ 
+                                                                               
+                                                                               
+                                                       __/\__    _ __          
+                                                       \    /   | '_ \   _____ 
+                                                       /_  _\   | | | | |_____|
+                                                         \/     |_| |_|        
+                                                                               
+                                   __    _      _                       _    __
+                                   \ \  | | __ | |__    ___    ___     (_)  / /
+                                    \ \ | |/ / | '_ \  / __|  / _ \    | | / / 
+                                    / / |   <  | | | | \__ \ | (_) |   | | \ \ 
+                                   /_/  |_|\_\ |_| |_| |___/  \___/   _/ |  \_\
+                                                                     |__/      
+                     _   _                _                                    
+       ___   _ __   (_) | |    _    ___  | |__     ___    __ _   _ __     __ _ 
+      / _ \ | '_ \  | | | |   (_)  / _ \ | '_ \   / __|  / _` | | '_ \   / _` |
+     |  __/ | | | | | | | |    _  |  __/ | | | | | (__  | (_| | | |_) | | (_| |
+      \___| |_| |_| |_| |_|   (_)  \___| |_| |_|  \___|  \__,_| | .__/   \__,_|
+                                                                |_|            
+                                  _                                 _  _     _ 
+                  __  __   __ _  | |_   _ __    _   _   ___     _  | || |   / |
+                  \ \/ /  / _` | | __| | '_ \  | | | | / __|   (_) | || |_  | |
+                   >  <  | (_| | | |_  | | | | | |_| | \__ \    _  |__   _| | |
+                  /_/\_\  \__,_|  \__| |_| |_|  \__, | |___/   (_)    |_|   |_|
+                                                |___/                          
+                                                                               
+             _ __    __ _    ___   _ __      _ __    ___    _ __   _ __    ___ 
+            | '__|  / _` |  / _ \ | '_ \    | '__|  / _ \  | '__| | '__|  / _ \
+            | |    | (_| | |  __/ | | | |   | |    | (_) | | |    | |    |  __/
+            |_|     \__,_|  \___| |_| |_|   |_|     \___/  |_|    |_|     \___|
+                                                                               
+            _          _                                                       
+         __| |   ___  | |_    ___    ___   _ __   __  __   ___   _ __    _   _ 
+        / _` |  / _ \ | __|  / __|  / _ \ | '_ \  \ \/ /  / _ \ | '_ \  | | | |
+       | (_| | |  __/ | |_  | (__  |  __/ | |_) |  >  <  |  __/ | | | | | |_| |
+        \__,_|  \___|  \__|  \___|  \___| | .__/  /_/\_\  \___| |_| |_|  \__,_|
+                                          |_|                                  
+                             _  __     _                    _              _   
+                            ( ) \ \   ( )    _ __     ___  | | __   ___   | |_ 
+                            |/   | |   \|   | '_ \   / _ \ | |/ /  / _ \  | __|
+                                  > >       | | | | |  __/ |   <  | (_) | | |_ 
+                                 | |        |_| |_|  \___| |_|\_\  \___/   \__|
+                                /_/                                            
+                                   __    _      _                       _    __
+                                   \ \  | | __ | |__    ___    ___     (_)  / /
+                                    \ \ | |/ / | '_ \  / __|  / _ \    | | / / 
+                                    / / |   <  | | | | \__ \ | (_) |   | | \ \ 
+                                   /_/  |_|\_\ |_| |_| |___/  \___/   _/ |  \_\
+                                                                     |__/      
+                     _   _                _                                    
+       ___   _ __   (_) | |    _    ___  | |__     ___    __ _   _ __     __ _ 
+      / _ \ | '_ \  | | | |   (_)  / _ \ | '_ \   / __|  / _` | | '_ \   / _` |
+     |  __/ | | | | | | | |    _  |  __/ | | | | | (__  | (_| | | |_) | | (_| |
+      \___| |_| |_| |_| |_|   (_)  \___| |_| |_|  \___|  \__,_| | .__/   \__,_|
+                                                                |_|            
+                                                _  __     _         _  _     _ 
+                                               ( ) \ \   ( )    _  | || |   / |
+                                               |/   | |   \|   (_) | || |_  | |
+                                                     > >        _  |__   _| | |
+                                                    | |        (_)    |_|   |_|
+                                                   /_/                         
+                    _       _      __    _      _                       _    __
+              ___  | |__   | |_    \ \  | | __ | |__    ___    ___     (_)  / /
+             / _ \ | '_ \  | __|    \ \ | |/ / | '_ \  / __|  / _ \    | | / / 
+            |  __/ | | | | | |_     / / |   <  | | | | \__ \ | (_) |   | | \ \ 
+             \___| |_| |_|  \__|   /_/  |_|\_\ |_| |_| |___/  \___/   _/ |  \_\
+                                                                     |__/      
+                                                       _             _         
+                                                      | |_    ___   | |  _ __  
+                                                      | __|  / _ \  | | | '_ \ 
+                                                      | |_  | (_) | | | | |_) |
+                                                       \__|  \___/  |_| | .__/ 
+                                                                        |_|    
+                                                 _             _   _       _   
+                            ___   _ __     ___  | | __   ___  (_) | |__   | |_ 
+                           / __| | '_ \   / _ \ | |/ /  / __| | | | '_ \  | __|
+                           \__ \ | | | | |  __/ |   <  | (__  | | | | | | | |_ 
+                           |___/ |_| |_|  \___| |_|\_\  \___| |_| |_| |_|  \__|
+                                                                               
+             __        _   _          _    __    __                          __
+             \ \    __| | | |   ___  (_)  / _|  / _|  _   _   ___    __ _   / /
+              \ \  / _` | | |  / _ \ | | | |_  | |_  | | | | / __|  / _` | / / 
+              / / | (_| | | | |  __/ | | |  _| |  _| | |_| | \__ \ | (_| | \ \ 
+             /_/   \__,_| |_|  \___| |_| |_|   |_|    \__,_| |___/  \__,_|  \_\
+                                                                               
+    _     _                                                        _       _   
+   | |_  ( )  _ __     ___   _ __    __ _      ___   ___    ___   | |__   | |_ 
+   | __| |/  | '_ \   / _ \ | '__|  / _` |    / _ \ / __|  / _ \  | '_ \  | __|
+   | |_      | | | | |  __/ | |    | (_| |   |  __/ \__ \ | (_) | | | | | | |_ 
+    \__|     |_| |_|  \___| |_|     \__,_|    \___| |___/  \___/  |_| |_|  \__|
+                                                                               
+            _             _                         _   _          _           
+      ___  | |_   _ __   (_)  _ __    ___   ___    | | | |   ___  | |__    ___ 
+     / __| | __| | '_ \  | | | '__|  / __| / __|   | | | |  / _ \ | '_ \  / __|
+     \__ \ | |_  | |_) | | | | |    | (__  \__ \   | | | | |  __/ | | | | \__ \
+     |___/  \__| | .__/  |_| |_|     \___| |___/   |_| |_|  \___| |_| |_| |___/
+                 |_|                                                           
+                  _   _       _      __    _              _                  __
+            ___  (_) | |__   | |_    \ \  | |__     ___  (_)  _ __    ___   / /
+           / __| | | | '_ \  | __|    \ \ | '_ \   / __| | | | '__|  / _ \ / / 
+           \__ \ | | | | | | | |_     / / | | | | | (__  | | | |    |  __/ \ \ 
+           |___/ |_| |_| |_|  \__|   /_/  |_| |_|  \___| |_| |_|     \___|  \_\
+                                                                               
+                                      _     _                                  
+                                     | |_  ( )  _ __    ___    __ _  __      __
+                                     | __| |/  | '_ \  / __|  / _` | \ \ /\ / /
+                                     | |_      | | | | \__ \ | (_| |  \ V  V / 
+                                      \__|     |_| |_| |___/  \__,_|   \_/\_/  
+                                                                               
+                                                _             _   _            
+                                 _ __     ___  | | __   ___  (_) | |__     ___ 
+                                | '_ \   / _ \ | |/ /  / __| | | | '_ \   / __|
+                             _  | | | | |  __/ |   <  | (__  | | | | | | | (__ 
+                            (_) |_| |_|  \___| |_|\_\  \___| |_| |_| |_|  \___|
+                                                                               
+                           _                                                   
+                   _ __   (_)                                                  
+                  | '_ \  | |    _____   _____                                 
+                  | | | | | |   |_____| |_____|                                
+                  |_| |_| |_|                                                  
+                                                                               
+               _                           _   _                  _     _  _   
+     ___    __| |          _ __     __ _  (_) | |__     ___    __| |  _| || |_ 
+    / _ \  / _` |  _____  | '_ \   / _` | | | | '_ \   / _ \  / _` | |_  ..  _|
+   |  __/ | (_| | |_____| | | | | | (_| | | | | |_) | |  __/ | (_| | |_      _|
+    \___|  \__,_|         |_| |_|  \__,_| |_| |_.__/   \___|  \__,_|   |_||_|  
+                                                                               
+                                                              _                
+                                                             | |   ___  __   __
+                                                             | |  / _ \ \ \ / /
+                                                             | | |  __/  \ V / 
+                                                             |_|  \___|   \_/  
+                                                                               
diff --git a/externals/figlet/tests/res016.txt b/externals/figlet/tests/res016.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res016.txt
@@ -0,0 +1,152 @@
+                                                  ___           _     _   __   
+                                                 / (_)         | |   | |  \ \  
+                                                / / _  ___  ___| |__ | | __\ \ 
+                                               < < | |/ _ \/ __| '_ \| |/ / > >
+                                                \ \| | (_) \__ | | | |   < / / 
+                                                 \_| |\___/|___|_| |_|_|\_/_/  
+                                                  _/ |                         
+                                                 |__/                          
+      _           _     _           _        __ _                  __  _       
+     (_)         | |   | |    ____ (_)      / _| |           _    / / | |      
+      _  ___  ___| |__ | | __/ __ \ _ _ __ | |_| |_   ___  _(_)  / ___| |_ ___ 
+     | |/ _ \/ __| '_ \| |/ / / _` | | '_ \|  _| | | | \ \/ /   / / _ | __/ __|
+     | | (_) \__ | | | |   | | (_| | | | | | | | | |_| |>  < _ / |  __| || (__ 
+     | |\___/|___|_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_/_/ \___|\__\___|
+    _/ |                     \____/                                            
+   |__/                                                                        
+               ___                       _        _            ___       _     
+              / | |                     | |      | |          | \ \     | |    
+             / /| | ___   __ _ _ __ ___ | |_ __ _| |_ ___   __| |\ \ ___| |__  
+            / / | |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` | > / __| '_ \ 
+           / /  | | (_) | (_| | | | (_) | || (_| | ||  __/| (_| |/ /\__ | | | |
+          /_/   |_|\___/ \__, |_|  \___/ \__\__,_|\__\___(_\__,_/_/ |___|_| |_|
+                          __/ |                                                
+                         |___/                                                 
+                                                                          _    
+                                                                       /\| |/\ 
+                                                          ______ _ __  \ ` ' / 
+                                                         |______| '_ \|_     _|
+                                                                | | | |/ , . \ 
+                                                                |_| |_|\/|_|\/ 
+                                                                               
+                                                                               
+              ___           _     _   __                          _            
+             / (_)         | |   | |  \ \                        | |         _ 
+            / / _  ___  ___| |__ | | __\ \  __ _ _ __   __ _  ___| |__   ___(_)
+           < < | |/ _ \/ __| '_ \| |/ / > >/ _` | '_ \ / _` |/ __| '_ \ / _ \  
+            \ \| | (_) \__ | | | |   < / /| (_| | |_) | (_| | (__| | | |  __/_ 
+             \_| |\___/|___|_| |_|_|\_/_/  \__,_| .__/ \__,_|\___|_| |_|\___(_)
+              _/ |                              | |                            
+             |__/                               |_|                            
+                       _ _            __ _  _                    _             
+                      | (_)          /_ | || | _                | |            
+                      | |_ _ __   ___ | | || |(_)___ _   _ _ __ | |_ __ ___  __
+                      | | | '_ \ / _ \| |__   _|/ __| | | | '_ \| __/ _` \ \/ /
+                      | | | | | |  __/| |  | | _\__ | |_| | | | | || (_| |>  < 
+                      |_|_|_| |_|\___||_|  |_|(_|___/\__, |_| |_|\__\__,_/_/\_\
+                                                      __/ |                    
+                                                     |___/                     
+                                                                               
+                                                                               
+                                 ___ _ __ _ __ ___  _ __ _ __   ___  __ _ _ __ 
+                                / _ | '__| '__/ _ \| '__| '_ \ / _ \/ _` | '__|
+                               |  __| |  | | | (_) | |  | | | |  __| (_| | |   
+                                \___|_|  |_|  \___/|_|  |_| |_|\___|\__,_|_|   
+                                                                               
+                                                                               
+                                         _           _ _        _              
+                                        | |         | | |      | |             
+   _   _ _ __   _____  ___ __   ___  ___| |_ ___  __| | |_ ___ | | _____ _ __  
+  | | | | '_ \ / _ \ \/ | '_ \ / _ \/ __| __/ _ \/ _` | __/ _ \| |/ / _ | '_ \ 
+  | |_| | | | |  __/>  <| |_) |  __| (__| ||  __| (_| | || (_) |   |  __| | | |
+   \__,_|_| |_|\___/_/\_| .__/ \___|\___|\__\___|\__,_|\__\___/|_|\_\___|_| |_|
+                        | |                                                    
+                        |_|                                                    
+                                                                        ___  _ 
+                                                                       ( \ \( )
+                                                                        \|| |/ 
+                                                                           \ \ 
+                                                                           / / 
+                                                                          | |  
+                                                                         /_/   
+                                                                               
+              ___           _     _   __                          _            
+             / (_)         | |   | |  \ \                        | |         _ 
+            / / _  ___  ___| |__ | | __\ \  __ _ _ __   __ _  ___| |__   ___(_)
+           < < | |/ _ \/ __| '_ \| |/ / > >/ _` | '_ \ / _` |/ __| '_ \ / _ \  
+            \ \| | (_) \__ | | | |   < / /| (_| | |_) | (_| | (__| | | |  __/_ 
+             \_| |\___/|___|_| |_|_|\_/_/  \__,_| .__/ \__,_|\___|_| |_|\___(_)
+              _/ |                              | |                            
+             |__/                               |_|                            
+                                              _ _            __ _  _    ___  _ 
+                                             | (_)          /_ | || | _( \ \( )
+                                             | |_ _ __   ___ | | || |(_)\|| |/ 
+                                             | | | '_ \ / _ \| |__   _|    \ \ 
+                                             | | | | | |  __/| |  | | _    / / 
+                                             |_|_|_| |_|\___||_|  |_|(_)  | |  
+                                                                         /_/   
+                                                                               
+                 ___           _     _   __   _   _                _       _   
+                / (_)         | |   | |  \ \ | | | |              | |     | |  
+               / / _  ___  ___| |__ | | __\ \| |_| |__   ___ _ __ | | ___ | |_ 
+              < < | |/ _ \/ __| '_ \| |/ / > | __| '_ \ / _ | '_ \| |/ _ \| __|
+               \ \| | (_) \__ | | | |   < / /| |_| | | |  __| |_) | | (_) | |_ 
+                \_| |\___/|___|_| |_|_|\_/_/  \__|_| |_|\___| .__/|_|\___/ \__|
+                 _/ |                                       | |                
+                |__/                                        |_|                
+                                           _   _     _      _                  
+                                          | | | |   (_)    | |                 
+                                          | |_| |__  _  ___| | _____ _ __  ___ 
+                                          | __| '_ \| |/ __| |/ / _ | '_ \/ __|
+                                          | |_| | | | | (__|   |  __| | | \__ \
+                                           \__|_| |_|_|\___|_|\_\___|_| |_|___/
+                                                                               
+                                                                               
+          __                __  __ _      _     ___   _   _                    
+         / /               / _|/ _(_)    | |   | \ \ | | | |                   
+        / / __ _ ___ _   _| |_| |_ _  ___| | __| |\ \| |_| |__   ___  ___  ___ 
+       < < / _` / __| | | |  _|  _| |/ _ | |/ _` | > | __| '_ \ / _ \/ __|/ _ \
+        \ | (_| \__ | |_| | | | | | |  __| | (_| |/ /| |_| | | | (_) \__ |  __/
+         \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/  \__|_| |_|\___/|___/\___|
+                                                                               
+                                                                               
+                        _ _       _          _ _               _       _       
+                       ( | |     | |        | | |             (_)     | |      
+     __ _ _ __ ___ _ __|/| |_ ___| |__   ___| | |___  ___ _ __ _ _ __ | |_ ___ 
+    / _` | '__/ _ | '_ \ | __/ __| '_ \ / _ | | / __|/ __| '__| | '_ \| __/ __|
+   | (_| | | |  __| | | || |_\__ | | | |  __| | \__ | (__| |  | | |_) | |_\__ \
+    \__,_|_|  \___|_| |_| \__|___|_| |_|\___|_|_|___/\___|_|  |_| .__/ \__|___/
+                                                                | |            
+                                                                |_|            
+      __         _      _    __   _   _     _                            _ _   
+     / /        (_)    | |   \ \ | | | |   (_)                          ( | |  
+    / / ___ _ __ _  ___| |__  \ \| |_| |__  _ _____      ____ _ ___ _ __|/| |_ 
+   < < / _ | '__| |/ __| '_ \  > | __| '_ \| / __\ \ /\ / / _` / __| '_ \ | __|
+    \ |  __| |  | | (__| | | |/ /| |_| | | | \__ \\ V  V | (_| \__ | | | || |_ 
+     \_\___|_|  |_|\___|_| |_/_/  \__|_| |_|_|___/ \_/\_/ \__,_|___|_| |_| \__|
+                                                                               
+                                                                               
+                                                 _     _      _                
+                                                | |   (_)    | |               
+                                             ___| |__  _  ___| | _____ _ __    
+                                            / __| '_ \| |/ __| |/ / _ | '_ \   
+                                           | (__| | | | | (__|   |  __| | | |_ 
+                                            \___|_| |_|_|\___|_|\_\___|_| |_(_)
+                                                                               
+                                                                               
+                                                                       _       
+                                                                      (_)      
+                                                         ______ ______ _ _ __  
+                                                        |______|______| | '_ \ 
+                                                                      | | | | |
+                                                                      |_|_| |_|
+                                                                               
+                                                                               
+             _  _       _      _     _                      _                _ 
+           _| || |_    | |    | |   (_)                    | |              | |
+          |_  __  _| __| | ___| |__  _  __ _ _ __ ______ __| | _____   _____| |
+           _| || |_ / _` |/ _ | '_ \| |/ _` | '_ |______/ _` |/ _ \ \ / / _ | |
+          |_  __  _| (_| |  __| |_) | | (_| | | | |    | (_| |  __/\ V |  __| |
+            |_||_|  \__,_|\___|_.__/|_|\__,_|_| |_|     \__,_|\___| \_/ \___|_|
+                                                                               
+                                                                               
diff --git a/externals/figlet/tests/res017.txt b/externals/figlet/tests/res017.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res017.txt
@@ -0,0 +1,36 @@
+                                                                 ┛┏━┃┏━┛┃ ┃┃ ┃ 
+                                                                 ┃┃ ┃━━┃┏━┃┏┛  
+                                                               <━┛━━┛━━┛┛ ┛┛ ┛>
+   ┛┏━┃┏━┛┃ ┃┃ ┃┏━┃┛┏━ ┏━┛┃  ┃ ┃┃ ┃   ┛┏━┛━┏┛┏━┛  ┛┃  ┏━┃┏━┛┏━┃┏━┃━┏┛┏━┃━┏┛┏━┛ 
+   ┃┃ ┃━━┃┏━┃┏┛ ┃┛┛┃┃ ┃┏━┛┃  ┃ ┃ ┛ ┛ ┛ ┏━┛ ┃ ┃   ┛ ┃  ┃ ┃┃ ┃┏┏┛┃ ┃ ┃ ┏━┃ ┃ ┏━┛ 
+  ━┛━━┛━━┛┛ ┛┛ ┛━━┛┛┛ ┛┛  ━━┛━━┛┛ ┛┛┛  ━━┛ ┛ ━━┛┛  ━━┛━━┛━━┛┛ ┛━━┛ ┛ ┛ ┛ ┛ ━━┛┛
+                                                           ┏━  ┏━┛┃ ┃   ┏━  ┛ ┛
+                                                           ┃ ┃ ━━┃┏━┃ ━┛┃ ┃ ━┏┛
+                                                           ━━> ━━┛┛ ┛   ┛ ┛ ┛ ┛
+         ┛┏━┃┏━┛┃ ┃┃ ┃  ┏━┃┏━┃┏━┃┏━┛┃ ┃┏━┛  ┃  ┛┏━ ┏━┛ ━┃┃ ┃  ┏━┛┃ ┃┏━━┏┛┏━┃┃ ┃
+         ┃┃ ┃━━┃┏━┃┏┛   ┏━┃┏━┛┏━┃┃  ┏━┃┏━┛┛ ┃  ┃┃ ┃┏━┛  ┃━━┃┛ ━━┃━┏┛┃ ┃┃ ┏━┃ ┛ 
+       <━┛━━┛━━┛┛ ┛┛ ┛> ┛ ┛┛  ┛ ┛━━┛┛ ┛━━┛┛ ━━┛┛┛ ┛━━┛ ━━┛ ┛┛ ━━┛ ┛ ┛ ┛┛ ┛ ┛┛ ┛
+    ┏━┛┏━┃┏━┃┏━┃┏━┃ ┏━ ┏━┛┏━┃┏━┃ ┃ ┃┏━ ┏━┛┃ ┃┏━┃┏━┛┏━┛━┏┛┏━┛┏━  ━┏┛┏━┃┃ ┃┏━┛┏━ 
+    ┏━┛┏┏┛┏┏┛┃ ┃┏┏┛ ┃ ┃┏━┛┏━┃┏┏┛ ┃ ┃┃ ┃┏━┛ ┛ ┏━┛┏━┛┃   ┃ ┏━┛┃ ┃  ┃ ┃ ┃┏┛ ┏━┛┃ ┃
+    ━━┛┛ ┛┛ ┛━━┛┛ ┛ ┛ ┛━━┛┛ ┛┛ ┛ ━━┛┛ ┛━━┛┛ ┛┛  ━━┛━━┛ ┛ ━━┛━━   ┛ ━━┛┛ ┛━━┛┛ ┛
+                                                                           ┛━┃┛
+                                                                            ┛┏┛
+                                                                            ━┛ 
+                      ┛┏━┃┏━┛┃ ┃┃ ┃  ┏━┃┏━┃┏━┃┏━┛┃ ┃┏━┛  ┃  ┛┏━ ┏━┛ ━┃┃ ┃  ┛━┃┛
+                      ┃┃ ┃━━┃┏━┃┏┛   ┏━┃┏━┛┏━┃┃  ┏━┃┏━┛┛ ┃  ┃┃ ┃┏━┛  ┃━━┃┛  ┛┏┛
+                    <━┛━━┛━━┛┛ ┛┛ ┛> ┛ ┛┛  ┛ ┛━━┛┛ ┛━━┛┛ ━━┛┛┛ ┛━━┛ ━━┛ ┛┛  ━┛ 
+                   ┛┏━┃┏━┛┃ ┃┃ ┃  ━┏┛┃ ┃┏━┛ ┏━┃┃  ┏━┃━┏┛ ━┏┛┃ ┃┛┏━┛┃ ┃┏━┛┏━ ┏━┛
+                   ┃┃ ┃━━┃┏━┃┏┛    ┃ ┏━┃┏━┛ ┏━┛┃  ┃ ┃ ┃   ┃ ┏━┃┃┃  ┏┛ ┏━┛┃ ┃━━┃
+                 <━┛━━┛━━┛┛ ┛┛ ┛>  ┛ ┛ ┛━━┛ ┛  ━━┛━━┛ ┛   ┛ ┛ ┛┛━━┛┛ ┛━━┛┛ ┛━━┛
+      ┏━┃┏━┛┃ ┃┏━┛┏━┛┛┏━┛┃  ┏━  ━┏┛┃ ┃┏━┃┏━┛┏━┛ ┏━┃┏━┃┏━┛┏━┛━┏┛ ┏━┛┃ ┃┏━┛┃  ┃  
+      ┏━┃━━┃┃ ┃┏━┛┏━┛┃┏━┛┃  ┃ ┃  ┃ ┏━┃┃ ┃━━┃┏━┛ ┏━┃┏┏┛┏━┛┃ ┃ ┃  ━━┃┏━┃┏━┛┃  ┃  
+     <┛ ┛━━┛━━┛┛  ┛  ┛━━┛━━┛━━>  ┛ ┛ ┛━━┛━━┛━━┛ ┛ ┛┛ ┛━━┛┛ ┛ ┛  ━━┛┛ ┛━━┛━━┛━━┛
+                                                            ┏━┛┏━┛┏━┃┛┏━┃━┏┛┏━┛
+                                                            ━━┃┃  ┏┏┛┃┏━┛ ┃ ━━┃
+                                                            ━━┛━━┛┛ ┛┛┛   ┛ ━━┛
+                 ┏━┛┏━┃┛┏━┛┃ ┃  ━┏┛┃ ┃┛┏━┛ ┃┃┃┏━┃┏━┛┏━┛━┏┛ ┏━┛┃ ┃┛┏━┛┃ ┃┏━┛┏━  
+                 ┏━┛┏┏┛┃┃  ┏━┃   ┃ ┏━┃┃━━┃ ┃┃┃┏━┃━━┃┃ ┃ ┃  ┃  ┏━┃┃┃  ┏┛ ┏━┛┃ ┃ 
+                <━━┛┛ ┛┛━━┛┛ ┛>  ┛ ┛ ┛┛━━┛ ━━┛┛ ┛━━┛┛ ┛ ┛  ━━┛┛ ┛┛━━┛┛ ┛━━┛┛ ┛┛
+                                        ┛┏━   ┏━ ┏━┛┏━ ┛┏━┃┏━   ┏━ ┏━┛┃ ┃┏━┛┃  
+                                   ━┛━┛ ┃┃ ┃  ┃ ┃┏━┛┏━┃┃┏━┃┃ ┃━┛┃ ┃┏━┛┃ ┃┏━┛┃  
+                                        ┛┛ ┛ #━━ ━━┛━━ ┛┛ ┛┛ ┛  ━━ ━━┛ ┛ ━━┛━━┛
diff --git a/externals/figlet/tests/res018.txt b/externals/figlet/tests/res018.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res018.txt
@@ -0,0 +1,27 @@
+   ┏━┏━┃ ┃ ┃  ┏━┏━┃ ┃ ┏━┃┛┏━┏━┃ ┃ ┃ ┃   ┏━━┏┏━┛ ┃ ┏━┏━┏━┏━━┏┏━━┏┏━┛ ┏━ ┏━┃ ┃┏━ 
+   ┃ ━━┏━┏┛   ┃ ━━┏━┏┛┃┛┛┃┃ ┏━┃ ┃ ┃┛ ┛ ┛┏━┛┃┃  ┛┃ ┃ ┃ ┏┏┃ ┃┃┏━┃┃┏━┛ ┃ ┃━━┏━━┃ ┃
+ <━━━━━┛ ┛ ┛>━━━━━┛ ┛ ━━┛┛┛ ┛ ━━━━┛ ┛┛┛ ━━┛┛━━┛ ━━━━━━┛ ━━┛┛┛ ┛┛━━┛┛━━>━━┛ ┛┛ ┛
+                                      ┛ ┛
+                                      ━┏┛
+                                      ┛ ┛
+       ┏━┏━┃ ┃ ┃ ┏━┏━┏━┏━┃ ┏━┛ ┃  ┛┏━┏━━┃ ┃ ┏━┃ ┏━┏┏━┃ ┏━┏━┏━┏━┏━┏━┏━┏━┏━┃
+       ┃ ━━┏━┏┛  ┏━┏━┏━┃ ┏━┏━┛┛┃  ┃┃ ┏━┛━━┃┛━━━┏┃ ┃┏━┃┛┏━┏┏┏┏┃ ┏┏┃ ┏━┏━┏┏┛
+     <━━━━━┛ ┛ ┛>┛ ┛ ┛ ━━┛ ━━┛┛━━┛┛┛ ━━━━┛┛┛━━┛┛┛ ┛┛ ┛ ━━┛ ┛ ━━┛ ┛ ━━┛ ┛ ┛
+                       ┃ ┏━┏━┃ ┏━┏━┏━━┏┏━┏━━┏┏━┃ ┏━┏━━┃┛
+                       ┃ ┃ ┏━┛┛┏━┏━┃  ┃┏━┃ ┃┃┃ ┏┛┏━┃ ┃┏┛
+                       ━━┛ ━━┛ ┛ ━━━━┛┛━━━━ ┛━━┛ ━━┛ ━┛ 
+                     ┏━┏━┃ ┃ ┃ ┏━┏━┏━┏━┃ ┏━┛ ┃  ┛┏━┏━━┃ ┃ ━┃┛
+                     ┃ ━━┏━┏┛  ┏━┏━┏━┃ ┏━┏━┛┛┃  ┃┃ ┏━┛━━┃┛ ┏┛
+                   <━━━━━┛ ┛ ┛>┛ ┛ ┛ ━━┛ ━━┛┛━━┛┛┛ ━━━━┛┛┛━┛ 
+                    ┏━┏━┃ ┃ ┃ ━┏┃ ┏━┏━┃ ┏━━┏━┏┃ ┃┛┏━┃ ┏━┏━┏━┛
+                    ┃ ━━┏━┏┛   ┃┏━┏━┏━┃ ┃ ┃┃ ┃┏━┃┃┃ ┏┛┏━┃ ━━┃
+                  <━━━━━┛ ┛ ┛> ┛┛ ━━┛ ━━━━┛┛ ┛┛ ┛┛━━┛ ━━┛ ━━┛
+        ┏━┏━┃ ┏━┏━┛┛┏━┃ ┏━ ━┏┃ ┏━┏━┏━┏━┏━┏━┏━┛━┏┏━┃ ┏━┃ ┃ ┏━┏━┏━┃┛┏━━┏┏━┛
+        ┏━━━┃ ┏━┏━┛┃┏━┃ ┃ ┃ ┃┏━┃ ━━┏━┏━┏┏┏━┃ ┃ ┃━━┏━┏━┃ ┃ ━━┃ ┏┏┛┃┏━┛┃━━┃
+       <┛ ━━━━┛ ┛  ┛━━━━━━> ┛┛ ━━━━━━┛ ┛ ━━┛ ┛ ┛━━┛ ━━━━━━━━━━┛ ┛┛┛  ┛━━┛
+                 ┏━┏━┃┛┏━┃ ┃ ━┏┃ ┃┛┏━┃┃┏━┏━┏━┛━┏┏━┃ ┃┛┏━┃ ┏━┏━  
+                 ┏━┏┏┛┃┃ ┏━┃  ┃┏━┃┃━━┃┃┏━━━┃ ┃ ┃┃ ┏━┃┃┃ ┏┛┏━┃ ┃ 
+                <━━┛ ┛┛━━┛ ┛> ┛┛ ┛┛━━━━┛ ━━┛ ┛ ┛━━┛ ┛┛━━┛ ━━┛ ┛┛
+                           ┛┏━  ┏━┏━┏━ ┛┏━┏━ ┏━┏━┃ ┏━┃  
+                        ━━┛┃┃ ┃ ┃ ┏━┏━┃┃┏━┃ ━┃ ┏━┃ ┏━┃  
+                           ┛┛ ┛#━━━━━━ ┛┛ ┛ ┛━━━━┛┛━━━━┛
diff --git a/externals/figlet/tests/res019.txt b/externals/figlet/tests/res019.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res019.txt
@@ -0,0 +1,36 @@
+ ┃ ┃┃ ┃┏━┛┏━┃ ┛ 
+ ┏┛ ┏━┃━━┃┃ ┃ ┃ 
+>┛ ┛┛ ┛━━┛━━┛━┛<
+ ┏━┛━┏┛┏━┃━┏┛┏━┃┏━┃┏━┛┏━┃┃    ┛┏━┛━┏┛┏━┛  ┛ ┃ ┃┃ ┃┃  ┏━┛┏━ ┛┏━┃┃ ┃┃ ┃┏━┛┏━┃ ┛
+ ┏━┛ ┃ ┏━┃ ┃ ┃ ┃┏┏┛┃ ┃┃ ┃┃   ┛ ┃   ┃ ┏━┛ ┛ ┛ ┛ ┃ ┃┃  ┏━┛┃ ┃┃┃┛┛┏┛ ┏━┃━━┃┃ ┃ ┃
+┛━━┛ ┛ ┛ ┛ ┛ ━━┛┛ ┛━━┛━━┛━━┛┛  ━━┛ ┛ ━━┛┛  ┛┛ ┛━━┛━━┛┛  ┛ ┛┛━━┛┛ ┛┛ ┛━━┛━━┛━┛
+┛ ┛  ┏━     ┃ ┃┏━┛   ┏━ 
+━┏┛  ┃ ┃━┛  ┏━┃━━┃   ┃ ┃
+┛ ┛  ┛ ┛    ┛ ┛━━┛  >━━ 
+┃ ┃┏━┃━┏┛┏━ ┃ ┃┏━┛   ┃ ┃━┃   ┏━┛┏━ ┛┃     ┏━┛┃ ┃┏━┛┏━┃┏━┃┏━┃   ┃ ┃┃ ┃┏━┛┏━┃ ┛ 
+ ┛ ┏━┃ ┃ ┃ ┃━┏┛━━┃  ┛━━┃ ┃   ┏━┛┃ ┃┃┃    ┛┏━┛┏━┃┃  ┏━┃┏━┛┏━┃   ┏┛ ┏━┃━━┃┃ ┃ ┃ 
+┛ ┛┛ ┛ ┛ ┛ ┛ ┛ ━━┛  ┛  ┛━━┛  ━━┛┛ ┛┛━━┛  ┛━━┛┛ ┛━━┛┛ ┛┛  ┛ ┛  >┛ ┛┛ ┛━━┛━━┛━┛<
+┏━ ┏━┛┃ ┃┏━┃━┏┛  ┏━ ┏━┛━┏┛┏━┛┏━┛┏━┃┃ ┃┏━┛┏━ ┃ ┃  ┏━┃┏━┃┏━┛┏━   ┏━┃┏━┃┏━┃┏━┃┏━┛
+┃ ┃┏━┛┏┛ ┃ ┃ ┃   ┃ ┃┏━┛ ┃ ┃  ┏━┛┏━┛ ┛ ┏━┛┃ ┃┃ ┃  ┏┏┛┏━┃┏━┛┃ ┃  ┏┏┛┃ ┃┏┏┛┏┏┛┏━┛
+┛ ┛━━┛┛ ┛━━┛ ┛   ━━ ━━┛ ┛ ━━┛━━┛┛  ┛ ┛━━┛┛ ┛━━┛  ┛ ┛┛ ┛━━┛┛ ┛  ┛ ┛━━┛┛ ┛┛ ┛━━┛
+┛━┃ ┛ 
+  ┏┛ ┛
+ ━┛   
+┛━┃ ┛    ┃ ┃━┃   ┏━┛┏━ ┛┃     ┏━┛┃ ┃┏━┛┏━┃┏━┃┏━┃   ┃ ┃┃ ┃┏━┛┏━┃ ┛ 
+  ┏┛ ┛  ┛━━┃ ┃   ┏━┛┃ ┃┃┃    ┛┏━┛┏━┃┃  ┏━┃┏━┛┏━┃   ┏┛ ┏━┃━━┃┃ ┃ ┃ 
+ ━┛     ┛  ┛━━┛  ━━┛┛ ┛┛━━┛  ┛━━┛┛ ┛━━┛┛ ┛┛  ┛ ┛  >┛ ┛┛ ┛━━┛━━┛━┛<
+┏━┛┏━ ┏━┛┃ ┃┏━┛┛┃ ┃━┏┛  ━┏┛┏━┃┃  ┏━┃  ┏━┛┃ ┃━┏┛   ┃ ┃┃ ┃┏━┛┏━┃ ┛ 
+━━┃┃ ┃┏━┛┏┛ ┃  ┃┏━┃ ┃    ┃ ┃ ┃┃  ┏━┛  ┏━┛┏━┃ ┃    ┏┛ ┏━┃━━┃┃ ┃ ┃ 
+━━┛┛ ┛━━┛┛ ┛━━┛┛┛ ┛ ┛    ┛ ━━┛━━┛┛    ━━┛┛ ┛ ┛   >┛ ┛┛ ┛━━┛━━┛━┛<
+┃  ┃  ┏━┛┃ ┃┏━┛  ━┏┛┛┏━ ┏━┛┏━┃┏━┃  ┏━┛┏━┛┏━┃┃ ┃━┏┛   ┏━ ┃  ┏━┛┛┏━┛┏━┛┃ ┃┏━┛┏━┃ 
+┃  ┃  ┏━┛┏━┃━━┃   ┃  ┃ ┃┏━┛┏┏┛┏━┃  ┏━┛━━┃┃ ┃┏━┃ ┃    ┃ ┃┃  ┏━┛┃┏━┛┏━┛┃ ┃━━┃┏━┃ 
+━━┛━━┛━━┛┛ ┛━━┛   ┛  ┛ ┛━━┛┛ ┛┛ ┛  ━━┛━━┛━━┛┛ ┛ ┛   >━━ ━━┛━━┛┛┛  ┛  ━━┛━━┛┛ ┛<
+┏━┛━┏┛┏━┃┛┏━┃┏━┛┏━┛
+━━┃ ┃ ┏━┛┃┏┏┛┃  ━━┃
+━━┛ ┛ ┛  ┛┛ ┛━━┛━━┛
+ ┏━ ┏━┛┃ ┃┏━┛┛┃ ┃┏━┛  ━┏┛┛┏━ ┏━┛┏━┃┃┃┃  ┏━┛┛┃ ┃━┏┛   ┃ ┃┏━┛┛┏━┃┏━┛ 
+ ┃ ┃┏━┛┏┛ ┃  ┃┏━┃┃     ┃  ┃ ┃━━┃┏━┃┃┃┃  ━━┃┃┏━┃ ┃    ┏━┃┃  ┃┏┏┛┏━┛ 
+┛┛ ┛━━┛┛ ┛━━┛┛┛ ┛━━┛   ┛  ┛ ┛━━┛┛ ┛━━┛  ━━┛┛┛ ┛ ┛   >┛ ┛━━┛┛┛ ┛━━┛<
+┃  ┏━┛┃ ┃┏━┛┏━   ┏━ ┏━┃┛┏━ ┏━┛┏━    ┏━ ┛                                      
+┃  ┏━┛┃ ┃┏━┛┃ ┃━┛┃ ┃┏━┃┃┏━┃┏━┛┃ ┃   ┃ ┃┃  ━┛━┛                                
+━━┛━━┛ ┛ ━━┛━━   ┛ ┛┛ ┛┛━━ ━━┛━━ #  ┛ ┛┛                                      
diff --git a/externals/figlet/tests/res020.txt b/externals/figlet/tests/res020.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res020.txt
@@ -0,0 +1,140 @@
+              _      _     
+ /o          | |    | |  \ 
+/    __   ,  | |    | |   \
+\ | /  \_/ \_|/ \   |/_)  /
+ \|/\__/  \/ |   |_/| \_// 
+ /|                        
+ \|                        
+             _      _                       _   _                             
+ o          | |    | |    ____  o          | | | |             o   /          
+    __   ,  | |    | |   / __,\     _  _   | | | |                /_ _|_  __  
+ | /  \_/ \_|/ \   |/_) | /  | ||  / |/ |  |/  |/  |   |  /\/    /|/  |  /    
+ |/\__/  \/ |   |_/| \_/| \_/|/ |_/  |  |_/|__/|__/ \_/|_/ /\_/o/ |__/|_/\___/
+/|                       \____/            |\                                 
+\|                                         |/                                 
+     _                                                       _     
+   /| |                                          |  \       | |    
+  / | |  __   __,  ,_    __ _|_  __, _|_  _    __|   \   ,  | |    
+ /  |/  /  \_/  | /  |  /  \_|  /  |  |  |/   /  |   /  / \_|/ \   
+/   |__/\__/ \_/|/   |_/\__/ |_/\_/|_/|_/|__/o\_/|_//    \/ |   |_/
+               /|                                                  
+               \|                                                  
+                    
+                    
+      _  _      \|/ 
+-----/ |/ |    --*--
+       |  |_/   /|\ 
+                    
+                    
+              _      _                              _          
+ /o          | |    | |  \                         | |        o
+/    __   ,  | |    | |   \   __,    _   __,   __  | |     _   
+\ | /  \_/ \_|/ \   |/_)  /  /  |  |/ \_/  |  /    |/ \   |/   
+ \|/\__/  \/ |   |_/| \_//   \_/|_/|__/ \_/|_/\___/|   |_/|__/o
+ /|                               /|                           
+ \|                               \|                           
+ _                    ,                                        
+| | o                /||  | o                                  
+| |     _  _    _     ||__|_    ,         _  _  _|_  __,       
+|/  |  / |/ |  |/     |   |    / \_|   | / |/ |  |  /  |  /\/  
+|__/|_/  |  |_/|__/   |   | o   \/  \_/|/  |  |_/|_/\_/|_/ /\_/
+                                      /|                       
+                                      \|                       
+                                                     
+                                                     
+ _   ,_    ,_    __   ,_      _  _    _   __,   ,_   
+|/  /  |  /  |  /  \_/  |    / |/ |  |/  /  |  /  |  
+|__/   |_/   |_/\__/    |_/    |  |_/|__/\_/|_/   |_/
+                                                     
+                                                     
+                                                               _               
+                                                |             | |              
+        _  _    _         _   _   __ _|_  _   __|    _|_  __  | |   _   _  _   
+|   |  / |/ |  |/  /\/  |/ \_|/  /    |  |/  /  |     |  /  \_|/_) |/  / |/ |  
+ \_/|_/  |  |_/|__/ /\_/|__/ |__/\___/|_/|__/\_/|_/   |_/\__/ | \_/|__/  |  |_/
+                       /|                                                      
+                       \|                                                      
+o   o
+\\  /
+  |  
+   > 
+  |  
+ /   
+     
+              _      _                              _          
+ /o          | |    | |  \                         | |        o
+/    __   ,  | |    | |   \   __,    _   __,   __  | |     _   
+\ | /  \_/ \_|/ \   |/_)  /  /  |  |/ \_/  |  /    |/ \   |/   
+ \|/\__/  \/ |   |_/| \_//   \_/|_/|__/ \_/|_/\___/|   |_/|__/o
+ /|                               /|                           
+ \|                               \|                           
+ _                    ,        o   o
+| | o                /||  | o  \\  /
+| |     _  _    _     ||__|_     |  
+|/  |  / |/ |  |/     |   |       > 
+|__/|_/  |  |_/|__/   |   | o    |  
+                                /   
+                                    
+              _      _            _                  _          
+ /o          | |    | |  \       | |                | |         
+/    __   ,  | |    | |   \  _|_ | |     _       _  | |  __ _|_ 
+\ | /  \_/ \_|/ \   |/_)  /   |  |/ \   |/     |/ \_|/  /  \_|  
+ \|/\__/  \/ |   |_/| \_//    |_/|   |_/|__/   |__/ |__/\__/ |_/
+ /|                                           /|                
+ \|                                           \|                
+     _              _                   
+    | |    o       | |                  
+_|_ | |        __  | |   _   _  _    ,  
+ |  |/ \   |  /    |/_) |/  / |/ |  / \_
+ |_/|   |_/|_/\___/| \_/|__/  |  |_/ \/ 
+                                        
+                                        
+                    _   _          _                 _                  
+ /                 | | | | o      | |    |  \       | |                 
+/  __,   ,         | | | |     _  | |  __|   \  _|_ | |     __   ,   _  
+\ /  |  / \_|   |  |/  |/  |  |/  |/  /  |   /   |  |/ \   /  \_/ \_|/  
+ \\_/|_/ \/  \_/|_/|__/|__/|_/|__/|__/\_/|_//    |_/|   |_/\__/  \/ |__/
+                   |\  |\                                               
+                   |/  |/                                               
+                        o           _          _   _  
+                        /          | |        | | | | 
+ __,   ,_    _   _  _    _|_    ,  | |     _  | | | | 
+/  |  /  |  |/  / |/ |    |    / \_|/ \   |/  |/  |/  
+\_/|_/   |_/|__/  |  |_/  |_/   \/ |   |_/|__/|__/|__/
+                                                      
+                                                      
+                              
+               o              
+ ,   __   ,_        _ _|_  ,  
+/ \_/    /  |  |  |/ \_|  / \_
+ \/ \___/   |_/|_/|__/ |_/ \/ 
+                 /|           
+                 \|           
+                     _              _            
+ /          o       | |    \       | |    o      
+/  _   ,_       __  | |     \  _|_ | |        ,  
+\ |/  /  |  |  /    |/ \    /   |  |/ \   |  / \_
+ \|__/   |_/|_/\___/|   |_//    |_/|   |_/|_/ \/ 
+                                                 
+                                                 
+                          o            _              _                
+                          /           | |    o       | |               
+         __,   ,   _  _    _|_    __  | |        __  | |   _   _  _    
+|  |  |_/  |  / \_/ |/ |    |    /    |/ \   |  /    |/_) |/  / |/ |   
+ \/ \/  \_/|_/ \/   |  |_/  |_/  \___/|   |_/|_/\___/| \_/|__/  |  |_/o
+                                                                       
+                                                                       
+                                                       
+                                            o          
+                                                _  _   
+                                ----------  |  / |/ |  
+                                            |_/  |  |_/
+                                                       
+                                                       
+                  _                                           _  
+  |  |     |     | |  o                      |               | | 
+--+--+-- __|   _ | |      __,   _  _       __|   _        _  | | 
+--+--+--/  |  |/ |/ \_|  /  |  / |/ |-----/  |  |/  |  |_|/  |/  
+  |  |  \_/|_/|__/\_/ |_/\_/|_/  |  |_/   \_/|_/|__/ \/  |__/|__/
+                                                                 
+                                                                 
diff --git a/externals/figlet/tests/res021.txt b/externals/figlet/tests/res021.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res021.txt
@@ -0,0 +1,36 @@
+  __ _           _     _    __      _           _     _     ____  _        __ _                 __   _          ___                       _        _            ___        _                             __ _           _     _    __  
+ / /(_) ___  ___| |__ | | __\ \    (_) ___  ___| |__ | | __/ __ \(_)_ __  / _| |_   ___  ___   / /__| |_ ___   / / | ___   __ _ _ __ ___ | |_ __ _| |_ ___   __| \ \   ___| |__          _ __   __/\__  / /(_) ___  ___| |__ | | __\ \ 
+/ / | |/ _ \/ __| '_ \| |/ / \ \   | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ \ __/ __| / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \   _____| '_ \  \    / / / | |/ _ \/ __| '_ \| |/ / \ \
+\ \ | | (_) \__ \ | | |   <  / /   | | (_) \__ \ | | |   < | (_| | | | | |  _| | |_| |>  < _ / /  __/ || (__ / / | | (_) | (_| | | | (_) | || (_| | ||  __/| (_| |/ / \__ \ | | | |_____| | | | /_  _\ \ \ | | (_) \__ \ | | |   <  / /
+ \_\/ |\___/|___/_| |_|_|\_\/_/   _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___/_/  |_|\___/ \__, |_|  \___/ \__\__,_|\__\___(_)__,_/_/  |___/_| |_|       |_| |_|   \/    \_\/ |\___/|___/_| |_|_|\_\/_/ 
+  |__/                           |__/                      \____/                                                         |___/                                                                          |__/                          
+                        _              _ _              _ _  _                      _                                                                                                        _           _   _        _                ___   _ 
+  __ _ _ __   __ _  ___| |__   ___ _  | (_)_ __   ___  / | || | _   ___ _   _ _ __ | |_ __ ___  __   ___ _ __ _ __ ___  _ __   _ __   ___  __ _ _ __   _   _ _ __   _____  ___ __   ___  ___| |_ ___  __| | | |_ ___ | | _____ _ __   ( ) \ ( )
+ / _` | '_ \ / _` |/ __| '_ \ / _ (_) | | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ /  / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__| | | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \   \|| ||/ 
+| (_| | |_) | (_| | (__| | | |  __/_  | | | | | |  __/ | |__   _|  \__ \ |_| | | | | || (_| |>  <  |  __/ |  | | | (_) | |    | | | |  __/ (_| | |    | |_| | | | |  __/>  <| |_) |  __/ (__| ||  __/ (_| | | || (_) |   <  __/ | | |     > >  
+ \__,_| .__/ \__,_|\___|_| |_|\___(_) |_|_|_| |_|\___| |_|  |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\  \___|_|  |_|  \___/|_|    |_| |_|\___|\__,_|_|     \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_|  \__\___/|_|\_\___|_| |_|    | |   
+      |_|                                                               |___/                                                                                               |_|                                                         /_/    
+  __ _           _     _    __                           _              _ _              _ _  _      ___   _    __ _           _     _    __    _   _                  _       _     _   _     _      _                  
+ / /(_) ___  ___| |__ | | __\ \    __ _ _ __   __ _  ___| |__   ___ _  | (_)_ __   ___  / | || | _  ( ) \ ( )  / /(_) ___  ___| |__ | | __\ \  | |_| |__   ___   _ __ | | ___ | |_  | |_| |__ (_) ___| | _____ _ __  ___ 
+/ / | |/ _ \/ __| '_ \| |/ / \ \  / _` | '_ \ / _` |/ __| '_ \ / _ (_) | | | '_ \ / _ \ | | || |(_)  \|| ||/  / / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __| | __| '_ \| |/ __| |/ / _ \ '_ \/ __|
+\ \ | | (_) \__ \ | | |   <  / / | (_| | |_) | (_| | (__| | | |  __/_  | | | | | |  __/ | |__   _|      > >   \ \ | | (_) \__ \ | | |   <  / / | |_| | | |  __/ | |_) | | (_) | |_  | |_| | | | | (__|   <  __/ | | \__ \
+ \_\/ |\___/|___/_| |_|_|\_\/_/   \__,_| .__/ \__,_|\___|_| |_|\___(_) |_|_|_| |_|\___| |_|  |_|(_)    | |     \_\/ |\___/|___/_| |_|_|\_\/_/   \__|_| |_|\___| | .__/|_|\___/ \__|  \__|_| |_|_|\___|_|\_\___|_| |_|___/
+  |__/                                 |_|                                                            /_/       |__/                                            |_|                                                      
+  __                __  __ _      _     ___    _   _                                           _ _         _          _ _                 _       _          __         _      _    __    _   _     _                               _ _   
+ / /__ _ ___ _   _ / _|/ _(_) ___| | __| \ \  | |_| |__   ___  ___  ___    __ _ _ __ ___ _ __ ( ) |_   ___| |__   ___| | |  ___  ___ _ __(_)_ __ | |_ ___   / /___ _ __(_) ___| |__ \ \  | |_| |__ (_)___  __      ____ _ ___ _ __ ( ) |_ 
+/ // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \  / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | | / __|/ __| '__| | '_ \| __/ __| / // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __|
+\ \ (_| \__ \ |_| |  _|  _| |  __/ | (_| |/ / | |_| | | | (_) \__ \  __/ | (_| | | |  __/ | | | | |_  \__ \ | | |  __/ | | \__ \ (__| |  | | |_) | |_\__ \ \ \  __/ |  | | (__| | | |/ / | |_| | | | \__ \  \ V  V / (_| \__ \ | | | | |_ 
+ \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/   \__|_| |_|\___/|___/\___|  \__,_|_|  \___|_| |_|  \__| |___/_| |_|\___|_|_| |___/\___|_|  |_| .__/ \__|___/  \_\___|_|  |_|\___|_| |_/_/   \__|_| |_|_|___/   \_/\_/ \__,_|___/_| |_|  \__|
+                                                                                                                                           |_|                                                                                            
+      _     _      _                
+  ___| |__ (_) ___| | _____ _ __    
+ / __| '_ \| |/ __| |/ / _ \ '_ \   
+| (__| | | | | (__|   <  __/ | | |_ 
+ \___|_| |_|_|\___|_|\_\___|_| |_(_)
+                                    
+                               _           _  _       _      _     _                       _                _  
+                              (_)_ __    _| || |_  __| | ___| |__ (_) __ _ _ __         __| | _____   _____| | 
+                 _____ _____  | | '_ \  |_  ..  _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ | 
+                |_____|_____| | | | | | |_      _| (_| |  __/ |_) | | (_| | | | |_____| (_| |  __/\ V /  __/ | 
+                              |_|_| |_|   |_||_|  \__,_|\___|_.__/|_|\__,_|_| |_|      \__,_|\___| \_/ \___|_| 
+                                                                                                               
diff --git a/externals/figlet/tests/res022.txt b/externals/figlet/tests/res022.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res022.txt
@@ -0,0 +1,1314 @@
+  __
+ / /
+/ / 
+\ \ 
+ \_\
+    
+    
+   (
+   |
+   |
+  _/
+ |__
+    
+   _
+  / 
+ | (
+  \_
+    
+    
+  __
+ / _
+ \__
+ |__
+    
+  _ 
+ | |
+ | '
+ | |
+ |_|
+    
+  _ 
+ | |
+ | |
+ |  
+ |_|
+    
+__  
+\ \ 
+ \ \
+ / /
+/_/ 
+    
+    
+   (
+   |
+   |
+  _/
+ |__
+    
+   _
+  / 
+ | (
+  \_
+    
+    
+  __
+ / _
+ \__
+ |__
+    
+  _ 
+ | |
+ | '
+ | |
+ |_|
+    
+  _ 
+ | |
+ | |
+ |  
+ |_|
+    
+    
+   /
+  / 
+ | |
+  \ 
+   \
+ _ 
+(_)
+| |
+| |
+|_|
+   
+    
+  _ 
+ | '
+ | |
+ |_|
+    
+   _
+  / 
+ | |
+ |  
+ |_|
+    
+ _ 
+| |
+| |
+| |
+|_|
+   
+    
+  _ 
+ | |
+ | |
+  \_
+    
+    
+ __ 
+ \ \
+  > 
+ /_/
+    
+   
+ _ 
+(_)
+ _ 
+(_)
+   
+    
+    
+   /
+  / 
+ /_/
+    
+    
+   _
+  / 
+ |  
+  \_
+    
+  _ 
+ | |
+ | _
+ | |
+  \_
+    
+    
+   _
+  / 
+ | (
+  \_
+    
+    
+    
+   /
+  / 
+ /_/
+    
+ _ 
+| |
+| |
+| |
+|_|
+   
+    
+   _
+  / 
+ | (
+  \_
+    
+    
+   _
+  / 
+ | (
+  \_
+  |_
+    
+  _ 
+ | '
+ | |
+ |_|
+    
+    
+   _
+  / 
+ | (
+  \_
+    
+  _ 
+ | |
+ | _
+ | |
+  \_
+    
+    
+   _
+  / 
+ | (
+  \_
+    
+  _ 
+ | |
+ | _
+ | |
+  \_
+    
+    
+   _
+  / 
+ |  
+  \_
+    
+   
+   
+   
+ _ 
+(_)
+   
+    
+   _
+  / 
+ | (
+  \_
+    
+__  
+\ \ 
+ \ \
+ / /
+/_/ 
+    
+    
+  __
+ / _
+ \__
+ |__
+    
+  _ 
+ | |
+ | '
+ | |
+ |_|
+    
+    
+    
+  __
+ |__
+    
+    
+    
+  _ 
+ | '
+ | |
+ |_|
+    
+    
+ __/
+ \  
+ /_ 
+   \
+    
+  __
+ / /
+/ / 
+\ \ 
+ \_\
+    
+    
+   (
+   |
+   |
+  _/
+ |__
+    
+   _
+  / 
+ | (
+  \_
+    
+    
+  __
+ / _
+ \__
+ |__
+    
+  _ 
+ | |
+ | '
+ | |
+ |_|
+    
+  _ 
+ | |
+ | |
+ |  
+ |_|
+    
+__  
+\ \ 
+ \ \
+ / /
+/_/ 
+    
+    
+   _
+  / 
+ | (
+  \_
+    
+    
+  _ 
+ | '
+ | |
+ | .
+ |_|
+    
+   _
+  / 
+ | (
+  \_
+    
+    
+   _
+  / 
+ | (
+  \_
+    
+  _ 
+ | |
+ | '
+ | |
+ |_|
+    
+    
+   _
+  / 
+ |  
+  \_
+    
+   
+ _ 
+(_)
+ _ 
+(_)
+   
+ _ 
+| |
+| |
+| |
+|_|
+   
+ _ 
+(_)
+| |
+| |
+|_|
+   
+    
+  _ 
+ | '
+ | |
+ |_|
+    
+    
+   _
+  / 
+ |  
+  \_
+    
+ _ 
+/ |
+| |
+| |
+|_|
+   
+  _ 
+ | |
+ | |
+ |__
+    
+    
+   
+ _ 
+(_)
+ _ 
+(_)
+   
+    
+  __
+ / _
+ \__
+ |__
+    
+    
+  _ 
+ | |
+ | |
+  \_
+  |_
+    
+  _ 
+ | '
+ | |
+ |_|
+    
+  _ 
+ | |
+ | _
+ | |
+  \_
+    
+    
+   _
+  / 
+ | (
+  \_
+    
+    
+ __ 
+ \ \
+  > 
+ /_/
+    
+    
+   _
+  / 
+ |  
+  \_
+    
+    
+  _ 
+ | '
+ | |
+ |_|
+    
+    
+  _ 
+ | '
+ | |
+ |_|
+    
+    
+   _
+  / 
+ | (
+  \_
+    
+    
+  _ 
+ | '
+ | |
+ |_|
+    
+    
+  _ 
+ | '
+ | |
+ |_|
+    
+    
+   _
+  / 
+ |  
+  \_
+    
+    
+   _
+  / 
+ | (
+  \_
+    
+    
+  _ 
+ | '
+ | |
+ |_|
+    
+    
+  _ 
+ | |
+ | |
+  \_
+    
+    
+  _ 
+ | '
+ | |
+ |_|
+    
+    
+   _
+  / 
+ |  
+  \_
+    
+    
+ __ 
+ \ \
+  > 
+ /_/
+    
+    
+  _ 
+ | '
+ | |
+ | .
+ |_|
+    
+   _
+  / 
+ |  
+  \_
+    
+    
+   _
+  / 
+ | (
+  \_
+    
+  _ 
+ | |
+ | _
+ | |
+  \_
+    
+    
+   _
+  / 
+ |  
+  \_
+    
+    
+   _
+  / 
+ | (
+  \_
+    
+  _ 
+ | |
+ | _
+ | |
+  \_
+    
+    
+   _
+  / 
+ | (
+  \_
+    
+  _ 
+ | |
+ | |
+ |  
+ |_|
+    
+    
+   _
+  / 
+ |  
+  \_
+    
+    
+  _ 
+ | '
+ | |
+ |_|
+    
+ _ 
+( )
+ \|
+   
+   
+   
+ __ 
+ \ \
+  | 
+   >
+  | 
+ /_/
+ _ 
+( )
+|/ 
+   
+   
+   
+  __
+ / /
+/ / 
+\ \ 
+ \_\
+    
+    
+   (
+   |
+   |
+  _/
+ |__
+    
+   _
+  / 
+ | (
+  \_
+    
+    
+  __
+ / _
+ \__
+ |__
+    
+  _ 
+ | |
+ | '
+ | |
+ |_|
+    
+  _ 
+ | |
+ | |
+ |  
+ |_|
+    
+__  
+\ \ 
+ \ \
+ / /
+/_/ 
+    
+    
+   _
+  / 
+ | (
+  \_
+    
+    
+  _ 
+ | '
+ | |
+ | .
+ |_|
+    
+   _
+  / 
+ | (
+  \_
+    
+    
+   _
+  / 
+ | (
+  \_
+    
+  _ 
+ | |
+ | '
+ | |
+ |_|
+    
+    
+   _
+  / 
+ |  
+  \_
+    
+   
+ _ 
+(_)
+ _ 
+(_)
+   
+ _ 
+| |
+| |
+| |
+|_|
+   
+ _ 
+(_)
+| |
+| |
+|_|
+   
+    
+  _ 
+ | '
+ | |
+ |_|
+    
+    
+   _
+  / 
+ |  
+  \_
+    
+ _ 
+/ |
+| |
+| |
+|_|
+   
+  _ 
+ | |
+ | |
+ |__
+    
+    
+   
+ _ 
+(_)
+ _ 
+(_)
+   
+ _ 
+( )
+ \|
+   
+   
+   
+ __ 
+ \ \
+  | 
+   >
+  | 
+ /_/
+ _ 
+( )
+|/ 
+   
+   
+   
+  __
+ / /
+/ / 
+\ \ 
+ \_\
+    
+    
+   (
+   |
+   |
+  _/
+ |__
+    
+   _
+  / 
+ | (
+  \_
+    
+    
+  __
+ / _
+ \__
+ |__
+    
+  _ 
+ | |
+ | '
+ | |
+ |_|
+    
+  _ 
+ | |
+ | |
+ |  
+ |_|
+    
+__  
+\ \ 
+ \ \
+ / /
+/_/ 
+    
+  _ 
+ | |
+ | _
+ | |
+  \_
+    
+  _ 
+ | |
+ | '
+ | |
+ |_|
+    
+    
+   _
+  / 
+ |  
+  \_
+    
+    
+  _ 
+ | '
+ | |
+ | .
+ |_|
+ _ 
+| |
+| |
+| |
+|_|
+   
+    
+   _
+  / 
+ | (
+  \_
+    
+  _ 
+ | |
+ | _
+ | |
+  \_
+    
+  _ 
+ | |
+ | _
+ | |
+  \_
+    
+  _ 
+ | |
+ | '
+ | |
+ |_|
+    
+ _ 
+(_)
+| |
+| |
+|_|
+   
+    
+   _
+  / 
+ | (
+  \_
+    
+  _ 
+ | |
+ | |
+ |  
+ |_|
+    
+    
+   _
+  / 
+ |  
+  \_
+    
+    
+  _ 
+ | '
+ | |
+ |_|
+    
+    
+  __
+ / _
+ \__
+ |__
+    
+  __
+ / /
+/ / 
+\ \ 
+ \_\
+    
+    
+   _
+  / 
+ | (
+  \_
+    
+    
+  __
+ / _
+ \__
+ |__
+    
+    
+  _ 
+ | |
+ | |
+  \_
+    
+   _
+  / 
+ | |
+ |  
+ |_|
+    
+   _
+  / 
+ | |
+ |  
+ |_|
+    
+ _ 
+(_)
+| |
+| |
+|_|
+   
+    
+   _
+  / 
+ |  
+  \_
+    
+ _ 
+| |
+| |
+| |
+|_|
+   
+    
+   _
+  / 
+ | (
+  \_
+    
+__  
+\ \ 
+ \ \
+ / /
+/_/ 
+    
+  _ 
+ | |
+ | _
+ | |
+  \_
+    
+  _ 
+ | |
+ | '
+ | |
+ |_|
+    
+    
+   _
+  / 
+ | (
+  \_
+    
+    
+  __
+ / _
+ \__
+ |__
+    
+    
+   _
+  / 
+ |  
+  \_
+    
+    
+   _
+  / 
+ | (
+  \_
+    
+    
+  _ 
+ | '
+ | |
+ |_|
+    
+    
+   _
+  / 
+ |  
+  \_
+    
+    
+  _ 
+ | '
+ | |
+ |_|
+    
+ _ 
+( )
+|/ 
+   
+   
+   
+  _ 
+ | |
+ | _
+ | |
+  \_
+    
+    
+  __
+ / _
+ \__
+ |__
+    
+  _ 
+ | |
+ | '
+ | |
+ |_|
+    
+    
+   _
+  / 
+ |  
+  \_
+    
+ _ 
+| |
+| |
+| |
+|_|
+   
+ _ 
+| |
+| |
+| |
+|_|
+   
+    
+  __
+ / _
+ \__
+ |__
+    
+    
+   _
+  / 
+ | (
+  \_
+    
+    
+  _ 
+ | '
+ | |
+ |_|
+    
+ _ 
+(_)
+| |
+| |
+|_|
+   
+    
+  _ 
+ | '
+ | |
+ | .
+ |_|
+  _ 
+ | |
+ | _
+ | |
+  \_
+    
+    
+  __
+ / _
+ \__
+ |__
+    
+  __
+ / /
+/ / 
+\ \ 
+ \_\
+    
+    
+   _
+  / 
+ |  
+  \_
+    
+    
+  _ 
+ | '
+ | |
+ |_|
+    
+ _ 
+(_)
+| |
+| |
+|_|
+   
+    
+   _
+  / 
+ | (
+  \_
+    
+  _ 
+ | |
+ | '
+ | |
+ |_|
+    
+__  
+\ \ 
+ \ \
+ / /
+/_/ 
+    
+  _ 
+ | |
+ | _
+ | |
+  \_
+    
+  _ 
+ | |
+ | '
+ | |
+ |_|
+    
+ _ 
+(_)
+| |
+| |
+|_|
+   
+    
+  __
+ / _
+ \__
+ |__
+    
+    
+ __ 
+ \ \
+  \ 
+   \
+    
+    
+   _
+  / 
+ | (
+  \_
+    
+    
+  __
+ / _
+ \__
+ |__
+    
+    
+  _ 
+ | '
+ | |
+ |_|
+    
+ _ 
+( )
+|/ 
+   
+   
+   
+  _ 
+ | |
+ | _
+ | |
+  \_
+    
+    
+   _
+  / 
+ | (
+  \_
+    
+  _ 
+ | |
+ | '
+ | |
+ |_|
+    
+ _ 
+(_)
+| |
+| |
+|_|
+   
+    
+   _
+  / 
+ | (
+  \_
+    
+  _ 
+ | |
+ | |
+ |  
+ |_|
+    
+    
+   _
+  / 
+ |  
+  \_
+    
+    
+  _ 
+ | '
+ | |
+ |_|
+    
+   
+   
+   
+ _ 
+(_)
+   
+    
+    
+    
+    
+    
+    
+    
+    
+  __
+ |__
+    
+    
+    
+    
+  __
+ |__
+    
+    
+ _ 
+(_)
+| |
+| |
+|_|
+   
+    
+  _ 
+ | '
+ | |
+ |_|
+    
+    
+  _|
+ |_ 
+ |_ 
+   |
+    
+    
+   _
+  / 
+ | (
+  \_
+    
+    
+   _
+  / 
+ |  
+  \_
+    
+  _ 
+ | |
+ | '
+ | |
+ |_.
+    
+ _ 
+(_)
+| |
+| |
+|_|
+   
+    
+   _
+  / 
+ | (
+  \_
+    
+    
+  _ 
+ | '
+ | |
+ |_|
+    
+    
+    
+  __
+ |__
+    
+    
+    
+   _
+  / 
+ | (
+  \_
+    
+    
+   _
+  / 
+ |  
+  \_
+    
+    
+ __ 
+ \ \
+  \ 
+   \
+    
+    
+   _
+  / 
+ |  
+  \_
+    
+ _ 
+| |
+| |
+| |
+|_|
+   
diff --git a/externals/figlet/tests/res023.txt b/externals/figlet/tests/res023.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res023.txt
@@ -0,0 +1,90 @@
+                          __  _           _     _   __  
+                         / / (_) ___  ___| |_  | |__\ \ 
+                        < <  | |/ _ \(_-<| ' \ | / / > >
+                         \_\_/ |\___//__/|_||_||_\_\/_/ 
+                           |__/                         
+    _           _     _     ____   _         __  _             _    __     _   
+   (_) ___  ___| |_  | |__ / __ \ (_) _ _   / _|| | _  _ __ __(_)  / /___ | |_ 
+   | |/ _ \(_-<| ' \ | / // / _` || || ' \ |  _|| || || |\ \ / _  / // -_)|  _|
+  _/ |\___//__/|_||_||_\_\\ \__,_||_||_||_||_|  |_| \_,_|/_\_\(_)/_/ \___| \__|
+ |__/                      \____/                                              
+        __ _                       _          _               _ __        _    
+  __   / /| | ___  __ _  _ _  ___ | |_  __ _ | |_  ___     __| |\ \   ___| |_  
+ / _| / / | |/ _ \/ _` || '_|/ _ \|  _|/ _` ||  _|/ -_) _ / _` | > > (_-<| ' \ 
+ \__|/_/  |_|\___/\__, ||_|  \___/ \__|\__,_| \__|\___|(_)\__,_|/_/  /__/|_||_|
+                  |___/                                                        
+                                  __  _           _     _   __  
+                ___  _ _   _/\_  / / (_) ___  ___| |_  | |__\ \ 
+               |___|| ' \  >  < < <  | |/ _ \(_-<| ' \ | / / > >
+                    |_||_|  \/   \_\_/ |\___//__/|_||_||_\_\/_/ 
+                                   |__/                         
+                              _          _   _  _              _  _ _  _ 
+        __ _  _ __  __ _  __ | |_   ___ (_) | |(_) _ _   ___  / || | |(_)
+       / _` || '_ \/ _` |/ _|| ' \ / -_) _  | || || ' \ / -_) | ||_  _|_ 
+       \__,_|| .__/\__,_|\__||_||_|\___|(_) |_||_||_||_|\___| |_|  |_|(_)
+             |_|                                                         
+                           _                                        
+            ___ _  _  _ _ | |_  __ _ __ __  ___  _ _  _ _  ___  _ _ 
+           (_-<| || || ' \|  _|/ _` |\ \ / / -_)| '_|| '_|/ _ \| '_|
+           /__/ \_, ||_||_|\__|\__,_|/_\_\ \___||_|  |_|  \___/|_|  
+                |__/                                                
+                                                               _            _ 
+   _ _   ___  __ _  _ _   _  _  _ _   ___ __ __ _ __  ___  __ | |_  ___  __| |
+  | ' \ / -_)/ _` || '_| | || || ' \ / -_)\ \ /| '_ \/ -_)/ _||  _|/ -_)/ _` |
+  |_||_|\___|\__,_||_|    \_,_||_||_|\___|/_\_\| .__/\___|\__| \__|\___|\__,_|
+                                               |_|                            
+     _         _                _ __    _    __  _           _     _   __  
+    | |_  ___ | |__ ___  _ _   ( )\ \  ( )  / / (_) ___  ___| |_  | |__\ \ 
+    |  _|/ _ \| / // -_)| ' \   \| | |_|/  < <  | |/ _ \(_-<| ' \ | / / > >
+     \__|\___/|_\_\\___||_||_|     | |      \_\_/ |\___//__/|_||_||_\_\/_/ 
+                                  /_/         |__/                         
+                        _          _   _  _              _  _ _  _   _ __    _ 
+  __ _  _ __  __ _  __ | |_   ___ (_) | |(_) _ _   ___  / || | |(_) ( )\ \  ( )
+ / _` || '_ \/ _` |/ _|| ' \ / -_) _  | || || ' \ / -_) | ||_  _|_   \| | |_|/ 
+ \__,_|| .__/\__,_|\__||_||_|\___|(_) |_||_||_||_|\___| |_|  |_|(_)     | |    
+       |_|                                                             /_/     
+       __  _           _     _   __    _    _                 _       _   
+      / / (_) ___  ___| |_  | |__\ \  | |_ | |_   ___   _ __ | | ___ | |_ 
+     < <  | |/ _ \(_-<| ' \ | / / > > |  _|| ' \ / -_) | '_ \| |/ _ \|  _|
+      \_\_/ |\___//__/|_||_||_\_\/_/   \__||_||_|\___| | .__/|_|\___/ \__|
+        |__/                                           |_|                
+                      _    _     _      _                  
+                     | |_ | |_  (_) __ | |__ ___  _ _   ___
+                     |  _|| ' \ | |/ _|| / // -_)| ' \ (_-<
+                      \__||_||_||_|\__||_\_\\___||_||_|/__/
+                                                           
+   __                  __   __  _       _     _ __    _    _                  
+  / / __ _  ___ _  _  / _| / _|(_) ___ | | __| |\ \  | |_ | |_   ___  ___ ___ 
+ < < / _` |(_-<| || ||  _||  _|| |/ -_)| |/ _` | > > |  _|| ' \ / _ \(_-</ -_)
+  \_\\__,_|/__/ \_,_||_|  |_|  |_|\___||_|\__,_|/_/   \__||_||_|\___//__/\___|
+                                                                              
+                                    _  _         _          _  _ 
+               __ _  _ _  ___  _ _ ( )| |_   ___| |_   ___ | || |
+              / _` || '_|/ -_)| ' \|/ |  _| (_-<| ' \ / -_)| || |
+              \__,_||_|  \___||_||_|   \__| /__/|_||_|\___||_||_|
+                                                                 
+                      _        _          __           _      _    __  
+         ___ __  _ _ (_) _ __ | |_  ___  / / ___  _ _ (_) __ | |_  \ \ 
+        (_-</ _|| '_|| || '_ \|  _|(_-< < < / -_)| '_|| |/ _|| ' \  > >
+        /__/\__||_|  |_|| .__/ \__|/__/  \_\\___||_|  |_|\__||_||_|/_/ 
+                        |_|                                            
+                _    _     _                              _  _   
+               | |_ | |_  (_) ___ __ __ __ __ _  ___ _ _ ( )| |_ 
+               |  _|| ' \ | |(_-< \ V  V // _` |(_-<| ' \|/ |  _|
+                \__||_||_||_|/__/  \_/\_/ \__,_|/__/|_||_|   \__|
+                                                                 
+                           _     _      _                 
+                       __ | |_  (_) __ | |__ ___  _ _     
+                      / _|| ' \ | |/ _|| / // -_)| ' \  _ 
+                      \__||_||_||_|\__||_\_\\___||_||_|(_)
+                                                          
+                                                  _       
+                                       ___  ___  (_) _ _  
+                                      |___||___| | || ' \ 
+                                                 |_||_||_|
+                                                          
+        _ _       _       _     _                     _                 _  
+      _| | |_  __| | ___ | |__ (_) __ _  _ _  ___  __| | ___ __ __ ___ | | 
+     |_  .  _|/ _` |/ -_)| '_ \| |/ _` || ' \|___|/ _` |/ -_)\ V // -_)| | 
+     |_     _|\__,_|\___||_.__/|_|\__,_||_||_|    \__,_|\___| \_/ \___||_| 
+       |_|_|                                                               
diff --git a/externals/figlet/tests/res024.txt b/externals/figlet/tests/res024.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res024.txt
@@ -0,0 +1,39 @@
+fonts/646-ca.flc
+fonts/646-ca2.flc
+fonts/646-cn.flc
+fonts/646-cu.flc
+fonts/646-de.flc
+fonts/646-dk.flc
+fonts/646-es.flc
+fonts/646-es2.flc
+fonts/646-fr.flc
+fonts/646-gb.flc
+fonts/646-hu.flc
+fonts/646-irv.flc
+fonts/646-it.flc
+fonts/646-jp.flc
+fonts/646-kr.flc
+fonts/646-no.flc
+fonts/646-no2.flc
+fonts/646-pt.flc
+fonts/646-pt2.flc
+fonts/646-se.flc
+fonts/646-se2.flc
+fonts/646-yu.flc
+fonts/8859-2.flc
+fonts/8859-3.flc
+fonts/8859-4.flc
+fonts/8859-5.flc
+fonts/8859-7.flc
+fonts/8859-8.flc
+fonts/8859-9.flc
+fonts/frango.flc
+fonts/hz.flc
+fonts/ilhebrew.flc
+fonts/jis0201.flc
+fonts/koi8r.flc
+fonts/moscow.flc
+fonts/upper.flc
+fonts/ushebrew.flc
+fonts/uskata.flc
+fonts/utf8.flc
diff --git a/externals/figlet/tests/res025.txt b/externals/figlet/tests/res025.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res025.txt
@@ -0,0 +1,8 @@
+##########       ##     #                        #   
+      ###      ##   ##########   #######  ########## 
+     #       ## #   #        #      #           ##   
+    #      ##   #          ##       #         ## #   
+   #            #        ##         #       ##   #   
+  #             #      ##           #     ##    ##   
+ #              #    ##        ##########        #   
+                                                     
diff --git a/externals/figlet/tests/res026.txt b/externals/figlet/tests/res026.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res026.txt
@@ -0,0 +1,8 @@
+##########       ##     #                        #   
+      ###      ##   ##########   #######  ########## 
+     #       ## #   #        #      #           ##   
+    #      ##   #          ##       #         ## #   
+   #            #        ##         #       ##   #   
+  #             #      ##           #     ##    ##   
+ #              #    ##        ##########        #   
+                                                     
diff --git a/externals/figlet/tests/res027.txt b/externals/figlet/tests/res027.txt
new file mode 100644
--- /dev/null
+++ b/externals/figlet/tests/res027.txt
@@ -0,0 +1,430 @@
+     .--.   .--.  .---.  .---.    .-'''-.     ,-----.         .-./`)           
+     |  | _/  /   |   |  |_ _|   / _     \  .'  .-,  '.       \ '_ .') _.--``) 
+     | (`' ) /    |   |  ( ' )  (`' )/`--' / ,-.|  \ _ \     (_ (_) _)/_ _.-`  
+     |(_ ()_)     |   '-(_{;}_)(_ o _).   ;  \  '_ /  | :      / .  \/( ' )    
+     | (_,_)   __ |      (_,_)  (_,_). '. |  _`,/ \ _/  | ___  |-'`|((_{;}_)   
+     |  |\ \  |  || _ _--.   | .---.  \  :: (  '\_/ \   ;|   | |   ' \(_,_)    
+     |  | \ `'   /|( ' ) |   | \    `-'  | \ `"/  \  ) / |   `-'  /   \   `-.  
+     |  |  \    / (_{;}_)|   |  \       /   '. \_/``".'   \      /     `---._) 
+     `--'   `'-'  '(_,_) '---'   `-...-'      '-----'      `-..-'              
+                                                                               
+                                                                               
+                                                                    (``--._    
+                                                                     `-._ _\   
+                                                                       ( ` )\  
+                                                                      (_{;}_)) 
+                                                                       (_,_)/  
+                                                                     .-'   /   
+                                                                    (_.---'    
+                                                                               
+                                                                               
+   _-_'''-.  .--.   .--.  .---.  .---.    .-'''-.     ,-----.         .-./`)   
+  ( ' )    \ |  | _/  /   |   |  |_ _|   / _     \  .'  .-,  '.       \ '_ .') 
+ (_{;}_)    '| (`' ) /    |   |  ( ' )  (`' )/`--' / ,-.|  \ _ \     (_ (_) _) 
+ .(_,_)--.  ||(_ ()_)     |   '-(_{;}_)(_ o _).   ;  \  '_ /  | :      / .  \  
+ |   |   /  || (_,_)   __ |      (_,_)  (_,_). '. |  _`,/ \ _/  | ___  |-'`|   
+ '   |      /|  |\ \  |  || _ _--.   | .---.  \  :: (  '\_/ \   ;|   | |   '   
+ \    \____/ |  | \ `'   /|( ' ) |   | \    `-'  | \ `"/  \  ) / |   `-'  /    
+  \        / |  |  \    / (_{;}_)|   |  \       /   '. \_/``".'   \      /     
+   `'-...-'  `--'   `'-'  '(_,_) '---'   `-...-'      '-----'      `-..-'      
+                                                                               
+        _ _  _____     __   ___    _   .---.      ________ ,---.   .--..-./`)  
+       ( ` ) \   _\   /  /.'   |  | |  | ,_|     |        ||    \  |  |\ .-.') 
+      (_{;}_).-./ ). /  ' |   .'  | |,-./  )     |   .----'|  ,  \ |  |/ `-' \ 
+       (_,_) \ '_ .') .'  .'  '_  | |\  '_ '`)   |  _|____ |  |\_ \|  | `-'`"` 
+            (_ (_) _) '   '   ( \.-.| > (_)  )   |_( )_   ||  _( )_\  | .---.  
+         _    /    \   \  ' (`. _` /|(  .  .-'   (_ o._)__|| (_ o _)  | |   |  
+       _( )_  `-'`-'    \ | (_ (_) _) `-'`-'|___ |(_,_)    |  (_,_)\  | |   |  
+      (_ o _)/  /   \    \ \ /  . \ /  |        \|   |     |  |    |  | |   |  
+       (_,_)'--'     '----' ``-'`-''   `--------`'---'     '--'    '--' '---'  
+                                                                               
+             .---.           _ _     _______ ,---------.    .-''-.       _ _   
+             | ,_|          ( ' )   /   __  \\          \ .'_ _   \     ( ' )  
+           ,-./  )         (_{;}_) | ,_/  \__)`--.  ,---'/ ( ` )   '   (_{;}_) 
+           \  '_ '`)        (_,_),-./  )         |   \  . (_ o _)  |    (_,_)  
+            > (_)  )        //   \  '_ '`)       :_ _:  |  (_,_)___|    //     
+           (  .  .-'       //     > (_)  )  __   (_I_)  '  \   .---.   //      
+            `-'`-'|___  ,-'/     (  .  .-'_/  ) (_(=)_)  \  `-'    /,-'/       
+             |        \)  (       `-'`-'     /   (_I_)    \       /)  (        
+             `--------``---'        `._____.'    '---'     `'-..-' `---'       
+                                                                               
+    ____   ,---------.    ,-----.    .-------.      .-_'''-.       ,-----.     
+  .'  __ `.\          \ .'  .-,  '.  |  _ _   \    '_( )_   \    .'  .-,  '.   
+ /   '  \  \`--.  ,---'/ ,-.|  \ _ \ | ( ' )  |   |(_ o _)|  '  / ,-.|  \ _ \  
+ |___|  /  |   |   \  ;  \  '_ /  | :|(_ o _) /   . (_,_)/___| ;  \  '_ /  | : 
+    _.-`   |   :_ _:  |  _`,/ \ _/  || (_,_).' __ |  |  .-----.|  _`,/ \ _/  | 
+ .'   _    |   (_I_)  : (  '\_/ \   ;|  |\ \  |  |'  \  '-   .': (  '\_/ \   ; 
+ |  _( )_  |  (_(=)_)  \ `"/  \  ) / |  | \ `'   / \  `-'`   |  \ `"/  \  ) /  
+ \ (_ o _) /   (_I_)    '. \_/``".'  |  |  \    /   \        /   '. \_/``".'   
+  '.(_,_).'    '---'      '-----'    ''-'   `'-'     `'-...-'      '-----'     
+                                                                               
+     .---.  .---.    .-'''-.             ______            .-''-. ,---------.  
+     |   |  |_ _|   / _     \ (``--._   |    _ `''.      .'_ _   \\          \ 
+     |   |  ( ' )  (`' )/`--'  `-._ _\  | _ | ) _  \    / ( ` )   '`--.  ,---' 
+     |   '-(_{;}_)(_ o _).       ( ` )\ |( ''_'  ) |   . (_ o _)  |   |   \    
+     |      (_,_)  (_,_). '.    (_{;}_))| . (_) `. |   |  (_,_)___|   :_ _:    
+     | _ _--.   | .---.  \  :    (_,_)/ |(_    ._) '_ _'  \   .---.   (_I_)    
+     |( ' ) |   | \    `-'  |  .-'   /  |  (_.\.' /( ` )\  `-'    /  (_(=)_)   
+     (_{;}_)|   |  \       /  (_.---'   |       .'(_{;}_)\       /    (_I_)    
+     '(_,_) '---'   `-...-'             '-----'`   (_,_)  `'-..-'     '---'    
+                                                                               
+                                                    ,---.   .--.               
+                                            .-,     |    \  |  |               
+                                         ,-.|  \ _  |  ,  \ |  |               
+                                         \  '_ /  | |  |\_ \|  |  _ _    _ _   
+                                         _`,/ \ _/  |  _( )_\  | ( ' )--( ' )  
+                                        (  '\_/ \   | (_ o _)  |(_{;}_)(_{;}_) 
+                                         `"/  \  )  |  (_,_)\  | (_,_)--(_,_)  
+                                           \_/``"   |  |    |  |               
+                                                    '--'    '--'               
+                                                                               
+     .--.   .--.  .---.  .---.    .-'''-.     ,-----.         .-./`)           
+     |  | _/  /   |   |  |_ _|   / _     \  .'  .-,  '.       \ '_ .') _.--``) 
+     | (`' ) /    |   |  ( ' )  (`' )/`--' / ,-.|  \ _ \     (_ (_) _)/_ _.-`  
+     |(_ ()_)     |   '-(_{;}_)(_ o _).   ;  \  '_ /  | :      / .  \/( ' )    
+     | (_,_)   __ |      (_,_)  (_,_). '. |  _`,/ \ _/  | ___  |-'`|((_{;}_)   
+     |  |\ \  |  || _ _--.   | .---.  \  :: (  '\_/ \   ;|   | |   ' \(_,_)    
+     |  | \ `'   /|( ' ) |   | \    `-'  | \ `"/  \  ) / |   `-'  /   \   `-.  
+     |  |  \    / (_{;}_)|   |  \       /   '. \_/``".'   \      /     `---._) 
+     `--'   `'-'  '(_,_) '---'   `-...-'      '-----'      `-..-'              
+                                                                               
+                                                                               
+                                                                    (``--._    
+                                                                     `-._ _\   
+                                                                       ( ` )\  
+                                                                      (_{;}_)) 
+                                                                       (_,_)/  
+                                                                     .-'   /   
+                                                                    (_.---'    
+                                                                               
+                                                                               
+   _ _     .-''-.  .---.  .---.     _______      ____    .-------.    ____     
+  ( ` )  .'_ _   \ |   |  |_ _|    /   __  \   .'  __ `. \  _(`)_ \ .'  __ `.  
+ (_{;}_)/ ( ` )   '|   |  ( ' )   | ,_/  \__) /   '  \  \| (_ o._)|/   '  \  \ 
+  (_,_). (_ o _)  ||   '-(_{;}_),-./  )       |___|  /  ||  (_,_) /|___|  /  | 
+       |  (_,_)___||      (_,_) \  '_ '`)        _.-`   ||   '-.-'    _.-`   | 
+    _  '  \   .---.| _ _--.   |  > (_)  )  __ .'   _    ||   |     .'   _    | 
+  _( )_ \  `-'    /|( ' ) |   | (  .  .-'_/  )|  _( )_  ||   |     |  _( )_  | 
+ (_ o _) \       / (_{;}_)|   |  `-'`-'     / \ (_ o _) //   )     \ (_ o _) / 
+  (_,_)   `'-..-'  '(_,_) '---'    `._____.'   '.(_,_).' `---'      '.(_,_).'  
+                                                                               
+       _ _        ,---.     ,---.      .-''-.  ,---.   .--..-./`)   .---.      
+      ( ` )      /,--.|    /_   |    .'_ _   \ |    \  |  |\ .-.')  | ,_|      
+     (_{;}_)    //_  ||      ,_ |   / ( ` )   '|  ,  \ |  |/ `-' \,-./  )      
+      (_,_)    /_( )_||  ,-./  )|  . (_ o _)  ||  |\_ \|  | `-'`"`\  '_ '`)    
+              /(_ o _)|  \  '_ '`) |  (_,_)___||  _( )_\  | .---.  > (_)  )    
+        _    / /(_,_)||_  > (_)  ) '  \   .---.| (_ o _)  | |   | (  .  .-'    
+      _( )_ /  `-----' ||(  .  .-'  \  `-'    /|  (_,_)\  | |   |  `-'`-'|___  
+     (_ o _)`-------|||-' `-'`-'|    \       / |  |    |  | |   |   |        \ 
+      (_,_)         '-'     '---'     `'-..-'  '--'    '--' '---'   `--------` 
+                                                                               
+       _____     __    ____   ,---------. ,---.   .--.   ____     __  .-'''-.  
+       \   _\   /  / .'  __ `.\          \|    \  |  |   \   \   /  // _     \ 
+       .-./ ). /  ' /   '  \  \`--.  ,---'|  ,  \ |  |    \  _. /  '(`' )/`--' 
+       \ '_ .') .'  |___|  /  |   |   \   |  |\_ \|  |     _( )_ .'(_ o _).    
+      (_ (_) _) '      _.-`   |   :_ _:   |  _( )_\  | ___(_ o _)'  (_,_). '.  
+        /    \   \  .'   _    |   (_I_)   | (_ o _)  ||   |(_,_)'  .---.  \  : 
+        `-'`-'    \ |  _( )_  |  (_(=)_)  |  (_,_)\  ||   `-'  /   \    `-'  | 
+       /  /   \    \\ (_ o _) /   (_I_)   |  |    |  | \      /     \       /  
+      '--'     '----''.(_,_).'    '---'   '--'    '--'  `-..-'       `-...-'   
+                                                                               
+            .-------.        ,-----.    .-------.    .-------.        .-''-.   
+            |  _ _   \     .'  .-,  '.  |  _ _   \   |  _ _   \     .'_ _   \  
+            | ( ' )  |    / ,-.|  \ _ \ | ( ' )  |   | ( ' )  |    / ( ` )   ' 
+            |(_ o _) /   ;  \  '_ /  | :|(_ o _) /   |(_ o _) /   . (_ o _)  | 
+            | (_,_).' __ |  _`,/ \ _/  || (_,_).' __ | (_,_).' __ |  (_,_)___| 
+            |  |\ \  |  |: (  '\_/ \   ;|  |\ \  |  ||  |\ \  |  |'  \   .---. 
+            |  | \ `'   / \ `"/  \  ) / |  | \ `'   /|  | \ `'   / \  `-'    / 
+            |  |  \    /   '. \_/``".'  |  |  \    / |  |  \    /   \       /  
+            ''-'   `'-'      '-----'    ''-'   `'-'  ''-'   `'-'     `'-..-'   
+                                                                               
+                              .-------.       ____        .-''-.  ,---.   .--. 
+                              |  _ _   \    .'  __ `.   .'_ _   \ |    \  |  | 
+                              | ( ' )  |   /   '  \  \ / ( ` )   '|  ,  \ |  | 
+                              |(_ o _) /   |___|  /  |. (_ o _)  ||  |\_ \|  | 
+                              | (_,_).' __    _.-`   ||  (_,_)___||  _( )_\  | 
+                              |  |\ \  |  |.'   _    |'  \   .---.| (_ o _)  | 
+                              |  | \ `'   /|  _( )_  | \  `-'    /|  (_,_)\  | 
+                              |  |  \    / \ (_ o _) /  \       / |  |    |  | 
+                              ''-'   `'-'   '.(_,_).'    `'-..-'  '--'    '--' 
+                                                                               
+              .-''-.  .-------. _____     __   .-''-.  ,---.   .--.  ___    _  
+            .'_ _   \ \  _(`)_ \\   _\   /  /.'_ _   \ |    \  |  |.'   |  | | 
+           / ( ` )   '| (_ o._)|.-./ ). /  '/ ( ` )   '|  ,  \ |  ||   .'  | | 
+          . (_ o _)  ||  (_,_) /\ '_ .') .'. (_ o _)  ||  |\_ \|  |.'  '_  | | 
+          |  (_,_)___||   '-.-'(_ (_) _) ' |  (_,_)___||  _( )_\  |'   ( \.-.| 
+          '  \   .---.|   |      /    \   \'  \   .---.| (_ o _)  |' (`. _` /| 
+           \  `-'    /|   |      `-'`-'    \\  `-'    /|  (_,_)\  || (_ (_) _) 
+            \       / /   )     /  /   \    \\       / |  |    |  | \ /  . \ / 
+             `'-..-'  `---'    '--'     '----'`'-..-'  '--'    '--'  ``-'`-''  
+                                                                               
+                                ______         .-''-. ,---------.   _______    
+                               |    _ `''.   .'_ _   \\          \ /   __  \   
+                               | _ | ) _  \ / ( ` )   '`--.  ,---'| ,_/  \__)  
+                               |( ''_'  ) |. (_ o _)  |   |   \ ,-./  )        
+                               | . (_) `. ||  (_,_)___|   :_ _: \  '_ '`)      
+                               |(_    ._) ''  \   .---.   (_I_)  > (_)  )  __  
+                               |  (_.\.' /  \  `-'    /  (_(=)_)(  .  .-'_/  ) 
+                               |       .'    \       /    (_I_)  `-'`-'     /  
+                               '-----'`       `'-..-'     '---'    `._____.'   
+                                                                               
+                ,---.   .--.    .-''-.  .--.   .--.      ,-----.  ,---------.  
+                |    \  |  |  .'_ _   \ |  | _/  /     .'  .-,  '.\          \ 
+                |  ,  \ |  | / ( ` )   '| (`' ) /     / ,-.|  \ _ \`--.  ,---' 
+                |  |\_ \|  |. (_ o _)  ||(_ ()_)     ;  \  '_ /  | :  |   \    
+                |  _( )_\  ||  (_,_)___|| (_,_)   __ |  _`,/ \ _/  |  :_ _:    
+                | (_ o _)  |'  \   .---.|  |\ \  |  |: (  '\_/ \   ;  (_I_)    
+                |  (_,_)\  | \  `-'    /|  | \ `'   / \ `"/  \  ) /  (_(=)_)   
+                |  |    |  |  \       / |  |  \    /   '. \_/``".'    (_I_)    
+                '--'    '--'   `'-..-'  `--'   `'-'      '-----'      '---'    
+                                                                               
+                                                            _ _ .----,   _ _   
+                                                           ( ' )`-,  (  (_I_)  
+                                                          (_{;}_) _\_ \(_(=)_) 
+                                                           (_,_) ( ' ) \(_I_)  
+                                                                (_{;}_) ( )/   
+                                                                 (_,_) /       
+                                                                   /  /        
+                                                                .-`  (         
+                                                                '----`         
+                                                                               
+     .--.   .--.  .---.  .---.    .-'''-.     ,-----.         .-./`)           
+     |  | _/  /   |   |  |_ _|   / _     \  .'  .-,  '.       \ '_ .') _.--``) 
+     | (`' ) /    |   |  ( ' )  (`' )/`--' / ,-.|  \ _ \     (_ (_) _)/_ _.-`  
+     |(_ ()_)     |   '-(_{;}_)(_ o _).   ;  \  '_ /  | :      / .  \/( ' )    
+     | (_,_)   __ |      (_,_)  (_,_). '. |  _`,/ \ _/  | ___  |-'`|((_{;}_)   
+     |  |\ \  |  || _ _--.   | .---.  \  :: (  '\_/ \   ;|   | |   ' \(_,_)    
+     |  | \ `'   /|( ' ) |   | \    `-'  | \ `"/  \  ) / |   `-'  /   \   `-.  
+     |  |  \    / (_{;}_)|   |  \       /   '. \_/``".'   \      /     `---._) 
+     `--'   `'-'  '(_,_) '---'   `-...-'      '-----'      `-..-'              
+                                                                               
+                                                                               
+                                                                    (``--._    
+                                                                     `-._ _\   
+                                                                       ( ` )\  
+                                                                      (_{;}_)) 
+                                                                       (_,_)/  
+                                                                     .-'   /   
+                                                                    (_.---'    
+                                                                               
+                                                                               
+   _ _     .-''-.  .---.  .---.     _______      ____    .-------.    ____     
+  ( ` )  .'_ _   \ |   |  |_ _|    /   __  \   .'  __ `. \  _(`)_ \ .'  __ `.  
+ (_{;}_)/ ( ` )   '|   |  ( ' )   | ,_/  \__) /   '  \  \| (_ o._)|/   '  \  \ 
+  (_,_). (_ o _)  ||   '-(_{;}_),-./  )       |___|  /  ||  (_,_) /|___|  /  | 
+       |  (_,_)___||      (_,_) \  '_ '`)        _.-`   ||   '-.-'    _.-`   | 
+    _  '  \   .---.| _ _--.   |  > (_)  )  __ .'   _    ||   |     .'   _    | 
+  _( )_ \  `-'    /|( ' ) |   | (  .  .-'_/  )|  _( )_  ||   |     |  _( )_  | 
+ (_ o _) \       / (_{;}_)|   |  `-'`-'     / \ (_ o _) //   )     \ (_ o _) / 
+  (_,_)   `'-..-'  '(_,_) '---'    `._____.'   '.(_,_).' `---'      '.(_,_).'  
+                                                                               
+       _ _        ,---.     ,---.      .-''-.  ,---.   .--..-./`)   .---.      
+      ( ` )      /,--.|    /_   |    .'_ _   \ |    \  |  |\ .-.')  | ,_|      
+     (_{;}_)    //_  ||      ,_ |   / ( ` )   '|  ,  \ |  |/ `-' \,-./  )      
+      (_,_)    /_( )_||  ,-./  )|  . (_ o _)  ||  |\_ \|  | `-'`"`\  '_ '`)    
+              /(_ o _)|  \  '_ '`) |  (_,_)___||  _( )_\  | .---.  > (_)  )    
+        _    / /(_,_)||_  > (_)  ) '  \   .---.| (_ o _)  | |   | (  .  .-'    
+      _( )_ /  `-----' ||(  .  .-'  \  `-'    /|  (_,_)\  | |   |  `-'`-'|___  
+     (_ o _)`-------|||-' `-'`-'|    \       / |  |    |  | |   |   |        \ 
+      (_,_)         '-'     '---'     `'-..-'  '--'    '--' '---'   `--------` 
+                                                                               
+                                                            _ _ .----,   _ _   
+                                                           ( ' )`-,  (  (_I_)  
+                                                          (_{;}_) _\_ \(_(=)_) 
+                                                           (_,_) ( ' ) \(_I_)  
+                                                                (_{;}_) ( )/   
+                                                                 (_,_) /       
+                                                                   /  /        
+                                                                .-`  (         
+                                                                '----`         
+                                                                               
+     .--.   .--.  .---.  .---.    .-'''-.     ,-----.         .-./`)           
+     |  | _/  /   |   |  |_ _|   / _     \  .'  .-,  '.       \ '_ .') _.--``) 
+     | (`' ) /    |   |  ( ' )  (`' )/`--' / ,-.|  \ _ \     (_ (_) _)/_ _.-`  
+     |(_ ()_)     |   '-(_{;}_)(_ o _).   ;  \  '_ /  | :      / .  \/( ' )    
+     | (_,_)   __ |      (_,_)  (_,_). '. |  _`,/ \ _/  | ___  |-'`|((_{;}_)   
+     |  |\ \  |  || _ _--.   | .---.  \  :: (  '\_/ \   ;|   | |   ' \(_,_)    
+     |  | \ `'   /|( ' ) |   | \    `-'  | \ `"/  \  ) / |   `-'  /   \   `-.  
+     |  |  \    / (_{;}_)|   |  \       /   '. \_/``".'   \      /     `---._) 
+     `--'   `'-'  '(_,_) '---'   `-...-'      '-----'      `-..-'              
+                                                                               
+                                   .-''-.  .---.  .---.,---------.             
+                                 .'_ _   \ |   |  |_ _|\          \ (``--._    
+                                / ( ` )   '|   |  ( ' ) `--.  ,---'  `-._ _\   
+                               . (_ o _)  ||   '-(_{;}_)   |   \       ( ` )\  
+                               |  (_,_)___||      (_,_)    :_ _:      (_{;}_)) 
+                               '  \   .---.| _ _--.   |    (_I_)       (_,_)/  
+                                \  `-'    /|( ' ) |   |   (_(=)_)    .-'   /   
+                                 \       / (_{;}_)|   |    (_I_)    (_.---'    
+                                  `'-..-'  '(_,_) '---'    '---'               
+                                                                               
+                              ,---------.    ,-----.      .---.     .-------.  
+                              \          \ .'  .-,  '.    | ,_|     \  _(`)_ \ 
+                               `--.  ,---'/ ,-.|  \ _ \ ,-./  )     | (_ o._)| 
+                                  |   \  ;  \  '_ /  | :\  '_ '`)   |  (_,_) / 
+                                  :_ _:  |  _`,/ \ _/  | > (_)  )   |   '-.-'  
+                                  (_I_)  : (  '\_/ \   ;(  .  .-'   |   |      
+                                 (_(=)_)  \ `"/  \  ) /  `-'`-'|___ |   |      
+                                  (_I_)    '. \_/``".'    |        \/   )      
+                                  '---'      '-----'      `--------``---'      
+                                                                               
+             .-''-.  .--.   .--.      _______  .-./`) .---.  .---.,---------.  
+           .'_ _   \ |  | _/  /      /   __  \ \ .-.')|   |  |_ _|\          \ 
+          / ( ` )   '| (`' ) /      | ,_/  \__)/ `-' \|   |  ( ' ) `--.  ,---' 
+         . (_ o _)  ||(_ ()_)     ,-./  )       `-'`"`|   '-(_{;}_)   |   \    
+         |  (_,_)___|| (_,_)   __ \  '_ '`)     .---. |      (_,_)    :_ _:    
+         '  \   .---.|  |\ \  |  | > (_)  )  __ |   | | _ _--.   |    (_I_)    
+          \  `-'    /|  | \ `'   /(  .  .-'_/  )|   | |( ' ) |   |   (_(=)_)   
+           \       / |  |  \    /  `-'`-'     / |   | (_{;}_)|   |    (_I_)    
+            `'-..-'  `--'   `'-'     `._____.'  '---' '(_,_) '---'    '---'    
+                                                                               
+                                                          .-'''-. ,---.   .--. 
+                                                         / _     \|    \  |  | 
+                                                        (`' )/`--'|  ,  \ |  | 
+                                                       (_ o _).   |  |\_ \|  | 
+                                                        (_,_). '. |  _( )_\  | 
+                                                       .---.  \  :| (_ o _)  | 
+                                                       \    `-'  ||  (_,_)\  | 
+                                                        \       / |  |    |  | 
+                                                         `-...-'  '--'    '--' 
+                                                                               
+        .-./`)  ________  ________   ___    _    .-'''-.    ____               
+        \ .-.')|        ||        |.'   |  | |  / _     \ .'  __ `.    _.--``) 
+        / `-' \|   .----'|   .----'|   .'  | | (`' )/`--'/   '  \  \  /_ _.-`  
+         `-'`"`|  _|____ |  _|____ .'  '_  | |(_ o _).   |___|  /  | /( ' )    
+         .---. |_( )_   ||_( )_   |'   ( \.-.| (_,_). '.    _.-`   |((_{;}_)   
+         |   | (_ o._)__|(_ o._)__|' (`. _` /|.---.  \  :.'   _    | \(_,_)    
+         |   | |(_,_)    |(_,_)    | (_ (_) _)\    `-'  ||  _( )_  |  \   `-.  
+         |   | |   |     |   |      \ /  . \ / \       / \ (_ o _) /   `---._) 
+         '---' '---'     '---'       ``-'`-''   `-...-'   '.(_,_).'            
+                                                                               
+                                             ______       .---.       .-''-.   
+                                  (``--._   |    _ `''.   | ,_|     .'_ _   \  
+                                   `-._ _\  | _ | ) _  \,-./  )    / ( ` )   ' 
+                                     ( ` )\ |( ''_'  ) |\  '_ '`) . (_ o _)  | 
+                                    (_{;}_))| . (_) `. | > (_)  ) |  (_,_)___| 
+                                     (_,_)/ |(_    ._) '(  .  .-' '  \   .---. 
+                                   .-'   /  |  (_.\.' /  `-'`-'|___\  `-'    / 
+                                  (_.---'   |       .'    |        \\       /  
+                                            '-----'`      `--------` `'-..-'   
+                                                                               
+                    .-''-.     .-'''-.     ,-----.    .---.  .---.,---------.  
+                  .'_ _   \   / _     \  .'  .-,  '.  |   |  |_ _|\          \ 
+                 / ( ` )   ' (`' )/`--' / ,-.|  \ _ \ |   |  ( ' ) `--.  ,---' 
+                . (_ o _)  |(_ o _).   ;  \  '_ /  | :|   '-(_{;}_)   |   \    
+                |  (_,_)___| (_,_). '. |  _`,/ \ _/  ||      (_,_)    :_ _:    
+                '  \   .---..---.  \  :: (  '\_/ \   ;| _ _--.   |    (_I_)    
+                 \  `-'    /\    `-'  | \ `"/  \  ) / |( ' ) |   |   (_(=)_)   
+                  \       /  \       /   '. \_/``".'  (_{;}_)|   |    (_I_)    
+                   `'-..-'    `-...-'      '-----'    '(_,_) '---'    '---'    
+                                                                               
+           ,---------.   _ _  ,---.   .--.    .-''-.  .-------.       ____     
+           \          \ ( ' ) |    \  |  |  .'_ _   \ |  _ _   \    .'  __ `.  
+            `--.  ,---'(_{;}_)|  ,  \ |  | / ( ` )   '| ( ' )  |   /   '  \  \ 
+               |   \    (_,_) |  |\_ \|  |. (_ o _)  ||(_ o _) /   |___|  /  | 
+               :_ _:          |  _( )_\  ||  (_,_)___|| (_,_).' __    _.-`   | 
+               (_I_)          | (_ o _)  |'  \   .---.|  |\ \  |  |.'   _    | 
+              (_(=)_)         |  (_,_)\  | \  `-'    /|  | \ `'   /|  _( )_  | 
+               (_I_)          |  |    |  |  \       / |  |  \    / \ (_ o _) / 
+               '---'          '--'    '--'   `'-..-'  ''-'   `'-'   '.(_,_).'  
+                                                                               
+                        .---.     .---.       .-''-.  .---.  .---.    .-'''-.  
+                        | ,_|     | ,_|     .'_ _   \ |   |  |_ _|   / _     \ 
+                      ,-./  )   ,-./  )    / ( ` )   '|   |  ( ' )  (`' )/`--' 
+                      \  '_ '`) \  '_ '`) . (_ o _)  ||   '-(_{;}_)(_ o _).    
+                       > (_)  )  > (_)  ) |  (_,_)___||      (_,_)  (_,_). '.  
+                      (  .  .-' (  .  .-' '  \   .---.| _ _--.   | .---.  \  : 
+                       `-'`-'|___`-'`-'|___\  `-'    /|( ' ) |   | \    `-'  | 
+                        |        \|        \\       / (_{;}_)|   |  \       /  
+                        `--------``--------` `'-..-'  '(_,_) '---'   `-...-'   
+                                                                               
+   .-'''-. ,---------. .-------. .-./`) .-------.        _______      .-'''-.  
+  / _     \\          \\  _(`)_ \\ .-.')|  _ _   \      /   __  \    / _     \ 
+ (`' )/`--' `--.  ,---'| (_ o._)|/ `-' \| ( ' )  |     | ,_/  \__)  (`' )/`--' 
+(_ o _).       |   \   |  (_,_) / `-'`"`|(_ o _) /   ,-./  )       (_ o _).    
+ (_,_). '.     :_ _:   |   '-.-'  .---. | (_,_).' __ \  '_ '`)      (_,_). '.  
+.---.  \  :    (_I_)   |   |      |   | |  |\ \  |  | > (_)  )  __ .---.  \  : 
+\    `-'  |   (_(=)_)  |   |      |   | |  | \ `'   /(  .  .-'_/  )\    `-'  | 
+ \       /     (_I_)   /   )      |   | |  |  \    /  `-'`-'     /  \       /  
+  `-...-'      '---'   `---'      '---' ''-'   `'-'     `._____.'    `-...-'   
+                                                                               
+          .---.  .---.     _______  .-./`) .-------.        .-''-.             
+(``--._   |   |  |_ _|    /   __  \ \ .-.')|  _ _   \     .'_ _   \    _.--``) 
+ `-._ _\  |   |  ( ' )   | ,_/  \__)/ `-' \| ( ' )  |    / ( ` )   '  /_ _.-`  
+   ( ` )\ |   '-(_{;}_),-./  )       `-'`"`|(_ o _) /   . (_ o _)  | /( ' )    
+  (_{;}_))|      (_,_) \  '_ '`)     .---. | (_,_).' __ |  (_,_)___|((_{;}_)   
+   (_,_)/ | _ _--.   |  > (_)  )  __ |   | |  |\ \  |  |'  \   .---. \(_,_)    
+ .-'   /  |( ' ) |   | (  .  .-'_/  )|   | |  | \ `'   / \  `-'    /  \   `-.  
+(_.---'   (_{;}_)|   |  `-'`-'     / |   | |  |  \    /   \       /    `---._) 
+          '(_,_) '---'    `._____.'  '---' ''-'   `'-'     `'-..-'             
+                                                                               
+                                       .-'''-. .-./`) .---.  .---.,---------.  
+                                      / _     \\ .-.')|   |  |_ _|\          \ 
+                                     (`' )/`--'/ `-' \|   |  ( ' ) `--.  ,---' 
+                                    (_ o _).    `-'`"`|   '-(_{;}_)   |   \    
+                                     (_,_). '.  .---. |      (_,_)    :_ _:    
+                                    .---.  \  : |   | | _ _--.   |    (_I_)    
+                                    \    `-'  | |   | |( ' ) |   |   (_(=)_)   
+                                     \       /  |   | (_{;}_)|   |    (_I_)    
+                                      `-...-'   '---' '(_,_) '---'    '---'    
+                                                                               
+           ,---------.   _ _  ,---.   .--.   .-'''-.    ____    .--.      .--. 
+           \          \ ( ' ) |    \  |  |  / _     \ .'  __ `. |  |_     |  | 
+            `--.  ,---'(_{;}_)|  ,  \ |  | (`' )/`--'/   '  \  \| _( )_   |  | 
+               |   \    (_,_) |  |\_ \|  |(_ o _).   |___|  /  ||(_ o _)  |  | 
+               :_ _:          |  _( )_\  | (_,_). '.    _.-`   || (_,_) \ |  | 
+               (_I_)          | (_ o _)  |.---.  \  :.'   _    ||  |/    \|  | 
+              (_(=)_)         |  (_,_)\  |\    `-'  ||  _( )_  ||  '  /\  `  | 
+               (_I_)          |  |    |  | \       / \ (_ o _) /|    /  \    | 
+               '---'          '--'    '--'  `-...-'   '.(_,_).' `---'    `---` 
+                                                                               
+          .-''-.  .--.   .--.      _______  .-./`) .---.  .---.     _______    
+        .'_ _   \ |  | _/  /      /   __  \ \ .-.')|   |  |_ _|    /   __  \   
+       / ( ` )   '| (`' ) /      | ,_/  \__)/ `-' \|   |  ( ' )   | ,_/  \__)  
+      . (_ o _)  ||(_ ()_)     ,-./  )       `-'`"`|   '-(_{;}_),-./  )        
+      |  (_,_)___|| (_,_)   __ \  '_ '`)     .---. |      (_,_) \  '_ '`)      
+      '  \   .---.|  |\ \  |  | > (_)  )  __ |   | | _ _--.   |  > (_)  )  __  
+       \  `-'    /|  | \ `'   /(  .  .-'_/  )|   | |( ' ) |   | (  .  .-'_/  ) 
+        \       / |  |  \    /  `-'`-'     / |   | (_{;}_)|   |  `-'`-'     /  
+         `'-..-'  `--'   `'-'     `._____.'  '---' '(_,_) '---'    `._____.'   
+                                                                               
+                                                                  ,---.   .--. 
+                                                                  |    \  |  | 
+                                                                  |  ,  \ |  | 
+                                                                  |  |\_ \|  | 
+                                                                  |  _( )_\  | 
+                                                             _ _  | (_ o _)  | 
+                                                            ( ` ) |  (_,_)\  | 
+                                                           (_{;}_)|  |    |  | 
+                                                            (_,_) '--'    '--' 
+                                                                               
+              ,---.   .--..-./`)                                               
+              |    \  |  |\ .-.')                                              
+              |  ,  \ |  |/ `-' \                                              
+              |  |\_ \|  | `-'`"`   _ _    _ _    _ _    _ _                   
+              |  _( )_\  | .---.   ( ' )--( ' )  ( ' )--( ' )                  
+              | (_ o _)  | |   |  (_{;}_)(_{;}_)(_{;}_)(_{;}_)                 
+              |  (_,_)\  | |   |   (_,_)--(_,_)  (_,_)--(_,_)                  
+              |  |    |  | |   |                                               
+              '--'    '--' '---'                                               
+                                                                               
+             ,---.   .--.   ____    .-./`)  _______       .-''-.   ______      
+            |    \  |  | .'  __ `. \ .-.')\  ____  \   .'_ _   \ |    _ `''.   
+            |  ,  \ |  |/   '  \  \/ `-' \| |    \ |  / ( ` )   '| _ | ) _  \  
+            |  |\_ \|  ||___|  /  | `-'`"`| |____/ / . (_ o _)  ||( ''_'  ) |  
+            |  _( )_\  |   _.-`   | .---. |   _ _ '. |  (_,_)___|| . (_) `. |  
+            | (_ o _)  |.'   _    | |   | |  ( ' )  \'  \   .---.|(_    ._) '  
+            |  (_,_)\  ||  _( )_  | |   | | (_{;}_) | \  `-'    /|  (_.\.' /   
+            |  |    |  |\ (_ o _) / |   | |  (_,_)  /  \       / |       .'    
+            '--'    '--' '.(_,_).'  '---' /_______.'    `'-..-'  '-----'`      
+                                                                               
+         .---.       .-''-.  ,---.  ,---.   .-''-.   ______                    
+         | ,_|     .'_ _   \ |   /  |   | .'_ _   \ |    _ `''.                
+       ,-./  )    / ( ` )   '|  |   |  .'/ ( ` )   '| _ | ) _  \               
+       \  '_ '`) . (_ o _)  ||  | _ |  |. (_ o _)  ||( ''_'  ) |  _ _    _ _   
+        > (_)  ) |  (_,_)___||  _( )_  ||  (_,_)___|| . (_) `. | ( ' )--( ' )  
+       (  .  .-' '  \   .---.\ (_ o._) /'  \   .---.|(_    ._) '(_{;}_)(_{;}_) 
+        `-'`-'|___\  `-'    / \ (_,_) /  \  `-'    /|  (_.\.' /  (_,_)--(_,_)  
+         |        \\       /   \     /    \       / |       .'                 
+         `--------` `'-..-'     `---`      `'-..-'  '-----'`                   
+                                                                               
diff --git a/externals/figlet/utf8.h b/externals/figlet/utf8.h
new file mode 100644
--- /dev/null
+++ b/externals/figlet/utf8.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2007 Alexey Vatchenko <av@bsdua.org>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/*
+ * utf8: implementation of UTF-8 charset encoding (RFC3629).
+ */
+#ifndef _UTF8_H_
+#define _UTF8_H_
+
+#include <sys/types.h>
+
+#include <wchar.h>
+
+#define UTF8_IGNORE_ERROR		0x01
+#define UTF8_SKIP_BOM			0x02
+
+#ifdef   __cplusplus
+extern "C" {
+#endif
+
+size_t		utf8_to_wchar(const char *in, size_t insize, wchar_t *out,
+		    size_t outsize, int flags);
+size_t		wchar_to_utf8(const wchar_t *in, size_t insize, char *out,
+		    size_t outsize, int flags);
+
+#ifdef   __cplusplus
+}
+#endif
+
+#endif /* !_UTF8_H_ */
diff --git a/externals/figlet/utf8.c b/externals/figlet/utf8.c
new file mode 100644
--- /dev/null
+++ b/externals/figlet/utf8.c
@@ -0,0 +1,326 @@
+#ifdef TLF_FONTS
+/*
+ * Copyright (c) 2007 Alexey Vatchenko <av@bsdua.org>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+#include <sys/types.h>
+
+#include <wchar.h>
+#include <arpa/inet.h>	/* for htonl() */
+
+#include "utf8.h"
+
+#define _NXT	0x80
+#define _SEQ2	0xc0
+#define _SEQ3	0xe0
+#define _SEQ4	0xf0
+#define _SEQ5	0xf8
+#define _SEQ6	0xfc
+
+#define _BOM	0xfeff
+
+static int __wchar_forbitten(wchar_t sym);
+static int __utf8_forbitten(u_char octet);
+
+static int
+__wchar_forbitten(wchar_t sym)
+{
+
+	/* Surrogate pairs */
+	if (sym >= 0xd800 && sym <= 0xdfff)
+		return (-1);
+
+	return (0);
+}
+
+static int
+__utf8_forbitten(u_char octet)
+{
+
+	switch (octet) {
+	case 0xc0:
+	case 0xc1:
+	case 0xf5:
+	case 0xff:
+		return (-1);
+	}
+
+	return (0);
+}
+
+/*
+ * DESCRIPTION
+ *	This function translates UTF-8 string into UCS-4 string (all symbols
+ *	will be in local machine byte order).
+ *
+ *	It takes the following arguments:
+ *	in	- input UTF-8 string. It can be null-terminated.
+ *	insize	- size of input string in bytes.
+ *	out	- result buffer for UCS-4 string. If out is NULL,
+ *		function returns size of result buffer.
+ *	outsize - size of out buffer in wide characters.
+ *
+ * RETURN VALUES
+ *	The function returns size of result buffer (in wide characters).
+ *	Zero is returned in case of error.
+ *
+ * CAVEATS
+ *	1. If UTF-8 string contains zero symbols, they will be translated
+ *	   as regular symbols.
+ *	2. If UTF8_IGNORE_ERROR or UTF8_SKIP_BOM flag is set, sizes may vary
+ *	   when `out' is NULL and not NULL. It's because of special UTF-8
+ *	   sequences which may result in forbitten (by RFC3629) UNICODE
+ *	   characters.  So, the caller must check return value every time and
+ *	   not prepare buffer in advance (\0 terminate) but after calling this
+ *	   function.
+ */
+size_t
+utf8_to_wchar(const char *in, size_t insize, wchar_t *out, size_t outsize,
+    int flags)
+{
+	u_char *p, *lim;
+	wchar_t *wlim, high;
+	size_t n, total, i, n_bits;
+
+	if (in == NULL || insize == 0 || (outsize == 0 && out != NULL))
+		return (0);
+
+	total = 0;
+	p = (u_char *)in;
+	lim = p + insize;
+	wlim = out + outsize;
+
+	for (; p < lim; p += n) {
+		if (__utf8_forbitten(*p) != 0 &&
+		    (flags & UTF8_IGNORE_ERROR) == 0)
+			return (0);
+
+		/*
+		 * Get number of bytes for one wide character.
+		 */
+		n = 1;	/* default: 1 byte. Used when skipping bytes. */
+		if ((*p & 0x80) == 0)
+			high = (wchar_t)*p;
+		else if ((*p & 0xe0) == _SEQ2) {
+			n = 2;
+			high = (wchar_t)(*p & 0x1f);
+		} else if ((*p & 0xf0) == _SEQ3) {
+			n = 3;
+			high = (wchar_t)(*p & 0x0f);
+		} else if ((*p & 0xf8) == _SEQ4) {
+			n = 4;
+			high = (wchar_t)(*p & 0x07);
+		} else if ((*p & 0xfc) == _SEQ5) {
+			n = 5;
+			high = (wchar_t)(*p & 0x03);
+		} else if ((*p & 0xfe) == _SEQ6) {
+			n = 6;
+			high = (wchar_t)(*p & 0x01);
+		} else {
+			if ((flags & UTF8_IGNORE_ERROR) == 0)
+				return (0);
+			continue;
+		}
+
+		/* does the sequence header tell us truth about length? */
+		if (lim - p <= n - 1) {
+			if ((flags & UTF8_IGNORE_ERROR) == 0)
+				return (0);
+			n = 1;
+			continue;	/* skip */
+		}
+
+		/*
+		 * Validate sequence.
+		 * All symbols must have higher bits set to 10xxxxxx
+		 */
+		if (n > 1) {
+			for (i = 1; i < n; i++) {
+				if ((p[i] & 0xc0) != _NXT)
+					break;
+			}
+			if (i != n) {
+				if ((flags & UTF8_IGNORE_ERROR) == 0)
+					return (0);
+				n = 1;
+				continue;	/* skip */
+			}
+		}
+
+		total++;
+
+		if (out == NULL)
+			continue;
+
+		if (out >= wlim)
+			return (0);		/* no space left */
+
+		*out = 0;
+		n_bits = 0;
+		for (i = 1; i < n; i++) {
+			*out |= (wchar_t)(p[n - i] & 0x3f) << n_bits;
+			n_bits += 6;		/* 6 low bits in every byte */
+		}
+		*out |= high << n_bits;
+
+		if (*out == 0)			/* return at end of string */
+			break;
+
+		if (__wchar_forbitten(*out) != 0) {
+			if ((flags & UTF8_IGNORE_ERROR) == 0)
+				return (0);	/* forbitten character */
+			else {
+				total--;
+				out--;
+			}
+		} else if (*out == _BOM && (flags & UTF8_SKIP_BOM) != 0) {
+			total--;
+			out--;
+		}
+
+		out++;
+	}
+
+	return (total);
+}
+
+/*
+ * DESCRIPTION
+ *	This function translates UCS-4 symbols (given in local machine
+ *	byte order) into UTF-8 string.
+ *
+ *	It takes the following arguments:
+ *	in	- input unicode string. It can be null-terminated.
+ *	insize	- size of input string in wide characters.
+ *	out	- result buffer for utf8 string. If out is NULL,
+ *		function returns size of result buffer.
+ *	outsize - size of result buffer.
+ *
+ * RETURN VALUES
+ *	The function returns size of result buffer (in bytes). Zero is returned
+ *	in case of error.
+ *
+ * CAVEATS
+ *	If UCS-4 string contains zero symbols, they will be translated
+ *	as regular symbols.
+ */
+size_t
+wchar_to_utf8(const wchar_t *in, size_t insize, char *out, size_t outsize,
+    int flags)
+{
+	wchar_t *w, *wlim, ch;
+	u_char *p, *lim, *oc;
+	size_t total, n;
+
+	if (in == NULL || insize == 0 || (outsize == 0 && out != NULL))
+		return (0);
+
+	w = (wchar_t *)in;
+	wlim = w + insize;
+	p = (u_char *)out;
+	lim = p + outsize;
+	total = 0;
+	for (; w < wlim; w++) {
+		if (__wchar_forbitten(*w) != 0) {
+			if ((flags & UTF8_IGNORE_ERROR) == 0)
+				return (0);
+			else
+				continue;
+		}
+
+		if (*w == _BOM && (flags & UTF8_SKIP_BOM) != 0)
+			continue;
+
+		if (*w < 0) {
+			if ((flags & UTF8_IGNORE_ERROR) == 0)
+				return (0);
+			continue;
+		} else if (*w <= 0x0000007f)
+			n = 1;
+		else if (*w <= 0x000007ff)
+			n = 2;
+		else if (*w <= 0x0000ffff)
+			n = 3;
+		else if (*w <= 0x001fffff)
+			n = 4;
+		else if (*w <= 0x03ffffff)
+			n = 5;
+		else /* if (*w <= 0x7fffffff) */
+			n = 6;
+
+		total += n;
+
+		if (out == NULL)
+			continue;
+
+		if (lim - p <= n - 1)
+			return (0);		/* no space left */
+
+		/* make it work under different endians */
+		ch = htonl(*w);
+		oc = (u_char *)&ch;
+		switch (n) {
+		case 1:
+			*p = oc[3];
+			break;
+
+		case 2:
+			p[1] = _NXT | (oc[3] & 0x3f);
+			p[0] = _SEQ2 | (oc[3] >> 6) | ((oc[2] & 0x07) << 2);
+			break;
+
+		case 3:
+			p[2] = _NXT | (oc[3] & 0x3f);
+			p[1] = _NXT | (oc[3] >> 6) | ((oc[2] & 0x0f) << 2);
+			p[0] = _SEQ3 | ((oc[2] & 0xf0) >> 4);
+			break;
+
+		case 4:
+			p[3] = _NXT | (oc[3] & 0x3f);
+			p[2] = _NXT | (oc[3] >> 6) | ((oc[2] & 0x0f) << 2);
+			p[1] = _NXT | ((oc[2] & 0xf0) >> 4) |
+			    ((oc[1] & 0x03) << 4);
+			p[0] = _SEQ4 | ((oc[1] & 0x1f) >> 2);
+			break;
+
+		case 5:
+			p[4] = _NXT | (oc[3] & 0x3f);
+			p[3] = _NXT | (oc[3] >> 6) | ((oc[2] & 0x0f) << 2);
+			p[2] = _NXT | ((oc[2] & 0xf0) >> 4) |
+			    ((oc[1] & 0x03) << 4);
+			p[1] = _NXT | (oc[1] >> 2);
+			p[0] = _SEQ5 | (oc[0] & 0x03);
+			break;
+
+		case 6:
+			p[5] = _NXT | (oc[3] & 0x3f);
+			p[4] = _NXT | (oc[3] >> 6) | ((oc[2] & 0x0f) << 2);
+			p[3] = _NXT | (oc[2] >> 4) | ((oc[1] & 0x03) << 4);
+			p[2] = _NXT | (oc[1] >> 2);
+			p[1] = _NXT | (oc[0] & 0x3f);
+			p[0] = _SEQ6 | ((oc[0] & 0x40) >> 6);
+			break;
+		}
+
+		/*
+		 * NOTE: do not check here for forbitten UTF-8 characters.
+		 * They cannot appear here because we do proper convertion.
+		 */
+
+		p += n;
+	}
+
+	return (total);
+}
+#endif /* TLF_FONTS */
diff --git a/externals/figlet/zipio.h b/externals/figlet/zipio.h
new file mode 100644
--- /dev/null
+++ b/externals/figlet/zipio.h
@@ -0,0 +1,104 @@
+/*
+ * zipio.h - stdio emulation library for reading zip files
+ *
+ * Version 1.1.2
+ */
+
+/*
+ * Copyright (C) 1995, Edward B. Hamrick
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear in
+ * supporting documentation, and that the name of the copyright holders
+ * not be used in advertising or publicity pertaining to distribution of
+ * the software without specific, written prior permission. The copyright
+ * holders makes no representations about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT
+ * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+ * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+/*
+ * Changes from 1.1 to 1.1.1:
+ * Changed "z*" functions to "Z*" to avoid namespace pollution.
+ * Added "zungetc" macro.
+ * John Cowan <cowan@ccil.org>
+ *
+ * Changes from 1.1.1 to 1.1.2:
+ * Relicensed under the MIT license, with consent of the copyright holders.
+ * Claudio Matsuoka (Jan 11 2011)
+ */
+
+/*
+ * This library of routines has the same calling sequence as
+ * the stdio.h routines for reading files.  If these routines
+ * detect that they are reading from a zip file, they transparently
+ * unzip the file and make the application think they're reading
+ * from the uncompressed file.
+ *
+ * Note that this library is designed to work for zip files that
+ * use the deflate compression method, and to read the first file
+ * within the zip archive.
+ *
+ * There are a number of tunable parameters in the reference
+ * implementation relating to in-memory decompression and the
+ * use of temporary files.
+ *
+ * Particular care was taken to make the Zgetc() macro work
+ * as efficiently as possible.  When reading an uncompressed
+ * file with Zgetc(), it has exactly the same performance as
+ * when using getc().  WHen reading a compressed file with
+ * Zgetc(), it has the same performance as fread().  The total
+ * CPU overhead for decompression is about 50 cycles per byte.
+ *
+ * The Zungetc() macro is quite limited.  It ignores the character
+ * specified for pushback, and essentially just forces the last
+ * character read to be re-read.  This is essential when parsing
+ * numbers and such.  (1.1.1)
+ *
+ * There are a few stdio routines that aren't represented here, but
+ * they can be layered on top of these routines if needed.
+ */
+
+#ifndef __ZIPIO_H
+#define __ZIPIO_H
+
+#include <stdio.h>
+
+typedef struct {
+  int            len;
+  unsigned char *ptr;
+} ZFILE;
+
+#define Zgetc(f)                   \
+  ((--((f)->len) >= 0)             \
+    ? (unsigned char)(*(f)->ptr++) \
+    : _Zgetc (f))
+
+#define Zungetc(c,f) \
+  ((f)->ptr--, (f)->len++, (c))
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ZFILE  *Zopen(const char *path, const char *mode);
+int    _Zgetc(ZFILE *stream);
+size_t  Zread(void *ptr, size_t size, size_t n, ZFILE *stream);
+int     Zseek(ZFILE *stream, long offset, int whence);
+long    Ztell(ZFILE *stream);
+int     Zclose(ZFILE *stream);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/externals/figlet/zipio.c b/externals/figlet/zipio.c
new file mode 100644
--- /dev/null
+++ b/externals/figlet/zipio.c
@@ -0,0 +1,818 @@
+/*
+ * zipio.c - stdio emulation library for reading zip files
+ *
+ * Version 1.1.2
+ */
+
+/*
+ * Copyright (C) 1995, Edward B. Hamrick
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear in
+ * supporting documentation, and that the name of the copyright holders
+ * not be used in advertising or publicity pertaining to distribution of
+ * the software without specific, written prior permission. The copyright
+ * holders makes no representations about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT
+ * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+ * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+/*
+ * Changes from 1.1 to 1.1.1:
+ * Changed "z*" functions to "Z*" to avoid namespace pollution.
+ * Added "zungetc" macro.
+ * Added definitions of SEEK_SET, SEEK_CUR, SEEK_END for the Posixly challenged
+ * John Cowan <cowan@ccil.org>
+ *
+ * Changes from 1.1.1 to 1.1.2:
+ * Relicensed under the MIT license, with consent of the copyright holders.
+ * Avoid usage of unitialized "length" variable in _Zgetc
+ * Claudio Matsuoka (Jan 11 2011)
+ */
+
+/*
+ * Refer to zipio.h for a description of this package.
+ */
+
+/*
+ * The .zip file header is described below.  It consists of
+ * 30 fixed bytes, followed by two variable length fields
+ * whose length is contained in the first 30 bytes.  After this
+ * header, the data is stored (in deflate format if the compression
+ * method is 8).
+ *
+ * The crc-32 field is the crc on the uncompressed data.
+ *
+ * .zip file header:
+ *
+ *      local file header signature     4 bytes  (0x04034b50)
+ *      version needed to extract       2 bytes
+ *      general purpose bit flag        2 bytes
+ *      compression method              2 bytes
+ *      last mod file time              2 bytes
+ *      last mod file date              2 bytes
+ *      crc-32                          4 bytes
+ *      compressed size                 4 bytes
+ *      uncompressed size               4 bytes
+ *      filename length                 2 bytes
+ *      extra field length              2 bytes
+ *
+ *      filename (variable size)
+ *      extra field (variable size)
+ *
+ * These fields are described in more detail in appnote.txt
+ * in the pkzip 1.93 distribution.
+ */
+
+#include <stdlib.h>
+#ifdef MEMCPY
+#include <mem.h>
+#endif
+
+#include "zipio.h"
+#include "inflate.h"
+#include "crc.h"
+
+/*
+ * Macros for constants
+ */
+
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#ifndef ZIPSIGNATURE
+#define ZIPSIGNATURE     0x04034b50L
+#endif
+
+#ifndef SEEK_SET
+#define SEEK_SET	0
+#endif
+
+#ifndef SEEK_CUR
+#define SEEK_CUR	1
+#endif
+
+#ifndef SEEK_END
+#define SEEK_END	2
+#endif
+
+
+/* 
+ * Buffer size macros
+ *
+ * The following constants are optimized for large-model
+ * (but not flat model) Windows with virtual memory.  It 
+ * will work fine on unix and flat model Windows as well.  
+ *
+ * The constant BUFFERTHRESHOLD determines when memory
+ * buffering changes to file buffering.
+ *
+ * Assumptions:
+ *
+ *   1) INPBUFSIZE + OUTBUFSIZE + sizeof(void *) * PTRBUFSIZE + delta < 64K
+ *
+ *   2) OUTBUFSIZE = 32K * N (related to inflate's 32K window size)
+ *
+ *   2) Max in-memory file size is OUTBUFSIZE * PTRBUFSIZE
+ *      which is 64 MBytes by default (32K * 2K).
+ *
+ */
+
+#ifndef BUFFERTHRESHOLD
+#define BUFFERTHRESHOLD            (256 * 1024L)
+#endif
+
+#ifndef INPBUFSIZE
+#define INPBUFSIZE                 (  8 * 1024 )
+#endif
+
+#ifndef PTRBUFSIZE
+#define PTRBUFSIZE                 (  2 * 1024 )
+#endif
+
+#ifndef OUTBUFSIZE
+#define OUTBUFSIZE ((unsigned int) ( 32 * 1024L))
+#endif
+
+#define MAXFILESIZE (OUTBUFSIZE * (long) PTRBUFSIZE)
+
+/*
+ * Macro for short-hand reference to ZipioState (from ZFILE *)
+ */
+
+#define ZS ((struct ZipioState *) stream)
+
+/*
+ * Macro to manipulate Zgetc() cache
+ */
+
+#define CACHEINIT                                 \
+  zs->ptr = NULL;                                 \
+  zs->len = 0;
+
+#define CACHEUPDATE                               \
+  if (ZS->ptr)                                    \
+  {                                               \
+    ZS->fileposition &= ~((long) (OUTBUFSIZE-1)); \
+    ZS->fileposition += ZS->ptr - ZS->getbuf;     \
+    ZS->ptr = NULL;                               \
+  }                                               \
+  ZS->len = 0;
+
+/*
+ * Macros for run-time type identification
+ */
+
+#ifndef RUNTIMEENABLE
+#define RUNTIMEENABLE 0
+#endif
+
+#if RUNTIMEENABLE
+#define ZIPIOSTATETYPE   0x0110f00fL
+#define RUNTIMEINIT                                             \
+  zs->runtimetypeid1   = ZIPIOSTATETYPE;                        \
+  zs->runtimetypeid2   = ZIPIOSTATETYPE;
+
+#define RUNTIMECHECK                                            \
+  if (!ZS || (ZS->runtimetypeid1 != ZIPIOSTATETYPE)             \
+          || (ZS->runtimetypeid2 != ZIPIOSTATETYPE)) return -1;
+#else
+#define RUNTIMEINIT
+#define RUNTIMECHECK
+#endif
+
+/*
+ * Macros for converting bytes to unsigned integers
+ */
+
+#define GETUINT4(ptr, i4)                                               \
+  {                                                                     \
+    i4 = (((unsigned long) *(((unsigned char *) (ptr)) + 0))      ) |   \
+         (((unsigned long) *(((unsigned char *) (ptr)) + 1)) <<  8) |   \
+         (((unsigned long) *(((unsigned char *) (ptr)) + 2)) << 16) |   \
+         (((unsigned long) *(((unsigned char *) (ptr)) + 3)) << 24)   ; \
+  }
+
+#define GETUINT2(ptr, i2)                                               \
+  {                                                                     \
+    i2 = (((unsigned  int) *(((unsigned char *) (ptr)) + 0))      ) |   \
+         (((unsigned  int) *(((unsigned char *) (ptr)) + 1)) <<  8)   ; \
+  }
+
+/* Structure to hold state for decoding zip files */
+struct ZipioState {
+
+  /* Fields overlaid with ZFILE structure */
+  int            len;                        /* length of Zgetc cache      */
+  unsigned char *ptr;                        /* pointer to Zgetc cache     */
+
+  /* Fields invisible to users of ZFILE structure */
+
+  unsigned long  runtimetypeid1;             /* to detect run-time errors  */
+  int            errorencountered;           /* error encountered flag     */
+
+  /* Buffering state */
+  unsigned char  inpbuf[INPBUFSIZE];         /* inp buffer from zip file   */
+  unsigned char *ptrbuf[PTRBUFSIZE];         /* pointers to in-memory bufs */
+
+  unsigned char  getbuf[OUTBUFSIZE];         /* buffer for use by Zgetc    */
+  long           getoff;                     /* starting offset of getbuf  */
+
+  FILE          *tmpfil;                     /* file ptr to temp file      */
+
+  /* Amount of input data inflated */
+  unsigned long  inpinf;
+  unsigned long  outinf;
+
+  /* Zip file header */
+  unsigned long  sign;     /* local file header signature (0x04034b50) */
+  unsigned int   vers;     /* version needed to extract       2 bytes  */
+  unsigned int   flag;     /* general purpose bit flag        2 bytes  */
+  unsigned int   comp;     /* compression method              2 bytes  */
+  unsigned int   mtim;     /* last mod file time              2 bytes  */
+  unsigned int   mdat;     /* last mod file date              2 bytes  */
+  unsigned long  crc3;     /* crc-32                          4 bytes  */
+  unsigned long  csiz;     /* compressed size                 4 bytes  */
+  unsigned long  usiz;     /* uncompressed size               4 bytes  */
+  unsigned int   flen;     /* filename length                 2 bytes  */
+  unsigned int   elen;     /* extra field length              2 bytes  */
+
+  /* Application state */
+  FILE          *OpenFile;                   /* currently open file        */
+
+  void          *inflatestate;               /* current state for inflate  */
+
+  unsigned long  fileposition;               /* current file position      */
+
+  unsigned long  filecrc;                    /* current crc                */
+
+  unsigned long  runtimetypeid2;             /* to detect run-time errors  */
+};
+
+/*
+ * Utility routines to handle uncompressed file buffers
+ */
+
+/* Initialize buffering */
+static void BufferInitialize(
+  struct ZipioState *zs,
+  int doinflate
+)
+{
+  zs->getoff = -1;
+  zs->tmpfil = NULL;
+
+  /*
+   * If not inflating, use the input file
+   */
+
+  if (!doinflate)
+  {
+    zs->tmpfil = zs->OpenFile;
+
+    /* Get the uncompressed file size */
+    fseek(zs->tmpfil, 0, SEEK_END);
+    zs->usiz = ftell(zs->tmpfil);
+    zs->outinf = zs->usiz;
+
+    /* Start at the beginning */
+    fseek(zs->tmpfil, 0, SEEK_SET);
+  }
+
+  /* If there's no file open, see if it's big enough for temp file */
+  if (!zs->tmpfil)
+  {
+    if (zs->usiz >= BUFFERTHRESHOLD)
+      zs->tmpfil = tmpfile();
+  }
+
+  /* If there's no file open, then use memory buffering */
+  if (!zs->tmpfil)
+  {
+    int i;
+
+    for (i=0; i<PTRBUFSIZE; i++)
+      zs->ptrbuf[i] = NULL;
+  }
+}
+
+/* pump data till length bytes of file are inflated or error encountered */
+static int BufferPump(struct ZipioState *zs, long length)
+{
+  size_t inplen, ret;
+
+  /* Check to see if the length is valid */
+  if (length > zs->usiz) return TRUE;
+
+  /* Loop till enough data is pumped */
+  while (!zs->errorencountered && (zs->outinf < length))
+  {
+    /* Compute how much data to read */
+    if ((zs->csiz - zs->inpinf) < INPBUFSIZE)
+      inplen = (size_t) (zs->csiz - zs->inpinf);
+    else
+      inplen = INPBUFSIZE;
+
+    if (inplen <= 0) return TRUE;
+
+    /* Read some data from the file */
+    ret = fread(zs->inpbuf, 1, inplen, zs->OpenFile);
+    if (ret != inplen) return TRUE;
+
+    /* Update how much data has been read from the file */
+    zs->inpinf += inplen;
+
+    /* Pump this data into the decompressor */
+    if (InflatePutBuffer(zs->inflatestate, zs->inpbuf, inplen)) return TRUE;
+  }
+
+  return FALSE;
+}
+
+/* Read from the buffer */
+static int BufferRead(
+  struct ZipioState *zs,
+  long offset,
+  unsigned char *buffer,
+  long length
+)
+{
+  /*
+   * Make sure enough bytes have been inflated
+   * Note that the correction for reading past EOF has to
+   * be done before calling this routine
+   */
+
+  if (BufferPump(zs, offset+length)) return TRUE;
+
+  /* If using file buffering, just get the data from the file */
+  if (zs->tmpfil)
+  {
+    if (fseek(zs->tmpfil, offset, SEEK_SET)) return TRUE;
+    if (fread(buffer, 1, (size_t) length, zs->tmpfil) != length) return TRUE;
+  }
+  /* If no temp file, use memory buffering */
+  else
+  {
+    unsigned int i;
+    unsigned int off, len;
+    unsigned char *ptr;
+
+    long           tmpoff;
+    unsigned char *tmpbuf;
+    long           tmplen;
+
+    /* Save copies of offset, buffer and length for the loop */
+    tmpoff = offset;
+    tmpbuf = buffer;
+    tmplen = length;
+
+    /* Validate the transfer */
+    if (tmpoff+tmplen > MAXFILESIZE) return TRUE;
+
+    /* Loop till done */
+    while (tmplen)
+    {
+      /* Get a pointer to the next block */
+      i = (unsigned int) (tmpoff / OUTBUFSIZE);
+      ptr = zs->ptrbuf[i];
+      if (!ptr) return TRUE;
+
+      /* Get the offset,length for this block */
+      off = (unsigned int) (tmpoff & (OUTBUFSIZE-1));
+      len = OUTBUFSIZE - off;
+      if (len > tmplen) len = (unsigned int) tmplen;
+
+      /* Get the starting pointer for the transfer */
+      ptr += off;
+
+      /* Copy the data for this block */
+#ifdef MEMCPY
+      memcpy(tmpbuf, ptr, len);
+#else
+      for (i=0; i<len; i++)
+        tmpbuf[i] = ptr[i];
+#endif
+
+      /* Update the offset, buffer, and length */
+      tmpoff += len;
+      tmpbuf += len;
+      tmplen -= len;
+    }
+  }
+
+  /* return success */
+  return FALSE;
+}
+
+/* Append to the buffer */
+static int BufferAppend(
+  struct ZipioState *zs,
+  unsigned char *buffer,
+  long length
+)
+{
+  /* If using file buffering, just append the data from the file */
+  if (zs->tmpfil)
+  {
+    if (fseek(zs->tmpfil, zs->outinf, SEEK_SET)) return TRUE;
+    if (fwrite(buffer, 1, (size_t) length, zs->tmpfil) != length) return TRUE;
+  }
+  /* If no temp file, use memory buffering */
+  else
+  {
+    unsigned int i;
+    unsigned int off, len;
+    unsigned char *ptr;
+
+    long           tmpoff;
+    unsigned char *tmpbuf;
+    long           tmplen;
+
+    /* Save copies of outinf, buffer and length for the loop */
+    tmpoff = zs->outinf;
+    tmpbuf = buffer;
+    tmplen = length;
+
+    /* Validate the transfer */
+    if (tmpoff+tmplen > MAXFILESIZE) return TRUE;
+
+    /* Loop till done */
+    while (tmplen)
+    {
+      /* Get a pointer to the next block */
+      i = (unsigned int) (tmpoff / OUTBUFSIZE);
+      ptr = zs->ptrbuf[i];
+      if (!ptr)
+      {
+        ptr = (unsigned char *) malloc(OUTBUFSIZE);
+        if (!ptr) return TRUE;
+        zs->ptrbuf[i] = ptr;
+      }
+
+      /* Get the offset,length for this block */
+      off = (unsigned int) (tmpoff & (OUTBUFSIZE-1));
+      len = OUTBUFSIZE - off;
+      if (len > tmplen) len = (unsigned int) tmplen;
+
+      /* Get the starting pointer for the transfer */
+      ptr += off;
+
+      /* Copy the data for this block */
+#ifdef MEMCPY
+      memcpy(ptr, tmpbuf, len);
+#else
+      for (i=0; i<len; i++)
+        ptr[i] = tmpbuf[i];
+#endif
+
+      /* Update the offset, buffer, and length */
+      tmpoff += len;
+      tmpbuf += len;
+      tmplen -= len;
+    }
+  }
+
+  /* Update the output buffer length */
+  zs->outinf += length;
+
+  /* return success */
+  return FALSE;
+}
+
+/* Terminate buffering */
+static void BufferTerminate(
+  struct ZipioState *zs
+)
+{
+  /* If reading directly from the uncompressed file, just mark with NULL */
+  if (zs->tmpfil == zs->OpenFile)
+  {
+    zs->tmpfil = NULL;
+  }
+  /* If using the a temporary file, close it */
+  else if (zs->tmpfil)
+  {
+    fclose(zs->tmpfil);
+    zs->tmpfil = NULL;
+  }
+  /* If doing memory buffering, free the buffers */
+  else
+  {
+    int i;
+
+    for (i=0; i<PTRBUFSIZE; i++)
+      if (zs->ptrbuf[i]) free(zs->ptrbuf[i]);
+  }
+}
+
+/*
+ * callout routines for InflateInitialize
+ */
+
+static int inflate_putbuffer(             /* returns 0 on success       */
+    void *stream,                         /* opaque ptr from Initialize */
+    unsigned char *buffer,                /* buffer to put              */
+    long length                           /* length of buffer           */
+)
+{
+  RUNTIMECHECK;
+
+  /* If the write will go past the end of file, return an error */
+  if (ZS->outinf + length > ZS->usiz) return TRUE;
+
+  /* Update the CRC */
+  ZS->filecrc = CrcUpdate(ZS->filecrc, buffer, length);
+
+  /* Append to the buffer */
+  if (BufferAppend(ZS, buffer, length)) return TRUE;
+
+  /* Return success */
+  return FALSE;
+}
+
+static void *inflate_malloc(long length)
+{
+  return malloc((size_t) length);
+}
+
+static void inflate_free(void *buffer)
+{
+  free(buffer);
+}
+
+ZFILE *Zopen(const char *path, const char *mode)
+{
+  struct ZipioState *zs;
+
+  long inplen;
+
+  /* Allocate the ZipioState memory area */
+  zs = (struct ZipioState *) malloc(sizeof(struct ZipioState));
+  if (!zs) return NULL;
+
+  /* Set up the initial values of the inflate state */
+
+  CACHEINIT;
+
+  RUNTIMEINIT;
+
+  zs->errorencountered = FALSE;
+
+  zs->inpinf           = 0;
+  zs->outinf           = 0;
+
+  zs->fileposition     = 0;
+
+  zs->filecrc          = 0xffffffffL;
+
+  /* Open the real file */
+  zs->OpenFile = fopen(path, mode);
+  if (!zs->OpenFile)
+  {
+    free(zs);
+    return NULL;
+  }
+
+  /* Read the first input buffer */
+  if ((inplen = (long) fread(zs->inpbuf, 1, INPBUFSIZE, zs->OpenFile)) >= 30)
+  {
+    GETUINT4(zs->inpbuf+ 0, zs->sign);
+    GETUINT2(zs->inpbuf+ 4, zs->vers);
+    GETUINT2(zs->inpbuf+ 6, zs->flag);
+    GETUINT2(zs->inpbuf+ 8, zs->comp);
+    GETUINT2(zs->inpbuf+10, zs->mtim);
+    GETUINT2(zs->inpbuf+12, zs->mdat);
+    GETUINT4(zs->inpbuf+14, zs->crc3);
+    GETUINT4(zs->inpbuf+18, zs->csiz);
+    GETUINT4(zs->inpbuf+22, zs->usiz);
+    GETUINT2(zs->inpbuf+26, zs->flen);
+    GETUINT2(zs->inpbuf+28, zs->elen);
+
+#ifdef PRINTZIPHEADER
+    fprintf(stderr, "local file header signature  hex %8lx\n", zs->sign);
+    fprintf(stderr, "version needed to extract        %8d\n" , zs->vers);
+    fprintf(stderr, "general purpose bit flag     hex %8x\n" , zs->flag);
+    fprintf(stderr, "compression method               %8d\n" , zs->comp);
+    fprintf(stderr, "last mod file time               %8d\n" , zs->mtim);
+    fprintf(stderr, "last mod file date               %8d\n" , zs->mdat);
+    fprintf(stderr, "crc-32                       hex %8lx\n", zs->crc3);
+    fprintf(stderr, "compressed size                  %8ld\n", zs->csiz);
+    fprintf(stderr, "uncompressed size                %8ld\n", zs->usiz);
+    fprintf(stderr, "filename length                  %8d\n" , zs->flen);
+    fprintf(stderr, "extra field length               %8d\n" , zs->elen);
+#endif
+  }
+  else
+  {
+    zs->sign = 0;
+  }
+
+  /*
+   * If the file isn't a zip file, set up to read it normally
+   */
+  if ((zs->sign   !=             ZIPSIGNATURE) ||
+      (zs->flag   &                         1) ||
+      (zs->comp   !=                        8) ||
+      (inplen     <= 30 + zs->flen + zs->elen)    )
+  {
+    /* Initialize buffering */
+    BufferInitialize(zs, FALSE);
+
+    zs->inflatestate = NULL;
+  }
+  else
+  {
+    /* Initialize buffering */
+    BufferInitialize(zs, TRUE);
+
+    zs->inflatestate = InflateInitialize(
+                         (void *) zs,
+                         inflate_putbuffer,
+                         inflate_malloc,
+                         inflate_free
+                       );
+
+    if (InflatePutBuffer(zs->inflatestate,
+                         zs->inpbuf+30+zs->flen+zs->elen,
+                             inplen-30-zs->flen-zs->elen
+                        )
+       )
+      zs->errorencountered = TRUE;
+
+    zs->inpinf += inplen-30-zs->flen-zs->elen;
+  }
+
+  /* Return this state info to the caller */
+  return (ZFILE *) zs;
+}
+
+int _Zgetc(ZFILE *stream)
+{
+  long offset, length;
+
+  int off;
+
+  RUNTIMECHECK;
+
+  if (ZS->errorencountered) return -1;
+
+  CACHEUPDATE;
+
+  /* If already at EOF, return */
+  if (ZS->fileposition >= ZS->usiz) return -1;
+
+  /* If data isn't in current outbuf, get it */
+  offset = ZS->fileposition & ~((long) (OUTBUFSIZE-1));
+  length = ZS->usiz - offset;
+  if (length > OUTBUFSIZE) length = OUTBUFSIZE;
+
+  if (ZS->getoff != offset)
+  {
+    if (BufferRead(ZS, offset, ZS->getbuf, length)) return -1;
+
+    ZS->getoff = offset;
+  }
+
+  /* Set up the cache */
+  off = (int) (ZS->fileposition & (OUTBUFSIZE-1));
+  ZS->len = (int) (length - off);
+  ZS->ptr = ZS->getbuf    + off;
+
+  /* Return the character */
+           ZS->len--;
+  return *(ZS->ptr++);
+}
+
+size_t Zread(void *ptr, size_t size, size_t n, ZFILE *stream)
+{
+  long           length;
+
+  RUNTIMECHECK;
+
+  if (ZS->errorencountered) return 0;
+
+  CACHEUPDATE;
+
+  /* Compute the length requested */
+  length = size * (long) n;
+
+  /* Adjust the length to account for premature EOF */
+  if (ZS->fileposition+length > ZS->usiz)
+    length = ZS->usiz - ZS->fileposition;
+
+  /* If the length is zero, then just return an EOF error */
+  if (length <= 0) return 0;
+
+  /* Make the length a multiple of size */
+  length /= size;
+  length *= size;
+
+  /* If the length is zero, then just return an EOF error */
+  if (length <= 0) return 0;
+
+  /* Read from the buffer */
+  if (BufferRead(ZS, ZS->fileposition, (unsigned char *) ptr, length))
+    return 0;
+
+  /* Update the file position */
+  ZS->fileposition += length;
+
+  /* Return the number of items transferred */
+  return (size_t) (length / size);
+}
+
+int Zseek(ZFILE *stream, long offset, int whence)
+{
+  long newoffset;
+
+  RUNTIMECHECK;
+
+  if (ZS->errorencountered) return -1;
+
+  CACHEUPDATE;
+
+  if (whence == SEEK_SET)
+  {
+    newoffset = offset;
+  }
+  else if (whence == SEEK_CUR)
+  {
+    newoffset = ZS->fileposition + offset;
+  }
+  else if (whence == SEEK_END)
+  {
+    newoffset = ZS->fileposition + ZS->usiz;
+  }
+  else
+  {
+    return -1;
+  }
+
+  if ((newoffset < 0) || (newoffset > ZS->usiz)) return -1;
+
+  ZS->fileposition = newoffset;
+
+  return 0;
+}
+
+long Ztell(ZFILE *stream)
+{
+  RUNTIMECHECK;
+
+  if (ZS->errorencountered) return -1;
+
+  CACHEUPDATE;
+
+  return ZS->fileposition;
+}
+
+int Zclose(ZFILE *stream)
+{
+  int ret;
+
+  RUNTIMECHECK;
+
+  CACHEUPDATE;
+
+  /* terminate the inflate routines, and check for errors */
+  if (ZS->inflatestate)
+  {
+    if (InflateTerminate(ZS->inflatestate))
+      ZS->errorencountered = TRUE;
+
+    /* Check that the CRC is OK */
+    if (ZS->filecrc != (ZS->crc3 ^ 0xffffffffL))
+      ZS->errorencountered = TRUE;
+  }
+
+  /* save the final error status */
+  ret = ZS->errorencountered;
+
+  /* terminate the buffering */
+  BufferTerminate(ZS);
+
+  /* free the ZipioState structure */
+  free(ZS);
+
+  /* return the final error status */
+  return ret;
+}
diff --git a/externals/pear-figlet/Text/Figlet.php b/externals/pear-figlet/Text/Figlet.php
new file mode 100644
--- /dev/null
+++ b/externals/pear-figlet/Text/Figlet.php
@@ -0,0 +1,510 @@
+<?php
+/* vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4: */
+/**
+* ASCII art text creation
+*
+* Project home page (Russian): http://bolknote.ru/files/figlet/
+*
+* PHP Version 4
+*
+* @category Text
+* @package  Text_Figlet
+* @author   Evgeny Stepanischev <imbolk@gmail.com>
+* @author   Christian Weiske <cweiske@php.net>
+* @license  http://www.php.net/license PHP License
+* @version  CVS: $Id$
+* @link     http://pear.php.net/package/Text_Figlet
+*/
+require_once 'PEAR.php';
+
+/**
+* ASCII art text creation
+*
+* Project home page (Russian): http://bolknote.ru/files/figlet/
+*
+* PHP Version 4
+*
+* @category Text
+* @package  Text_Figlet
+* @author   Evgeny Stepanischev <imbolk@gmail.com>
+* @author   Christian Weiske <cweiske@php.net>
+* @license  http://www.php.net/license PHP License
+* @link     http://pear.php.net/package/Text_Figlet
+*/
+class Text_Figlet
+{
+    /**
+     * Height of a letter
+     *
+     * @var integer
+     *
+     * @access protected
+     */
+    var $height;
+
+    /**
+     * Letter baseline
+     *
+     * @var integer
+     *
+     * @access protected
+     */
+    var $oldlayout;
+
+    /**
+     * Flag - RTL (right to left) or LTR (left to right) text direction
+     *
+     * @var integer
+     *
+     * @access protected
+     */
+    var $rtol;
+
+    /**
+     * Information about special 'hardblank' character
+     *
+     * @var integer
+     *
+     * @access protected
+     */
+    var $hardblank;
+
+    /**
+     * Is used for keeping font
+     *
+     * @var array
+     *
+     * @access protected
+     */
+    var $font;
+
+    /**
+     * Flag is true if smushing occured in letters printing cycle
+     *
+     * @var integer
+     *
+     * @access protected
+     */
+    var $smush_flag;
+
+    /**
+     * Comment lines buffer
+     *
+     * @var string
+     *
+     * @access public
+     */
+
+    var $font_comment;
+
+
+    /**
+     * Load user font. Must be invoked first.
+     * Automatically tries the Text_Figlet font data directory
+     *  as long as no path separator is in the filename.
+     *
+     * @param string $filename   font file name
+     * @param bool   $loadgerman (optional) load German character set or not
+     *
+     * @access public
+     * @return mixed PEAR_Error or true for success
+     */
+    function loadFont($filename, $loadgerman = true)
+    {
+        $this->font = array();
+        if (!file_exists($filename)) {
+            //if it does not exist, try the Text_Figlet data directory
+            include_once 'PEAR/Config.php';
+
+            $config  = PEAR_Config::singleton();
+            $fontdir = $config->get('data_dir') . '/Text_Figlet/fonts/';
+
+            //only for filenames without path separators
+            if (strpos($filename, '/') === false
+                && file_exists($fontdir . $filename)
+            ) {
+                $filename = $fontdir . $filename;
+            } else {
+                return PEAR::raiseError('Figlet font file "'
+                                        . $filename
+                                        . '" cannot be found', 1);
+            }
+        }
+
+        $this->font_comment = '';
+
+        // If Gzip compressed font
+        if (substr($filename, -3, 3) == '.gz') {
+            $filename   = 'compress.zlib://' . $filename;
+            $compressed = true;
+
+            if (!function_exists('gzcompress')) {
+                return PEAR::raiseError('Cannot load gzip compressed fonts since'
+                                        . ' gzcompress() is not available.',
+                                        3);
+            }
+        } else {
+            $compressed = false;
+        }
+
+        if (!($fp = fopen($filename, 'rb'))) {
+            return PEAR::raiseError('Cannot open figlet font file ' . $filename, 2);
+        }
+
+        if (!$compressed) {
+            /* ZIPed font */
+            if (fread($fp, 2) == 'PK') {
+                if (!function_exists('zip_open')) {
+                    return PEAR::raiseError('Cannot load ZIP compressed fonts since'
+                                            . ' ZIP PHP extension is not available.',
+                                            5);
+                }
+
+                fclose($fp);
+
+                if (!($fp = zip_open($filename))) {
+                    return PEAR::raiseError('Cannot open figlet font file ' . $filename, 2);
+                }
+
+                $name = zip_entry_name(zip_read($fp));
+                zip_close($fp);
+
+                if (!($fp = fopen('zip://' . realpath($filename) . '#' . $name, 'rb'))) {
+                    return PEAR::raiseError('Cannot open figlet font file ' . $filename, 2);
+                }
+
+                $compressed = true;
+            } else {
+                flock($fp, LOCK_SH);
+                rewind($fp);
+            }
+        }
+
+        //            flf2a$ 6 5 20 15 3 0 143 229
+        //              |  | | | |  |  | |  |   |
+        //             /  /  | | |  |  | |  |   \
+        //    Signature  /  /  | |  |  | |   \   Codetag_Count
+        //      Hardblank  /  /  |  |  |  \   Full_Layout
+        //           Height  /   |  |   \  Print_Direction
+        //           Baseline   /    \   Comment_Lines
+        //            Max_Length      Old_Layout
+
+
+        $header = explode(' ', fgets($fp, 2048));
+
+        if (substr($header[0], 0, 5) <> 'flf2a') {
+            return PEAR::raiseError('Unknown FIGlet font format.', 4);
+        }
+
+        @list ($this->hardblank, $this->height,,,
+        $this->oldlayout, $cmt_count, $this->rtol) = $header;
+
+        $this->hardblank = substr($this->hardblank, -1, 1);
+
+        for ($i = 0; $i < $cmt_count; $i++) {
+            $this->font_comment .= fgets($fp, 2048);
+        }
+
+        // ASCII charcters
+        for ($i = 32; $i < 127; $i++) {
+            $this->font[$i] = $this->_char($fp);
+        }
+
+        foreach (array(196, 214, 220, 228, 246, 252, 223) as $i) {
+            if ($loadgerman) {
+                $letter = $this->_char($fp);
+
+                // Invalid character but main font is loaded and I can use it
+                if ($letter === false) {
+                    fclose($fp);
+                    return true;
+                }
+
+                // Load if it is not blank only
+                if (trim(implode('', $letter)) <> '') {
+                    $this->font[$i] = $letter;
+                }
+            } else {
+                $this->_skip($fp);
+            }
+        }
+
+        // Extented characters
+        for ($n = 0; !feof($fp); $n++) {
+            list ($i) = explode(' ', rtrim(fgets($fp, 1024)), 2);
+            if ($i == '') {
+                continue;
+            }
+
+            // If comment
+            if (preg_match('/^\-0x/i', $i)) {
+                $this->_skip($fp);
+            } else {
+                // If Unicode
+                if (preg_match('/^0x/i', $i)) {
+                    $i = hexdec(substr($i, 2));
+                } else {
+                    // If octal
+                    if ($i{0} === '0' && $i !== '0' || substr($i, 0, 2) == '-0') {
+                        $i = octdec($i);
+                    }
+                }
+
+                $letter = $this->_char($fp);
+
+                // Invalid character but main font is loaded and I can use it
+                if ($letter === false) {
+                    fclose($fp);
+                    return true;
+                }
+
+                $this->font[$i] = $letter;
+            }
+        }
+
+        fclose($fp);
+        return true;
+    }
+
+
+
+    /**
+    * Print string using font loaded by LoadFont method
+    *
+    * @param string $str    string for printing
+    * @param bool   $inhtml (optional) output mode
+    *                       - HTML (true) or plain text (false)
+    *
+    * @access public
+    * @return string contains
+    */
+    function lineEcho($str, $inhtml = false)
+    {
+        $out = array();
+
+        for ($i = 0; $i<strlen($str); $i++) {
+            // Pseudo Unicode support
+            if (substr($str, $i, 2) == '%u') {
+                $lt = hexdec(substr($str, $i+2, 4));
+                $i += 5;
+            } else {
+                $lt = ord($str{$i});
+            }
+
+            $hb = preg_quote($this->hardblank, '/');
+            $sp = "$hb\\x00\\s";
+
+            // If chosen character not found try to use default
+            // If default character is not defined skip it
+
+            if (!isset($this->font[$lt])) {
+                if (isset($this->font[0])) {
+                    $lt = 0;
+                } else {
+                    continue;
+                }
+            }
+
+            for ($j = 0; $j < $this->height; $j++) {
+                $line = $this->font[$lt][$j];
+
+                // Replace hardblanks
+                if (isset($out[$j])) {
+                    if ($this->rtol) {
+                        $out[$j] = $line . $out[$j];
+                    } else {
+                        $out[$j] .= $line;
+                    }
+                } else {
+                    $out[$j] = $line;
+                }
+            }
+
+            if ($this->oldlayout > -1 && $i) {
+                // Calculate minimal distance between two last letters
+
+                $mindiff = -1;
+
+                for ($j = 0; $j < $this->height; $j++) {
+                    if (preg_match("/\S(\s*\\x00\s*)\S/", $out[$j], $r)) {
+                        if ($mindiff == -1) {
+                            $mindiff = strlen($r[1]);
+                        } else {
+                            $mindiff = min($mindiff, strlen($r[1]));
+                        }
+                    }
+                }
+
+                // Remove spaces between two last letter
+                // dec mindiff for exclude \x00 symbol
+
+                if (--$mindiff > 0) {
+                    for ($j = 0; $j < $this->height; $j++) {
+                        if (preg_match("/\\x00(\s{0,{$mindiff}})/", $out[$j], $r)) {
+                            $l       = strlen($r[1]);
+                            $b       = $mindiff - $l;
+                            $out[$j] = preg_replace("/\s{0,$b}\\x00\s{{$l}}/",
+                                                    "\0",
+                                                    $out[$j],
+                                                    1);
+                        }
+                    }
+                }
+                // Smushing
+
+                $this->smush_flag = 0;
+
+                for ($j = 0; $j < $this->height; $j++) {
+                    $out[$j] = preg_replace_callback("#([^$sp])\\x00([^$sp])#",
+                                                     array(&$this, '_rep'),
+                                                     $out[$j]);
+                }
+
+                // Remove one space if smushing
+                // and remove all \x00 except tail whenever
+
+                if ($this->smush_flag) {
+                    $pat = array("/\s\\x00(?!$)|\\x00\s/", "/\\x00(?!$)/");
+                    $rep = array('', '');
+                } else {
+                    $pat = "/\\x00(?!$)/";
+                    $rep = '';
+                }
+
+                for ($j = 0; $j<$this->height; $j++) {
+                    $out[$j] = preg_replace($pat, $rep, $out[$j]);
+                }
+            }
+        }
+
+        $trans = array("\0" => '', $this->hardblank => ' ');
+        $str   = strtr(implode("\n", $out), $trans);
+
+        if ($inhtml) {
+            return '<nobr>'.
+                   nl2br(str_replace(' ', '&nbsp;', htmlspecialchars($str))).
+                   '</nobr>';
+        }
+
+        return $str;
+    }
+
+
+
+    /**
+    * It is preg_replace callback function that makes horizontal letter smushing
+    *
+    * @param array $r preg_replace matches array
+    *
+    * @return string
+    * @access private
+    */
+    function _rep($r)
+    {
+        if ($this->oldlayout & 1 && $r[1] == $r[2]) {
+            $this->smush_flag = 1;
+            return $r[1];
+        }
+
+        if ($this->oldlayout & 2) {
+            $symb = '|/\\[]{}()<>';
+
+            if ($r[1] == '_' && strpos($symb, $r[2]) !== false ||
+                $r[2] == '_' && strpos($symb, $r[1]) !== false) {
+                $this->smush_flag = 1;
+                return $r[1];
+            }
+        }
+
+        if ($this->oldlayout & 4) {
+            $classes = '|/\\[]{}()<>';
+
+            if (($left = strpos($classes, $r[1])) !== false) {
+                if (($right = strpos($classes, $r[2])) !== false) {
+                    $this->smush_flag = 1;
+                    return $right > $left ? $r[2] : $r[1];
+                }
+            }
+        }
+
+        if ($this->oldlayout & 8) {
+            $t = array('[' => ']', ']' => '[', '{' => '}', '}' => '{',
+            '(' => ')', ')' => '(');
+
+            if (isset($t[$r[2]]) && $r[1] == $t[$r[2]]) {
+                $this->smush_flag = 1;
+                return '|';
+            }
+        }
+
+        if ($this->oldlayout & 16) {
+            $t = array("/\\" => '|', "\\/" => 'Y', '><' => 'X');
+
+            if (isset($t[$r[1].$r[2]])) {
+                $this->smush_flag = 1;
+                return $t[$r[1].$r[2]];
+            }
+        }
+
+        if ($this->oldlayout & 32) {
+            if ($r[1] == $r[2] && $r[1] == $this->hardblank) {
+                $this->smush_flag = 1;
+                return $this->hardblank;
+            }
+        }
+
+        return $r[1]."\00".$r[2];
+    }
+
+
+
+    /**
+    * Function loads one character in the internal array from file
+    *
+    * @param resource &$fp handle of font file
+    *
+    * @return mixed lines of the character or false if foef occured
+    * @access private
+    */
+    function _char(&$fp)
+    {
+        $out = array();
+
+        for ($i = 0; $i < $this->height; $i++) {
+            if (feof($fp)) {
+                return false;
+            }
+
+            $line = rtrim(fgets($fp, 2048), "\r\n");
+            if (preg_match('/(.){1,2}$/', $line, $r)) {
+                $line = str_replace($r[1], '', $line);
+            }
+
+            $line .= "\x00";
+
+            $out[] = $line;
+        }
+
+        return $out;
+    }
+
+
+
+    /**
+    * Function for skipping one character in a font file
+    *
+    * @param resource &$fp handle of font file
+    *
+    * @return boolean always return true
+    * @access private
+    */
+    function _skip(&$fp)
+    {
+        for ($i = 0; $i<$this->height && !feof($fp); $i++) {
+            fgets($fp, 2048);
+        }
+
+        return true;
+    }
+}
+?>
diff --git a/externals/pear-figlet/docs/README.TXT b/externals/pear-figlet/docs/README.TXT
new file mode 100644
--- /dev/null
+++ b/externals/pear-figlet/docs/README.TXT
@@ -0,0 +1,26 @@
+FIGlet project home page: http://www.figlet.org/
+You can download FIGlet fonts from: ftp://ftp.figlet.org/pub/figlet/fonts/
+Project home page (Russian): http://bolknote.ru/files/figlet/
+
+Notes:
+1. There are no support flc and vertical smushing.
+2. But horizontal smushing is supported.
+3. Default character (0x00) is supported.
+4. German symbols are supported.
+5. It is supported Unicode as %uHHHH, HHHH - a hex code of a character (UCS-2).
+7. RTL and LTR text directions are suppoted.
+8. Windows and Unix font formats are supported.
+9. Incomplete fonts are supported (for example dwhistled.flf).
+10. Gzipped fonts supported as .flf.gz (zlib PHP extension required)
+11. ZIPed fonts supported (ZIP PHP extension required)
+                                                                              `
+Usage:
+
+    include_once 'Text/Figlet.php';
+
+    $figlet = new Text_Figlet();
+    if (PEAR::isError($error = $figlet->LoadFont('slant.flf'))) {
+        echo 'Error: ', $error->getMessage();
+    } else {
+        echo $figlet->LineEcho("Hello, world!");
+    }
\ No newline at end of file
diff --git a/externals/pear-figlet/docs/examples/hello_world.php b/externals/pear-figlet/docs/examples/hello_world.php
new file mode 100644
--- /dev/null
+++ b/externals/pear-figlet/docs/examples/hello_world.php
@@ -0,0 +1,35 @@
+<?php
+
+/* UTF-8 convert to FIGlet Unicode */
+/* iconv PHP module required */
+function utf8tofiglet($str)
+{
+    // escape %u
+    $str = str_replace('%u', sprintf('%%%%u%04X', ord('u')), $str);
+
+    if (function_exists('iconv')) {
+        $str = iconv('utf-8', 'ucs-2be', $str);
+        $out = '';
+
+        for ($i = 0, $len = strlen($str); $i<$len; $i++) {
+            $code = ord($str[$i++]) * 256 + ord($str[$i]);
+
+            $out .= $code < 128 ? $str[$i] : sprintf('%%u%04X', $code);
+        }
+
+        return $out;
+    }
+
+    return $str;
+}
+
+require_once 'Text/Figlet.php';
+
+$figlet = new Text_Figlet();
+$error  = $figlet->LoadFont('makisupa.flf');
+if (PEAR::isError($error)) {
+    echo 'Error: ' . $error->getMessage() . "\n";
+} else {
+    echo $figlet->LineEcho(utf8tofiglet('Hello, world!')) . "\n";
+}
+?>
\ No newline at end of file
diff --git a/externals/pear-figlet/fonts/makisupa.flf b/externals/pear-figlet/fonts/makisupa.flf
new file mode 100644
--- /dev/null
+++ b/externals/pear-figlet/fonts/makisupa.flf
@@ -0,0 +1,2877 @@
+flf2a_ 16 16 100 -1 3 0 0 73
+Converted Makisupa (http://www.greywolfwebworks.com/fonts.html)
+by Evgeny Stepanischev http://bolknote.ru/ 2010.07.08
+GPL and OFL license.
+_       _@
+_       _@
+_       _@
+_       _@
+_       _@
+_       _@
+_       _@
+_       _@
+_       _@
+_       _@
+_       _@
+_       _@
+_       _@
+_       _@
+_       _@
+_@@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_    _@
+_**  _@
+_##* _@
+_##* _@
+_    _@
+_@@
+_       _@
+_       _@
+_       _@
+_       _@
+_       _@
+_       _@
+_       _@
+_       _@
+_       _@
+_       _@
+_##**## _@
+_##**## _@
+_##**## _@
+_##**## _@
+_       _@
+_@@
+_          _@
+_          _@
+_          _@
+_          _@
+_          _@
+_ ##* ##*  _@
+_*##**##** _@
+_######### _@
+_######### _@
+_ ##* ##*  _@
+_*##**##** _@
+_######### _@
+_######### _@
+_ ##* ##*  _@
+_          _@
+_@@
+_  *##    _@
+_  *##*   _@
+_*#####*  _@
+_#######* _@
+_###**##* _@
+_###* ##* _@
+_######*  _@
+_*######  _@
+_  ***##* _@
+_###**##* _@
+_#######* _@
+_*#####*  _@
+_ *###*   _@
+_  *##    _@
+_         _@
+_@@
+_*##*  #** _@
+_#### *### _@
+_#### #### _@
+_####*###* _@
+_########  _@
+_*######*  _@
+_ **###*   _@
+_  *###*   _@
+_ *###*    _@
+_ *######* _@
+_*######## _@
+_*##*##*## _@
+_###*##### _@
+_*#* *###* _@
+_          _@
+_@@
+_           _@
+_           _@
+_           _@
+_ *####*    _@
+_ ######*   _@
+_ ###*##*   _@
+_ ###*##*   _@
+_ *####*    _@
+_*#####*##* _@
+_#########* _@
+_##* ####*  _@
+_###*#####* _@
+_*######### _@
+_ *####**#* _@
+_           _@
+_@@
+_    _@
+_    _@
+_    _@
+_    _@
+_    _@
+_    _@
+_    _@
+_    _@
+_    _@
+_    _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_    _@
+_@@
+_##*   _@
+_##*   _@
+_##*   _@
+_##*   _@
+_##*   _@
+_##*   _@
+_##*   _@
+_##*   _@
+_##*   _@
+_##*   _@
+_###** _@
+_*#### _@
+_ *### _@
+_      _@
+_      _@
+_@@
+_  ##* _@
+_  ##* _@
+_  ##* _@
+_  ##* _@
+_  ##* _@
+_  ##* _@
+_  ##* _@
+_  ##* _@
+_  ##* _@
+_ *##* _@
+_*###* _@
+_###*  _@
+_##*   _@
+_      _@
+_      _@
+_@@
+_     _@
+_     _@
+_     _@
+_     _@
+_     _@
+_     _@
+_     _@
+_     _@
+_     _@
+_ *#  _@
+_#### _@
+_*### _@
+_#### _@
+_ *#  _@
+_     _@
+_@@
+_          _@
+_          _@
+_          _@
+_          _@
+_          _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_***##**** _@
+_######### _@
+_######### _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_          _@
+_@@
+_    _@
+_    _@
+_    _@
+_    _@
+_    _@
+_    _@
+_    _@
+_    _@
+_##* _@
+_##* _@
+_*#  _@
+_**  _@
+_#*  _@
+_    _@
+_    _@
+_@@
+_          _@
+_          _@
+_          _@
+_          _@
+_          _@
+_          _@
+_          _@
+_          _@
+_          _@
+_          _@
+_          _@
+_********* _@
+_######### _@
+_######### _@
+_          _@
+_@@
+_    _@
+_    _@
+_    _@
+_    _@
+_    _@
+_    _@
+_    _@
+_    _@
+_    _@
+_    _@
+_    _@
+_**  _@
+_##* _@
+_##* _@
+_    _@
+_@@
+_      *#* _@
+_     *### _@
+_     *##* _@
+_    *###* _@
+_    *##*  _@
+_   *###   _@
+_   ###*   _@
+_  *###    _@
+_  ###*    _@
+_ *##*     _@
+_*###*     _@
+_*##*      _@
+_###*      _@
+_*#*       _@
+_          _@
+_@@
+_ *#####*  _@
+_*#######* _@
+_###***### _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*## *## _@
+_##*## *## _@
+_##*** *## _@
+_##*   *## _@
+_##*   *## _@
+_###***### _@
+_*#######* _@
+_ *#####*  _@
+_          _@
+_@@
+_*###*   _@
+_####*   _@
+_**##*   _@
+_  ##*   _@
+_  ##*   _@
+_  ##*   _@
+_  ##*   _@
+_  ##*   _@
+_  ##*   _@
+_  ##*   _@
+_  ##*   _@
+_**###** _@
+_####### _@
+_####### _@
+_        _@
+_@@
+_ *#####*  _@
+_*#######* _@
+_###***### _@
+_##*   *## _@
+_##*   *## _@
+_     *### _@
+_ *######* _@
+_*######*  _@
+_###****   _@
+_##*       _@
+_##*       _@
+_###****** _@
+_######### _@
+_######### _@
+_          _@
+_@@
+_ *#####*  _@
+_*#######* _@
+_###***### _@
+_##*   *## _@
+_##*   *## _@
+_     *### _@
+_   #####* _@
+_   #####* _@
+_   ***### _@
+_##*   *## _@
+_##*   *## _@
+_###***### _@
+_*#######* _@
+_ *#####*  _@
+_          _@
+_@@
+_      *##* _@
+_     *###* _@
+_    *####* _@
+_   *#####* _@
+_  *######* _@
+_ *####*##* _@
+_ ####**##* _@
+_*########* _@
+_*########* _@
+_      *##* _@
+_       ##* _@
+_       ##* _@
+_       ##* _@
+_       ##* _@
+_           _@
+_@@
+_######### _@
+_######### _@
+_###****** _@
+_##*       _@
+_##*       _@
+_#######*  _@
+_########* _@
+_******### _@
+_      *## _@
+_##*   *## _@
+_##*   *## _@
+_###***### _@
+_*#######* _@
+_ *#####*  _@
+_          _@
+_@@
+_  *#*     _@
+_  *##     _@
+_  ###     _@
+_ *##*     _@
+_ *##      _@
+_ ##*      _@
+_*######*  _@
+_########* _@
+_######### _@
+_##*  *### _@
+_##*   *## _@
+_###***### _@
+_*#######* _@
+_ *#####*  _@
+_          _@
+_@@
+_######### _@
+_######### _@
+_******### _@
+_     ###* _@
+_    *###  _@
+_    *##*  _@
+_    ###*  _@
+_   *##*   _@
+_   *##*   _@
+_   ###    _@
+_  *##*    _@
+_  ###     _@
+_  ##*     _@
+_  ##*     _@
+_          _@
+_@@
+_ *#####*  _@
+_*#######* _@
+_###***### _@
+_##*   *## _@
+_##*   *## _@
+_###* *### _@
+_*#######* _@
+_*#######* _@
+_###***### _@
+_##*   *## _@
+_##*   *## _@
+_###***### _@
+_*#######* _@
+_ *#####*  _@
+_          _@
+_@@
+_ *#####*  _@
+_*#######* _@
+_###***### _@
+_##*   *## _@
+_##*   *## _@
+_###**#### _@
+_*######## _@
+_ *######* _@
+_    *###  _@
+_    *##*  _@
+_   *###*  _@
+_   *###   _@
+_   ###*   _@
+_   *##    _@
+_          _@
+_@@
+_    _@
+_    _@
+_    _@
+_    _@
+_    _@
+_##* _@
+_##* _@
+_**  _@
+_    _@
+_    _@
+_    _@
+_**  _@
+_##* _@
+_##* _@
+_    _@
+_@@
+_    _@
+_**  _@
+_##* _@
+_##* _@
+_    _@
+_    _@
+_    _@
+_    _@
+_##* _@
+_##* _@
+_*#  _@
+_**  _@
+_#*  _@
+_    _@
+_    _@
+_@@
+_       _@
+_       _@
+_       _@
+_       _@
+_   *#* _@
+_  *### _@
+_ *###* _@
+_*###*  _@
+_###*   _@
+_###*   _@
+_*###*  _@
+_ *###* _@
+_  *### _@
+_   *#* _@
+_       _@
+_@@
+_          _@
+_          _@
+_          _@
+_          _@
+_          _@
+_          _@
+_          _@
+_********* _@
+_######### _@
+_######### _@
+_          _@
+_********* _@
+_######### _@
+_######### _@
+_          _@
+_@@
+_       _@
+_       _@
+_       _@
+_       _@
+_*#*    _@
+_###*   _@
+_*###*  _@
+_ *###* _@
+_  *### _@
+_  *### _@
+_ *###* _@
+_*###*  _@
+_###*   _@
+_*#*    _@
+_       _@
+_@@
+_ *#####*  _@
+_*#######* _@
+_###***### _@
+_##*   *## _@
+_##*   *## _@
+_     *### _@
+_   *####* _@
+_  *####*  _@
+_ *###**   _@
+_ *##*     _@
+_  **      _@
+_  **      _@
+_ *##      _@
+_ *##      _@
+_          _@
+_@@
+_           _@
+_           _@
+_           _@
+_           _@
+_  *####**  _@
+_ *##*#*##* _@
+_ ##**#**#* _@
+_*#* #*# *# _@
+_*#  ### *# _@
+_*#* #*# *# _@
+_ ## # #*## _@
+_ *### ###* _@
+_  *#####*  _@
+_    ***    _@
+_           _@
+_@@
+_  *###*   _@
+_ *#####*  _@
+_*###*###* _@
+_###* *### _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_###***### _@
+_######### _@
+_######### _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_          _@
+_@@
+_#######*  _@
+_########* _@
+_###***### _@
+_##*   *## _@
+_##*   *## _@
+_##*  *### _@
+_########* _@
+_########* _@
+_###***### _@
+_##*   *## _@
+_##*   *## _@
+_###***### _@
+_########* _@
+_#######*  _@
+_          _@
+_@@
+_ *#####*  _@
+_*#######* _@
+_###***### _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*       _@
+_##*       _@
+_##*       _@
+_##*   *## _@
+_##*   *## _@
+_###***### _@
+_*#######* _@
+_ *#####*  _@
+_          _@
+_@@
+_######*   _@
+_#######*  _@
+_###*####* _@
+_##*  *### _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*  *### _@
+_###*####* _@
+_#######*  _@
+_######*   _@
+_          _@
+_@@
+_######### _@
+_######### _@
+_###****** _@
+_##*       _@
+_##*       _@
+_##*       _@
+_#######*  _@
+_#######*  _@
+_###****   _@
+_##*       _@
+_##*       _@
+_###****** _@
+_######### _@
+_######### _@
+_          _@
+_@@
+_######### _@
+_######### _@
+_###****** _@
+_##*       _@
+_##*       _@
+_##*       _@
+_#######*  _@
+_#######*  _@
+_###****   _@
+_##*       _@
+_##*       _@
+_##*       _@
+_##*       _@
+_##*       _@
+_          _@
+_@@
+_ *#####*  _@
+_*#######* _@
+_###***### _@
+_##*   *## _@
+_##*   *## _@
+_##*       _@
+_##* ##### _@
+_##* ##### _@
+_##* **### _@
+_##*   *## _@
+_##*   *## _@
+_###***### _@
+_*######## _@
+_ *####### _@
+_          _@
+_@@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_######### _@
+_######### _@
+_###***### _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_          _@
+_@@
+_######### _@
+_######### _@
+_***###*** _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_***###*** _@
+_######### _@
+_######### _@
+_          _@
+_@@
+_   *##### _@
+_   *##### _@
+_    **### _@
+_      *## _@
+_      *## _@
+_      *## _@
+_      *## _@
+_      *## _@
+_      *## _@
+_##*   *## _@
+_##*   *## _@
+_###***### _@
+_*#######* _@
+_ *#####*  _@
+_          _@
+_@@
+_##*   *## _@
+_##*   *## _@
+_##*   ### _@
+_##*  *##* _@
+_##*  ###* _@
+_##* *##*  _@
+_#######*  _@
+_#######   _@
+_###*###*  _@
+_##* *###  _@
+_##*  *##* _@
+_##*   ### _@
+_##*   *## _@
+_##*   *## _@
+_          _@
+_@@
+_##*       _@
+_##*       _@
+_##*       _@
+_##*       _@
+_##*       _@
+_##*       _@
+_##*       _@
+_##*       _@
+_##*       _@
+_##*       _@
+_##*       _@
+_###****** _@
+_######### _@
+_######### _@
+_          _@
+_@@
+_##*   *## _@
+_###   ### _@
+_###* *### _@
+_####*#### _@
+_######### _@
+_######### _@
+_##*###*## _@
+_##*###*## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_          _@
+_@@
+_##*   *## _@
+_###   *## _@
+_###*  *## _@
+_####* *## _@
+_####* *## _@
+_#####**## _@
+_######*## _@
+_##*###### _@
+_##**##### _@
+_##* *#### _@
+_##* *#### _@
+_##*  *### _@
+_##*   ### _@
+_##*   *## _@
+_          _@
+_@@
+_ *#####*  _@
+_*#######* _@
+_###***### _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_###***### _@
+_*#######* _@
+_ *#####*  _@
+_          _@
+_@@
+_#######*  _@
+_########* _@
+_###***### _@
+_##*   *## _@
+_##*   *## _@
+_##*  *### _@
+_########* _@
+_#######*  _@
+_###****   _@
+_##*       _@
+_##*       _@
+_##*       _@
+_##*       _@
+_##*       _@
+_          _@
+_@@
+_ *#####*  _@
+_*#######* _@
+_###***### _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##* *#### _@
+_##* ##### _@
+_####*#### _@
+_*######## _@
+_ *######* _@
+_          _@
+_@@
+_#######*  _@
+_########* _@
+_###***### _@
+_##*   *## _@
+_##*   *## _@
+_##*  *### _@
+_########* _@
+_########* _@
+_###***### _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_          _@
+_@@
+_  *#####*  _@
+_ *#######* _@
+_ ###***### _@
+_ ##*   *## _@
+_ ##*   *## _@
+_ ###*      _@
+_ *######*  _@
+_  *######* _@
+_   ****### _@
+_ ##*   *## _@
+_ ##*   *## _@
+_ ###***### _@
+_ *#######* _@
+_  *#####*  _@
+_           _@
+_@@
+_######### _@
+_######### _@
+_***###*** _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_          _@
+_@@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_###***### _@
+_*#######* _@
+_ *#####*  _@
+_          _@
+_@@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_###   ### _@
+_*##* *##* _@
+_ ###*###  _@
+_ *#####*  _@
+_  #####   _@
+_  *###*   _@
+_   ##*    _@
+_          _@
+_@@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*###*## _@
+_##*###*## _@
+_######### _@
+_######### _@
+_####*#### _@
+_###* *### _@
+_###   ### _@
+_##*   *## _@
+_          _@
+_@@
+_##*   *## _@
+_###   ### _@
+_###* *### _@
+_*### ###* _@
+_ ###*###  _@
+_ *#####*  _@
+_  #####   _@
+_  #####   _@
+_ *#####*  _@
+_ ###*###  _@
+_*### ###* _@
+_###* *### _@
+_###   ### _@
+_##*   *## _@
+_          _@
+_@@
+_##*   ##* _@
+_##*   ##* _@
+_##*   ##* _@
+_##*  *##* _@
+_###  *##* _@
+_###**###* _@
+_*######*  _@
+_ *####*   _@
+_  *##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_          _@
+_@@
+_######### _@
+_######### _@
+_*****###* _@
+_    *###* _@
+_    ###*  _@
+_   *###   _@
+_   ###*   _@
+_  *###    _@
+_  ###*    _@
+_ *###     _@
+_*###*     _@
+_*###***** _@
+_######### _@
+_######### _@
+_          _@
+_@@
+_##*    _@
+_##*    _@
+_##*    _@
+_##*    _@
+_##*    _@
+_##*    _@
+_##*    _@
+_##*    _@
+_##*    _@
+_##*    _@
+_###**  _@
+_#####* _@
+_#####* _@
+_       _@
+_       _@
+_@@
+_*#*       _@
+_###*      _@
+_*##*      _@
+_*###*     _@
+_ *##*     _@
+_  ###*    _@
+_  *###    _@
+_   ###*   _@
+_   *###   _@
+_    *##*  _@
+_    *###* _@
+_     *##* _@
+_     *### _@
+_      *#* _@
+_          _@
+_@@
+_   ##* _@
+_   ##* _@
+_   ##* _@
+_   ##* _@
+_   ##* _@
+_   ##* _@
+_   ##* _@
+_   ##* _@
+_   ##* _@
+_   ##* _@
+_***##* _@
+_#####* _@
+_#####* _@
+_       _@
+_       _@
+_@@
+_      _@
+_      _@
+_      _@
+_      _@
+_      _@
+_      _@
+_      _@
+_      _@
+_      _@
+_      _@
+_      _@
+_ *#*  _@
+_*###* _@
+_##*## _@
+_      _@
+_@@
+_           _@
+_           _@
+_           _@
+_           _@
+_           _@
+_           _@
+_           _@
+_           _@
+_           _@
+_           _@
+_********** _@
+_########## _@
+_########## _@
+_           _@
+_           _@
+_@@
+_     _@
+_     _@
+_     _@
+_     _@
+_     _@
+_     _@
+_     _@
+_     _@
+_     _@
+_     _@
+_     _@
+_*#*  _@
+_###* _@
+_ *## _@
+_     _@
+_@@
+_        _@
+_        _@
+_        _@
+_ *###*  _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_        _@
+_@@
+_        _@
+_        _@
+_        _@
+_#####*  _@
+_######* _@
+_##**### _@
+_##* *## _@
+_####### _@
+_######* _@
+_##**### _@
+_##* *## _@
+_##**### _@
+_######* _@
+_#####*  _@
+_        _@
+_@@
+_        _@
+_        _@
+_        _@
+_ *###*  _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##*     _@
+_##*     _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###*  _@
+_        _@
+_@@
+_        _@
+_        _@
+_        _@
+_#####*  _@
+_######* _@
+_##*#### _@
+_##* ### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* ### _@
+_##*#### _@
+_######* _@
+_#####*  _@
+_        _@
+_@@
+_         _@
+_         _@
+_         _@
+_#######  _@
+_#######* _@
+_##*****  _@
+_##*      _@
+_######   _@
+_######   _@
+_##****   _@
+_##*      _@
+_##*****  _@
+_#######* _@
+_#######  _@
+_         _@
+_@@
+_         _@
+_         _@
+_         _@
+_#######  _@
+_#######* _@
+_##*****  _@
+_##*      _@
+_######   _@
+_######   _@
+_##****   _@
+_##*      _@
+_##*      _@
+_##*      _@
+_##*      _@
+_         _@
+_@@
+_        _@
+_        _@
+_        _@
+_ *###*  _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##*#### _@
+_##*#### _@
+_##***## _@
+_##* *## _@
+_###*### _@
+_*###### _@
+_ *##### _@
+_        _@
+_@@
+_        _@
+_        _@
+_        _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_####### _@
+_####### _@
+_##***## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_        _@
+_@@
+_        _@
+_        _@
+_        _@
+_####### _@
+_####### _@
+_***##** _@
+_  *##   _@
+_  *##   _@
+_  *##   _@
+_  *##   _@
+_  *##   _@
+_***##** _@
+_####### _@
+_####### _@
+_        _@
+_@@
+_        _@
+_        _@
+_        _@
+_  *#### _@
+_  *#### _@
+_  ***## _@
+_    *## _@
+_    *## _@
+_    *## _@
+_    *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###*  _@
+_        _@
+_@@
+_        _@
+_        _@
+_        _@
+_##* *## _@
+_##* *## _@
+_##**### _@
+_##**##* _@
+_#####*  _@
+_#####*  _@
+_##*###  _@
+_##**##* _@
+_##* ### _@
+_##* *## _@
+_##* *## _@
+_        _@
+_@@
+_         _@
+_         _@
+_         _@
+_##*      _@
+_##*      _@
+_##*      _@
+_##*      _@
+_##*      _@
+_##*      _@
+_##*      _@
+_##*      _@
+_##*****  _@
+_#######* _@
+_#######  _@
+_         _@
+_@@
+_        _@
+_        _@
+_        _@
+_##* *## _@
+_### ### _@
+_###*### _@
+_####### _@
+_####### _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_        _@
+_@@
+_        _@
+_        _@
+_        _@
+_##* *## _@
+_### *## _@
+_###**## _@
+_####*## _@
+_####*## _@
+_####### _@
+_##*#### _@
+_##*#### _@
+_##**### _@
+_##* ### _@
+_##* *## _@
+_        _@
+_@@
+_        _@
+_        _@
+_        _@
+_ *###*  _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###*  _@
+_        _@
+_@@
+_        _@
+_        _@
+_        _@
+_#####*  _@
+_######* _@
+_##**### _@
+_##* *## _@
+_####### _@
+_######* _@
+_##****  _@
+_##*     _@
+_##*     _@
+_##*     _@
+_##*     _@
+_        _@
+_@@
+_        _@
+_        _@
+_        _@
+_ *###*  _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##***## _@
+_##*#### _@
+_####### _@
+_*###### _@
+_ *####* _@
+_        _@
+_@@
+_        _@
+_        _@
+_        _@
+_#####*  _@
+_######* _@
+_##**### _@
+_##* *## _@
+_####### _@
+_######* _@
+_##**### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_        _@
+_@@
+_        _@
+_        _@
+_        _@
+_ *###*  _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_#####*  _@
+_*#####* _@
+_ ***### _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###*  _@
+_        _@
+_@@
+_        _@
+_        _@
+_        _@
+_####### _@
+_####### _@
+_***##** _@
+_  *##   _@
+_  *##   _@
+_  *##   _@
+_  *##   _@
+_  *##   _@
+_  *##   _@
+_  *##   _@
+_  *##   _@
+_        _@
+_@@
+_        _@
+_        _@
+_        _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###*  _@
+_        _@
+_@@
+_        _@
+_        _@
+_        _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ #####  _@
+_ *###*  _@
+_  *#*   _@
+_        _@
+_@@
+_        _@
+_        _@
+_        _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_####### _@
+_####### _@
+_####### _@
+_####### _@
+_###*### _@
+_### ### _@
+_##* *## _@
+_        _@
+_@@
+_        _@
+_        _@
+_        _@
+_##* *## _@
+_##* *## _@
+_*##*##* _@
+_*#####* _@
+_ #####  _@
+_ *###*  _@
+_ #####  _@
+_*#####* _@
+_*##*##* _@
+_##* *## _@
+_##* *## _@
+_        _@
+_@@
+_         _@
+_         _@
+_         _@
+_###  ##* _@
+_###  ##* _@
+_### *##* _@
+_###**##* _@
+_*######  _@
+_ *####*  _@
+_  *##*   _@
+_  *##    _@
+_  *##    _@
+_  *##    _@
+_  *##    _@
+_         _@
+_@@
+_        _@
+_        _@
+_        _@
+_####### _@
+_####### _@
+_****##* _@
+_   ###* _@
+_  *##*  _@
+_  ###   _@
+_ *##*   _@
+_*###    _@
+_*##**** _@
+_####### _@
+_####### _@
+_        _@
+_@@
+_  ##*   _@
+_ *##*   _@
+_*###*   _@
+_*###*   _@
+_ *##*   _@
+_  ##*   _@
+_  ##*   _@
+_  ##*   _@
+_  ##*   _@
+_  ##*   _@
+_  ####* _@
+_  *#### _@
+_   *### _@
+_        _@
+_        _@
+_@@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_    _@
+_    _@
+_@@
+_  ##*  _@
+_  ##*  _@
+_  ###* _@
+_  ###* _@
+_  ##*  _@
+_  ##*  _@
+_  ##*  _@
+_  ##*  _@
+_  ##*  _@
+_ *##*  _@
+_*###*  _@
+_###*   _@
+_##*    _@
+_       _@
+_       _@
+_@@
+_          _@
+_          _@
+_          _@
+_          _@
+_          _@
+_          _@
+_          _@
+_          _@
+_          _@
+_          _@
+_ ****     _@
+_*#####*#* _@
+_######### _@
+_*****###* _@
+_          _@
+_@@
+_  *##*    _@
+_ *####*   _@
+_*######*  _@
+_#### ###* _@
+_###* *##* _@
+_###  *##* _@
+_###  *##* _@
+_###***##* _@
+_########* _@
+_########* _@
+_###* *##* _@
+_###  *##* _@
+_###  *##* _@
+_###   ##* _@
+_          _@
+_@@
+_ *####*   _@
+_*######*  _@
+_####*###* _@
+_###* *##* _@
+_###  *##* _@
+_###  *##* _@
+_###  *##* _@
+_###  *##* _@
+_###  *##* _@
+_###  *##* _@
+_###* *##* _@
+_####*###* _@
+_*######*  _@
+_ *####*   _@
+_          _@
+_@@
+_###   ##* _@
+_###  *##* _@
+_###  *##* _@
+_###  *##* _@
+_###  *##* _@
+_###  *##* _@
+_###  *##* _@
+_###  *##* _@
+_###  *##* _@
+_###  *##* _@
+_###* *##* _@
+_####*###* _@
+_*######*  _@
+_ *####*   _@
+_          _@
+_@@
+_        _@
+_ *# *#  _@
+_  *  *  _@
+_ *###*  _@
+_*#####* _@
+_####### _@
+_### *## _@
+_##* *## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_        _@
+_@@
+_        _@
+_ *# *#  _@
+_  *  *  _@
+_ *####* _@
+_*###### _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*###### _@
+_ *####* _@
+_        _@
+_@@
+_        _@
+_ *# *#  _@
+_  *  *  _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*###### _@
+_ *####* _@
+_        _@
+_@@
+_##*   *## _@
+_##*  *### _@
+_########* _@
+_########* _@
+_###***### _@
+_##*   *## _@
+_##*   *## _@
+_##*  *### _@
+_##* *###* _@
+_##**###*  _@
+_  *###*   _@
+_  ###*    _@
+_  *#*     _@
+_          _@
+_          _@
+_@@
+0x45e EXT
+_  *##    _@
+_  *##    _@
+_ *####*  _@
+_#######* _@
+_###**##* _@
+_###  ##* _@
+_###      _@
+_###      _@
+_###  ##* _@
+_###**##* _@
+_#######* _@
+_*#####*  _@
+_ *####   _@
+_  *##    _@
+_         _@
+_@@
+0x408 EXT
+_  *#####*  _@
+_ *#######* _@
+_ ###***### _@
+_ ##*   *## _@
+_ ##*   *## _@
+_*##*       _@
+_#######    _@
+_#######    _@
+_*###***    _@
+_ ##*       _@
+_ ##*       _@
+_*###***    _@
+_#######    _@
+_#######    _@
+_           _@
+_@@
+0x490 EXT
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_###  *### _@
+_###**#### _@
+_*#######  _@
+_ *#####   _@
+_  *###    _@
+_ ######   _@
+_ ######   _@
+_ **##**   _@
+_ ######   _@
+_ ######   _@
+_ **##**   _@
+_          _@
+_@@
+0xa4 EXT
+_       _@
+_       _@
+_       _@
+_       _@
+_       _@
+_       _@
+_       _@
+_       _@
+_##**## _@
+_###### _@
+_*#**#* _@
+_*#**#* _@
+_###### _@
+_##**## _@
+_       _@
+_@@
+0x2030 EXT
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #****# _@
+_ ###### _@
+_        _@
+_@@
+0x457 EXT
+_     ##*  _@
+_     ##*  _@
+_     **   _@
+_     ***  _@
+_    *##*  _@
+_   *###*  _@
+_ *#####   _@
+_*#####*   _@
+_###***    _@
+_##*   *## _@
+_##*   *## _@
+_####*#### _@
+_*#######* _@
+_ *#####*  _@
+_          _@
+_@@
+0x40e EXT
+_##* _@
+_##* _@
+_**  _@
+_    _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_##* _@
+_    _@
+_@@
+0xa7 EXT
+_### *## _@
+_####*   _@
+_*#####* _@
+_####### _@
+_##***## _@
+_##***## _@
+_####### _@
+_*#####* _@
+_  *#### _@
+_##**### _@
+_###*### _@
+_*#####* _@
+_ *####* _@
+_        _@
+_        _@
+_@@
+0xb6 EXT
+_  *############# _@
+_ *############## _@
+_*########***###* _@
+_*########*  ##*  _@
+_*########*  ##*  _@
+_*########*  ##*  _@
+_ *#######*  ##*  _@
+_  *######*  ##*  _@
+_      *##*  ##*  _@
+_       ##*  ##*  _@
+_       ##*  ##*  _@
+_       ##*  ##*  _@
+_       ##*  ##*  _@
+_       ##*  ##*  _@
+_                 _@
+_@@
+0xb5 EXT
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_###***### _@
+_######### _@
+_########* _@
+_##*       _@
+_##*       _@
+_##*       _@
+_          _@
+_          _@
+_@@
+0xa9 EXT
+_           _@
+_           _@
+_           _@
+_           _@
+_  *####**  _@
+_ *#######* _@
+_ ##*#####* _@
+_*#**#**#*# _@
+_*# *# ***# _@
+_*#**#**#*# _@
+_ ## ###*## _@
+_ *##***##* _@
+_  *#####*  _@
+_    ***    _@
+_           _@
+_@@
+0xae EXT
+_           _@
+_           _@
+_           _@
+_           _@
+_  *####**  _@
+_ *##***##* _@
+_ ##*###*#* _@
+_*#* #*# *# _@
+_*#  ### *# _@
+_*#* #*# *# _@
+_ ## # #*## _@
+_ *##* ###* _@
+_  *#####*  _@
+_    ***    _@
+_           _@
+_@@
+0x45b EXT
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #****# _@
+_ ###### _@
+_        _@
+_@@
+0x40a EXT
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #   *# _@
+_ #****# _@
+_ ###### _@
+_        _@
+_@@
+0x42f EXT
+_##*   *## _@
+_##*  *### _@
+_########* _@
+_########* _@
+_###***### _@
+_##*   *## _@
+_##*   *## _@
+_##*  *### _@
+_##* *###* _@
+_##**###*  _@
+_  *###*   _@
+_  ###*    _@
+_  *#*     _@
+_          _@
+_          _@
+_@@
+0x410 EXT
+_  *###*   _@
+_ *#####*  _@
+_*###*###* _@
+_###* *### _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_###***### _@
+_######### _@
+_######### _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_          _@
+_@@
+0x411 EXT
+_  *###*   _@
+_ *#####*  _@
+_*###*###* _@
+_###* *### _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_###***### _@
+_######### _@
+_######### _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_          _@
+_@@
+0x412 EXT
+_  *###*   _@
+_ *#####*  _@
+_*###*###* _@
+_###* *### _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_###***### _@
+_######### _@
+_######### _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_          _@
+_@@
+0x413 EXT
+_  *###*   _@
+_ *#####*  _@
+_*###*###* _@
+_###* *### _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_###***### _@
+_######### _@
+_######### _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_          _@
+_@@
+0x414 EXT
+_  *##*    _@
+_ *####*   _@
+_*######*  _@
+_#### ###* _@
+_###* *##* _@
+_###  *##* _@
+_###  *##* _@
+_###***##* _@
+_########* _@
+_########* _@
+_###* *##* _@
+_###  *##* _@
+_###  *##* _@
+_###   ##* _@
+_          _@
+_@@
+0x415 EXT
+_  *###*   _@
+_ *#####*  _@
+_*###*###* _@
+_###* *### _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_###***### _@
+_######### _@
+_######### _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_          _@
+_@@
+0x416 EXT
+_  *###*######### _@
+_ *############## _@
+_*###*####******* _@
+_###* *###        _@
+_##*   *##        _@
+_##*   *##*       _@
+_##*   *#######   _@
+_###***########   _@
+_#########*****   _@
+_#########        _@
+_##*   *##        _@
+_##*   *##******* _@
+_##*   *######### _@
+_##*   *######### _@
+_                 _@
+_@@
+0x417 EXT
+_##*  *##* _@
+_##*   ##* _@
+_##*   ##* _@
+_##*       _@
+_##*       _@
+_##*       _@
+_##*   ##* _@
+_##*  *##* _@
+_###**###* _@
+_*######*  _@
+_ *####*   _@
+_   ##*    _@
+_   ##*    _@
+_          _@
+_          _@
+_@@
+0x418 EXT
+_######### _@
+_######### _@
+_###****** _@
+_##*       _@
+_##*       _@
+_##*       _@
+_#######*  _@
+_#######*  _@
+_###****   _@
+_##*       _@
+_##*       _@
+_###****** _@
+_######### _@
+_######### _@
+_          _@
+_@@
+0x419 EXT
+_######### _@
+_######### _@
+_###****** _@
+_##*       _@
+_##*       _@
+_##*       _@
+_#######*  _@
+_#######*  _@
+_###****   _@
+_##*       _@
+_##*       _@
+_###****** _@
+_######### _@
+_######### _@
+_          _@
+_@@
+0x41a EXT
+_######### _@
+_######### _@
+_###****** _@
+_##*       _@
+_##*       _@
+_##*       _@
+_#######   _@
+_#######   _@
+_###****   _@
+_##*       _@
+_##*       _@
+_###****** _@
+_######### _@
+_######### _@
+_          _@
+_@@
+0x41b EXT
+_#########* _@
+_#########* _@
+_###******* _@
+_###        _@
+_###        _@
+_###*       _@
+_########   _@
+_########   _@
+_###*****   _@
+_###        _@
+_###        _@
+_###******* _@
+_#########* _@
+_#########* _@
+_           _@
+_@@
+0x41c EXT
+_######### _@
+_######### _@
+_***###*** _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_***###*** _@
+_######### _@
+_######### _@
+_          _@
+_@@
+0x41d EXT
+_######### _@
+_######### _@
+_***###*** _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_***###*** _@
+_######### _@
+_######### _@
+_          _@
+_@@
+0x41e EXT
+_######### _@
+_######### _@
+_***###*** _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_***###*** _@
+_######### _@
+_######### _@
+_          _@
+_@@
+0x41f EXT
+_######### _@
+_######### _@
+_***###*** _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_   ##*    _@
+_***###*** _@
+_######### _@
+_######### _@
+_          _@
+_@@
+0x420 EXT
+_ *#####*    _@
+_ *######*   _@
+_ *##**###*  _@
+_ *##  *###* _@
+_ *##   *##* _@
+_ *##    ##* _@
+_######  ##* _@
+_######  ##* _@
+_**##**  ##* _@
+_ *##   *##* _@
+_ *##  *###* _@
+_ *##**###*  _@
+_ *######*   _@
+_ *#####*    _@
+_            _@
+_@@
+0x421 EXT
+_##*   *## _@
+_###   *## _@
+_###*  *## _@
+_####* *## _@
+_####* *## _@
+_#####**## _@
+_######*## _@
+_##*###### _@
+_##**##### _@
+_##* ##### _@
+_##* *#### _@
+_##*  *### _@
+_##*   ### _@
+_##*   *## _@
+_          _@
+_@@
+0x422 EXT
+_ *#####*  _@
+_*#######* _@
+_###***### _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_####*#### _@
+_*#######* _@
+_ *#####*  _@
+_          _@
+_@@
+0x423 EXT
+_ *#####*  _@
+_*#######* _@
+_###***### _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_####*#### _@
+_*#######* _@
+_ *#####*  _@
+_          _@
+_@@
+0x424 EXT
+_ *#####*  _@
+_*#######* _@
+_###***### _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_###***### _@
+_*#######* _@
+_ *#####*  _@
+_          _@
+_@@
+0x425 EXT
+_ *#####*  _@
+_*#######* _@
+_###***### _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_###***### _@
+_*#######* _@
+_ *#####*  _@
+_          _@
+_@@
+0x426 EXT
+_ *####*   _@
+_*######*  _@
+_####*###* _@
+_###* *##* _@
+_###  *##* _@
+_###  *##* _@
+_###  *##* _@
+_###  *##* _@
+_###  *##* _@
+_###  *##* _@
+_###* *##* _@
+_####*###* _@
+_*######*  _@
+_ *####*   _@
+_          _@
+_@@
+0x427 EXT
+_        _@
+_        _@
+_        _@
+_        _@
+_        _@
+_        _@
+_        _@
+_*#* *#* _@
+_###*### _@
+_*#####* _@
+_ *###*  _@
+_*#####* _@
+_###*### _@
+_*#* *#* _@
+_        _@
+_@@
+0x428 EXT
+_ *######* _@
+_*######## _@
+_###**#### _@
+_##* *#### _@
+_##* ##### _@
+_##**##### _@
+_##*###### _@
+_######*## _@
+_#####**## _@
+_##### *## _@
+_####* *## _@
+_####**### _@
+_########* _@
+_*######*  _@
+_          _@
+_@@
+0x429 EXT
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_####*#### _@
+_*#######* _@
+_ *#####*  _@
+_          _@
+_@@
+0x42a EXT
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_####*#### _@
+_*#######* _@
+_ *#####*  _@
+_          _@
+_@@
+0x42b EXT
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_##*   *## _@
+_###***### _@
+_*#######* _@
+_ *#####*  _@
+_          _@
+_@@
+0x42c EXT
+_###   ##* _@
+_###  *##* _@
+_###  *##* _@
+_###  *##* _@
+_###  *##* _@
+_###  *##* _@
+_###  *##* _@
+_###  *##* _@
+_###  *##* _@
+_###  *##* _@
+_###* *##* _@
+_####*###* _@
+_*######*  _@
+_ *####*   _@
+_          _@
+_@@
+0x430 EXT
+_ ##*    _@
+_ ###    _@
+_  **    _@
+_ *###*  _@
+_*#####* _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_        _@
+_@@
+0x431 EXT
+_   *##  _@
+_   ###  _@
+_   **   _@
+_ *###*  _@
+_*#####* _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_        _@
+_@@
+0x432 EXT
+_  *##*  _@
+_  #*##  _@
+_        _@
+_ *###*  _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_        _@
+_@@
+0x433 EXT
+_####### _@
+_*#*#### _@
+_   ***  _@
+_ *###*  _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_        _@
+_@@
+0x434 EXT
+_        _@
+_ *# *#  _@
+_  *  *  _@
+_ *###*  _@
+_*#####* _@
+_####### _@
+_### *## _@
+_##* *## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_        _@
+_@@
+0x435 EXT
+_  *##   _@
+_  *##   _@
+_        _@
+_ *###*  _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##*  ## _@
+_##***## _@
+_####### _@
+_####### _@
+_##* *## _@
+_##*  ## _@
+_##*  ## _@
+_        _@
+_@@
+0x436 EXT
+_              _@
+_              _@
+_              _@
+_ *##########* _@
+_*###########* _@
+_###*###*****  _@
+_##* *##*      _@
+_##*  ######   _@
+_##***######   _@
+_#######****   _@
+_#######*      _@
+_##* *##*****  _@
+_##*  #######* _@
+_##*  #######* _@
+_              _@
+_@@
+0x437 EXT
+_ *####*  _@
+_*######  _@
+_###*###* _@
+_### *##* _@
+_###  ##* _@
+_###      _@
+_###      _@
+_###  ##* _@
+_###**##* _@
+_#######* _@
+_ *####*  _@
+_  *##    _@
+_  *##    _@
+_         _@
+_         _@
+_@@
+0x438 EXT
+_ ##*     _@
+_ *##     _@
+_  **     _@
+_#######  _@
+_#######* _@
+_##*****  _@
+_##*      _@
+_######   _@
+_######   _@
+_##****   _@
+_##*      _@
+_##*****  _@
+_#######* _@
+_#######  _@
+_         _@
+_@@
+0x439 EXT
+_   *##   _@
+_   ##*   _@
+_   **    _@
+_#######  _@
+_#######* _@
+_##*****  _@
+_##*      _@
+_######   _@
+_######   _@
+_##****   _@
+_##*      _@
+_##*****  _@
+_#######* _@
+_#######  _@
+_         _@
+_@@
+0x43a EXT
+_  *##*   _@
+_  #*##   _@
+_         _@
+_#######  _@
+_#######* _@
+_##*****  _@
+_##*      _@
+_######   _@
+_######   _@
+_##****   _@
+_##*      _@
+_##*****  _@
+_#######* _@
+_#######  _@
+_         _@
+_@@
+0x43b EXT
+_         _@
+_ *# *#   _@
+_  *  *   _@
+_#######  _@
+_#######* _@
+_##*****  _@
+_##*      _@
+_######   _@
+_######   _@
+_##****   _@
+_##*      _@
+_##*****  _@
+_#######* _@
+_#######  _@
+_         _@
+_@@
+0x43c EXT
+_ ##*    _@
+_ *##    _@
+_  **    _@
+_####### _@
+_####### _@
+_***##** _@
+_  *##   _@
+_  *##   _@
+_  *##   _@
+_  *##   _@
+_  *##   _@
+_***##** _@
+_####### _@
+_####### _@
+_        _@
+_@@
+0x43d EXT
+_   *##  _@
+_   ##*  _@
+_   **   _@
+_####### _@
+_####### _@
+_***##** _@
+_  *##   _@
+_  *##   _@
+_  *##   _@
+_  *##   _@
+_  *##   _@
+_***##** _@
+_####### _@
+_####### _@
+_        _@
+_@@
+0x43e EXT
+_  *##*  _@
+_  #*##  _@
+_        _@
+_####### _@
+_####### _@
+_***##** _@
+_  *##   _@
+_  *##   _@
+_  *##   _@
+_  *##   _@
+_  *##   _@
+_***##** _@
+_####### _@
+_####### _@
+_        _@
+_@@
+0x43f EXT
+_        _@
+_ *# *#  _@
+_  *  *  _@
+_####### _@
+_####### _@
+_***##** _@
+_  *##   _@
+_  *##   _@
+_  *##   _@
+_  *##   _@
+_  *##   _@
+_***##** _@
+_####### _@
+_####### _@
+_        _@
+_@@
+0x440 EXT
+_            _@
+_            _@
+_            _@
+_            _@
+_            _@
+_            _@
+_     ##  *  _@
+_     *#  ** _@
+_*#**#*#*# * _@
+_ #**#####*# _@
+_ # ######## _@
+_ ##*##**### _@
+_     *###   _@
+_            _@
+_            _@
+_@@
+0x441 EXT
+_####### _@
+_*#*#### _@
+_   ***  _@
+_##* *## _@
+_### *## _@
+_###**## _@
+_####*## _@
+_####*## _@
+_####### _@
+_##*#### _@
+_##*#### _@
+_##**### _@
+_##* ### _@
+_##* *## _@
+_        _@
+_@@
+0x442 EXT
+_ ##*    _@
+_ *##    _@
+_  **    _@
+_ *###*  _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###*  _@
+_        _@
+_@@
+0x443 EXT
+_   *##  _@
+_   ##*  _@
+_   **   _@
+_ *###*  _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###*  _@
+_        _@
+_@@
+0x444 EXT
+_  *##*  _@
+_  #*##  _@
+_        _@
+_ *####  _@
+_*###### _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*###### _@
+_ *####  _@
+_        _@
+_@@
+0x445 EXT
+_####### _@
+_*#*#### _@
+_   ***  _@
+_ *###*  _@
+_*#####* _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###*  _@
+_        _@
+_@@
+0x446 EXT
+_        _@
+_ *# *#  _@
+_  *  *  _@
+_ *####* _@
+_*###### _@
+_###*### _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*###### _@
+_ *####* _@
+_        _@
+_@@
+0x447 EXT
+_          _@
+_          _@
+_          _@
+_          _@
+_          _@
+_   ##*    _@
+_   ##*    _@
+_   ***    _@
+_********* _@
+_######### _@
+_######### _@
+_   ***    _@
+_   ##*    _@
+_   ##*    _@
+_          _@
+_@@
+0x448 EXT
+_        _@
+_        _@
+_        _@
+_ *##### _@
+_*###### _@
+_###*### _@
+_##*#### _@
+_##*#### _@
+_####### _@
+_####*## _@
+_####*## _@
+_###*### _@
+_######* _@
+_#####*  _@
+_        _@
+_@@
+0x449 EXT
+_ ##*    _@
+_ *##    _@
+_  **    _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###*  _@
+_        _@
+_@@
+0x44a EXT
+_   *##  _@
+_   ##*  _@
+_   **   _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*#####* _@
+_ *###*  _@
+_        _@
+_@@
+0x44b EXT
+_  *##*  _@
+_  #*##  _@
+_        _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*###### _@
+_ *####  _@
+_        _@
+_@@
+0x44c EXT
+_        _@
+_ *# *#  _@
+_  *  *  _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_##* *## _@
+_###*### _@
+_*###### _@
+_ *####* _@
+_        _@
+_@@
diff --git a/resources/figlet/custom/README b/resources/figlet/custom/README
new file mode 100644
--- /dev/null
+++ b/resources/figlet/custom/README
@@ -0,0 +1,2 @@
+Add Figlet ".flf" font files here to make them available to the "figlet"
+Remarkup interpreter.