Page MenuHomec4science

No OneTemporary

File Metadata

Created
Fri, Nov 1, 19:03
This file is larger than 256 KB, so syntax highlighting was skipped.
This document is not UTF8. It was detected as ISO-8859-1 (Latin 1) and converted to UTF8 for display.
diff --git a/externals/cowsay/ChangeLog b/externals/cowsay/ChangeLog
new file mode 100644
index 000000000..b28ef91b8
--- /dev/null
+++ b/externals/cowsay/ChangeLog
@@ -0,0 +1,31 @@
+3.03 28 May 1999
+ - Added cows/tux.cow, as suggested by xmanoel@i.am
+ - Compatibility with 5.6.0, due to a change in qw().
+ - Renamed devil.cow to daemon.cow, since I know better. :-)
+
+3.02 04 November 1999
+ - Fixed boneheaded code placement so that cowsay -l actually works.
+
+3.01 01 November 1999
+ - Fixed compatibility issues between the Text::Wrap module
+ that changed between 5.005_02 and 5.005_03.
+ - Fixed tab expansion issues with Text::Tabs.
+
+3.0 13 April 1999, released 14 August 1999
+ - Rewritten into Perl 5 and presented to the world.
+
+-- Not present in CVS from here on down --
+
+2.x Date?
+ - Arbitrary messages.
+ - Figlet support (-n).
+ - Line wrap length (-w).
+ - Multiple pre-set expressions.
+ - Better arg parsing loop.
+ - Message from stdin or command line.
+
+1.0 Date?
+ - SUBJECT is VERB OBJECT
+
+$Id: ChangeLog,v 1.4 2000/05/29 17:55:24 tony Exp $
+This file is part of cowsay. (c) 1999-2000 Tony Monroe.
diff --git a/externals/cowsay/INSTALL b/externals/cowsay/INSTALL
new file mode 100644
index 000000000..d3844ca56
--- /dev/null
+++ b/externals/cowsay/INSTALL
@@ -0,0 +1,15 @@
+=================
+Installing cowsay
+=================
+
+If you really want to get things installed a nice and pretty way,
+
+ sh install.sh
+
+It will ask approximately one question. If you can't answer it,
+you need serious help.
+
+If the install goes well, you can start cowing immediately! Just
+be sure to read the manual page first...
+
+$Id: INSTALL,v 1.1 1999/08/14 08:03:17 tony Exp $
diff --git a/externals/cowsay/LICENSE b/externals/cowsay/LICENSE
new file mode 100644
index 000000000..944770492
--- /dev/null
+++ b/externals/cowsay/LICENSE
@@ -0,0 +1,36 @@
+==============
+cowsay License
+==============
+
+cowsay is distributed under the same licensing terms as Perl: the
+Artistic License or the GNU General Public License. If you don't
+want to track down these licenses and read them for yourself, use
+the parts that I'd prefer:
+
+(0) I wrote it and you didn't.
+
+(1) Give credit where credit is due if you borrow the code for some
+other purpose.
+
+(2) If you have any bugfixes or suggestions, please notify me so
+that I may incorporate them.
+
+(3) If you try to make money off of cowsay, you suck.
+
+===============
+cowsay Legalese
+===============
+
+(0) Copyright (c) 1999 Tony Monroe. All rights reserved. All
+lefts may or may not be reversed at my discretion.
+
+(1) This software package can be freely redistributed or modified
+under the terms described above in the "cowsay License" section
+of this file.
+
+(2) cowsay is provided "as is," with no warranties whatsoever,
+expressed or implied. If you want some implied warranty about
+merchantability and/or fitness for a particular purpose, you will
+not find it here, because there is no such thing here.
+
+(3) I hate legalese.
diff --git a/externals/cowsay/MANIFEST b/externals/cowsay/MANIFEST
new file mode 100644
index 000000000..a3ff805fe
--- /dev/null
+++ b/externals/cowsay/MANIFEST
@@ -0,0 +1,11 @@
+ChangeLog Changes to recent versions.
+INSTALL Instructions for installing cowsay.
+LICENSE The license for use and redistribution of cowsay.
+MANIFEST This file.
+README Read this first. Really.
+Wrap.pm.diff Diff for Text/Wrap.pm.
+cows/* Support files used by cowsay.
+cowsay Main cowsay executable.
+cowsay.1 Main cowsay manual page.
+install.sh cowsay installation script.
+pgp_public_key.txt Verify the signature file with this key.
diff --git a/externals/cowsay/README b/externals/cowsay/README
new file mode 100644
index 000000000..b5de08c40
--- /dev/null
+++ b/externals/cowsay/README
@@ -0,0 +1,38 @@
+===========
+cowsay 3.03
+===========
+
+cowsay is a configurable talking cow, written in Perl. It operates
+much as the figlet program does, and it written in the same spirit
+of silliness.
+
+cowsay is actually a pretty old program. It has not really been
+released before, and I am releasing it in the hope that someone
+other than myself will be amused by it.
+
+The first major version of cowsay had one cow and one message
+template: $foo is $verb $bar. Not very flexible, but people managed
+to do pretty interesting things with it. The second major version
+scrapped many of the limitations of the first, by allowing arbitrary
+messages, multiple cowfiles, and even support for cows talking in
+figlet. The third version was a rewrite of the second into Perl
+5, whereupon the code got a lot smaller and more manageable. :-)
+
+If you are using Perl 5.004, you may have problems with Text::Wrap.
+(Yeesh, this module changes more than it should...) I've included
+a diff for the Text::Wrap (version 97.011701) that is shipped with
+5.004_04; the concept is simple enough that even older Perls can
+take advantage of this silly little patch; if there is a "sub fill"
+in the documentation for the module, copy it to a more useful
+section of that file. If not, just take "sub fill" wholesale from
+the patch. Oh, and consider upgrading to 5.005_03 or later.
+Please. You'll like it, I promise.
+
+To install cowsay, consult the INSTALL file in this directory.
+
+For the terms and conditions of use, consult the LICENSE file in
+this directory.
+
+-- Tony Monroe (tony@nog.net)
+
+$Id: README,v 1.3 2000/05/28 06:24:46 tony Exp $
diff --git a/externals/cowsay/Wrap.pm.diff b/externals/cowsay/Wrap.pm.diff
new file mode 100644
index 000000000..1da064079
--- /dev/null
+++ b/externals/cowsay/Wrap.pm.diff
@@ -0,0 +1,47 @@
+*** Wrap.pm.in Thu May 22 00:21:42 1997
+--- Wrap.pm Fri Nov 12 10:00:15 1999
+***************
+*** 3,9 ****
+ require Exporter;
+
+ @ISA = (Exporter);
+! @EXPORT = qw(wrap);
+ @EXPORT_OK = qw($columns);
+
+ $VERSION = 97.011701;
+--- 3,9 ----
+ require Exporter;
+
+ @ISA = (Exporter);
+! @EXPORT = qw(wrap fill);
+ @EXPORT_OK = qw($columns);
+
+ $VERSION = 97.011701;
+***************
+*** 66,71 ****
+--- 66,90 ----
+
+ print "-----------$r---------\n" if $debug;;
+ return $r;
++ }
++
++ ## Copied up from below.
++ sub fill
++ {
++ my ($ip, $xp, @raw) = @_;
++ my @para;
++ my $pp;
++
++ for $pp (split(/\n\s+/, join("\n",@raw))) {
++ $pp =~ s/\s+/ /g;
++ my $x = wrap($ip, $xp, $pp);
++ push(@para, $x);
++ }
++
++ # if paragraph_indent is the same as line_indent,
++ # separate paragraphs with blank lines
++
++ return join ($ip eq $xp ? "\n\n" : "\n", @para);
+ }
+
+ 1;
diff --git a/externals/cowsay/cows/bunny.cow b/externals/cowsay/cows/bunny.cow
new file mode 100644
index 000000000..869933f72
--- /dev/null
+++ b/externals/cowsay/cows/bunny.cow
@@ -0,0 +1,10 @@
+##
+## A cute little wabbit
+##
+$the_cow = <<EOC;
+ $thoughts
+ $thoughts \\
+ \\ /\\
+ ( )
+ .( o ).
+EOC
diff --git a/externals/cowsay/cows/cower.cow b/externals/cowsay/cows/cower.cow
new file mode 100644
index 000000000..ae593c656
--- /dev/null
+++ b/externals/cowsay/cows/cower.cow
@@ -0,0 +1,14 @@
+##
+## A cowering cow
+##
+$the_cow = <<EOC;
+ $thoughts
+ $thoughts
+ ,__, | |
+ (oo)\\| |___
+ (__)\\| | )\\_
+ | |_w | \\
+ | | || *
+
+ Cower....
+EOC
diff --git a/externals/cowsay/cows/daemon.cow b/externals/cowsay/cows/daemon.cow
new file mode 100644
index 000000000..03dbce0dc
--- /dev/null
+++ b/externals/cowsay/cows/daemon.cow
@@ -0,0 +1,24 @@
+##
+## 4.4 >> 5.4
+##
+$the_cow = <<EOC;
+ $thoughts , ,
+ $thoughts /( )`
+ $thoughts \\ \\___ / |
+ /- _ `-/ '
+ (/\\/ \\ \\ /\\
+ / / | ` \\
+ O O ) / |
+ `-^--'`< '
+ (_.) _ ) /
+ `.___/` /
+ `-----' /
+<----. __ / __ \\
+<----|====O)))==) \\) /====
+<----' `--' `.__,' \\
+ | |
+ \\ /
+ ______( (_ / \\______
+ ,' ,-----' | \\
+ `--{__________) \\/
+EOC
diff --git a/externals/cowsay/cows/default.cow b/externals/cowsay/cows/default.cow
new file mode 100644
index 000000000..761eafdb4
--- /dev/null
+++ b/externals/cowsay/cows/default.cow
@@ -0,0 +1,7 @@
+$the_cow = <<"EOC";
+ $thoughts ^__^
+ $thoughts ($eyes)\\_______
+ (__)\\ )\\/\\
+ $tongue ||----w |
+ || ||
+EOC
diff --git a/externals/cowsay/cows/dragon-and-cow.cow b/externals/cowsay/cows/dragon-and-cow.cow
new file mode 100644
index 000000000..33be1f2d0
--- /dev/null
+++ b/externals/cowsay/cows/dragon-and-cow.cow
@@ -0,0 +1,21 @@
+##
+## A dragon smiting a cow, possible credit to kube@csua.berkeley.edu
+##
+$the_cow = <<EOC;
+ $thoughts ^ /^
+ $thoughts / \\ // \\
+ $thoughts |\\___/| / \\// .\\
+ $thoughts /O O \\__ / // | \\ \\ *----*
+ / / \\/_/ // | \\ \\ \\ |
+ \@___\@` \\/_ // | \\ \\ \\/\\ \\
+ 0/0/| \\/_ // | \\ \\ \\ \\
+ 0/0/0/0/| \\/// | \\ \\ | |
+ 0/0/0/0/0/_|_ / ( // | \\ _\\ | /
+ 0/0/0/0/0/0/`/,_ _ _/ ) ; -. | _ _\\.-~ / /
+ ,-} _ *-.|.-~-. .~ ~
+ \\ \\__/ `/\\ / ~-. _ .-~ /
+ \\____($eyes) *. } { /
+ ( (--) .----~-.\\ \\-` .~
+ //__\\\\ \\__ Ack! ///.----..< \\ _ -~
+ // \\\\ ///-._ _ _ _ _ _ _{^ - - - - ~
+EOC
diff --git a/externals/cowsay/cows/dragon.cow b/externals/cowsay/cows/dragon.cow
new file mode 100644
index 000000000..297a1aec8
--- /dev/null
+++ b/externals/cowsay/cows/dragon.cow
@@ -0,0 +1,21 @@
+##
+## The Whitespace Dragon
+##
+$the_cow = <<EOC;
+ $thoughts / \\ //\\
+ $thoughts |\\___/| / \\// \\\\
+ /0 0 \\__ / // | \\ \\
+ / / \\/_/ // | \\ \\
+ \@_^_\@'/ \\/_ // | \\ \\
+ //_^_/ \\/_ // | \\ \\
+ ( //) | \\/// | \\ \\
+ ( / /) _|_ / ) // | \\ _\\
+ ( // /) '/,_ _ _/ ( ; -. | _ _\\.-~ .-~~~^-.
+ (( / / )) ,-{ _ `-.|.-~-. .~ `.
+ (( // / )) '/\\ / ~-. _ .-~ .-~^-. \\
+ (( /// )) `. { } / \\ \\
+ (( / )) .----~-.\\ \\-' .~ \\ `. \\^-.
+ ///.----..> \\ _ -~ `. ^-` ^-_
+ ///-._ _ _ _ _ _ _}^ - - - - ~ ~-- ,.-~
+ /.-~
+EOC
diff --git a/externals/cowsay/cows/elephant.cow b/externals/cowsay/cows/elephant.cow
new file mode 100644
index 000000000..959cd3f6d
--- /dev/null
+++ b/externals/cowsay/cows/elephant.cow
@@ -0,0 +1,15 @@
+##
+## An elephant out and about
+##
+$the_cow = <<EOC;
+ $thoughts /\\ ___ /\\
+ $thoughts // \\/ \\/ \\\\
+ (( O O ))
+ \\\\ / \\ //
+ \\/ | | \\/
+ | | | |
+ | | | |
+ | o |
+ | | | |
+ |m| |m|
+EOC
diff --git a/externals/cowsay/cows/eyes.cow b/externals/cowsay/cows/eyes.cow
new file mode 100644
index 000000000..06cdbeb7e
--- /dev/null
+++ b/externals/cowsay/cows/eyes.cow
@@ -0,0 +1,16 @@
+##
+## Evil-looking eyes
+##
+$the_cow = <<EOC;
+ $thoughts
+ $thoughts
+ .::!!!!!!!:.
+ .!!!!!:. .:!!!!!!!!!!!!
+ ~~~~!!!!!!. .:!!!!!!!!!UWWW\$\$\$
+ :\$\$NWX!!: .:!!!!!!XUWW\$\$\$\$\$\$\$\$\$P
+ \$\$\$\$\$##WX!: .<!!!!UW\$\$\$\$" \$\$\$\$\$\$\$\$#
+ \$\$\$\$\$ \$\$\$UX :!!UW\$\$\$\$\$\$\$\$\$ 4\$\$\$\$\$*
+ ^\$\$\$B \$\$\$\$\\ \$\$\$\$\$\$\$\$\$\$\$\$ d\$\$R"
+ "*\$bd\$\$\$\$ '*\$\$\$\$\$\$\$\$\$\$\$o+#"
+ """" """""""
+EOC
diff --git a/externals/cowsay/cows/flaming-sheep.cow b/externals/cowsay/cows/flaming-sheep.cow
new file mode 100644
index 000000000..ad9d620f5
--- /dev/null
+++ b/externals/cowsay/cows/flaming-sheep.cow
@@ -0,0 +1,15 @@
+##
+## The flaming sheep, contributed by Geordan Rosario (geordan@csua.berkeley.edu)
+##
+$the_cow = <<EOC;
+ $thoughts . . .
+ $thoughts . . . ` ,
+ $thoughts .; . : .' : : : .
+ $thoughts i..`: i` i.i.,i i .
+ $thoughts `,--.|i |i|ii|ii|i:
+ U${eyes}U\\.'\@\@\@\@\@\@`.||'
+ \\__/(\@\@\@\@\@\@\@\@\@\@)'
+ (\@\@\@\@\@\@\@\@)
+ `YY~~~~YY'
+ || ||
+EOC
diff --git a/externals/cowsay/cows/head-in.cow b/externals/cowsay/cows/head-in.cow
new file mode 100644
index 000000000..2e5177488
--- /dev/null
+++ b/externals/cowsay/cows/head-in.cow
@@ -0,0 +1,12 @@
+##
+## Go stick yer head in a cow.
+##
+$the_cow = <<EOC;
+ $thoughts
+ $thoughts
+ ^__^ /
+ ($eyes)\\_______/ _________
+ (__)\\ )=( ____|_ \\_____
+ $tongue ||----w | \\ \\ \\_____ |
+ || || || ||
+EOC
diff --git a/externals/cowsay/cows/kitty.cow b/externals/cowsay/cows/kitty.cow
new file mode 100644
index 000000000..64280a8d2
--- /dev/null
+++ b/externals/cowsay/cows/kitty.cow
@@ -0,0 +1,12 @@
+##
+## A kitten of sorts, I think
+##
+$the_cow = <<EOC;
+ $thoughts
+ $thoughts
+ ("`-' '-/") .___..--' ' "`-._
+ ` *_ * ) `-. ( ) .`-.__. `)
+ (_Y_.) ' ._ ) `._` ; `` -. .-'
+ _.. `--'_..-_/ /--' _ .' ,4
+ ( i l ),-'' ( l i),' ( ( ! .-'
+EOC
diff --git a/externals/cowsay/cows/koala.cow b/externals/cowsay/cows/koala.cow
new file mode 100644
index 000000000..83b83425a
--- /dev/null
+++ b/externals/cowsay/cows/koala.cow
@@ -0,0 +1,12 @@
+##
+## From the canonical koala collection
+##
+$the_cow = <<EOC;
+ $thoughts
+ $thoughts
+ ___
+ {~._.~}
+ ( Y )
+ ()~*~()
+ (_)-(_)
+EOC
diff --git a/externals/cowsay/cows/meow.cow b/externals/cowsay/cows/meow.cow
new file mode 100644
index 000000000..ba255da71
--- /dev/null
+++ b/externals/cowsay/cows/meow.cow
@@ -0,0 +1,15 @@
+##
+## A meowing tiger?
+##
+$the_cow = <<EOC;
+ $thoughts
+ $thoughts , _ ___.--'''`--''//-,-_--_.
+ \\`"' ` || \\\\ \\ \\\\/ / // / ,-\\\\`,_
+ /'` \\ \\ || Y | \\|/ / // / - |__ `-,
+ /\@"\\ ` \\ `\\ | | ||/ // | \\/ \\ `-._`-,_.,
+ / _.-. `.-\\,___/\\ _/|_/_\\_\\/|_/ | `-._._)
+ `-'``/ / | // \\__/\\__ / \\__/ \\
+ `-' /-\\/ | -| \\__ \\ |-' |
+ __/\\ / _/ \\/ __,-' ) ,' _|'
+ (((__/(((_.' ((___..-'((__,'
+EOC
diff --git a/externals/cowsay/cows/moofasa.cow b/externals/cowsay/cows/moofasa.cow
new file mode 100644
index 000000000..15119d678
--- /dev/null
+++ b/externals/cowsay/cows/moofasa.cow
@@ -0,0 +1,14 @@
+##
+## MOOfasa.
+##
+$the_cow = <<EOC;
+ $thoughts ____
+ $thoughts / \\
+ | ^__^ |
+ | ($eyes) |______
+ | (__) | )\\/\\
+ \\____/|----w |
+ || ||
+
+ Moofasa
+EOC
diff --git a/externals/cowsay/cows/moose.cow b/externals/cowsay/cows/moose.cow
new file mode 100644
index 000000000..9d193c624
--- /dev/null
+++ b/externals/cowsay/cows/moose.cow
@@ -0,0 +1,9 @@
+$the_cow = <<EOC;
+ $thoughts
+ $thoughts \\_\\_ _/_/
+ $thoughts \\__/
+ ($eyes)\\_______
+ (__)\\ )\\/\\
+ $tongue ||----w |
+ || ||
+EOC
diff --git a/externals/cowsay/cows/mutilated.cow b/externals/cowsay/cows/mutilated.cow
new file mode 100644
index 000000000..99d35acd1
--- /dev/null
+++ b/externals/cowsay/cows/mutilated.cow
@@ -0,0 +1,10 @@
+##
+## A mutilated cow, from aspolito@csua.berkeley.edu
+##
+$the_cow = <<EOC;
+ $thoughts \\_______
+ v__v $thoughts \\ O )
+ ($eyes) ||----w |
+ (__) || || \\/\\
+ $tongue
+EOC
diff --git a/externals/cowsay/cows/satanic.cow b/externals/cowsay/cows/satanic.cow
new file mode 100644
index 000000000..c50ceb10a
--- /dev/null
+++ b/externals/cowsay/cows/satanic.cow
@@ -0,0 +1,12 @@
+##
+## Satanic cow, source unknown.
+##
+$the_cow = <<EOC;
+ $thoughts
+ $thoughts (__)
+ (\\/)
+ /-------\\/
+ / | 666 ||
+* ||----||
+ ~~ ~~
+EOC
diff --git a/externals/cowsay/cows/sheep.cow b/externals/cowsay/cows/sheep.cow
new file mode 100644
index 000000000..b0949066b
--- /dev/null
+++ b/externals/cowsay/cows/sheep.cow
@@ -0,0 +1,13 @@
+##
+## The non-flaming sheep.
+##
+$the_cow = <<EOC
+ $thoughts
+ $thoughts
+ __
+ U${eyes}U\\.'\@\@\@\@\@\@`.
+ \\__/(\@\@\@\@\@\@\@\@\@\@)
+ (\@\@\@\@\@\@\@\@)
+ `YY~~~~YY'
+ || ||
+EOC
diff --git a/externals/cowsay/cows/skeleton.cow b/externals/cowsay/cows/skeleton.cow
new file mode 100644
index 000000000..72ef35837
--- /dev/null
+++ b/externals/cowsay/cows/skeleton.cow
@@ -0,0 +1,15 @@
+##
+## This 'Scowleton' brought to you by one of
+## {appel,kube,rowe}@csua.berkeley.edu
+##
+$the_cow = <<EOC;
+ $thoughts (__)
+ $thoughts /$eyes|
+ $thoughts (_"_)*+++++++++*
+ //I#\\\\\\\\\\\\\\\\I\\
+ I[I|I|||||I I `
+ I`I'///'' I I
+ I I I I
+ ~ ~ ~ ~
+ Scowleton
+EOC
diff --git a/externals/cowsay/cows/small.cow b/externals/cowsay/cows/small.cow
new file mode 100644
index 000000000..5b4331963
--- /dev/null
+++ b/externals/cowsay/cows/small.cow
@@ -0,0 +1,10 @@
+##
+## A small cow, artist unknown
+##
+$eyes = ".." unless ($eyes);
+$the_cow = <<EOC;
+ $thoughts ,__,
+ $thoughts ($eyes)____
+ (__) )\\
+ $tongue||--|| *
+EOC
diff --git a/externals/cowsay/cows/squirrel.cow b/externals/cowsay/cows/squirrel.cow
new file mode 100644
index 000000000..a1afabdd7
--- /dev/null
+++ b/externals/cowsay/cows/squirrel.cow
@@ -0,0 +1,13 @@
+$the_cow = <<EOC;
+ $thoughts
+ $thoughts
+ _ _
+ | \__/| .~ ~.
+ /$eyes `./ .'
+ {o__, \ {
+ / . . ) \
+ `-` '-' \ }
+ .( _( )_.'
+ '---.~_ _ _|
+
+EOC
diff --git a/externals/cowsay/cows/stegosaurus.cow b/externals/cowsay/cows/stegosaurus.cow
new file mode 100644
index 000000000..2e0decd22
--- /dev/null
+++ b/externals/cowsay/cows/stegosaurus.cow
@@ -0,0 +1,19 @@
+##
+## A stegosaur with a top hat?
+##
+$the_cow = <<EOC;
+$thoughts . .
+ $thoughts / `. .' "
+ $thoughts .---. < > < > .---.
+ $thoughts | \\ \\ - ~ ~ - / / |
+ _____ ..-~ ~-..-~
+ | | \\~~~\\.' `./~~~/
+ --------- \\__/ \\__/
+ .' O \\ / / \\ "
+ (_____, `._.' | } \\/~~~/
+ `----. / } | / \\__/
+ `-. | / | / `. ,~~|
+ ~-.__| /_ - ~ ^| /- _ `..-'
+ | / | / ~-. `-. _ _ _
+ |_____| |_____| ~ - . _ _ _ _ _>
+EOC
diff --git a/externals/cowsay/cows/supermilker.cow b/externals/cowsay/cows/supermilker.cow
new file mode 100644
index 000000000..1424f9e66
--- /dev/null
+++ b/externals/cowsay/cows/supermilker.cow
@@ -0,0 +1,10 @@
+##
+## A cow being milked, probably from Lars Smith (lars@csua.berkeley.edu)
+##
+$the_cow = <<EOC;
+ $thoughts ^__^
+ $thoughts ($eyes)\\_______ ________
+ (__)\\ )\\/\\ |Super |
+ $tongue ||----W | |Milker|
+ || UDDDDDDDDD|______|
+EOC
diff --git a/externals/cowsay/cows/surgery.cow b/externals/cowsay/cows/surgery.cow
new file mode 100644
index 000000000..1f5c112f6
--- /dev/null
+++ b/externals/cowsay/cows/surgery.cow
@@ -0,0 +1,24 @@
+##
+## A cow operation, artist unknown
+##
+$the_cow = <<EOC;
+ $thoughts \\ /
+ $thoughts \\/
+ (__) /\\
+ ($eyes) O O
+ _\\/_ //
+ * ( ) //
+ \\ (\\\\ //
+ \\( \\\\ )
+ ( \\\\ ) /\\
+ ___[\\______/^^^^^^^\\__/) o-)__
+ |\\__[=======______//________)__\\
+ \\|_______________//____________|
+ ||| || //|| |||
+ ||| || @.|| |||
+ || \\/ .\\/ ||
+ . .
+ '.'.`
+
+ COW-OPERATION
+EOC
diff --git a/externals/cowsay/cows/turkey.cow b/externals/cowsay/cows/turkey.cow
new file mode 100644
index 000000000..cb1c6cbe1
--- /dev/null
+++ b/externals/cowsay/cows/turkey.cow
@@ -0,0 +1,26 @@
+##
+## Turkey!
+##
+$the_cow = <<EOC;
+ $thoughts ,+*^^*+___+++_
+ $thoughts ,*^^^^ )
+ $thoughts _+* ^**+_
+ $thoughts +^ _ _++*+_+++_, )
+ _+^^*+_ ( ,+*^ ^ \\+_ )
+ { ) ( ,( ,_+--+--, ^) ^\\
+ { (\@) } f ,( ,+-^ __*_*_ ^^\\_ ^\\ )
+ {:;-/ (_+*-+^^^^^+*+*<_ _++_)_ ) ) /
+ ( / ( ( ,___ ^*+_+* ) < < \\
+ U _/ ) *--< ) ^\\-----++__) ) ) )
+ ( ) _(^)^^)) ) )\\^^^^^))^*+/ / /
+ ( / (_))_^)) ) ) ))^^^^^))^^^)__/ +^^
+ ( ,/ (^))^)) ) ) ))^^^^^^^))^^) _)
+ *+__+* (_))^) ) ) ))^^^^^^))^^^^^)____*^
+ \\ \\_)^)_)) ))^^^^^^^^^^))^^^^)
+ (_ ^\\__^^^^^^^^^^^^))^^^^^^^)
+ ^\\___ ^\\__^^^^^^))^^^^^^^^)\\\\
+ ^^^^^\\uuu/^^\\uuu/^^^^\\^\\^\\^\\^\\^\\^\\^\\
+ ___) >____) >___ ^\\_\\_\\_\\_\\_\\_\\)
+ ^^^//\\\\_^^//\\\\_^ ^(\\_\\_\\_\\)
+ ^^^ ^^ ^^^ ^
+EOC
diff --git a/externals/cowsay/cows/turtle.cow b/externals/cowsay/cows/turtle.cow
new file mode 100644
index 000000000..4286b0948
--- /dev/null
+++ b/externals/cowsay/cows/turtle.cow
@@ -0,0 +1,20 @@
+##
+## A mysterious turtle...
+##
+$the_cow = <<EOC;
+ $thoughts ___-------___
+ $thoughts _-~~ ~~-_
+ $thoughts _-~ /~-_
+ /^\\__/^\\ /~ \\ / \\
+ /| O|| O| / \\_______________/ \\
+ | |___||__| / / \\ \\
+ | \\ / / \\ \\
+ | (_______) /______/ \\_________ \\
+ | / / \\ / \\
+ \\ \\^\\\\ \\ / \\ /
+ \\ || \\______________/ _-_ //\\__//
+ \\ ||------_-~~-_ ------------- \\ --/~ ~\\ || __/
+ ~-----||====/~ |==================| |/~~~~~
+ (_(__/ ./ / \\_\\ \\.
+ (_(___/ \\_____)_)
+EOC
diff --git a/externals/cowsay/cows/tux.cow b/externals/cowsay/cows/tux.cow
new file mode 100644
index 000000000..03e228f8c
--- /dev/null
+++ b/externals/cowsay/cows/tux.cow
@@ -0,0 +1,16 @@
+##
+## TuX
+## (c) pborys@p-soft.silesia.linux.org.pl
+##
+$the_cow = <<EOC;
+ $thoughts
+ $thoughts
+ .--.
+ |o_o |
+ |:_/ |
+ // \\ \\
+ (| | )
+ /'\\_ _/`\\
+ \\___)=(___/
+
+EOC
diff --git a/externals/cowsay/cows/www.cow b/externals/cowsay/cows/www.cow
new file mode 100644
index 000000000..925ed72ee
--- /dev/null
+++ b/externals/cowsay/cows/www.cow
@@ -0,0 +1,10 @@
+##
+## A cow wadvertising the World Wide Web, from lim@csua.berkeley.edu
+##
+$the_cow = <<EOC;
+ $thoughts ^__^
+ $thoughts ($eyes)\\_______
+ (__)\\ )\\/\\
+ $tongue ||--WWW |
+ || ||
+EOC
diff --git a/externals/cowsay/cowsay b/externals/cowsay/cowsay
new file mode 100755
index 000000000..900ca4601
--- /dev/null
+++ b/externals/cowsay/cowsay
@@ -0,0 +1,187 @@
+#%BANGPERL%
+
+##
+## Cowsay 3.03
+##
+## This file is part of cowsay. (c) 1999-2000 Tony Monroe.
+##
+
+use Text::Tabs qw(expand);
+use Text::Wrap qw(wrap fill $columns);
+use File::Basename;
+use Getopt::Std;
+use Cwd;
+
+$version = "3.03";
+$progname = basename($0);
+$eyes = "oo";
+$tongue = " ";
+$cowpath = $ENV{'COWPATH'} || '%PREFIX%/share/cows';
+@message = ();
+$thoughts = "";
+
+## Yeah, this is rude, I know. But hopefully it gets around a nasty
+## little version dependency.
+
+$Text::Wrap::initial_tab = 8;
+$Text::Wrap::subsequent_tab = 8;
+$Text::Wrap::tabstop = 8;
+
+## One of these days, we'll get it ported to Windows. Yeah, right.
+
+if (($^O eq "MSWin32") or ($^O eq "Windows_NT")) { ## Many perls, eek!
+ $pathsep = ';';
+} else {
+ $pathsep = ':';
+}
+
+%opts = (
+ 'e' => 'oo',
+ 'f' => 'default.cow',
+ 'n' => 0,
+ 'T' => ' ',
+ 'W' => 40,
+);
+
+getopts('bde:f:ghlLnNpstT:wW:y', \%opts);
+
+&display_usage if $opts{'h'};
+&list_cowfiles if $opts{'l'};
+
+$borg = $opts{'b'};
+$dead = $opts{'d'};
+$greedy = $opts{'g'};
+$paranoid = $opts{'p'};
+$stoned = $opts{'s'};
+$tired = $opts{'t'};
+$wired = $opts{'w'};
+$young = $opts{'y'};
+$eyes = substr($opts{'e'}, 0, 2);
+$tongue = substr($opts{'T'}, 0, 2);
+$the_cow = "";
+
+&slurp_input;
+$Text::Wrap::columns = $opts{'W'};
+@message = ($opts{'n'} ? expand(@message) :
+ split("\n", fill("", "", @message)));
+&construct_balloon;
+&construct_face;
+&get_cow;
+print @balloon_lines;
+print $the_cow;
+
+sub list_cowfiles {
+ my $basedir;
+ my @dirfiles;
+ chop($basedir = cwd);
+ for my $d (split(/$pathsep/, $cowpath)) {
+ print "Cow files in $d:\n";
+ opendir(COWDIR, $d) || die "$0: Cannot open $d\n";
+ for my $file (readdir COWDIR) {
+ if ($file =~ s/\.cow$//) {
+ push(@dirfiles, $file);
+ }
+ }
+ closedir(COWDIR);
+ print wrap("", "", sort @dirfiles), "\n";
+ @dirfiles = ();
+ chdir($basedir);
+ }
+ exit(0);
+}
+
+sub slurp_input {
+ unless ($ARGV[0]) {
+ chomp(@message = <STDIN>);
+ } else {
+ &display_usage if $opts{'n'};
+ @message = join(' ', @ARGV);
+ }
+}
+
+sub maxlength {
+ my ($l, $m);
+ $m = -1;
+ for my $i (@_) {
+ $l = length $i;
+ $m = $l if ($l > $m);
+ }
+ return $m;
+}
+
+sub construct_balloon {
+ my $max = &maxlength(@message);
+ my $max2 = $max + 2; ## border space fudge.
+ my $format = "%s %-${max}s %s\n";
+ my @border; ## up-left, up-right, down-left, down-right, left, right
+ if ($0 =~ /think/i) {
+ $thoughts = 'o';
+ @border = qw[ ( ) ( ) ( ) ];
+ } elsif (@message < 2) {
+ $thoughts = '\\';
+ @border = qw[ < > ];
+ } else {
+ $thoughts = '\\';
+ if ($V and $V gt v5.6.0) { # Thanks, perldelta.
+ @border = qw[ / \\ \\ / | | ];
+ } else {
+ @border = qw[ / \ \ / | | ];
+ }
+ }
+ push(@balloon_lines,
+ " " . ("_" x $max2) . " \n" ,
+ sprintf($format, $border[0], $message[0], $border[1]),
+ (@message < 2 ? "" :
+ map { sprintf($format, $border[4], $_, $border[5]) }
+ @message[1 .. $#message - 1]),
+ (@message < 2 ? "" :
+ sprintf($format, $border[2], $message[$#message], $border[3])),
+ " " . ("-" x $max2) . " \n"
+ );
+}
+
+sub construct_face {
+ if ($borg) { $eyes = "=="; }
+ if ($dead) { $eyes = "xx"; $tongue = "U "; }
+ if ($greedy) { $eyes = "\$\$"; }
+ if ($paranoid) { $eyes = "@@"; }
+ if ($stoned) { $eyes = "**"; $tongue = "U "; }
+ if ($tired) { $eyes = "--"; }
+ if ($wired) { $eyes = "OO"; }
+ if ($young) { $eyes = ".."; }
+}
+
+sub get_cow {
+##
+## Get a cow from the specified cowfile; otherwise use the default cow
+## which was defined above in $the_cow.
+##
+ my $f = $opts{'f'};
+ my $full = "";
+ if ($opts{'f'} =~ m,/,) {
+ $full = $opts{'f'};
+ } else {
+ for my $d (split(/:/, $cowpath)) {
+ if (-f "$d/$f") {
+ $full = "$d/$f";
+ last;
+ } elsif (-f "$d/$f.cow") {
+ $full = "$d/$f.cow";
+ last;
+ }
+ }
+ if ($full eq "") {
+ die "$progname: Could not find $f cowfile!\n";
+ }
+ }
+ do $full;
+ die "$progname: $@\n" if $@;
+}
+
+sub display_usage {
+ die <<EOF;
+cow{say,think} version $version, (c) 1999 Tony Monroe
+Usage: $progname [-bdgpstwy] [-h] [-e eyes] [-f cowfile]
+ [-l] [-n] [-T tongue] [-W wrapcolumn] [message]
+EOF
+}
diff --git a/externals/cowsay/cowsay.1 b/externals/cowsay/cowsay.1
new file mode 100644
index 000000000..7133866af
--- /dev/null
+++ b/externals/cowsay/cowsay.1
@@ -0,0 +1,168 @@
+.\"
+.\" cowsay.1
+.\"
+.\" $Id: cowsay.1,v 1.4 1999/11/04 19:50:40 tony Exp $
+.\"
+.\" This file is part of cowsay. (c) 1999 Tony Monroe.
+.\"
+.ds Nm Cowsay
+.ds nm cowsay
+.ds Vn 3.02
+.TH \*(nm 1 "$Date: 1999/11/04 19:50:40 $"
+.SH NAME
+\*(nm/cowthink \- configurable speaking/thinking cow (and a bit more)
+.SH SYNOPSIS
+cowsay
+.RB [ \-e
+.IR eye_string ]
+.RB [ \-f
+.IR cowfile ]
+.RB [ \-h ]
+.RB [ \-l ]
+.RB [ \-n ]
+.RB [ \-T
+.IR tongue_string ]
+.RB [ \-W
+.IR column ]
+.RB [ \-bdgpstwy ]
+.SH DESCRIPTION
+.I Cowsay
+generates an ASCII picture of a cow saying something provided by the
+user. If run with no arguments, it accepts standard input, word-wraps
+the message given at about 40 columns, and prints the cow saying the
+given message on standard output.
+.PP
+To aid in the use of arbitrary messages with arbitrary whitespace,
+use the
+.B \-n
+option. If it is specified, the given message will not be
+word-wrapped. This is possibly useful if you want to make the cow
+think or speak in figlet(6). If
+.B \-n
+is specified, there must not be any command-line arguments left
+after all the switches have been processed.
+.PP
+The
+.B \-W
+specifies roughly (where the message should be wrapped. The default
+is equivalent to
+.B \-W 40
+i.e. wrap words at or before the 40th column.
+.PP
+If any command-line arguments are left over after all switches have
+been processed, they become the cow's message. The program will not
+accept standard input for a message in this case.
+.PP
+There are several provided modes which change the appearance of the
+cow depending on its particular emotional/physical state. The
+.B \-b
+option initiates Borg mode;
+.B \-d
+causes the cow to appear dead;
+.B \-g
+invokes greedy mode;
+.B \-p
+causes a state of paranoia to come over the cow;
+.B \-s
+makes the cow appear thoroughly stoned;
+.B \-t
+yields a tired cow;
+.B \-w
+is somewhat the opposite of
+.BR \-t ,
+and initiates wired mode;
+.B \-y
+brings on the cow's youthful appearance.
+.PP
+The user may specify the
+.B \-e
+option to select the appearance of the cow's eyes, in which case
+the first two characters of the argument string
+.I eye_string
+will be used. The default eyes are 'oo'. The tongue is similarly
+configurable through
+.B \-T
+and
+.IR tongue_string ;
+it must be two characters and does not appear by default. However,
+it does appear in the 'dead' and 'stoned' modes. Any configuration
+done by
+.B \-e
+and
+.B \-T
+will be lost if one of the provided modes is used.
+.PP
+The
+.B \-f
+option specifies a particular cow picture file (``cowfile'') to
+use. If the cowfile spec contains '/' then it will be interpreted
+as a path relative to the current directory. Otherwise, cowsay
+will search the path specified in the
+.B COWPATH
+environment variable.
+To list all cowfiles on the current
+.BR COWPATH ,
+invoke
+.B \*(nm
+with the
+.B \-l
+switch.
+.PP
+If the program is invoked as
+.B cowthink
+then the cow will think its message instead of saying it.
+.PP
+.SH COWFILE FORMAT
+A cowfile is made up of a simple block of
+.BR perl (1)
+code, which assigns a picture of a cow to the variable
+.BR $the_cow .
+Should you wish to customize the eyes or the tongue of the cow,
+then the variables
+.B $eyes
+and
+.B $tongue
+may be used. The trail leading up to the cow's message balloon is
+composed of the character(s) in the
+.B $thoughts
+variable. Any backslashes must be reduplicated to prevent
+interpolation. The name of a cowfile should end with
+.BR .cow ,
+otherwise it is assumed not to be a cowfile. Also, at-signs (``@'')
+must be backslashed because that is what Perl 5 expects.
+.PP
+.SH COMPATIBILITY WITH OLDER VERSIONS
+.PP
+What older versions? :-)
+.PP
+Version 3.x is fully backward-compatible with 2.x versions. If
+you're still using a 1.x version, consider upgrading. And tell me
+where you got the older versions, since I didn't exactly put them
+up for world-wide access.
+.PP
+Oh, just so you know, this manual page documents version \*(Vn of
+cowsay.
+.SH ENVIRONMENT
+The COWPATH environment variable, if present, will be used to search
+for cowfiles. It contains a colon-separated list of directories,
+much like
+.B PATH or
+.BR MANPATH .
+It should always contain the
+.B /usr/local/share/cows
+directory, or at least a directory with a file called
+.B default.cow
+in it.
+.SH FILES
+.B %PREFIX%/share/cows
+holds a sample set of cowfiles. If your
+.B COWPATH
+is not explicitly set, it automatically contains this directory.
+.SH BUGS
+If there are any, please notify the author at the address below.
+.SH AUTHOR
+Tony Monroe (tony@nog.net), with suggestions from Shannon
+Appel (appel@CSUA.Berkeley.EDU) and contributions from Anthony Polito
+(aspolito@CSUA.Berkeley.EDU).
+.SH SEE ALSO
+perl(1), wall(1), nwrite(1), figlet(6)
diff --git a/externals/cowsay/install.sh b/externals/cowsay/install.sh
new file mode 100755
index 000000000..a359cd15d
--- /dev/null
+++ b/externals/cowsay/install.sh
@@ -0,0 +1,92 @@
+#!/bin/sh
+
+##
+## install.sh
+##
+## Installation script for cowsay.
+##
+## $Id: install.sh,v 1.5 1999/11/01 20:19:21 tony Exp $
+##
+## This file is part of cowsay. (c) 1999 Tony Monroe.
+##
+
+rcs_id='$Id: install.sh,v 1.5 1999/11/01 20:19:21 tony Exp $'
+
+filelist='cows'
+
+cat <<DOG
+===================
+cowsay Installation
+===================
+
+Searching for useful perl executables...
+DOG
+
+backdoor=$1
+
+pathdirs=`echo $PATH | tr : " "`
+for p in $pathdirs; do
+ set $p/perl $p/perl5*
+ while [ ! -z "$1" ]; do
+ if [ -x "$1" ]; then
+ echo Found perl in $1
+ perls="$perls $1"
+ fi
+ shift
+ done
+done
+for perl in $perls; do
+ if $perl -MText::Wrap -e0 >/dev/null 2>&1; then
+ echo Found a good perl in $perl
+ goodperls="$goodperls $perl"
+ fi
+done
+echo The following perl executables will run cowsay:
+echo $goodperls
+echo I recommend the latest stable perl you can find.
+set $goodperls
+if [ -z "$1" ]; then
+ echo Ack! You do not have Perl 5 installed correctly!
+ echo Get thee to CPAN!
+ exit 1
+fi
+usethisperl=$1
+echo I will be using $1 because I know it will work.
+
+echo Now I need an installation prefix. I will use /usr/local unless
+printf "you give me a better idea here: "
+if [ -n "$backdoor" ]; then
+ prefix=$backdoor
+ printf "%s (specified on command line)\n" $prefix
+else
+ read prefix
+fi
+
+PREFIX=${prefix:-/usr/local}
+
+echo Okay, time to install this puppy.
+
+echo s,%BANGPERL%,!$usethisperl,\; > install.pl
+echo s,%PREFIX%,$PREFIX,\; >> install.pl
+set -x
+mkdir -p $PREFIX/bin || (mkdir $PREFIX; mkdir $PREFIX/bin)
+$usethisperl -p install.pl cowsay > $PREFIX/bin/cowsay
+chmod a+x $PREFIX/bin/cowsay
+ln -s cowsay $PREFIX/bin/cowthink
+mkdir -p $PREFIX/man/man1 || ($mkdir $PREFIX; mkdir $PREFIX/man; mkdir $PREFIX/man/man1)
+$usethisperl -p install.pl cowsay.1 > $PREFIX/man/man1/cowsay.1
+chmod a+r $PREFIX/man/man1/cowsay.1
+ln -s cowsay.1 $PREFIX/man/man1/cowthink.1
+mkdir -p $PREFIX/share/cows || (mkdir $PREFIX; mkdir $PREFIX/share; mkdir $PREFIX/share/cows)
+tar -cf - $filelist | (cd $PREFIX/share && tar -xvf -)
+set +x
+
+echo Okay, let us see if the install actually worked.
+
+if [ ! -f $PREFIX/share/cows/default.cow ]; then
+ echo The default cow file did not make it across!
+ echo Ooops, it failed...sorry!
+ exit 1
+fi
+
+echo Installation complete! Enjoy the cows!
diff --git a/externals/cowsay/pgp_public_key.txt b/externals/cowsay/pgp_public_key.txt
new file mode 100644
index 000000000..135735e6f
--- /dev/null
+++ b/externals/cowsay/pgp_public_key.txt
@@ -0,0 +1,14 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.2
+
+mQCNAzNS+H4AAAEEAMilCcxLMIqMNXhZoeHjbeJGnHoKP0JpKDejz66qBlDwP+du
+FvVBHkyNIuU3orKe7l/aXIR8TcpjrxdcmrjjzwuB1aV48V4swT7v9UXvv9YP41Pd
+1pXYXNelXHmE0eKSfcnkkFmYTJBXPaPNTJ3rpZpZOEW3SfgrrheqQm6w/6IJAAUR
+tBpUb255IE1vbnJvZSA8dG9ueUBub2cubmV0PrQdVG9ueSBNb25yb2UgPHRtb25y
+b2VAbm9nLm5ldD6JAJUDBRA2bDA5F6pCbrD/ogkBASOZA/9XtYSpcPjpi62MTEZl
+l+wV1svtlUlPvKkDE7FB9bwnMbF1FgGhTe/H4/8qDu20m5eGxMX58Ri7HPXWjjJ/
+CrUWMzGVbg1JBkgh+d9QvEywmR0j4WezaifW1nCbxk0GrW1PjJyGb3kx7vrIF1Km
+xt6VwxTgfJzjIioBJFb4EiDyaLQnVG9ueSBNb25yb2UgPHRtb25yb2VAQ1NVQS5C
+ZXJrZWxleS5FRFU+
+=WpM4
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/externals/figlet/.gitignore b/externals/figlet/.gitignore
new file mode 100644
index 000000000..dc65b3c3e
--- /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
index 000000000..4f2d6e9ed
--- /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
index 000000000..8e8ca4316
--- /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
index 000000000..a841aeaa0
--- /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
index 000000000..e92bcaf58
--- /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
index 000000000..435fc580c
--- /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
index 000000000..f6f2c752d
--- /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
index 000000000..681d6ad55
--- /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
index 000000000..63bf381b3
--- /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.c b/externals/figlet/crc.c
new file mode 100644
index 000000000..b1491fc21
--- /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/crc.h b/externals/figlet/crc.h
new file mode 100644
index 000000000..bd7c5361f
--- /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/figfont.txt b/externals/figlet/figfont.txt
new file mode 100644
index 000000000..8cbe6ea7b
--- /dev/null
+++ b/externals/figlet/figfont.txt
@@ -0,0 +1,1695 @@
+ _____ ___ ____ __ _
+ | ___||_ _|/ ___| / _| ___ _ __ | |_ ___ _
+ | |_ | || | _ | |_ / _ \ | '_ \ | __|/ __|(_)
+ | _| | || |_| || _|| (_) || | | || |_ \__ \ _
+ |_| |___|\____||_| \___/ |_| |_| \__||___/(_)
+
+ The FIGfont Version 2 FIGfont and FIGdriver Standard
+ === ======= ======= = ======= === ========= ========
+ Draft 2.0 Copyright 1996, 1997
+ by John Cowan and Paul Burton
+ Portions Copyright 1991, 1993, 1994
+ by Glenn Chappell and Ian Chai
+ May be freely copied and distributed.
+
+ Figlet lives at: http://www.figlet.org/
+
+ _____ __ __
+ / ___/__ ___ / /____ ___ / /____
+/ /__/ _ \/ _ \/ __/ -_) _ \/ __(_-<
+\___/\___/_//_/\__/\__/_//_/\__/___/
+
+ INTRODUCTION
+ BASIC DEFINITIONS AND CONCEPTS
+ "FIGfont"
+ "FIGcharacters" and "Sub-characters"
+ "FIGdriver"
+ "FIGure"
+ "FIG"
+ "Layout Modes"
+ "Smushing Rules"
+ "Hardblanks"
+ CREATING FIGFONTS
+ The Header Line
+ Interpretation of Layout Parameters
+ Setting Layout Parameters Step-by-Step
+ FIGfont Comments
+ FIGcharacter Data
+ - Basic Data Structure
+ - Character Codes
+ - Required FIGcharacters
+ - Code Tagged FIGcharacters
+ NOTES - AVOIDING ERRORS AND GENERAL ADVICE
+ CONTROL FILES
+ Standard Format
+ Extended Commands
+ STANDARDIZED CAPABILITIES OF CURRENT AND FUTURE FIGDRIVERS
+ CHART OF CAPABILITIES OF FIGLET 2.2.2 AND FIGWIN 1.0
+
+
+INTRODUCTION
+============
+
+This document specifies the format of font files, and the associated control
+files, used by the FIGlet and FIGWin programs (FIGdrivers). It is written
+for designers who wish to build fonts (FIGfonts) usable by either program,
+and also serves as a standard for development of future versions or similar
+FIGdrivers. Some features explained here are not supported by both programs.
+See separate documentation to learn how to use FIGlet or FIGWin.
+
+NOTE: FIGWin 1.0 is packaged with a program called FIGfont Editor for Windows
+1.0, which is just that. It does not require a complete understanding of
+this document to create FIGfonts. However it is a good idea to become
+familiar with the "BASIC DEFINITIONS AND CONCEPTS" information before using
+it.
+
+If you design a FIGfont, please send an e-mail announcement to
+<figletfonts@figlet.org>, the FIGlet fonts mailing list, and email a copy
+to info@figlet.org for us to put it on the ftp site (ftp://ftp.figlet.org/)
+
+BASIC DEFINITIONS AND CONCEPTS
+===== =========== === ========
+
+"FIGfont"
+
+A FIGfont is a file which represents the graphical arrangement of characters
+representing larger characters. Since a FIGfont file is a text file, it can
+be created with any text editing program on any platform. The filename of a
+FIGfont file must end with ".flf", which stands for "<F>IG<L>ettering
+<F>ont".
+
+
+"FIGcharacters" and "Sub-characters"
+
+Because FIGfonts describe large characters which consist of smaller
+characters, confusion can result when descussing one or the other.
+Therefore, the terms "FIGcharacter" and "sub-character" are used,
+respectively.
+
+
+"FIGdriver"
+
+The term FIGdriver is used in this document to encompass FIGlet, FIGWin, and
+any future programs which use FIGfonts.
+
+
+"FIGure"
+
+A FIGure (thusly capitalized) is an image created by a FIGdriver.
+
+
+"FIG"
+
+A bit of history:
+
+In Spring 1991, inspired by the Email signature of a friend named Frank, and
+goaded on by Ian Chai, Glenn Chappell wrote a nifty little 170-line "C"
+program called "newban", which would create large letters out of ordinary
+text characters. At the time, it was only compiled for UNIX. In hindsight,
+we now call it "FIGlet 1.0". FIGlet stands for <F>rank, <I>an, and <G>lenn's
+<let>ters. In various incarnations, newban circulated around the net for a
+couple of years. It had one font, which included only lowercase letters.
+
+In early 1993, Ian decided newban was due for a few changes, so together Ian
+and Glenn added the full ASCII character set, to start with. First, though,
+Ian had to find a copy of the source, since Glenn had tossed it away as not
+worth the disk space. Ian and Glenn discussed what could be done with it,
+decided on a general re-write, and, 7 months later, ended up with 888 lines
+of code, 13 FIGfonts and documentation. This was FIGlet 2.0, the first real
+release.
+
+To their great surprise, FIGlet took the net by storm. They received floods
+of "FIGlet is great!" messages and a new contributed FIGfont about once a
+week. To handle all the traffic, Ian quickly set up a mailing list, Daniel
+Simmons kindly offered space for an FTP site, several people volunteered to
+port FIGlet to non-Unix operating systems, ...and bug reports poured in.
+
+Because of these, and the need to make FIGlet more "international", Ian and
+Glenn released a new version of FIGlet which could handle non-ASCII character
+sets and right-to-left printing. This was FIGlet 2.1, which, in a couple of
+weeks, became figlet 2.1.1. This weighed in at 1314 lines, and there were
+over 60 FIGfonts.
+
+By late 1996, FIGlet had quite a following of fans subscribing to its mailing
+list. It had been ported to MS-DOS, Macintosh, Amiga, Apple II GS, Atari ST,
+Acorn and OS/2. FIGlet had been further updated, and there were nearly 200
+FIGfonts.
+
+John Cowan and Paul Burton are two FIGlet fans who decided to create new
+versions. While John wrote FIGlet version 2.2 using C, Paul wrote FIGWin
+1.0, the first true GUI (Windows) implementation of FIGlet, using Visual
+Basic. John and Paul worked together to add new features to FIGfont files
+which could be read by both programs, and together wrote this document, which
+we hope helps to establish consistency in FIGfonts and help with the creation
+of future FIGdrivers. FIGlet 2.2 has about 4800 lines of code, of which
+over half is a support library for reading compressed files.
+
+Three years later, in July 2005, FIGlet 2.2.2 was released under a new License
+(the ``Academic Free License 2.1''). This version has proved to be very
+stable, and persisted for more five years until minor bugfixes and another
+license change resulted in the release of FIGlet 2.2.3 in January 2011. All
+license concerns involving contributed code were solved and FIGlet is now
+distributed under the ``New BSD License''. Contributed fonts amounted to more
+than 400.
+
+FIGlet 2.2 and FIGWin 1.0 both allow greater flexibility by use of new
+information which can be contained in FIGfont files without interfering with
+the function of older FIGdrivers.
+
+NOTE: The Macintosh version of FIGlet is still command-line driven as of this
+writing, and a GUI version is very much in demand. The FIGlet C code is
+written to be easily plugged in to a GUI shell, so it will be a relatively
+easy task for a Macintosh developer.
+
+
+
+
+"Layout Modes"
+
+A FIGdriver may arrange FIGcharacters using one of three "layout modes",
+which define the spacing between FIGcharacters. The layout mode for the
+horizontal axis may differ from the layout mode for the vertical axis. A
+default choice is defined for each axis by every FIGfont.
+
+The three layout modes are:
+
+ Full Size (Separately called "Full Width" or "Full Height".)
+
+ Represents each FIGcharacter occupying the full width or
+ height of its arrangement of sub-characters as designed.
+
+ Fitting Only (Separately called "Kerning or "Vertical Fitting".)
+
+ Moves FIGcharacters closer together until they touch.
+ Typographers use the term "kerning" for this phenomenon
+ when applied to the horizontal axis, but fitting also
+ includes this as a vertical behavior, for which there is
+ apparently no established typographical term.
+
+ Smushing (Same term for both axes.)
+
+ Moves FIGcharacters one step closer after they touch, so that
+ they partially occupy the same space. A FIGdriver must decide
+ what sub-character to display at each junction. There are two
+ ways of making these decisions: by controlled smushing or by
+ universal smushing.
+
+ Controlled smushing uses a set of "smushing rules" selected by
+ the designer of a FIGfont. (See "Smushing Rules" below.)
+ Each rule is a comparison of the two sub-characters which must
+ be joined to yield what to display at the junction.
+ Controlled smushing will not always allow smushing to occur,
+ because the compared sub-characters may not correspond to any
+ active rule. Wherever smushing cannot occur, fitting occurs
+ instead.
+
+ Universal smushing simply overrides the sub-character from the
+ earlier FIGcharacter with the sub-character from the later
+ FIGcharacter. This produces an "overlapping" effect with some
+ FIGfonts, wherin the latter FIGcharacter may appear to be "in
+ front".
+
+ A FIGfont which does not specify any smushing rules for a
+ particular axis indicates that universal smushing is to occur
+ when smushing is requested. Therefore, it is not possible for
+ a FIGfont designer to "forbid" smushing. However there are
+ ways to ensure that smushing does not cause a FIGfont to be
+ illegible when smushed. This is especially important for
+ smaller FIGfonts. (See "Hardblanks" for details.)
+
+For vertical fitting or smushing, entire lines of output FIGcharacters are
+"moved" as a unit.
+
+Not all FIGdrivers do vertical fitting or smushing. At present, FIGWin 1.0
+does, but FIGlet 2.2 does not. Further, while FIGlet 2.2 allows the user to
+override the FIGfont designer's set of smushing rules, FIGWin 1.0 does not.
+
+NOTE: In the documentation of FIGlet versions prior to 2.2, the term
+"smushmode" was used to mean the layout mode, and this term further included
+the smushing rules (if any) to be applied. However, since the layout mode
+may or may not involve smushing, we are straying from the use of this
+somewhat misleading term.
+
+
+"Smushing Rules"
+
+Again, smushing rules are for controlled smushing. If none are defined to be
+active in a FIGfont, universal smushing occurs instead.
+
+Generally, if a FIGfont is "drawn at the borders" using sub-characters
+"-_|/\[]{}()<>", you will want to use controlled smushing by selecting from
+the rules below. Otherwise, if your FIGfont uses a lot of other
+sub-characters, do not select any rules and universal smushing will occur
+instead. (See "Hardblanks" below if your FIGfont is very small and would
+become illegible if smushed.) Experimentation is the best way to make these
+decisions.
+
+There are six possible horizontal smushing rules and five possible vertical
+smushing rules. Below is a description of all of the rules.
+
+NOTE: Ignore the "code values" for now. They are explained later.
+
+ The Six Horizontal Smushing Rules
+
+ Rule 1: EQUAL CHARACTER SMUSHING (code value 1)
+
+ Two sub-characters are smushed into a single sub-character
+ if they are the same. This rule does not smush
+ hardblanks. (See "Hardblanks" below.)
+
+ Rule 2: UNDERSCORE SMUSHING (code value 2)
+
+ An underscore ("_") will be replaced by any of: "|", "/",
+ "\", "[", "]", "{", "}", "(", ")", "<" or ">".
+
+ Rule 3: HIERARCHY SMUSHING (code value 4)
+
+ A hierarchy of six classes is used: "|", "/\", "[]", "{}",
+ "()", and "<>". When two smushing sub-characters are
+ from different classes, the one from the latter class
+ will be used.
+
+ Rule 4: OPPOSITE PAIR SMUSHING (code value 8)
+
+ Smushes opposing brackets ("[]" or "]["), braces ("{}" or
+ "}{") and parentheses ("()" or ")(") together, replacing
+ any such pair with a vertical bar ("|").
+
+ Rule 5: BIG X SMUSHING (code value 16)
+
+ Smushes "/\" into "|", "\/" into "Y", and "><" into "X".
+ Note that "<>" is not smushed in any way by this rule.
+ The name "BIG X" is historical; originally all three pairs
+ were smushed into "X".
+
+ Rule 6: HARDBLANK SMUSHING (code value 32)
+
+ Smushes two hardblanks together, replacing them with a
+ single hardblank. (See "Hardblanks" below.)
+
+
+ The Five Vertical Smushing Rules
+
+ Rule 1: EQUAL CHARACTER SMUSHING (code value 256)
+
+ Same as horizontal smushing rule 1.
+
+ Rule 2: UNDERSCORE SMUSHING (code value 512)
+
+ Same as horizontal smushing rule 2.
+
+ Rule 3: HIERARCHY SMUSHING (code value 1024)
+
+ Same as horizontal smushing rule 3.
+
+ Rule 4: HORIZONTAL LINE SMUSHING (code value 2048)
+
+ Smushes stacked pairs of "-" and "_", replacing them with
+ a single "=" sub-character. It does not matter which is
+ found above the other. Note that vertical smushing rule 1
+ will smush IDENTICAL pairs of horizontal lines, while this
+ rule smushes horizontal lines consisting of DIFFERENT
+ sub-characters.
+
+ Rule 5: VERTICAL LINE SUPERSMUSHING (code value 4096)
+
+ This one rule is different from all others, in that it
+ "supersmushes" vertical lines consisting of several
+ vertical bars ("|"). This creates the illusion that
+ FIGcharacters have slid vertically against each other.
+ Supersmushing continues until any sub-characters other
+ than "|" would have to be smushed. Supersmushing can
+ produce impressive results, but it is seldom possible,
+ since other sub-characters would usually have to be
+ considered for smushing as soon as any such stacked
+ vertical lines are encountered.
+
+
+"Hardblanks"
+
+A hardblank is a special sub-character which is displayed as a blank (space)
+in rendered FIGures, but is treated more like a "visible" sub-character when
+fitting or smushing horizontally. Therefore, hardblanks keep adjacent
+FIGcharacters a certain distance apart.
+
+NOTE: Hardblanks act the same as blanks for vertical operations.
+
+Hardblanks have three purposes:
+
+ 1) Hardblanks are used to create the blank (space) FIGcharacter.
+
+ Usually the space FIGcharacter is simply one or two vertical
+ columns of hardblanks. Some slanted FIGfonts as shown below
+ have a diagonal arrangement of hardblanks instead.
+
+ 2) Hardblanks can prevent "unreasonable" fitting or smushing.
+
+ Normally when fitting or smushing, the blank (space)
+ sub-character is considered "vacant space". In the following
+ example, a capital "C" FIGcharacter is smushed with a "minus"
+ FIGcharacter.
+ ______ ______
+ / ____/ / ____/
+ / / ____ >>-Becomes-> / / ____
+ / /___ /___/ / /__/___/
+ \____/ \____/
+
+ The FIGure above looks like a capital G. To prevent this, a
+ FIGfont designer might place a hardblank in the center of the
+ capital C. In the following example, the hardblank is
+ represented as a "$":
+ ______ ______
+ / ____/ / ____/
+ / / $ ____ >>-Becomes-> / / ____
+ / /___ /___/ / /___/___/
+ \____/ \____/
+
+ Using hardblanks in this manner ensures that FIGcharacters
+ with a lot of empty space will not be unreasonably "invaded"
+ by adjacent FIGcharacters. Generally, FIGcharacters such as
+ capital C, L or T, or small punctuation marks such as commas,
+ may contain hardblanks, since they may contain a lot of vacant
+ space which is "accessible" from either side.
+
+ 3) Hardblanks can prevent smushing from making FIGfonts illegible.
+
+ This legitimate purpose of hardblanks is often overused. If a
+ FIGfont designer is absolutely sure that smushing "visible"
+ sub-characters would make their FIGfont illegible, hardblanks
+ may be positioned at the end of each row of sub-characters,
+ against the visible sub-characters, creating a barrier.
+
+ With older FIGdrivers, using hardblanks for this purpose meant
+ that FIGcharacters would have to be separated by at least one
+ blank in output FIGures, since only a hardblank could smush
+ with another hardblank. However with the advent of universal
+ smushing, this is no longer necessary. Hardblanks ARE
+ overriden by any visible sub-character when performing
+ universal smushing. Hardblanks still represent a "stopping
+ point", but only AFTER their locations are occupied.
+
+ NOTE: Earlier it was stated that universal smushing overrides
+ the sub-character from the former FIGcharacter with the
+ sub-character from the latter FIGcharacter. Hardblanks (and
+ blanks or spaces) are the exception to this rule; they will
+ always be overriden by visible sub-characters, regardless of
+ which FIGcharacter contains the hardblank. This ensures that
+ no visible sub-characters "disappear".
+
+ Therefore, one can design a FIGfont with a default behavior of
+ universal smushing, while the output FIGure would LOOK like
+ the effect of fitting, or even full size if additional
+ hardblanks are used. If a user "scales down" the layout mode
+ to fitting, the result would look like "extra spacing" between
+ FIGcharacters.
+
+ Taking this concept further, a FIGcharacter may also include
+ extra blanks (spaces) on the left side of each FIGcharacter,
+ which would define the FIGcharacter's width as slightly larger
+ than required for the visible sub-characters and hardblanks.
+ With such a FIGfont, a user who further "scales down" the
+ layout mode to full size would see even greater spacing.
+
+ These techniques prevent horizontal smushing from causing a
+ FIGfont to become illegible, while offering greater
+ flexibility of output to users.
+
+ NOTE: These techniques cannot be used to prevent vertical
+ smushing of visible sub-characters, since hardblanks are not
+ respected in the vertical axis. Although it is possible to
+ select only one vertical smushing rule which involves only
+ sub-characters which are not used in your FIGfont, it is
+ recommend that you do NOT do so. In our opinion, most users
+ would prefer to get what they ask for, rather than being
+ told, in effect: "I, the FIGfont designer, have decided that
+ you wouldn't like the results of vertical smushing, so I have
+ prevented you from trying it." Instead, we recommend setting
+ the default behavior to either fitting or full height, and
+ either allowing universal smushing, or selecting vertical
+ smushing rules which seem most appropriate. A user of your
+ FIGfont will quickly see why you did not choose smushing as
+ the default vertical layout mode, and will agree with you.
+
+
+"Character Sets" and "Character Codes"
+
+When you type using your keyboard, you are actually sending your computer a
+series of numbers. Each number must be interpreted by your computer so that
+it knows what character to display. The computer uses a list of definitions,
+called a "character set". The numbers which represent each character are
+ called "character codes".
+
+There are many character sets, most of which are internationally accepted as
+standards. By far, the most common character set is ASCII, which stands for
+"American Standard Code for Information Interchange". ASCII identifies its
+characters with codes ranging from 0 to 127.
+
+NOTE: The term "ASCII art" has become well-understood to mean artistic images
+which consist of characters on your screen (such as FIGures).
+
+For a list of the printable ASCII characters with the corresponding codes,
+see the section "REQUIRED CHARACTERS" below. The other ASCII codes in the
+range of 0 through 31 are "control characters" such as carriage-return
+(code 13), linefeed/newline (code 10), tab (code 9), backspace (code 8) or
+null (code 0). Code 127 is a delete in ASCII.
+
+Getting more technical for just a moment: A byte consisting of 8 bits (eight
+ 1's or 0's) may represent a number from 0 to 255. Therefore, most computers
+have DIRECT access to 256 characters at any given time. A character set
+which includes 256 characters is called an 8-bit character set.
+
+For Latin-based languages, ASCII is almost always the first half of a larger
+8-bit character set. Latin-1 is the most common example of an 8-bit
+character set. Latin-1 includes all of ASCII, and adds characters with codes
+from 128 to 255 which include umlauted ("double-dotted") letters and
+characters with various other accents. In the United States, Windows and
+most Unix systems have Latin-1 directly available.
+
+Most modern systems allow the possibility of changing 8-bit character sets.
+On Windows systems, character sets are referred to as "code pages". There
+are many other character sets which are not mentioned here. DOS has its own
+character set (which also has international variants) that includes graphics
+characters for drawing lines. It is also an extension of ASCII.
+
+For some languages, 8-bit character sets are insufficient, particularly on
+East Asian systems. Therefore, some systems allow 2 bytes for each
+character, which multiplies the 256 possibilties by 256, resulting in 65536
+possible characters. (Much more than the world will ever need.)
+
+Unicode is a character set standard which is intended to fulfill the
+worldwide need for a single character set which includes all characters used
+worldwide. Unicode includes character codes from 0 to 65535, although at
+present, only about 22,000 characters have been officially assigned and named
+by the Unicode Consortium. The alphabets and other writing systems
+representable with Unicode include all Latin-alphabet systems, Greek,
+Russian and other Cyrillic-alphabet systems, Hebrew, Arabic, the various
+languages of India, Chinese, Japanese, Korean, and others. The existing
+Unicode symbols include chess pieces, astrological signs, gaming symbols,
+telephones, pointing fingers, etc. --- just about any type of FIGcharacter
+you may wish to create. Unicode is constantly (but slowly) being extended
+to handle new writing systems and symbols. Information on Unicode is
+available at http://www.unicode.org and at ftp://unicode.org .
+
+Unicode, Latin-1, and ASCII all specify the same meanings for overlapping
+character codes: ASCII 65 = Latin-1 65 = Unicode 65 = "A", formally known
+as "LATIN CAPITAL LETTER A".
+
+Since a keyboard usually has only about 100 keys, your computer may contain
+a program called a "keyboard map", which will interpret certain keystrokes
+or combinations of keystrokes as different character codes. Keyboard maps
+use "mapping tables" to make these determinations. The appropriate keyboard
+activity for a given character code may involve several keystrokes. Almost
+all systems are capable of handling at least 8-bit character sets (containing
+256 characters), so there is always an active keyboard map, at least for
+those characters which are not actually painted on the keys. (United States
+users may not even know that their computer can interpret special keystrokes.
+Such keystrokes may be something similar to holding down the ALT key while
+typing a character code on the numeric keypad. Try it!)
+
+Below are characters 160 through 255, AS REPRESENTED ON YOUR SYSTEM.
+
+  ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ
+ ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ
+
+IMPORTANT NOTE: Depending on which character set is active on your system,
+you may see different characters. This document (like all computer
+documents) does not contains characters per se, only bytes. What you see
+above is your particular computer's representation of these byte values.
+In other words, your active character set. However, if it is Latin-1, the
+first visible character is an inverted "!", and the last is an umlauted "y".
+Although we can safely assume your computer has ASCII, it does not
+necessarily have the Latin-1 character set active.
+
+What does all this have to do with FIGfonts???
+
+First, it should be evident that it is best to use only ASCII characters for
+sub-characters when possible. This will ensure portability to different
+platforms.
+
+FIGlet has gained international popularity, but early versions were made to
+handle only FIGcharacters with assigned character codes corresponding to
+ASCII. So, over the years there have been four methods used to create
+"virtual mapping tables" within the program itself:
+
+ The first method was simply to create FIGcharacters which do not
+ look like the ASCII character set implies. For example, a
+ FIGfont might contain Greek letters, and within its comments, it
+ may say, "If you type A, you'll get a Greek Alpha" etc. With
+ the advent of newer features, it is preferable not to use this
+ method. Instead, when possible, add new FIGcharacters to
+ existing FIGfonts or create new FIGfonts with FIGcharacters coded
+ to match the expectations of ASCII/Latin-1/Unicode, and create an
+ appropriate control file. (See "CONTROL FILES" below.) Remember
+ that Unicode includes almost any character for which you may want
+ to create a FIGcharacter.
+
+ The second method was very specific, to accommodate the German
+ audience. A special option was added to the FIGlet program
+ which would re-route input characters "[", "\", and "]" to
+ umlauted A, O and U, while "{", "|", and "}" would become the
+ respective lowercase versions of these. Also, "~" was made to
+ become the s-z character when this special option was used. This
+ was called "the -D option." The addition of this feature meant
+ that all compatible FIGfonts must contain these Deutsch (German)
+ FIGcharacters, in addition to the ASCII FIGcharacters. Although
+ this option is still available in the most recent version, it is
+ no longer necessary, as the same result can be achieved by the
+ newer features described below. However, the requirement for
+ Deutsch FIGcharacters remains for backward compatibility. (Or at
+ least zero-width FIGcharacters in their place.)
+
+ Later, FIGlet was made to accept control files, which are quite
+ literally a form of mapping table. (See "CONTROL FILES" below.)
+ This was a significant advance for internationalization.
+
+ FIGlet 2.2 can now accept specially encoded formats of input
+ text which imply more than one byte per character.
+
+
+CREATING FIGFONTS
+======== ========
+
+NOTE: FIGWin 1.0 is packaged with a program called FIGfont Editor for Windows
+1.0, which is just that. There is no need to read further if you intend to
+use it. However, the section "CONTROL FILES" below is still relevant.
+
+Since a FIGfont file is a text file, it can be created with any text editing
+program on any platform, and will still be compatible with FIGdrivers on all
+operating systems, except that the bytes used to indicate the end of each
+text line may vary. (PC's use carriage return and linefeed at the end of
+each line, Macintosh uses carriage return only, and UNIX uses linefeed only.)
+
+This minor difference among operating systems is handled easily by setting
+your FTP program to ASCII mode during upload or download. So there is no
+need to be concerned about this as long as you remember to do this during
+file transfer.
+
+The filename of a FIGfont file must end with ".flf", which stands for
+"<F>IG<L>ettering <F>ont". The first part of the filename should contain
+only letters, and should be lowercase on operating systems which permit case
+sensitive filenames. The filename should be unique in the first 8
+characters, since some older file systems truncate longer filenames.
+
+It is easier to modify an existing FIGfont than it is to create a new one
+from scratch. The first step is to read and understand this document.
+You may want to load "standard.flf" or another FIGfont into a text editor as
+an example while you read.
+
+A FIGfont file contains three portions: a header line, comments, and
+FIGcharacter data.
+
+
+THE HEADER LINE
+
+The header line gives information about the FIGfont. Here is an example
+showing the names of all parameters:
+
+ flf2a$ 6 5 20 15 3 0 143 229 NOTE: The first five characters in
+ | | | | | | | | | | the entire file must be "flf2a".
+ / / | | | | | | | \
+ Signature / / | | | | | \ Codetag_Count
+ Hardblank / / | | | \ Full_Layout*
+ Height / | | \ Print_Direction
+ Baseline / \ Comment_Lines
+ Max_Length Old_Layout*
+
+ * The two layout parameters are closely related and fairly complex.
+ (See "INTERPRETATION OF LAYOUT PARAMETERS".)
+
+For those desiring a quick explanation, the above line indicates that this
+FIGfont uses "$" to represent the hardblank in FIGcharacter data, it has
+FIGcharacters which are 6 lines tall, 5 of which are above the baseline, no
+line in the FIGfont data is more than 20 columns wide, the default horizontal
+layout is represented by the number 15, there are 3 comment lines, the
+default print direction for this FIGfont is left-to-right, a complete
+description of default and possible horizontal and vertical layouts is
+represented by the number 143, and there are 229 code-tagged characters.
+
+The first seven parameters are required. The last three (Direction,
+Full_Layout, and Codetag_Count, are not. This allows for backward
+compatibility with older FIGfonts, but a FIGfont without these parameters would
+force a FIGdriver to "guess" (by means not described in this document) the
+information it would expect to find in Full_Layout. For this reason, inclusion
+of all parameters is strongly recommended.
+
+Future versions of this standard may add more parameters after Codetag_Count.
+
+A description of each parameter follows:
+
+ Signature
+
+The signature is the first five characters: "flf2a". The first four
+characters "flf2" identify the file as compatible with FIGlet version 2.0 or
+later (and FIGWin 1.0). The "a" is currently ignored, but cannot be omitted.
+Different characters in the "a" location may mean something in future
+versions of this standard. If so, you can be sure your FIGfonts will still
+work if this character is "a".
+
+ Hardblank
+
+Immediately following the signature is the hardblank character. The
+hardblank character in the header line defines which sub-character will be
+used to represent hardblanks in the FIGcharacter data.
+
+By convention, the usual hardblank is a "$", but it can be any character
+except a blank (space), a carriage-return, a newline (linefeed) or a null
+character. If you want the entire printable ASCII set available to use, make
+the hardblank a "delete" character (character code 127). With the exception
+of delete, it is inadvisable to use non-printable characters as a hardblank.
+
+ Height
+
+The Height parameter specifies the consistent height of every FIGcharacter,
+measured in sub-characters. Note that ALL FIGcharacters in a given FIGfont
+have the same height, since this includes any empty space above or below.
+This is a measurement from the top of the tallest FIGcharacter to the bottom
+of the lowest hanging FIGcharacter, such as a lowercase g.
+
+ Baseline
+
+The Baseline parameter is the number of lines of sub-characters from the
+baseline of a FIGcharacter to the top of the tallest FIGcharacter. The
+baseline of a FIGfont is an imaginary line on top of which capital letters
+would rest, while the tails of lowercase g, j, p, q, and y may hang below.
+In other words, Baseline is the height of a FIGcharacter, ignoring any
+descenders.
+
+This parameter does not affect the output of FIGlet 2.2 or FIGWin 1.0, but
+future versions or other future FIGdrivers may use it. The Baseline
+parameter should be correctly set to reflect the true baseline as described
+above. It is an error for Baseline to be less than 1 or greater than the
+Height parameter.
+
+ Max_Length
+
+The Max_Length parameter is the maximum length of any line describing a
+FIGcharacter. This is usually the width of the widest FIGcharacter, plus 2
+(to accommodate endmarks as described later.) However, you can (and probably
+should) set Max_Length slightly larger than this as a safety measure in case
+your FIGfont is edited to include wider FIGcharacters. FIGlet (but not
+FIGWin 1.0) uses this number to minimize the memory taken up by a FIGfont,
+which is important in the case of FIGfonts with many FIGcharacters.
+
+ Old_Layout
+
+(See "INTERPRETATION OF LAYOUT PARAMETERS" below.)
+
+ Comment_Lines
+
+Between the first line and the actual FIGcharacters of the FIGfont are the
+comment lines. The Comment_Lines parameter specifies how many lines there
+are. Comments are optional, but recommended to properly document the origin
+of a FIGfont.
+
+ Print_Direction
+
+The Print_Direction parameter tells which direction the font is to be
+printed by default. A value of 0 means left-to-right, and 1 means
+right-to-left. If this parameter is absent, 0 (left-to-right) is assumed.
+Print_Direction may not specify vertical print, although FIGdrivers are
+capable of vertical print. Versions of FIGlet prior to 2.1 ignore this
+parameter.
+
+ Full_Layout
+
+(See "INTERPRETATION OF LAYOUT PARAMETERS" just below.)
+
+ Codetag_Count
+
+Indicates the number of code-tagged (non-required) FIGcharacters in this
+FIGfont. This is always equal to the total number of FIGcharacters in the font
+minus 102. This parameter is typically ignored by FIGdrivers, but can be
+used to verify that no characters are missing from the end of the FIGfont.
+The chkfont program will display the number of codetagged characters
+in the FIGfont on which it is run, making it easy to insert this parameter
+after a FIGfont is written.
+
+
+INTERPRETATION OF LAYOUT PARAMETERS
+
+Full_Layout describes ALL information about horizontal and vertical layout:
+the default layout modes and potential smushing rules, even when smushing is
+not a default layout mode.
+
+Old_Layout does not include all of the information desired by the most
+recent FIGdrivers, which is the inspiration for the creation of the new
+Full_Layout parameter. Old_Layout is still required for backward
+compatibility, and FIGdrivers must be able to interpret FIGfonts which do not
+have the Full_Layout parameter. (See "STANDARDIZED CAPABILITIES OF CURRENT
+AND FUTURE FIGDRIVERS".)
+
+Versions of FIGlet prior to 2.2 do not recognize the Full_Layout parameter.
+Documentation accompanying FIGlet versions prior to 2.2 refer to Old_Layout
+as "smushmode", which is somewhat misleading since it can indicate layout
+modes other than smushing.
+
+Old_Layout and Full_Layout must contain some redundant information.
+
+Setting the layout parameters is a matter of adding numbers together ("code
+values"). What follows is a chart of the meanings of all code values.
+(You may skip down to "SETTING LAYOUT PARAMETERS STEP BY STEP" if you prefer,
+or if you find this portion confusing.)
+
+Full_Layout: (Legal values 0 to 32767)
+
+ 1 Apply horizontal smushing rule 1 when smushing
+ 2 Apply horizontal smushing rule 2 when smushing
+ 4 Apply horizontal smushing rule 3 when smushing
+ 8 Apply horizontal smushing rule 4 when smushing
+ 16 Apply horizontal smushing rule 5 when smushing
+ 32 Apply horizontal smushing rule 6 when smushing
+ 64 Horizontal fitting (kerning) by default
+ 128 Horizontal smushing by default (Overrides 64)
+ 256 Apply vertical smushing rule 1 when smushing
+ 512 Apply vertical smushing rule 2 when smushing
+ 1024 Apply vertical smushing rule 3 when smushing
+ 2048 Apply vertical smushing rule 4 when smushing
+ 4096 Apply vertical smushing rule 5 when smushing
+ 8192 Vertical fitting by default
+ 16384 Vertical smushing by default (Overrides 8192)
+
+When no smushing rules are included in Full_Layout for a given axis, the
+meaning is that universal smushing shall occur, either by default or when
+requested.
+
+Old_Layout: (Legal values -1 to 63)
+
+ -1 Full-width layout by default
+ 0 Horizontal fitting (kerning) layout by default*
+ 1 Apply horizontal smushing rule 1 by default
+ 2 Apply horizontal smushing rule 2 by default
+ 4 Apply horizontal smushing rule 3 by default
+ 8 Apply horizontal smushing rule 4 by default
+ 16 Apply horizontal smushing rule 5 by default
+ 32 Apply horizontal smushing rule 6 by default
+
+* When Full_Layout indicates UNIVERSAL smushing as a horizontal default
+(i.e., when none of the code values of horizontal smushing rules are included
+and code value 128 is included in Full_Layout) Old_Layout must be set to 0
+(zero). Older FIGdrivers which cannot read the Full_Layout parameter are
+also incapable of universal smushing. Therefore they would be directed to
+the "next best thing", which is horizontal fitting (kerning).
+
+NOTE: You should NOT add the -1 value to any positive code value for
+Old_Layout. This would be a logical contradiction.
+
+See "STANDARDIZED CAPABILITIES OF CURRENT AND FUTURE FIGDRIVERS" for the
+behavior of a FIGdriver when the Full_Layout parameter is absent (presumably
+in an older FIGfont).
+
+The following rules establish consistency between Old_Layout and Full_Layout.
+
+ If full width is to be the horizontal default:
+ Old_Layout must be -1.
+ Full_Layout must NOT include code values 64 nor 128.
+
+ If horizontal fitting (kerning) is to be default:
+ Old_Layout must be 0.
+ Full_Layout must include code value 64.
+ Full_Layout must NOT include code value 128.
+
+ If CONTROLLED smushing is to be the horizontal default:
+ Old_Layout must be a positive number, represented by the added
+ code values of all desired horizontal smushing rules.
+ Full_Layout must include the code values for the SAME set of
+ horizontal smushing rules as included in Old_Layout.
+ Full_Layout must include code value 128.
+
+ If UNIVERSAL smushing is to be the horizontal default:
+ Old_Layout must be 0.
+ Full_Layout must include code value 128.
+ Full_Layout must NOT include any code value under 64.
+
+In general terms, if Old_Layout specifies horizontal smushing rules,
+Full_Layout must specify the same set of horizontal rules, and both must
+indicate the same horizontal default layout mode.
+
+
+SETTING LAYOUT PARAMETERS STEP-BY-STEP
+
+The following step-by-step process will yield correct and consistent values
+for the two layout parameters. You may skip this if you find the
+explanations above easier to use.
+
+Step 1: Start with 0 for both numbers.
+
+ Write "Old_Layout" and "Full_Layout" on a piece of paper.
+ Write the number 0 next to each.
+ The number 0 may be crossed out and changed several times below.
+ Go to step 2.
+
+Step 2: Set the DEFAULT HORIZONTAL LAYOUT MODE.
+
+ If you want to use FULL WIDTH as the default
+ Make Old_Layout -1
+ Go to step 3.
+ If you want to use HORIZONTAL FITTING (kerning) as the default
+ Make Full_Layout 64
+ Go to step 3.
+ If you want to use HORIZONTAL SMUSHING as the default
+ Make Full_Layout 128
+ Go to step 3.
+
+Step 3: Specify HOW TO SMUSH HORIZONTALLY WHEN SMUSHING.
+
+ If you want to use UNIVERSAL smushing for the horizontal axis
+ Go to step 4.
+ If you want to use CONTROLLED smushing for the horizontal axis
+ Add together the code values for all the horizontal smushing
+ rules you want from the list below to get the horizontal
+ smushing rules total.
+
+ EQUAL CHARACTER SMUSHING 1
+ UNDERSCORE SMUSHING 2
+ HIERARCHY SMUSHING 4
+ OPPOSITE PAIR SMUSHING 8
+ BIG X SMUSHING 16
+ HARDBLANK SMUSHING 32
+
+ Horizontal smushing rules total: ___
+
+ If Full_Layout is currently 128
+ Change Old_Layout to the horizontal smushing rules total.
+ Increase Full_Layout by the horizontal smushing rules total.
+ Go to Step 4.
+ If Full_Layout is currently 0 or 64
+ Increase Full_Layout by the horizontal smusing rules total.
+ Go to Step 4.
+
+Step 4: Set the DEFAULT VERTICAL LAYOUT MODE.
+
+ If you want to use FULL HEIGHT as the default
+ Go to step 5.
+ If you want to use VERTICAL FITTING as the default
+ Increase Full_Layout by 8192.
+ Go to step 5.
+ If you want to use VERTICAL SMUSHING as the default
+ Increase Full_Layout by 16384.
+ Go to step 5.
+
+Step 5: Specify HOW TO SMUSH VERTICALLY WHEN SMUSHING.
+
+ If you want to use UNIVERSAL smushing for the vertical axis
+ Go to step 6.
+ If you want to use CONTROLLED smushing for the vertical axis
+ Add together the code values for all the vertical smushing
+ rules you want from the list below to get the vertical
+ smushing rules total.
+
+ EQUAL CHARACTER SMUSHING 256
+ UNDERSCORE SMUSHING 512
+ HIERARCHY SMUSHING 1024
+ HORIZONTAL LINE SMUSHING 2048
+ VERTICAL LINE SUPERSMUSHING 4096
+
+ Vertical smushing rules total: ____
+
+ Increase Full_Layout by the vertical smushing rules total.
+ Go to step 6.
+
+Step 6: You're done.
+
+The resulting value of Old_Layout will be a number from -1 to 63.
+The resulting value of Full_Layout will be a number from 0 and 32767.
+
+
+FIGFONT COMMENTS
+
+After the header line are FIGfont comments. The comments can be as many
+lines as you like, but should at least include your name and Email address.
+Here is an example which also shows the header line.
+
+ flf2a$ 6 5 20 15 3 0 143
+ Example by Glenn Chappell <ggc@uiuc.edu> 8/94
+ Permission is hereby given to modify this font, as long as the
+ modifier's name is placed on a comment line.
+
+Comments are not required, but they are appreciated. Please comment your
+FIGfonts.
+
+Remember to adjust the Comment_Lines parameter as you add lines to your
+comments. Don't forget that blank lines DO count.
+
+
+FIGCHARACTER DATA
+============ ====
+
+The FIGcharacter data begins on the next line after the comments and
+continues to the end of the file.
+
+BASIC DATA STRUCTURE
+
+The sub-characters in the file are given exactly as they should be output,
+with two exceptions:
+
+ 1) Hardblanks should be the hardblank character specified in the
+ header line, not a blank (space).
+
+ 2) Every line has one or two endmark characters, whose column
+ locations define the width of each FIGcharacter.
+
+In most FIGfonts, the endmark character is either "@" or "#". The FIGdriver
+will eliminate the last block of consecutive equal characters from each line
+of sub-characters when the font is read in. By convention, the last line of
+a FIGcharacter has two endmarks, while all the rest have one. This makes it
+easy to see where FIGcharacters begin and end. No line should have more
+than two endmarks.
+
+Below is an example of the first few FIGcharacters, taken from small.flf.
+
+NOTE: The line drawn below consisting of "|" represents the left margin of
+your editor. It is NOT part of the FIGfont. Also note that hardblanks are
+represented as "$" in this FIGfont, as would be described in the header line.
+
+ |$@
+ |$@
+ blank/space |$@
+ |$@
+ |$@@
+ | _ @
+ || |@
+ exclamation point ||_|@
+ |(_)@
+ | @@
+ | _ _ @
+ |( | )@
+ double quote | V V @
+ | $ @
+ | @@
+ | _ _ @
+ | _| | |_ @
+ number sign ||_ . _|@
+ ||_ _|@
+ | |_|_| @@
+ | @
+ | ||_@
+ dollar sign |(_-<@
+ |/ _/@
+ | || @@
+
+Notice that each FIGcharacter occupies the same number of lines (6 lines, in
+this case), which must also be expressed in the header line as the Height
+parameter.
+
+Also notice that for every FIGcharacter, there must be a consistent width
+(length) for each line once the endmarks are removed. To do otherwise would
+be an error.
+
+Be aware of the vertical alignment of each FIGcharacter within its height,
+so that all FIGcharacters will be properly lined up when printed.
+
+If one of the last sub-characters in a particular FIGcharacter is "@", you
+should use another character for the endmark in that FIGcharacter so that
+the intended "@" is not interpreted as an endmark. "#" is a common
+alternative.
+
+Load a few existing FIGfonts into your favorite text editor for other
+examples.
+
+
+REQUIRED FIGCHARACTERS
+
+Some FIGcharacters are required, and must be represented in a specific order.
+Specifically: all of the printable character codes from ASCII shown in the
+table below, in order, plus character codes 196, 214, 220, 228, 246, 252,
+and 223, in that order. In Latin-1, these extra 7 characters represent the
+following German characters: umlauted "A", "O", "U", "a", "o" and "u"; and
+also "ess-zed".
+
+ Printable portion of the ASCII character set:
+
+ 32 (blank/space) 64 @ 96 `
+ 33 ! 65 A 97 a
+ 34 " 66 B 98 b
+ 35 # 67 C 99 c
+ 36 $ 68 D 100 d
+ 37 % 69 E 101 e
+ 38 & 70 F 102 f
+ 39 ' 71 G 103 g
+ 40 ( 72 H 104 h
+ 41 ) 73 I 105 i
+ 42 * 74 J 106 j
+ 43 + 75 K 107 k
+ 44 , 76 L 108 l
+ 45 - 77 M 109 m
+ 46 . 78 N 110 n
+ 47 / 79 O 111 o
+ 48 0 80 P 112 p
+ 49 1 81 Q 113 q
+ 50 2 82 R 114 r
+ 51 3 83 S 115 s
+ 52 4 84 T 116 t
+ 53 5 85 U 117 u
+ 54 6 86 V 118 v
+ 55 7 87 W 119 w
+ 56 8 88 X 120 x
+ 57 9 89 Y 121 y
+ 58 : 90 Z 122 z
+ 59 ; 91 [ 123 {
+ 60 < 92 \ 124 |
+ 61 = 93 ] 125 }
+ 62 > 94 ^ 126 ~
+ 63 ? 95 _
+
+ Additional required Deutsch FIGcharacters, in order:
+
+ 196 (umlauted "A" -- two dots over letter "A")
+ 214 (umlauted "O" -- two dots over letter "O")
+ 220 (umlauted "U" -- two dots over letter "U")
+ 228 (umlauted "a" -- two dots over letter "a")
+ 246 (umlauted "o" -- two dots over letter "o")
+ 252 (umlauted "u" -- two dots over letter "u")
+ 223 ("ess-zed" -- see FIGcharacter illustration below)
+ ___
+ / _ \
+ | |/ /
+ Ess-zed >>---> | |\ \
+ | ||_/
+ |_|
+
+If you do not wish to define FIGcharacters for all of those required above,
+you MAY create "empty" FIGcharacters in their place by placing endmarks flush
+with the left margin. The Deutsch FIGcharacters are commonly created as
+empty. If your FIGfont includes only capital letters, please copy them to
+the appropriate lowercase locations, rather than leaving lowercase letters
+empty. A FIGfont which does not include at least all ASCII letters, a space,
+and a few basic punctuation marks will probably frustrate some users. (For
+example "@" is more frequently desired as a FIGcharacter than you may think,
+since Email addresses may be written as FIGures.)
+
+
+CODE TAGGED FIGCHARACTERS
+
+After the required FIGcharacters, you may create FIGcharacters with any
+character code in the range of -2147483648 to +2147483647. (Over four
+billion possibilities, which is "virtual infinity" for this purpose.)
+One exception: character code -1 is NOT allowed for technical reasons.
+It is advisable to assign character codes such that the appearance of your
+FIGcharacters matches the expectations of ASCII/Latin-1/Unicode, with a few
+exceptions:
+
+ 1) If a FIGcharacter with code 0 is present, it is treated
+ specially. It is a FIGfont's "missing character". Whenever
+ the FIGdriver is told to print a character which doesn't exist
+ in the current FIGfont, it will print FIGcharacter 0. If there
+ is no FIGcharacter 0, nothing will be printed.
+
+ 2) If a FIGfont contains a non-Latin alphabet in character codes
+ in the ASCII range 32-126 (which is discouraged), we have found
+ it helpful to include a human-readable translation table as one
+ of the FIGcharacters instead of a "glyph". Typically, the "~"
+ would contain this table. The translation table FIGcharacter
+ would contain a list of all the special characters in the
+ FIGfont, along with the ASCII characters to which they
+ correspond. Keep this table no more than 79 columns wide.
+ (Thanks to Gedaliah Friedenberg for this idea.)
+
+ 3) In more extensive Unicode fonts, you can assign a negative
+ character code (other than -1) to one or more translation
+ tables, similar to #2 above. (All Unicode character codes are
+ positive.) And, you will most likely suggest within the
+ comments that a user access one of several control files (See
+ "CONTROL FILES" below) to gain access to Latin-2, Latin-3, or
+ other 8-bit standardized character sets. The control files may
+ redirect the "~" character to one of the negative character codes so
+ that the translation table would display the table when "~" is
+ given for input. Doing this allows you to still have a "~"
+ FIGcharacter for those who do not use a control file.
+
+Those FIGcharacters which are not required must have an explicit character
+code in a separate line preceding them, called a "code tag". A code tag
+contains the value of the character code, followed by whitespace (a few
+spaces), and perhaps an optional comment. The comment is usually the name of
+the FIGcharacter. The Unicode Consortium has assigned formal names to all
+officially accepted characters, and these may be used. An entire code tag,
+including the comment, should not occupy more than 95 columns. (Over 100
+characters here may make older versions of FIGlet crash.)
+
+Here is an example, showing two code tagged FIGcharacters after the last two
+required Deutsch FIGcharacters. Again, the line drawn below consisting of
+"|" represents the left margin of your editor, and is NOT part of the FIGfont.
+
+ | _ _ @
+ |(_) (_)@
+ || | | |@
+ || |_| |@
+ | \__,_|@
+ | @@
+ | ___ @
+ | / _ \@
+ || |/ /@
+ || |\ \@
+ || ||_/@
+ ||_| @@
+ |161 INVERTED EXCLAMATION MARK
+ | _ @
+ |(_)@
+ || |@
+ || |@
+ ||_|@
+ | @@
+ |162 CENT SIGN
+ | _ @
+ | | | @
+ | / __)@
+ || (__ @
+ | \ )@
+ | |_| @@
+
+
+A character code may be expressed in decimal (as shown above, numbers we're
+all familiar with), or in Octal (seldom used) or in hexadecimal.
+
+Character codes expressed in octal must be preceded by "0" (zero), and if
+negative, "-" (minus) must precede the "0". There are eight octal digits:
+01234567. You may recall octal numbers from school as "base 8 numbers".
+
+Character codes expressed in hexadecimal must be preceded by "0x" or "0X".
+(That's also a zero.) If negative, the "-" must precede the "0x". There are
+16 hexadecimal digits: 01234567890ABCDEF. (The "letter-digits" may also be
+lowercase.) Hexadecimal is "base 16".
+
+It is common to express character codes less than 256 (in the range of an
+8-bit character set) as decimal, while FIGfonts which extend into the Unicode
+range would have character codes expressed in hexadecimal. This is because
+the Unicode Standard expresses character codes in hexadecimal, which is
+helpful for programmers.
+
+The code tagged FIGcharacters may be listed in any order, but simple
+sequential order is recommended.
+
+If two or more FIGcharacters have the same character code, the last one in
+the FIGfont is the one used. It is common for the Deutsch FIGcharacters to
+be given twice in a FIGfont, just to maintain a consistent order for the
+Latin-1 range (128 to 255).
+
+It is not advisable to assign character codes in the range of 1 to 31, since
+this range includes control characters in ASCII. Character code 127 is a
+delete in ASCII, and is also not advised. Character codes 128 to 159 are
+additional control characters in Latin-1, and they too should not be used.
+All of the above are legal, technically, but are not part of what is legal
+for input, so they could only be accessed by use of a control file.
+(See "CONTROL FILES" below.) If you are still tempted to use them, consider
+negative character codes instead, which are meaningless in all standardized
+character sets.
+
+Again, the character code -1 is illegal for technical reasons.
+
+
+NOTES - AVOIDING ERRORS AND GENERAL ADVICE
+===== ======== ====== === ======= ======
+
+It is very important that every character in a font has the same height, and,
+once the endmarks are removed, that all the lines constituting a single
+FIGcharacter have the same length. Be careful also that no lines in the font
+file have trailing blanks (spaces), as the FIGdriver will take these to be
+the endmarks. (FIGWin 1.0 will not consider blanks to be endmarks.)
+
+Errors in a FIGfont can be detected by using the "chkfont" program,
+part of the standard FIGlet package, and also available, as of this
+writing from http://www.figlet.org/
+For FIGWin users, the FIGWin program will report errors when a FIGfont is
+read in; it is less forgiving than FIGlet, which can produce nonsense if the
+FIGfont is incorrectly formatted.
+
+Remember that sub-characters outside of the ASCII range will not necessarily
+display the same way on your system as on others.
+
+The blank (space) FIGcharacter should usually consist of one or two columns
+of hardblanks and nothing else; slanted fonts are an exception to this rule.
+If the space FIGcharacter does not contain any hardblanks, it will disappear
+when horizontal fitting (kerning) or smushing occurs.
+
+Again, if you design a FIGfont, please let us know!
+
+
+CONTROL FILES
+======= =====
+
+A FIGfont control file is a separate text file, associated with one or more
+FIGfonts, that indicates how to map input characters into FIGfont character
+codes. By default, FIGdrivers read single bytes from the input source and
+interpret them as Latin-1 FIGcharacters.
+
+FIGlet version 2.2 (and later) can optionally interpret its input as DBCS or
+UTF-8 characters, making it possible to access FIGcharacters with codes
+outside the Latin-1 range (greater than 255).
+
+In addition, though, all versions of FIGlet can use control files to
+transform specific character codes (or ranges of codes) as other codes
+(or ranges). Multiple control files can be specified, in which case multiple
+stages of transformation are performed.
+
+The filename of a control file always ends with ".flc".
+
+CONTROL FILE FORMAT
+
+Control files contain several kinds of lines. Lines beginning with "#", as
+well as blank lines, are comment lines and are ignored. All other lines are
+command lines, with one of the following formats:
+
+ t inchar outchar
+ t inchar1-inchar2 outchar1-outchar2
+ number number
+ f
+ h
+ j
+ b
+ u
+ g{0|1|2|3} {94|96|94x94} [char]
+ g{L|R} {0|1|2|3}
+
+where "inchar", "outchar", and "char" are either Latin-1 characters
+representing their own codes, or else are numeric character codes preceded by
+a "\" character; and "number" is a numeric character code with no preceding
+"\" character.
+
+Thus "A" represents the code 65, as does "\65", and "\0x100" represents the
+code 256 (100 in hexadecimal). In addition, "\ " (backslash followed by a
+space) represents the code 32 (space), and the following backslash sequences
+are also understood:
+
+ \a code 7 (a bell/alert)
+ \b code 8 (a backspace)
+ \e code 27 (an ESC character)
+ \f code 12 (a form feed)
+ \n code 10 (a newline/line feed)
+ \r code 13 (a carriage return)
+ \t code 9 (a horizontal tab)
+ \v code 11 (a vertical tab)
+ \\ code 92 (a backslash)
+
+All of these combinations except perhaps "\\" are very unlikely to be used,
+but they are provided just in case they are needed.
+
+Whitespace characters are used between "t" and "inchar" and between "inchar"
+and "outchar", but not around the "-" characters used in the second type of
+"t" command.
+
+The term "string" refers to any number of characters represented in the
+format given above. The characters begin after the whitespace following the
+letter "s", and continue to the end of the line.
+
+Anything following the first letter of an "f", "h", "j", or "u" command is
+ignored.
+
+The first type of "t" command transforms characters with the code "inchar"
+into characters with the code "outchar". The second type of "t" command
+transforms characters in the range "inchar1" to "inchar2" as the
+corresponding codes in the range "outchar1" to "outchar2". Both ranges must
+be of the same size. The form "number number" is equivalent to a "t"
+command of the first type, and is provided for compatibility with the mapping
+tables issued by the Unicode Consortium.
+
+Multiple transformation stages can be encoded in a single control file by
+using "f" commands to separate the stages.
+
+Versions of FIGlet before 2.1 required that the first line of a control file
+consist of the signature string "flc2a". This signature line is still
+permitted in FIGlet 2.2 and later versions, but is no longer required.
+
+Here is an example of a control file. The blanks at the beginning of each
+line are for readability only, and are not part of the file.
+
+The following control file:
+
+ flc2a
+ t # $
+ t A-Z a-z
+
+will map the "#" character to "$", and will also convert uppercase ASCII to
+lowercase ASCII.
+
+If a number of consecutive "t" commands are given, then for each character
+processed, only the first applicable command (if any) will be executed.
+Consider this control file:
+
+ t A B
+ t B A
+
+It will swap the characters "A" and "B". If the FIGdriver reads an "A", the
+first command will change "A" to "B", in which case the second will not be
+executed. If the FIGdriver reads a "B", the first command will have no
+effect, and the second command will change "B" to "A". Here is another
+control file:
+
+ t A B
+ t A C
+
+In this example, the second line is never executed. In short, a sequence of
+"t" lines "does what it ought to".
+
+More complex files, in which a single character is acted upon by several "t"
+commands, can be set up using an "f" command. For example:
+
+ flc2a
+ t a-z A-Z
+ f
+ t Q ~
+
+This control file specifies two transformation stages. In the first stage,
+lowercase ASCII letters are changed to their uppercase equivalents. The
+second stage maps any Q (whether original or a converted "q") into the "~"
+character. If the "f" command were omitted, "q" characters would remain "Q"
+and not be converted to "~".
+
+EXTENDED COMMANDS
+
+The "h", "j", "b", "u", and "g" commands are only understood by FIGlet
+version 2.2 or later. They control how a FIGdriver interprets bytes in the
+input. By default, the FIGdriver interprets each byte of input as a distinct
+character. This mode is suitable for most character encodings. All these
+commands are logically acted on before any other control file commands, no
+matter where in the sequence of control files they appear. They are also
+mutually exclusive; if more than one of these commands is found, only the
+last is acted on. Multiple "g" commands are permitted, however.
+
+The "h" command forces the input to be interpreted in HZ mode, which is used
+for the HZ character encoding of Chinese text. In this mode, the sequence
+"~{" (which is removed from the input) signals that all following characters
+are two bytes long until the sequence "~}" is detected. In addition, the
+sequence "~~" is changed to just "~", and all other two-byte sequences
+beginning with "~" are removed from the input. The character code
+corresponding to a two-byte character is:
+
+ first character * 256 + second character
+
+The "j" command forces the input to be interpreted in Shift-JIS mode (also
+called "MS-Kanji mode"). Input bytes in the ranges 128-159 and 224-239 are
+read as the high-order byte of a two-byte character; all other bytes are
+interpreted as one-byte characters. The value of a two-byte character is
+determined in the same way as in HZ mode.
+
+The "b" command forces the input to be interpreted in DBCS mode, which is
+suitable for processing HZ or Shift-GB Chinese text or Korean text. Input
+bytes in the ranges 128-255 are read as the high-order byte of a two-byte
+character; all other bytes are interpreted as one-byte characters. The
+value of a two-byte character is determined in the same way as in HZ mode.
+
+The "u" command forces the input to be interpreted in UTF-8 mode, which
+causes any input byte in the range 0x80 to 0xFF to be interpreted as the
+first byte of a multi-byte Unicode (ISO 10646) character. UTF-8 characters
+can be from 1 to 6 bytes long. An incorrectly formatted sequence is
+interpreted as the character 128 (normally an unused control character).
+
+Otherwise, the input is allowed to contain ISO 2022 escape sequences, which
+are decoded to generate appropriate character codes. These character codes
+are *not* a subset of Unicode, but may be more useful in processing East
+Asian text. A brief explanation of ISO 2022 is given here in order to
+clarify how a FIGdriver should interpret it. The "g" command provides
+information for the ISO 2022 interpreter, and is explained below.
+
+ISO 2022 text is specified using a mixture of registered character sets.
+At any time, up to four character sets may be available. Character sets
+have one of three sizes: single-byte character sets with 94 characters
+(e.g. ASCII), single-byte character sets with 96 characters (e.g. the top
+halves of ISO Latin-1 to Latin-5), or double-byte character sets with
+94 x 94 characters (e.g. JIS 0208X-1983). Each registered character set has
+a standard designating byte in the range 48 to 125; the bytes are unique withi
+n character set sizes, but may be reused across sizes. For example, byte 66
+designates the 94-character set ASCII, the 96-character set ISO Latin-2 (top
+half), and the 94 x 94 Japanese character set JIS 0208X-1983. In this
+document, the designating byte of a character set will be represented by <D>.
+
+The four available character sets are labeled G0, G1, G2, and G3. Initially,
+G0 is the 94-character set ASCII, and G1 is the 96-character set ISO Latin-1
+(top half). The other character sets are unassigned. The following escape
+sequences (where ESC = the byte 27) specify changes to the available
+character sets:
+
+ ESC ( <D> Set G0 to the 94-character set <D>
+ ESC ) <D> Set G1 to the 94-character set <D>
+ ESC * <D> Set G2 to the 94-character set <D>
+ ESC + <D> Set G3 to the 94-character set <D>
+ ESC - <D> Set G1 to the 96-character set <D>
+ ESC . <D> Set G2 to the 96-character set <D>
+ ESC / <D> Set G3 to the 96-character set <D>
+ ESC $ <D> Set G0 to the 94 x 94 character set <D>
+ ESC $ ( <D> Set G0 to the 94 x 94 character set <D>
+ ESC $ ) <D> Set G1 to the 94 x 94 character set <D>
+ ESC $ * <D> Set G2 to the 94 x 94 character set <D>
+ ESC $ + <D> Set G3 to the 94 x 94 character set <D>
+
+
+Note that G0 may not be a 96-character set, and that there are two ways to
+specify a 94 x 94 character set in G0, of which the first is deprecated.
+
+ISO 2022 decoding affects input bytes in the ranges 33 to 126 and 160 to 255,
+known as "the left half" and "the right half" respectively. All other bytes,
+unless they belong to a control sequence shown in this document, remain
+unchanged. Initially, the left half is interpreted as character set G0,
+and the right half as character set G1. This can be changed by the following
+control sequences:
+
+ SI (byte 15) Interpret the left half as G1 characters
+ SO (byte 14) Interpret the left half as G0 characters
+ ESC n Interpret the left half as G2 characters
+ ESC o Interpret the left half as G3 characters
+ ESC ~ Interpret the right half as G1 characters
+ ESC } Interpret the right half as G2 characters
+ ESC | Interpret the right half as G3 characters
+ SS2 (byte 142) Interpret next character only as G2
+ ESC N Interpret next character only as G2
+ SS3 (byte 143) Interpret next character only as G3
+ ESC O Interpret next character only as G3
+
+
+This rich schema may be used in various ways. In ISO-2022-JP, the Japanese
+flavor of ISO 2022, only the bytes 33-126 and the G0 character set is used,
+and escape sequences are used to switch between ASCII, ISO-646-JP (the
+Japanese national variant of ASCII), and JIS 0208X-1983. In other versions,
+the G1 character set has 94 x 94 size, and so any byte in the range 160-255
+is automatically the first byte of a double-byte character.
+
+FIGdrivers that support ISO 2022 do so in the following way. Each character i
+is decoded and assigned to a character set <D>.
+
+ If the character belongs to a 94-bit character set,
+ then if its value exceeds 128, it is reduced by 128,
+ and the value 65536 * <D> is added to it,
+ unless <D> is 66 (ASCII).
+ If the character belongs to a 96-bit character set,
+ then if its value is less than 128, it is increased by 128,
+ and the value 65536 * <D> is added to it,
+ unless <D> is 65 (ISO Latin-1).
+ If the character belongs to a 94 x 94 character set,
+ then the value is the sum of:
+ the first byte * 256,
+ plus the second byte,
+ plus the value 65536 * <D>.
+
+
+Thus, the character code 65 ("A") in ASCII remains 65, the character code
+196 in ISO Latin-1 ("A-umlaut") remains 196, the character code 65 (0x41)
+in ISO-646-JP (whose <D> is 74 = 0x4A) becomes 0x4A0041 =4849729, and the
+two-byte sequence 33 33 (0x21 0x21) in JIS 0208X-1983 (whose <D> is
+65 = 0x41) becomes 0x412121 = 4268321. These codes may be used in compiling
+FIGfonts suitable for use with ISO 2022 encoded text.
+
+The initial settings of G0 through G3 and their assignments to the left half
+and the right half can be altered in a control file by using "g" commands,
+as follows:
+
+ g {0|1|2|3} {94|96|94x94} [<D>]
+
+specifies that one of G0-G3 is a 94, 96, or 94x94 character set with
+designating character <D>. If no designating character is specified, then a
+<D> value of zero is assumed.
+
+For example, the list of control commands:
+
+ g 0 94 B
+ g 1 96 A
+
+sets the G0 character set to ASCII (94-character set "B") and the G1
+character set to the top half of Latin-1 (96-character set "A"). (This is the
+default setting).
+
+To change the initial assignments of G0 to the left half and G1 to the right
+half, "g" commands of the form
+
+ g {L|R} {0|1|2|3}
+
+For example, the command:
+
+ g R 2
+
+causes right-half bytes (in the range 160-255) to be interpreted as G2.
+Whether these bytes are interpreted singly or in pairs depends on the type
+of character set that is currently available as G2.
+
+Spaces may be freely used or omitted in "g" commands.
+
+The standard FIGlet distribution contains mapping tables for Latin-2 (ISO 8859-2),
+Latin-3 (ISO 8859-3), Latin-4 (ISO 8859-4), and Latin-5 (ISO 8859-9). They
+can be used with the font "standard.flf", which contains all the characters
+used in these standards.
+
+
+STANDARDIZED CAPABILITIES OF CURRENT AND FUTURE FIGDRIVERS
+============ ============ == ======= === ====== ==========
+
+We assert the following as the "Law" of our intentions:
+
+PROFIT
+
+All future FIGdrivers shall be FREE OF CHARGE to the general public via the
+Internet. Any advertisements of other works by the author must be in
+documentation only, and limited to ONE "screenful", and shall not appear by
+normal program behavior, nor interfere with normal behavior. No FIGdriver
+shall disable itself after a set period of time or request "donations".
+No FIGdriver shall offer any other FIGdriver with improved capability for
+creating FIGures in exchange for money.
+
+REQUIRED FEATURES OF FUTURE VERSIONS
+
+Future FIGdrivers must read and process FIGfont files as described in this
+document, but are not necessarily expected to process control files, smush,
+perform fitting or kerning, perform vertical operations, or even produce
+multiple lines in output FIGures.
+
+FIGDRIVER NAMES
+
+Future FIGdrivers must be named to include capitalized "FIG" and shall have
+an incremental version number specific to its own platform.
+
+BACKWARDS COMPATIBILITY OF FUTURE VERSIONS
+
+Any future FIGdriver created for the same platform as an existing FIGdriver,
+and using the same name as the existing FIGdriver, shall be considered a new
+version of the preceding FIGdriver, and shall contain all historical comments
+of updates to past versions on the same platform, and shall have full
+capability of the preceding versions. If the source code is not provided to
+the general public, it shall be at least provided to any potential developers
+of later versions, and such comments relating to past versions shall be
+accessible to any user by other means or documentation. If a new program is
+created on a platform that already has an existing FIGdriver, it must be
+given a new and distinct name. This allows multiple FIGdrivers to exist for
+the same platform with different capabilities.
+
+The format of FIGfonts may not be modified to be non-backwards compatible
+UNLESS:
+
+ 1) The new format is easily editable as an ASCII text file,
+ beginning with the characters "flf" followed by a sequential
+ number.
+
+ 2) At least all of the same information can be derived from the
+ new format as the prior format (currently "flf2"). This
+ includes the main comments which give credit to the FIGfont
+ designer.
+
+ 3) Individuals are found who are willing and have the ability to
+ either port or develop versions for at least UNIX, DOS,
+ Windows, and Amiga which will read both the new formats AND the
+ prior format (currently "flf2"), and retain the capability of
+ past versions. It is intended that this will be expanded to
+ include Macintosh if a GUI version exists. This list of
+ required operating systems may be reduced if an operating
+ system falls out of popularity or increased if a new operating
+ system for which there is a FIGdriver comes into greater
+ popularity, according to the consensus of opinions of past
+ developers for the most popular operating systems.
+
+ 4) A C, Java, or other version must always exist which can
+ receive input and instructions either from a command line, a
+ file, or directly over the internet so that FIGures can be
+ obtained from internet-based services without the need to
+ download any FIGdriver.
+
+ 5) All existing FIGfonts available from the "official" point of
+ distribution (http://www.figlet.org/),
+ must be converted to the new format, and offered for download
+ alongsidethe new versions.
+
+THE FUNCTION OF WORD WRAPPING
+
+All future FIGdrivers should duplicate these behaviors, unless a version is
+only capable of outputting one-line FIGures, which is acceptable as long no
+preceding versions exist for its platform which can output multiple-line
+FIGures.
+
+FIGdrivers which perform word wrapping do so by watching for blanks (spaces)
+in input text, making sure that the FIGure is no more wide than the maximum
+width allowed.
+
+Input text may also include linebreaks, so that a user may specify where
+lines begin or end instead of relying on the word wrapping of the FIGdriver.
+(Linebreaks are represented by different bytes on different platforms, so
+each FIGdriver must watch for the appropriate linebreaks for its particular
+platform.)
+
+When a FIGdriver word wraps and there are several consecutive blanks in input
+text where the wrapping occurred, the FIGdriver will disregard all blanks
+until the next non-blank input character is encountered. However, if blanks
+in input text immediately follow a linebreak, or if blanks are the first
+characters in the input text, the blanks will be "printed", moving any
+visible FIGcharacters which follow on the same output line to the right.
+Similarly, if an image is right-aligned, and blanks immediately precede
+linebreaks or the end of input text, a FIGdriver will move an entire line of
+output FIGcharacters to the left to make room for the blank FIGcharacters
+until the left margin is encountered. (If the print direction is
+right-to-left, everything stated in this paragraph is reversed.)
+
+Word processing programs or text editors usually behave similarly in all
+regards to word wrapping.
+
+GENERAL INTENT FOR CROSS-PLATFORM PORTABILITY
+
+Currently, all versions of FIGlet are compiled from C code, while FIGWin 1.0
+is written in Visual Basic. Over time it is intended that a later version of
+FIGWin will be created using a GUI C programming language, and that the
+FIGlet C code shall continue to be written to be easily "plugged in" to a
+GUI shell. It is preferable for developers of FIGdrivers for new platforms
+to use C or a GUI version of C, so that when the core rendering engine of
+FIGlet is updated, it will be portable to other platforms.
+
+CONTROL FILE COMMANDS
+
+New control file commands may be added to later versions of this standard.
+However, the commands "c", "d", and "s" are permanently reserved and may
+never be given a meaning.
+
+FILE COMPRESSION
+
+FIGfonts (and control files) are often quite long, especially if many
+FIGcharacters are included, or if the FIGcharacters are large. Therefore,
+some FIGdrivers (at present, only FIGlet version 2.2 or later) allow
+compressed FIGfonts and control files.
+
+The standard for FIG compression is to place the FIGfont or control file into
+a ZIP archive. ZIP archives can be created by the proprietary program PKZIP
+on DOS and Windows platforms, or by the free program Info-ZIP ZIP on almost
+all platforms. More information on ZIP can be obtained at
+http://www.cdrom.com/pub/infozip/Info-Zip.html .
+
+The ZIP archive must contain only a single file. Any files in the archive
+after the first are ignored by FIGdrivers. In addition, the standard
+extension ".zip" of the archive must be changed to ".flf" or ".flc" as
+appropriate. It does not matter what the name of the file within the
+archive is.
+
+
+
+CHART OF CAPABILITIES OF FIGLET 2.2 AND FIGWIN 1.0
+===== == ============ == ====== === === ====== ===
+
+The following chart lists all capabilities which are either new with the
+release of both FIGdrivers, or is not a common capability among both.
+
+ FIGlet 2.2 FIGWIN 1.0
+ Interpreting the Full_Layout parameter: Yes Yes
+ Universal smushing: Yes Yes
+ Supporting multi-byte input text formats: Yes No
+ Processing control files: Yes No
+ Changing default smushing rules: Yes No
+ Bundled with a GUI editor of FIGfonts: No Yes
+ Vertical fitting and smushing: No Yes
+
+ ___________ __ _
+ \_ _____/ ____ |__| ____ ___ __ | |
+ | __)_ / \ | |/ _ < | || |
+ | \ | \ | ( <_> )___ | \|
+ /_______ /___| /\__| |\____// ____| __
+ \/ \/\______| \/ \/
diff --git a/externals/figlet/figlet.6 b/externals/figlet/figlet.6
new file mode 100644
index 000000000..ff2231140
--- /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
index 000000000..d34b19a8b
--- /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
index 000000000..6dea3b2cf
--- /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
index 000000000..c8b7cae5c
--- /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
index 000000000..5e9a01a0d
--- /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
index 000000000..b5f307118
--- /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
index 000000000..a7be02f68
--- /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
index 000000000..fc42581b8
--- /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
index 000000000..a9cd5fdb0
--- /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
index 000000000..716a42ffb
--- /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
index 000000000..3d9ddae01
--- /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
index 000000000..b996d786b
--- /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
index 000000000..1f282ceb7
--- /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
index 000000000..225b2fb8e
--- /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
index 000000000..4e9d648c9
--- /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
index 000000000..9ad58c31e
--- /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
index 000000000..caf629229
--- /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
index 000000000..657125bd8
--- /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
index 000000000..a3bc3513d
--- /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
index 000000000..6966895e5
--- /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
index 000000000..3f4776656
--- /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
index 000000000..c5ca075a2
--- /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
index 000000000..37571886c
--- /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
index 000000000..8a00e61ec
--- /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
index 000000000..424e886a0
--- /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
index 000000000..38c86cd37
--- /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
index 000000000..6307a6aff
--- /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
index 000000000..e45df25eb
--- /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
index 000000000..9b6ac69dd
--- /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
index 000000000..662e698ab
--- /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
index 000000000..a7ed1ce2a
--- /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
index 000000000..bc46b7471
--- /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
index 000000000..bc8da4c7f
--- /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
index 000000000..22901f107
--- /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
index 000000000..8fc3489f2
--- /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
index 000000000..07c468c9e
--- /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
index 000000000..b1172f049
--- /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 000000000..efd0a7196
--- /dev/null
+++ b/externals/figlet/fonts/bubble.flf
@@ -0,0 +1,1630 @@
+flf2a 4 3 8 15 11 0 10127 242
+Bubble by Glenn Chappell 4/93
+Includes characters 128-255
+Enhanced for Latin-2,3,4 by John Cowan <cowan@ccil.org>
+Latin character sets supported only if your screen font does
+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.
+ @
+ @
+ @
+ @@
+ _ @
+ / \ @
+ ( ! )@
+ \_/ @@
+ _ @
+ / \ @
+ ( " )@
+ \_/ @@
+ _ @
+ / \ @
+ ( # )@
+ \_/ @@
+ _ @
+ / \ @
+ ( $ )@
+ \_/ @@
+ _ @
+ / \ @
+ ( % )@
+ \_/ @@
+ _ @
+ / \ @
+ ( & )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ' )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ( )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ) )@
+ \_/ @@
+ _ @
+ / \ @
+ ( * )@
+ \_/ @@
+ _ @
+ / \ @
+ ( + )@
+ \_/ @@
+ _ @
+ / \ @
+ ( , )@
+ \_/ @@
+ _ @
+ / \ @
+ ( - )@
+ \_/ @@
+ _ @
+ / \ @
+ ( . )@
+ \_/ @@
+ _ @
+ / \ @
+ ( / )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 0 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 1 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 2 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 3 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 4 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 5 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 6 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 7 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 8 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 9 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( : )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ; )@
+ \_/ @@
+ _ @
+ / \ @
+ ( < )@
+ \_/ @@
+ _ @
+ / \ @
+ ( = )@
+ \_/ @@
+ _ @
+ / \ @
+ ( > )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ? )@
+ \_/ @@
+ _ @
+ / \ @
+ ( @ )@
+ \_/ @@
+ _ @
+ / \ @
+ ( 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 )@
+ \_/ @@
+ _ @
+ / \ @
+ ( { )@
+ \_/ @@
+ _ @
+ / \ @
+ ( | )@
+ \_/ @@
+ _ @
+ / \ @
+ ( } )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ~ )@
+ \_/ @@
+ _ @
+ / \ @
+ ( Ä )@
+ \_/ @@
+ _ @
+ / \ @
+ ( Ö )@
+ \_/ @@
+ _ @
+ / \ @
+ ( Ü )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ä )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ö )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ü )@
+ \_/ @@
+ _ @
+ / \ @
+ ( ß )@
+ \_/ @@
+128
+ _ @
+ / \ @
+ ( € )@
+ \_/ @@
+129
+ _ @
+ / \ @
+ (  )@
+ \_/ @@
+130
+ _ @
+ / \ @
+ ( ‚ )@
+ \_/ @@
+131
+ _ @
+ / \ @
+ ( ƒ )@
+ \_/ @@
+132
+ _ @
+ / \ @
+ ( „ )@
+ \_/ @@
+133
+ _ @
+ / \ @
+ ( … )@
+ \_/ @@
+134
+ _ @
+ / \ @
+ ( † )@
+ \_/ @@
+135
+ _ @
+ / \ @
+ ( ‡ )@
+ \_/ @@
+136
+ _ @
+ / \ @
+ ( ˆ )@
+ \_/ @@
+137
+ _ @
+ / \ @
+ ( ‰ )@
+ \_/ @@
+138
+ _ @
+ / \ @
+ ( Š )@
+ \_/ @@
+139
+ _ @
+ / \ @
+ ( ‹ )@
+ \_/ @@
+140
+ _ @
+ / \ @
+ ( Œ )@
+ \_/ @@
+141
+ _ @
+ / \ @
+ (  )@
+ \_/ @@
+142
+ _ @
+ / \ @
+ ( Ž )@
+ \_/ @@
+143
+ _ @
+ / \ @
+ (  )@
+ \_/ @@
+144
+ _ @
+ / \ @
+ (  )@
+ \_/ @@
+145
+ _ @
+ / \ @
+ ( ‘ )@
+ \_/ @@
+146
+ _ @
+ / \ @
+ ( ’ )@
+ \_/ @@
+147
+ _ @
+ / \ @
+ ( “ )@
+ \_/ @@
+148
+ _ @
+ / \ @
+ ( ” )@
+ \_/ @@
+149
+ _ @
+ / \ @
+ ( • )@
+ \_/ @@
+150
+ _ @
+ / \ @
+ ( – )@
+ \_/ @@
+151
+ _ @
+ / \ @
+ ( — )@
+ \_/ @@
+152
+ _ @
+ / \ @
+ ( ˜ )@
+ \_/ @@
+153
+ _ @
+ / \ @
+ ( ™ )@
+ \_/ @@
+154
+ _ @
+ / \ @
+ ( š )@
+ \_/ @@
+155
+ _ @
+ / \ @
+ ( › )@
+ \_/ @@
+156
+ _ @
+ / \ @
+ ( œ )@
+ \_/ @@
+157
+ _ @
+ / \ @
+ (  )@
+ \_/ @@
+158
+ _ @
+ / \ @
+ ( ž )@
+ \_/ @@
+159
+ _ @
+ / \ @
+ ( Ÿ )@
+ \_/ @@
+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
+ _ @
+ / \ @
+ ( ÿ )@
+ \_/ @@
+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
+ _ @
+ / \ @
+ ( º )@
+ \_/ @@
+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
+ _ @
+ / \ @
+ ( ï )@
+ \_/ @@
+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
+ _ @
+ / \ @
+ ( ¹ )@
+ \_/ @@
+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
+ _ @
+ / \ @
+ ( µ )@
+ \_/ @@
+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
+ _ @
+ / \ @
+ ( ò )@
+ \_/ @@
+0x014A LATIN CAPITAL LETTER ENG
+ _ @
+ / \ @
+ ( ½ )@
+ \_/ @@
+0x014B LATIN SMALL LETTER ENG
+ _ @
+ / \ @
+ ( ¿ )@
+ \_/ @@
+0x014C LATIN CAPITAL LETTER O WITH MACRON
+ _ @
+ / \ @
+ ( Ò )@
+ \_/ @@
+0x014D LATIN SMALL LETTER O WITH MACRON
+ _ @
+ / \ @
+ ( ò )@
+ \_/ @@
+0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+ _ @
+ / \ @
+ ( Õ )@
+ \_/ @@
+0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE
+ _ @
+ / \ @
+ ( õ )@
+ \_/ @@
+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
+ _ @
+ / \ @
+ ( Ù )@
+ \_/ @@
+0x016F LATIN SMALL LETTER U WITH RING ABOVE
+ _ @
+ / \ @
+ ( ù )@
+ \_/ @@
+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
+ _ @
+ / \ @
+ ( ù )@
+ \_/ @@
+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
+ _ @
+ / \ @
+ ( ¾ )@
+ \_/ @@
+0x02C7 CARON
+ _ @
+ / \ @
+ ( · )@
+ \_/ @@
+0x02D8 BREVE
+ _ @
+ / \ @
+ ( ¢ )@
+ \_/ @@
+0x02D9 DOT ABOVE
+ _ @
+ / \ @
+ ( ÿ )@
+ \_/ @@
+0x02DB OGONEK
+ _ @
+ / \ @
+ ( ² )@
+ \_/ @@
+0x02DD DOUBLE ACUTE ACCENT
+ _ @
+ / \ @
+ ( ½ )@
+ \_/ @@
diff --git a/externals/figlet/fonts/digital.flf b/externals/figlet/fonts/digital.flf
new file mode 100644
index 000000000..6b7a1cabb
--- /dev/null
+++ b/externals/figlet/fonts/digital.flf
@@ -0,0 +1,1286 @@
+flf2a 3 2 6 1 11 0 16513 242
+Digital by Glenn Chappell 1/94 -- based on Bubble
+Includes characters 128-255
+Enhanced for Latin-2,3,4 by John Cowan <cowan@ccil.org>
+Latin character sets supported only if your screen font does
+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.
+ @
+ @
+ @@
+ +-+@
+ |!|@
+ +-+@@
+ +-+@
+ |"|@
+ +-+@@
+ +-+@
+ |#|@
+ +-+@@
+ +-+@
+ |$|@
+ +-+@@
+ +-+@
+ |%|@
+ +-+@@
+ +-+@
+ |&|@
+ +-+@@
+ +-+@
+ |'|@
+ +-+@@
+ +-+@
+ |(|@
+ +-+@@
+ +-+@
+ |)|@
+ +-+@@
+ +-+@
+ |*|@
+ +-+@@
+ +-+@
+ |+|@
+ +-+@@
+ +-+@
+ |,|@
+ +-+@@
+ +-+@
+ |-|@
+ +-+@@
+ +-+@
+ |.|@
+ +-+@@
+ +-+@
+ |/|@
+ +-+@@
+ +-+@
+ |0|@
+ +-+@@
+ +-+@
+ |1|@
+ +-+@@
+ +-+@
+ |2|@
+ +-+@@
+ +-+@
+ |3|@
+ +-+@@
+ +-+@
+ |4|@
+ +-+@@
+ +-+@
+ |5|@
+ +-+@@
+ +-+@
+ |6|@
+ +-+@@
+ +-+@
+ |7|@
+ +-+@@
+ +-+@
+ |8|@
+ +-+@@
+ +-+@
+ |9|@
+ +-+@@
+ +-+@
+ |:|@
+ +-+@@
+ +-+@
+ |;|@
+ +-+@@
+ +-+@
+ |<|@
+ +-+@@
+ +-+@
+ |=|@
+ +-+@@
+ +-+@
+ |>|@
+ +-+@@
+ +-+@
+ |?|@
+ +-+@@
+ +-+@
+ |@|@
+ +-+@@
+ +-+@
+ |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|@
+ +-+@@
+ +-+@
+ |{|@
+ +-+@@
+ +-+@
+ |||@
+ +-+@@
+ +-+@
+ |}|@
+ +-+@@
+ +-+@
+ |~|@
+ +-+@@
+ +-+@
+ |Ä|@
+ +-+@@
+ +-+@
+ |Ö|@
+ +-+@@
+ +-+@
+ |Ü|@
+ +-+@@
+ +-+@
+ |ä|@
+ +-+@@
+ +-+@
+ |ö|@
+ +-+@@
+ +-+@
+ |ü|@
+ +-+@@
+ +-+@
+ |ß|@
+ +-+@@
+128
+ +-+@
+ |€|@
+ +-+@@
+129
+ +-+@
+ ||@
+ +-+@@
+130
+ +-+@
+ |‚|@
+ +-+@@
+131
+ +-+@
+ |ƒ|@
+ +-+@@
+132
+ +-+@
+ |„|@
+ +-+@@
+133
+ +-+@
+ |…|@
+ +-+@@
+134
+ +-+@
+ |†|@
+ +-+@@
+135
+ +-+@
+ |‡|@
+ +-+@@
+136
+ +-+@
+ |ˆ|@
+ +-+@@
+137
+ +-+@
+ |‰|@
+ +-+@@
+138
+ +-+@
+ |Š|@
+ +-+@@
+139
+ +-+@
+ |‹|@
+ +-+@@
+140
+ +-+@
+ |Œ|@
+ +-+@@
+141
+ +-+@
+ ||@
+ +-+@@
+142
+ +-+@
+ |Ž|@
+ +-+@@
+143
+ +-+@
+ ||@
+ +-+@@
+144
+ +-+@
+ ||@
+ +-+@@
+145
+ +-+@
+ |‘|@
+ +-+@@
+146
+ +-+@
+ |’|@
+ +-+@@
+147
+ +-+@
+ |“|@
+ +-+@@
+148
+ +-+@
+ |”|@
+ +-+@@
+149
+ +-+@
+ |•|@
+ +-+@@
+150
+ +-+@
+ |–|@
+ +-+@@
+151
+ +-+@
+ |—|@
+ +-+@@
+152
+ +-+@
+ |˜|@
+ +-+@@
+153
+ +-+@
+ |™|@
+ +-+@@
+154
+ +-+@
+ |š|@
+ +-+@@
+155
+ +-+@
+ |›|@
+ +-+@@
+156
+ +-+@
+ |œ|@
+ +-+@@
+157
+ +-+@
+ ||@
+ +-+@@
+158
+ +-+@
+ |ž|@
+ +-+@@
+159
+ +-+@
+ |Ÿ|@
+ +-+@@
+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
+ +-+@
+ |ÿ|@
+ +-+@@
+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
+ +-+@
+ |º|@
+ +-+@@
+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
+ +-+@
+ |ï|@
+ +-+@@
+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
+ +-+@
+ |¹|@
+ +-+@@
+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
+ +-+@
+ |µ|@
+ +-+@@
+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
+ +-+@
+ |ò|@
+ +-+@@
+0x014A LATIN CAPITAL LETTER ENG
+ +-+@
+ |½|@
+ +-+@@
+0x014B LATIN SMALL LETTER ENG
+ +-+@
+ |¿|@
+ +-+@@
+0x014C LATIN CAPITAL LETTER O WITH MACRON
+ +-+@
+ |Ò|@
+ +-+@@
+0x014D LATIN SMALL LETTER O WITH MACRON
+ +-+@
+ |ò|@
+ +-+@@
+0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+ +-+@
+ |Õ|@
+ +-+@@
+0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE
+ +-+@
+ |õ|@
+ +-+@@
+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
+ +-+@
+ |Ù|@
+ +-+@@
+0x016F LATIN SMALL LETTER U WITH RING ABOVE
+ +-+@
+ |ù|@
+ +-+@@
+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
+ +-+@
+ |ù|@
+ +-+@@
+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
+ +-+@
+ |¾|@
+ +-+@@
+0x02C7 CARON
+ +-+@
+ |·|@
+ +-+@@
+0x02D8 BREVE
+ +-+@
+ |¢|@
+ +-+@@
+0x02D9 DOT ABOVE
+ +-+@
+ |ÿ|@
+ +-+@@
+0x02DB OGONEK
+ +-+@
+ |²|@
+ +-+@@
+0x02DD DOUBLE ACUTE ACCENT
+ +-+@
+ |½|@
+ +-+@@
diff --git a/externals/figlet/fonts/frango.flc b/externals/figlet/fonts/frango.flc
new file mode 100644
index 000000000..0196230a2
--- /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
index 000000000..2d89e4bcf
--- /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
index 000000000..1b46d7956
--- /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
index 000000000..69f16d494
--- /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
index 000000000..6a32e62ef
--- /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
index 000000000..e324d8b04
--- /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
index 000000000..7e53563c0
--- /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
index 000000000..3b72606ca
--- /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
index 000000000..03e4baa78
--- /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
index 000000000..86454f175
--- /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
index 000000000..8f2f048fa
--- /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
index 000000000..2ec918211
--- /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
index 000000000..43fe3986e
--- /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
index 000000000..c6b5bfcde
--- /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
index 000000000..32a8a39da
--- /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
index 000000000..7e1329f4c
--- /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
index 000000000..24284b846
--- /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
index 000000000..bb15241b0
--- /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 000000000..e27d01eee
--- /dev/null
+++ b/externals/figlet/fonts/term.flf
@@ -0,0 +1,600 @@
+flf2a 1 1 2 -1 13 0 0 242
+Terminal by Glenn Chappell 4/93
+Includes characters 128-255
+Enhanced for Latin-2,3,4 by John Cowan <cowan@ccil.org>
+Latin character sets supported only if your screen font does
+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.
+
+Double-checked by Paul Burton <solution@earthlink.net> 12/96. Added the new
+parameter supported by FIGlet and FIGWin. Unlike all other FIGfonts, this one
+is intended to produce output exactly the same as the input unless a control
+file is used. Therefore it produces the SAME output for smush, kern or fit.
+
+@
+!@
+"@
+#@
+$@
+%@
+&@
+'@
+(@
+)@
+*@
++@
+,@
+-@
+.@
+/@
+0@
+1@
+2@
+3@
+4@
+5@
+6@
+7@
+8@
+9@
+:@
+;@
+<@
+=@
+>@
+?@
+@#
+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@
+{@
+|@
+}@
+~@
+Ä@
+Ö@
+Ü@
+ä@
+ö@
+ü@
+ß@
+128
+€@
+129
+@
+130
+‚@
+131
+ƒ@
+132
+„@
+133
+…@
+134
+†@
+135
+‡@
+136
+ˆ@
+137
+‰@
+138
+Š@
+139
+‹@
+140
+Œ@
+141
+@
+142
+Ž@
+143
+@
+144
+@
+145
+‘@
+146
+’@
+147
+“@
+148
+”@
+149
+•@
+150
+–@
+151
+—@
+152
+˜@
+153
+™@
+154
+š@
+155
+›@
+156
+œ@
+157
+@
+158
+ž@
+159
+Ÿ@
+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
+ÿ@
+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
+º@
+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
+ï@
+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
+¹@
+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
+µ@
+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
+ò@
+0x014A LATIN CAPITAL LETTER ENG
+½@
+0x014B LATIN SMALL LETTER ENG
+¿@
+0x014C LATIN CAPITAL LETTER O WITH MACRON
+Ò@
+0x014D LATIN SMALL LETTER O WITH MACRON
+ò@
+0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+Õ@
+0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE
+õ@
+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
+Ù@
+0x016F LATIN SMALL LETTER U WITH RING ABOVE
+ù@
+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
+ù@
+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
+¾@
+0x02C7 CARON
+·@
+0x02D8 BREVE
+¢@
+0x02D9 DOT ABOVE
+ÿ@
+0x02DB OGONEK
+²@
+0x02DD DOUBLE ACUTE ACCENT
+½@
diff --git a/externals/figlet/fonts/upper.flc b/externals/figlet/fonts/upper.flc
new file mode 100644
index 000000000..f38347176
--- /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
index 000000000..313af84b5
--- /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
index 000000000..62e559f4b
--- /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
index 000000000..532986d7c
--- /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
index 000000000..421899152
--- /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.c b/externals/figlet/inflate.c
new file mode 100644
index 000000000..06cef443b
--- /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/inflate.h b/externals/figlet/inflate.h
new file mode 100644
index 000000000..4fc745482
--- /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/run-tests.sh b/externals/figlet/run-tests.sh
new file mode 100755
index 000000000..4c373ec8d
--- /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
index 000000000..90c4d0afe
--- /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
index 000000000..0ec5783df
--- /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
index 000000000..eff0852d4
--- /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 000000000..3f294fb37
Binary files /dev/null and b/externals/figlet/tests/flowerpower.flf differ
diff --git a/externals/figlet/tests/input.txt b/externals/figlet/tests/input.txt
new file mode 100644
index 000000000..882652022
--- /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
index 000000000..72e3a1820
--- /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
index 000000000..a85fa5952
--- /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
index 000000000..752f6578b
--- /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
index 000000000..31770d6c9
--- /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
index 000000000..8ece9309a
--- /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
index 000000000..0e0921ef3
--- /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
index 000000000..8ece9309a
--- /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
index 000000000..3f467dc2f
--- /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
index 000000000..3048a10cf
--- /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
index 000000000..57f8690c8
--- /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
index 000000000..43a252363
--- /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
index 000000000..3b669a139
--- /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
index 000000000..3a25e2645
--- /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
index 000000000..6983f2faa
--- /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
index 000000000..545bbce99
--- /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
index 000000000..de7bcd457
--- /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
index 000000000..cf70546d5
--- /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
index 000000000..3296f8c60
--- /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
index 000000000..7551e081e
--- /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
index 000000000..b1c4ee368
--- /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
index 000000000..4de016c0e
--- /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
index 000000000..b083225db
--- /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
index 000000000..fb6147b2d
--- /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
index 000000000..d4d7a719d
--- /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
index 000000000..8f1923cef
--- /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
index 000000000..12b3f9549
--- /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
index 000000000..12b3f9549
--- /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
index 000000000..7f6545f86
--- /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.c b/externals/figlet/utf8.c
new file mode 100644
index 000000000..b8338c1ea
--- /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/utf8.h b/externals/figlet/utf8.h
new file mode 100644
index 000000000..a3e09bdee
--- /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/zipio.c b/externals/figlet/zipio.c
new file mode 100644
index 000000000..f7406d952
--- /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/figlet/zipio.h b/externals/figlet/zipio.h
new file mode 100644
index 000000000..12289d658
--- /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/pear-figlet/Text/Figlet.php b/externals/pear-figlet/Text/Figlet.php
new file mode 100644
index 000000000..cc121facb
--- /dev/null
+++ b/externals/pear-figlet/Text/Figlet.php
@@ -0,0 +1,500 @@
+<?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
+*/
+
+/**
+* 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)) {
+ return self::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 self::raiseError('Cannot load gzip compressed fonts since'
+ . ' gzcompress() is not available.',
+ 3);
+ }
+ } else {
+ $compressed = false;
+ }
+
+ if (!($fp = fopen($filename, 'rb'))) {
+ return self::raiseError('Cannot open figlet font file ' . $filename, 2);
+ }
+
+ if (!$compressed) {
+ /* ZIPed font */
+ if (fread($fp, 2) == 'PK') {
+ if (!function_exists('zip_open')) {
+ return self::raiseError('Cannot load ZIP compressed fonts since'
+ . ' ZIP PHP extension is not available.',
+ 5);
+ }
+
+ fclose($fp);
+
+ if (!($fp = zip_open($filename))) {
+ return self::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 self::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 self::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) {
+ self::raiseError(
+ 'Do not use the HTML escaping provided by this class in '.
+ 'a Phabricator context.');
+ }
+
+ 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;
+ }
+
+
+ private static function raiseError($message, $code = 1) {
+ throw new Exception($message);
+ }
+}
diff --git a/externals/pear-figlet/docs/README.TXT b/externals/pear-figlet/docs/README.TXT
new file mode 100644
index 000000000..544a5259a
--- /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
index 000000000..849c997fb
--- /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
index 000000000..6ed7e1e6d
--- /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/celerity/map.php b/resources/celerity/map.php
index 8875583e9..f1a20bf00 100644
--- a/resources/celerity/map.php
+++ b/resources/celerity/map.php
@@ -1,2238 +1,2238 @@
<?php
/**
* This file is automatically generated. Use 'bin/celerity map' to rebuild it.
*
* @generated
*/
return array(
'names' => array(
- 'core.pkg.css' => 'a2cf2f6c',
+ 'core.pkg.css' => '5eabac59',
'core.pkg.js' => '47dc9ebb',
'darkconsole.pkg.js' => 'e7393ebb',
'differential.pkg.css' => '2de124c9',
'differential.pkg.js' => '6223dd9d',
'diffusion.pkg.css' => 'f45955ed',
'diffusion.pkg.js' => '0115b37c',
'maniphest.pkg.css' => '4845691a',
'maniphest.pkg.js' => '3ec6a6d5',
'rsrc/css/aphront/aphront-bars.css' => '231ac33c',
'rsrc/css/aphront/dark-console.css' => '6378ef3d',
'rsrc/css/aphront/dialog-view.css' => 'fe58b18d',
'rsrc/css/aphront/lightbox-attachment.css' => '7acac05d',
'rsrc/css/aphront/list-filter-view.css' => '5d6f0526',
'rsrc/css/aphront/multi-column.css' => 'fd18389d',
'rsrc/css/aphront/notification.css' => '9c279160',
'rsrc/css/aphront/panel-view.css' => '8427b78d',
'rsrc/css/aphront/phabricator-nav-view.css' => 'a24cb589',
'rsrc/css/aphront/table-view.css' => '34ee903e',
'rsrc/css/aphront/tokenizer.css' => '04875312',
'rsrc/css/aphront/tooltip.css' => '7672b60f',
'rsrc/css/aphront/typeahead-browse.css' => 'd8581d2c',
'rsrc/css/aphront/typeahead.css' => '0e403212',
'rsrc/css/application/almanac/almanac.css' => 'dbb9b3af',
'rsrc/css/application/auth/auth.css' => '0877ed6e',
'rsrc/css/application/base/main-menu-view.css' => '2f670a96',
'rsrc/css/application/base/notification-menu.css' => 'f31c0bde',
'rsrc/css/application/base/phabricator-application-launch-view.css' => '95351601',
'rsrc/css/application/base/phui-theme.css' => '6b451f24',
'rsrc/css/application/base/standard-page-view.css' => '1f53d056',
'rsrc/css/application/calendar/calendar-icon.css' => 'c69aa59f',
'rsrc/css/application/chatlog/chatlog.css' => 'd295b020',
'rsrc/css/application/conduit/conduit-api.css' => '7bc725c4',
'rsrc/css/application/config/config-options.css' => '0ede4c9b',
'rsrc/css/application/config/config-template.css' => '8e6c6fcd',
'rsrc/css/application/config/config-welcome.css' => '6abd79be',
'rsrc/css/application/config/setup-issue.css' => 'db7e9c40',
'rsrc/css/application/config/unhandled-exception.css' => '4c96257a',
'rsrc/css/application/conpherence/durable-column.css' => '86396117',
'rsrc/css/application/conpherence/menu.css' => 'f99fee4c',
'rsrc/css/application/conpherence/message-pane.css' => '5897d3ac',
'rsrc/css/application/conpherence/notification.css' => '6cdcc253',
'rsrc/css/application/conpherence/transaction.css' => '85d0974c',
'rsrc/css/application/conpherence/update.css' => 'faf6be09',
'rsrc/css/application/conpherence/widget-pane.css' => '775eaaba',
'rsrc/css/application/contentsource/content-source-view.css' => '4b8b05d4',
'rsrc/css/application/countdown/timer.css' => 'e7544472',
'rsrc/css/application/daemon/bulk-job.css' => 'df9c1d4a',
'rsrc/css/application/dashboard/dashboard.css' => 'eb458607',
'rsrc/css/application/diff/inline-comment-summary.css' => '51efda3a',
'rsrc/css/application/differential/add-comment.css' => 'c47f8c40',
'rsrc/css/application/differential/changeset-view.css' => 'b6b0d1bb',
'rsrc/css/application/differential/core.css' => '7ac3cabc',
'rsrc/css/application/differential/phui-inline-comment.css' => '0fdb3667',
'rsrc/css/application/differential/revision-comment.css' => '14b8565a',
'rsrc/css/application/differential/revision-history.css' => '0e8eb855',
'rsrc/css/application/differential/revision-list.css' => 'f3c47d33',
'rsrc/css/application/differential/table-of-contents.css' => 'ae4b7a55',
'rsrc/css/application/diffusion/diffusion-icons.css' => '2941baf1',
'rsrc/css/application/diffusion/diffusion-readme.css' => '2106ea08',
'rsrc/css/application/diffusion/diffusion-source.css' => '66fdf661',
'rsrc/css/application/feed/feed.css' => 'ecd4ec57',
'rsrc/css/application/files/global-drag-and-drop.css' => '697324ad',
'rsrc/css/application/flag/flag.css' => '5337623f',
'rsrc/css/application/harbormaster/harbormaster.css' => '49d64eb4',
'rsrc/css/application/herald/herald-test.css' => 'a52e323e',
'rsrc/css/application/herald/herald.css' => '826075fa',
'rsrc/css/application/maniphest/batch-editor.css' => 'b0f0b6d5',
'rsrc/css/application/maniphest/report.css' => 'f6931fdf',
'rsrc/css/application/maniphest/task-edit.css' => 'fda62a9b',
'rsrc/css/application/maniphest/task-summary.css' => '11cc5344',
'rsrc/css/application/objectselector/object-selector.css' => '85ee8ce6',
'rsrc/css/application/owners/owners-path-editor.css' => '2f00933b',
- 'rsrc/css/application/paste/paste.css' => '1898e534',
+ 'rsrc/css/application/paste/paste.css' => 'b2f5a543',
'rsrc/css/application/people/people-profile.css' => '25970776',
'rsrc/css/application/phame/phame.css' => 'bb147387',
'rsrc/css/application/pholio/pholio-edit.css' => '3ad9d1ee',
'rsrc/css/application/pholio/pholio-inline-comments.css' => '8e545e49',
'rsrc/css/application/pholio/pholio.css' => '95174bdd',
'rsrc/css/application/phortune/phortune-credit-card-form.css' => '8391eb02',
'rsrc/css/application/phortune/phortune.css' => '9149f103',
'rsrc/css/application/phrequent/phrequent.css' => 'ffc185ad',
'rsrc/css/application/phriction/phriction-document-css.css' => 'd1861e06',
'rsrc/css/application/policy/policy-edit.css' => '815c66f7',
'rsrc/css/application/policy/policy-transaction-detail.css' => '82100a43',
'rsrc/css/application/policy/policy.css' => '957ea14c',
'rsrc/css/application/ponder/ponder-view.css' => '7b0df4da',
'rsrc/css/application/projects/project-icon.css' => '4e3eaa5a',
'rsrc/css/application/releeph/releeph-core.css' => '9b3c5733',
'rsrc/css/application/releeph/releeph-preview-branch.css' => 'b7a6f4a5',
'rsrc/css/application/releeph/releeph-request-differential-create-dialog.css' => '8d8b92cd',
'rsrc/css/application/releeph/releeph-request-typeahead.css' => '667a48ae',
'rsrc/css/application/search/search-results.css' => '7dea472c',
'rsrc/css/application/slowvote/slowvote.css' => '475b4bd2',
'rsrc/css/application/tokens/tokens.css' => '3d0f239e',
'rsrc/css/application/uiexample/example.css' => '528b19de',
'rsrc/css/core/core.css' => 'a76cefc9',
- 'rsrc/css/core/remarkup.css' => '1c4ac273',
+ 'rsrc/css/core/remarkup.css' => 'e27a26b2',
'rsrc/css/core/syntax.css' => '9fd11da8',
'rsrc/css/core/z-index.css' => '57ddcaa2',
'rsrc/css/diviner/diviner-shared.css' => '5a337049',
'rsrc/css/font/font-awesome.css' => 'd2fc4e8d',
'rsrc/css/font/font-lato.css' => '5ab1a46a',
'rsrc/css/font/font-roboto-slab.css' => 'f24a53cb',
'rsrc/css/font/phui-font-icon-base.css' => 'ecbbb4c2',
'rsrc/css/layout/phabricator-filetree-view.css' => 'fccf9f82',
'rsrc/css/layout/phabricator-hovercard-view.css' => '1239cd52',
'rsrc/css/layout/phabricator-side-menu-view.css' => 'bec2458e',
- 'rsrc/css/layout/phabricator-source-code-view.css' => '5e0178de',
+ 'rsrc/css/layout/phabricator-source-code-view.css' => 'cbeef983',
'rsrc/css/phui/calendar/phui-calendar-day.css' => 'd1cf6f93',
'rsrc/css/phui/calendar/phui-calendar-list.css' => 'c1c7f338',
'rsrc/css/phui/calendar/phui-calendar-month.css' => '476be7e0',
'rsrc/css/phui/calendar/phui-calendar.css' => 'ccabe893',
'rsrc/css/phui/phui-action-list.css' => 'c5eba19d',
- 'rsrc/css/phui/phui-action-panel.css' => '3ee9afd5',
+ 'rsrc/css/phui/phui-action-panel.css' => '91c7b835',
'rsrc/css/phui/phui-badge.css' => 'f25c3476',
'rsrc/css/phui/phui-box.css' => 'a5bb366d',
'rsrc/css/phui/phui-button.css' => '16020a60',
'rsrc/css/phui/phui-crumbs-view.css' => 'd842f867',
'rsrc/css/phui/phui-document.css' => '0267054b',
'rsrc/css/phui/phui-feed-story.css' => 'b7b26d23',
'rsrc/css/phui/phui-fontkit.css' => 'cb8ae7ad',
'rsrc/css/phui/phui-form-view.css' => '621b21c5',
'rsrc/css/phui/phui-form.css' => 'afdb2c6e',
'rsrc/css/phui/phui-header-view.css' => '55bb32dd',
'rsrc/css/phui/phui-icon.css' => 'b0a6b1b6',
'rsrc/css/phui/phui-image-mask.css' => '5a8b09c8',
'rsrc/css/phui/phui-info-panel.css' => '27ea50a1',
'rsrc/css/phui/phui-info-view.css' => '5b16bac6',
'rsrc/css/phui/phui-list.css' => '125599df',
'rsrc/css/phui/phui-object-box.css' => '407eaf5a',
'rsrc/css/phui/phui-object-item-list-view.css' => '26c30d3f',
'rsrc/css/phui/phui-pager.css' => 'bea33d23',
'rsrc/css/phui/phui-pinboard-view.css' => '2495140e',
'rsrc/css/phui/phui-property-list-view.css' => '03904f6b',
'rsrc/css/phui/phui-remarkup-preview.css' => '867f85b3',
'rsrc/css/phui/phui-spacing.css' => '042804d6',
'rsrc/css/phui/phui-status.css' => '888cedb8',
'rsrc/css/phui/phui-tag-view.css' => '402691cc',
'rsrc/css/phui/phui-text.css' => 'cf019f54',
'rsrc/css/phui/phui-timeline-view.css' => 'f1bccf73',
'rsrc/css/phui/phui-two-column-view.css' => '39ecafb1',
'rsrc/css/phui/phui-workboard-view.css' => '6704d68d',
'rsrc/css/phui/phui-workpanel-view.css' => 'adec7699',
'rsrc/css/sprite-login.css' => '1ebb9bf9',
'rsrc/css/sprite-main-header.css' => 'f07bbb87',
'rsrc/css/sprite-menu.css' => '9dd65b92',
'rsrc/css/sprite-projects.css' => 'e5ad842a',
'rsrc/css/sprite-tokens.css' => '4f399012',
'rsrc/externals/font/fontawesome/fontawesome-webfont.eot' => '7d5a4653',
'rsrc/externals/font/fontawesome/fontawesome-webfont.ttf' => '531835e8',
'rsrc/externals/font/fontawesome/fontawesome-webfont.woff' => '427fe363',
'rsrc/externals/font/fontawesome/fontawesome-webfont.woff2' => 'a9897054',
'rsrc/externals/font/lato/lato-bold.eot' => '99fbcf8c',
'rsrc/externals/font/lato/lato-bold.ttf' => '0a7141f7',
'rsrc/externals/font/lato/lato-bold.woff' => 'f5db2061',
'rsrc/externals/font/lato/lato-bold.woff2' => '37a94ecd',
'rsrc/externals/font/lato/lato-bolditalic.eot' => 'b93389d0',
'rsrc/externals/font/lato/lato-bolditalic.ttf' => 'dad31252',
'rsrc/externals/font/lato/lato-bolditalic.woff' => 'e53bcf47',
'rsrc/externals/font/lato/lato-bolditalic.woff2' => 'd035007f',
'rsrc/externals/font/lato/lato-italic.eot' => '6a903f5d',
'rsrc/externals/font/lato/lato-italic.ttf' => '629f64f0',
'rsrc/externals/font/lato/lato-italic.woff' => '678dc4bb',
'rsrc/externals/font/lato/lato-italic.woff2' => '7c8dd650',
'rsrc/externals/font/lato/lato-regular.eot' => '848dfb1e',
'rsrc/externals/font/lato/lato-regular.ttf' => 'e270165b',
'rsrc/externals/font/lato/lato-regular.woff' => '13d39fe2',
'rsrc/externals/font/lato/lato-regular.woff2' => '57a9f742',
'rsrc/externals/font/robotoslab/robotoslab-regular.eot' => 'eaefe21c',
'rsrc/externals/font/robotoslab/robotoslab-regular.ttf' => '4bfef7d5',
'rsrc/externals/font/robotoslab/robotoslab-regular.woff' => '7f0552f9',
'rsrc/externals/font/robotoslab/robotoslab-regular.woff2' => '23bdd43c',
'rsrc/externals/javelin/core/Event.js' => '85ea0626',
'rsrc/externals/javelin/core/Stratcom.js' => '6c53634d',
'rsrc/externals/javelin/core/__tests__/event-stop-and-kill.js' => '717554e4',
'rsrc/externals/javelin/core/__tests__/install.js' => 'c432ee85',
'rsrc/externals/javelin/core/__tests__/stratcom.js' => '88bf7313',
'rsrc/externals/javelin/core/__tests__/util.js' => 'e251703d',
'rsrc/externals/javelin/core/init.js' => '3010e992',
'rsrc/externals/javelin/core/init_node.js' => 'c234aded',
'rsrc/externals/javelin/core/install.js' => '05270951',
'rsrc/externals/javelin/core/util.js' => '93cc50d6',
'rsrc/externals/javelin/docs/Base.js' => '74676256',
'rsrc/externals/javelin/docs/onload.js' => 'e819c479',
'rsrc/externals/javelin/ext/fx/Color.js' => '7e41274a',
'rsrc/externals/javelin/ext/fx/FX.js' => '54b612ba',
'rsrc/externals/javelin/ext/reactor/core/DynVal.js' => 'f6555212',
'rsrc/externals/javelin/ext/reactor/core/Reactor.js' => '2b8de964',
'rsrc/externals/javelin/ext/reactor/core/ReactorNode.js' => '1ad0a787',
'rsrc/externals/javelin/ext/reactor/core/ReactorNodeCalmer.js' => '76f4ebed',
'rsrc/externals/javelin/ext/reactor/dom/RDOM.js' => 'c90a04fc',
'rsrc/externals/javelin/ext/view/HTMLView.js' => 'fe287620',
'rsrc/externals/javelin/ext/view/View.js' => '0f764c35',
'rsrc/externals/javelin/ext/view/ViewInterpreter.js' => 'f829edb3',
'rsrc/externals/javelin/ext/view/ViewPlaceholder.js' => '47830651',
'rsrc/externals/javelin/ext/view/ViewRenderer.js' => '6c2b09a2',
'rsrc/externals/javelin/ext/view/ViewVisitor.js' => 'efe49472',
'rsrc/externals/javelin/ext/view/__tests__/HTMLView.js' => 'f92d7bcb',
'rsrc/externals/javelin/ext/view/__tests__/View.js' => '6450b38b',
'rsrc/externals/javelin/ext/view/__tests__/ViewInterpreter.js' => '7a94d6a5',
'rsrc/externals/javelin/ext/view/__tests__/ViewRenderer.js' => '6ea96ac9',
'rsrc/externals/javelin/lib/Cookie.js' => '62dfea03',
'rsrc/externals/javelin/lib/DOM.js' => '805b806a',
'rsrc/externals/javelin/lib/History.js' => 'd4505101',
'rsrc/externals/javelin/lib/JSON.js' => '69adf288',
'rsrc/externals/javelin/lib/Leader.js' => '331b1611',
'rsrc/externals/javelin/lib/Mask.js' => '8a41885b',
'rsrc/externals/javelin/lib/Quicksand.js' => '4cebc641',
'rsrc/externals/javelin/lib/Request.js' => '94b750d2',
'rsrc/externals/javelin/lib/Resource.js' => '44959b73',
'rsrc/externals/javelin/lib/Routable.js' => 'b3e7d692',
'rsrc/externals/javelin/lib/Router.js' => '29274e2b',
'rsrc/externals/javelin/lib/Scrollbar.js' => '087e919c',
'rsrc/externals/javelin/lib/Sound.js' => '949c0fe5',
'rsrc/externals/javelin/lib/URI.js' => '6eff08aa',
'rsrc/externals/javelin/lib/Vector.js' => '2caa8fb8',
'rsrc/externals/javelin/lib/WebSocket.js' => 'e292eaf4',
'rsrc/externals/javelin/lib/Workflow.js' => '5b2e3e2b',
'rsrc/externals/javelin/lib/__tests__/Cookie.js' => '5ed109e8',
'rsrc/externals/javelin/lib/__tests__/DOM.js' => 'c984504b',
'rsrc/externals/javelin/lib/__tests__/JSON.js' => '837a7d68',
'rsrc/externals/javelin/lib/__tests__/URI.js' => '1e45fda9',
'rsrc/externals/javelin/lib/__tests__/behavior.js' => '1ea62783',
'rsrc/externals/javelin/lib/behavior.js' => '61cbc29a',
'rsrc/externals/javelin/lib/control/tokenizer/Tokenizer.js' => 'ab5f468d',
'rsrc/externals/javelin/lib/control/typeahead/Typeahead.js' => '70baed2f',
'rsrc/externals/javelin/lib/control/typeahead/normalizer/TypeaheadNormalizer.js' => 'e6e25838',
'rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadCompositeSource.js' => '503e17fd',
'rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadOnDemandSource.js' => '8b3fd187',
'rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadPreloadedSource.js' => '54f314a0',
'rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadSource.js' => '2818f5ce',
'rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadStaticSource.js' => '6c0e62fa',
'rsrc/externals/raphael/g.raphael.js' => '40dde778',
'rsrc/externals/raphael/g.raphael.line.js' => '40da039e',
'rsrc/externals/raphael/raphael.js' => '51ee6b43',
'rsrc/favicons/apple-touch-icon-120x120.png' => '43742962',
'rsrc/favicons/apple-touch-icon-152x152.png' => '669eaec3',
'rsrc/favicons/apple-touch-icon-76x76.png' => 'ecdef672',
'rsrc/favicons/favicon-128.png' => '47cdff03',
'rsrc/favicons/favicon-16x16.png' => 'ee2523ac',
'rsrc/favicons/favicon-32x32.png' => 'b6a8150e',
'rsrc/favicons/favicon-96x96.png' => '8f7ea177',
'rsrc/image/BFCFDA.png' => 'd5ec91f4',
'rsrc/image/actions/edit.png' => '2fc41442',
'rsrc/image/avatar.png' => '3eb28cd9',
'rsrc/image/checker_dark.png' => 'd8e65881',
'rsrc/image/checker_light.png' => 'a0155918',
'rsrc/image/checker_lighter.png' => 'd5da91b6',
'rsrc/image/darkload.gif' => '1ffd3ec6',
'rsrc/image/divot.png' => '94dded62',
'rsrc/image/examples/hero.png' => '979a86ae',
'rsrc/image/grippy_texture.png' => 'aca81e2f',
'rsrc/image/icon/fatcow/arrow_branch.png' => '2537c01c',
'rsrc/image/icon/fatcow/arrow_merge.png' => '21b660e0',
'rsrc/image/icon/fatcow/bullet_black.png' => 'ff190031',
'rsrc/image/icon/fatcow/bullet_orange.png' => 'e273e5bb',
'rsrc/image/icon/fatcow/bullet_red.png' => 'c0b75434',
'rsrc/image/icon/fatcow/calendar_edit.png' => '24632275',
'rsrc/image/icon/fatcow/document_black.png' => '45fe1c60',
'rsrc/image/icon/fatcow/flag_blue.png' => 'a01abb1d',
'rsrc/image/icon/fatcow/flag_finish.png' => '67825cee',
'rsrc/image/icon/fatcow/flag_ghost.png' => '20ca8783',
'rsrc/image/icon/fatcow/flag_green.png' => '7e0eaa7a',
'rsrc/image/icon/fatcow/flag_orange.png' => '9e73df66',
'rsrc/image/icon/fatcow/flag_pink.png' => '7e92f3b2',
'rsrc/image/icon/fatcow/flag_purple.png' => 'cc517522',
'rsrc/image/icon/fatcow/flag_red.png' => '04ec726f',
'rsrc/image/icon/fatcow/flag_yellow.png' => '73946fd4',
'rsrc/image/icon/fatcow/key_question.png' => '52a0c26a',
'rsrc/image/icon/fatcow/link.png' => '7afd4d5e',
'rsrc/image/icon/fatcow/page_white_edit.png' => '39a2eed8',
'rsrc/image/icon/fatcow/page_white_put.png' => '08c95a0c',
'rsrc/image/icon/fatcow/source/conduit.png' => '4ea01d2f',
'rsrc/image/icon/fatcow/source/email.png' => '9bab3239',
'rsrc/image/icon/fatcow/source/fax.png' => '04195e68',
'rsrc/image/icon/fatcow/source/mobile.png' => 'f1321264',
'rsrc/image/icon/fatcow/source/tablet.png' => '49396799',
'rsrc/image/icon/fatcow/source/web.png' => '136ccb5d',
'rsrc/image/icon/lightbox/close-2.png' => 'cc40e7c8',
'rsrc/image/icon/lightbox/close-hover-2.png' => 'fb5d6d9e',
'rsrc/image/icon/lightbox/left-arrow-2.png' => '8426133b',
'rsrc/image/icon/lightbox/left-arrow-hover-2.png' => '701e5ee3',
'rsrc/image/icon/lightbox/right-arrow-2.png' => '6d5519a0',
'rsrc/image/icon/lightbox/right-arrow-hover-2.png' => '3a04aa21',
'rsrc/image/icon/subscribe.png' => 'd03ed5a5',
'rsrc/image/icon/tango/attachment.png' => 'ecc8022e',
'rsrc/image/icon/tango/edit.png' => '929a1363',
'rsrc/image/icon/tango/go-down.png' => '96d95e43',
'rsrc/image/icon/tango/log.png' => 'b08cc63a',
'rsrc/image/icon/tango/upload.png' => '7bbb7984',
'rsrc/image/icon/unsubscribe.png' => '25725013',
'rsrc/image/lightblue-header.png' => '5c168b6d',
'rsrc/image/main_texture.png' => '29a2c5ad',
'rsrc/image/menu_texture.png' => '5a17580d',
'rsrc/image/people/harding.png' => '45aa614e',
'rsrc/image/people/jefferson.png' => 'afca0e53',
'rsrc/image/people/lincoln.png' => '9369126d',
'rsrc/image/people/mckinley.png' => 'fb8f16ce',
'rsrc/image/people/taft.png' => 'd7bc402c',
'rsrc/image/people/washington.png' => '40dd301c',
'rsrc/image/phrequent_active.png' => 'a466a8ed',
'rsrc/image/phrequent_inactive.png' => 'bfc15a69',
'rsrc/image/sprite-login-X2.png' => 'a4bf0a98',
'rsrc/image/sprite-login.png' => '5f4d0069',
'rsrc/image/sprite-main-header.png' => '3673af44',
'rsrc/image/sprite-menu-X2.png' => 'cfd8fca5',
'rsrc/image/sprite-menu.png' => 'd7a99faa',
'rsrc/image/sprite-projects-X2.png' => '853552c7',
'rsrc/image/sprite-projects.png' => 'b9dd74b8',
'rsrc/image/sprite-tokens-X2.png' => '348f1745',
'rsrc/image/sprite-tokens.png' => 'ce0b62be',
'rsrc/image/texture/card-gradient.png' => '815f26e8',
'rsrc/image/texture/dark-menu-hover.png' => '5fa7ece8',
'rsrc/image/texture/dark-menu.png' => '7e22296e',
'rsrc/image/texture/grip.png' => '719404f3',
'rsrc/image/texture/panel-header-gradient.png' => 'e3b8dcfe',
'rsrc/image/texture/phlnx-bg.png' => '8d819209',
'rsrc/image/texture/pholio-background.gif' => 'ba29239c',
'rsrc/image/texture/table_header.png' => '5c433037',
'rsrc/image/texture/table_header_hover.png' => '038ec3b9',
'rsrc/image/texture/table_header_tall.png' => 'd56b434f',
'rsrc/js/application/aphlict/Aphlict.js' => '5359e785',
'rsrc/js/application/aphlict/behavior-aphlict-dropdown.js' => '031cee25',
'rsrc/js/application/aphlict/behavior-aphlict-listen.js' => 'fb20ac8d',
'rsrc/js/application/aphlict/behavior-aphlict-status.js' => 'ea681761',
'rsrc/js/application/aphlict/behavior-desktop-notifications-control.js' => 'edd1ba66',
'rsrc/js/application/auth/behavior-persona-login.js' => '9414ff18',
'rsrc/js/application/calendar/behavior-day-view.js' => '5c46cff2',
'rsrc/js/application/calendar/behavior-event-all-day.js' => '38dcf3c8',
'rsrc/js/application/calendar/behavior-recurring-edit.js' => '5f1c4d5f',
'rsrc/js/application/config/behavior-reorder-fields.js' => 'b6993408',
'rsrc/js/application/conpherence/ConpherenceThreadManager.js' => '01774ab2',
'rsrc/js/application/conpherence/behavior-drag-and-drop-photo.js' => 'cf86d16a',
'rsrc/js/application/conpherence/behavior-durable-column.js' => 'c72aa091',
'rsrc/js/application/conpherence/behavior-menu.js' => '1d45c74d',
'rsrc/js/application/conpherence/behavior-pontificate.js' => '21ba5861',
'rsrc/js/application/conpherence/behavior-quicksand-blacklist.js' => '7927a7d3',
'rsrc/js/application/conpherence/behavior-widget-pane.js' => 'a8458711',
'rsrc/js/application/countdown/timer.js' => 'e4cc26b3',
'rsrc/js/application/daemon/behavior-bulk-job-reload.js' => 'edf8a145',
'rsrc/js/application/dashboard/behavior-dashboard-async-panel.js' => '469c0d9e',
'rsrc/js/application/dashboard/behavior-dashboard-move-panels.js' => '82439934',
'rsrc/js/application/dashboard/behavior-dashboard-query-panel-select.js' => '453c5375',
'rsrc/js/application/dashboard/behavior-dashboard-tab-panel.js' => 'd4eecc63',
'rsrc/js/application/differential/ChangesetViewManager.js' => '58562350',
'rsrc/js/application/differential/DifferentialInlineCommentEditor.js' => '64a5550f',
'rsrc/js/application/differential/behavior-add-reviewers-and-ccs.js' => 'e10f8e18',
'rsrc/js/application/differential/behavior-comment-jump.js' => '4fdb476d',
'rsrc/js/application/differential/behavior-comment-preview.js' => 'b064af76',
'rsrc/js/application/differential/behavior-diff-radios.js' => 'e1ff79b1',
'rsrc/js/application/differential/behavior-dropdown-menus.js' => '2035b9cb',
'rsrc/js/application/differential/behavior-edit-inline-comments.js' => '65ef6074',
'rsrc/js/application/differential/behavior-keyboard-nav.js' => '2c426492',
'rsrc/js/application/differential/behavior-populate.js' => '8694b1df',
'rsrc/js/application/differential/behavior-toggle-files.js' => 'ca3f91eb',
'rsrc/js/application/differential/behavior-user-select.js' => 'a8d8459d',
'rsrc/js/application/diffusion/DiffusionLocateFileSource.js' => 'b42eddc7',
'rsrc/js/application/diffusion/behavior-audit-preview.js' => 'd835b03a',
'rsrc/js/application/diffusion/behavior-commit-branches.js' => 'bdaf4d04',
'rsrc/js/application/diffusion/behavior-commit-graph.js' => '9007c197',
'rsrc/js/application/diffusion/behavior-jump-to.js' => '73d09eef',
'rsrc/js/application/diffusion/behavior-load-blame.js' => '42126667',
'rsrc/js/application/diffusion/behavior-locate-file.js' => '6d3e1947',
'rsrc/js/application/diffusion/behavior-pull-lastmodified.js' => '2b228192',
'rsrc/js/application/doorkeeper/behavior-doorkeeper-tag.js' => 'e5822781',
'rsrc/js/application/files/behavior-icon-composer.js' => '8ef9ab58',
'rsrc/js/application/files/behavior-launch-icon-composer.js' => '48086888',
'rsrc/js/application/herald/HeraldRuleEditor.js' => '91a6031b',
'rsrc/js/application/herald/PathTypeahead.js' => 'f7fc67ec',
'rsrc/js/application/herald/herald-rule-editor.js' => '7ebaeed3',
'rsrc/js/application/maniphest/behavior-batch-editor.js' => '782ab6e7',
'rsrc/js/application/maniphest/behavior-batch-selector.js' => '7b98d7c5',
'rsrc/js/application/maniphest/behavior-line-chart.js' => '88f0c5b3',
'rsrc/js/application/maniphest/behavior-list-edit.js' => 'a9f88de2',
'rsrc/js/application/maniphest/behavior-subpriorityeditor.js' => '71237763',
'rsrc/js/application/maniphest/behavior-transaction-controls.js' => '44168bad',
'rsrc/js/application/maniphest/behavior-transaction-expand.js' => '5fefb143',
'rsrc/js/application/maniphest/behavior-transaction-preview.js' => '4c95d29e',
'rsrc/js/application/owners/OwnersPathEditor.js' => 'aa1733d0',
'rsrc/js/application/owners/owners-path-editor.js' => '7a68dda3',
'rsrc/js/application/passphrase/passphrase-credential-control.js' => '3cb0b2fc',
'rsrc/js/application/phame/phame-post-preview.js' => 'be807912',
'rsrc/js/application/pholio/behavior-pholio-mock-edit.js' => '246dc085',
'rsrc/js/application/pholio/behavior-pholio-mock-view.js' => 'fbe497e7',
'rsrc/js/application/phortune/behavior-stripe-payment-form.js' => '3f5d6dbf',
'rsrc/js/application/phortune/behavior-test-payment-form.js' => 'fc91ab6c',
'rsrc/js/application/phortune/phortune-credit-card-form.js' => '2290aeef',
'rsrc/js/application/policy/behavior-policy-control.js' => '7d470398',
'rsrc/js/application/policy/behavior-policy-rule-editor.js' => '5e9f347c',
'rsrc/js/application/projects/behavior-project-boards.js' => 'ba4fa35c',
'rsrc/js/application/projects/behavior-project-create.js' => '065227cc',
'rsrc/js/application/projects/behavior-reorder-columns.js' => 'e1d25dfb',
'rsrc/js/application/releeph/releeph-preview-branch.js' => 'b2b4fbaf',
'rsrc/js/application/releeph/releeph-request-state-change.js' => 'a0b57eb8',
'rsrc/js/application/releeph/releeph-request-typeahead.js' => 'de2e896f',
'rsrc/js/application/repository/repository-crossreference.js' => 'e5339c43',
'rsrc/js/application/search/behavior-reorder-queries.js' => 'e9581f08',
'rsrc/js/application/slowvote/behavior-slowvote-embed.js' => '887ad43f',
'rsrc/js/application/transactions/behavior-show-older-transactions.js' => 'dbbf48b6',
'rsrc/js/application/transactions/behavior-transaction-comment-form.js' => 'b23b49e6',
'rsrc/js/application/transactions/behavior-transaction-list.js' => '13c739ea',
'rsrc/js/application/typeahead/behavior-typeahead-browse.js' => '635de1ec',
'rsrc/js/application/typeahead/behavior-typeahead-search.js' => '93d0c9e3',
'rsrc/js/application/uiexample/JavelinViewExample.js' => 'd4a14807',
'rsrc/js/application/uiexample/ReactorButtonExample.js' => 'd19198c8',
'rsrc/js/application/uiexample/ReactorCheckboxExample.js' => '519705ea',
'rsrc/js/application/uiexample/ReactorFocusExample.js' => '40a6a403',
'rsrc/js/application/uiexample/ReactorInputExample.js' => '886fd850',
'rsrc/js/application/uiexample/ReactorMouseoverExample.js' => '47c794d8',
'rsrc/js/application/uiexample/ReactorRadioExample.js' => '988040b4',
'rsrc/js/application/uiexample/ReactorSelectExample.js' => 'a155550f',
'rsrc/js/application/uiexample/ReactorSendClassExample.js' => '1def2711',
'rsrc/js/application/uiexample/ReactorSendPropertiesExample.js' => 'b1f0ccee',
'rsrc/js/application/uiexample/busy-example.js' => '60479091',
'rsrc/js/application/uiexample/gesture-example.js' => '558829c2',
'rsrc/js/application/uiexample/notification-example.js' => '8ce821c5',
'rsrc/js/core/Busy.js' => '59a7976a',
'rsrc/js/core/DragAndDropFileUpload.js' => 'ad10aeac',
'rsrc/js/core/DraggableList.js' => 'a16ec1c6',
'rsrc/js/core/FileUpload.js' => '477359c8',
'rsrc/js/core/Hovercard.js' => '14ac66f5',
'rsrc/js/core/KeyboardShortcut.js' => '1ae869f2',
'rsrc/js/core/KeyboardShortcutManager.js' => 'c1700f6f',
'rsrc/js/core/MultirowRowManager.js' => 'b5d57730',
'rsrc/js/core/Notification.js' => 'ccf1cbf8',
'rsrc/js/core/Prefab.js' => '6920d200',
'rsrc/js/core/ShapedRequest.js' => '7cbe244b',
'rsrc/js/core/TextAreaUtils.js' => '5c93c52c',
'rsrc/js/core/Title.js' => 'df5e11d2',
'rsrc/js/core/ToolTip.js' => '1d298e3a',
'rsrc/js/core/behavior-active-nav.js' => 'e379b58e',
'rsrc/js/core/behavior-audio-source.js' => '59b251eb',
'rsrc/js/core/behavior-autofocus.js' => '7319e029',
'rsrc/js/core/behavior-choose-control.js' => '6153c708',
'rsrc/js/core/behavior-crop.js' => 'fa0f4fc2',
'rsrc/js/core/behavior-dark-console.js' => 'f411b6ae',
'rsrc/js/core/behavior-device.js' => 'a205cf28',
'rsrc/js/core/behavior-drag-and-drop-textarea.js' => '6d49590e',
'rsrc/js/core/behavior-error-log.js' => '6882e80a',
'rsrc/js/core/behavior-fancy-datepicker.js' => '665cf6ac',
'rsrc/js/core/behavior-file-tree.js' => '88236f00',
'rsrc/js/core/behavior-form.js' => '5c54cbf3',
'rsrc/js/core/behavior-gesture.js' => '3ab51e2c',
'rsrc/js/core/behavior-global-drag-and-drop.js' => 'c8e57404',
'rsrc/js/core/behavior-high-security-warning.js' => 'a464fe03',
'rsrc/js/core/behavior-history-install.js' => '7ee2b591',
'rsrc/js/core/behavior-hovercard.js' => 'f36e01af',
'rsrc/js/core/behavior-keyboard-pager.js' => 'a8da01f0',
'rsrc/js/core/behavior-keyboard-shortcuts.js' => 'd75709e6',
'rsrc/js/core/behavior-lightbox-attachments.js' => 'f8ba29d7',
'rsrc/js/core/behavior-line-linker.js' => '1499a8cb',
'rsrc/js/core/behavior-more.js' => 'a80d0378',
'rsrc/js/core/behavior-object-selector.js' => '49b73b36',
'rsrc/js/core/behavior-oncopy.js' => '2926fff2',
'rsrc/js/core/behavior-phabricator-nav.js' => '56a1ca03',
'rsrc/js/core/behavior-phabricator-remarkup-assist.js' => 'eeaa9e5a',
'rsrc/js/core/behavior-refresh-csrf.js' => '7814b593',
'rsrc/js/core/behavior-remarkup-preview.js' => 'f7379f45',
'rsrc/js/core/behavior-reorder-applications.js' => '76b9fc3e',
'rsrc/js/core/behavior-reveal-content.js' => '60821bc7',
'rsrc/js/core/behavior-scrollbar.js' => '834a1173',
'rsrc/js/core/behavior-search-typeahead.js' => '048330fa',
'rsrc/js/core/behavior-select-on-click.js' => '4e3e79a6',
'rsrc/js/core/behavior-time-typeahead.js' => 'f80d6bf0',
'rsrc/js/core/behavior-toggle-class.js' => '5d7c9f33',
'rsrc/js/core/behavior-tokenizer.js' => 'b3a4b884',
'rsrc/js/core/behavior-tooltip.js' => '3ee3408b',
'rsrc/js/core/behavior-watch-anchor.js' => '9f36c42d',
'rsrc/js/core/behavior-workflow.js' => '0a3f3021',
'rsrc/js/core/phtize.js' => 'd254d646',
'rsrc/js/phui/behavior-phui-dropdown-menu.js' => '54733475',
'rsrc/js/phui/behavior-phui-object-box-tabs.js' => '2bfa2836',
'rsrc/js/phuix/PHUIXActionListView.js' => 'b5c256b8',
'rsrc/js/phuix/PHUIXActionView.js' => '8cf6d262',
'rsrc/js/phuix/PHUIXDropdownMenu.js' => 'bd4c8dca',
),
'symbols' => array(
'almanac-css' => 'dbb9b3af',
'aphront-bars' => '231ac33c',
'aphront-dark-console-css' => '6378ef3d',
'aphront-dialog-view-css' => 'fe58b18d',
'aphront-list-filter-view-css' => '5d6f0526',
'aphront-multi-column-view-css' => 'fd18389d',
'aphront-panel-view-css' => '8427b78d',
'aphront-table-view-css' => '34ee903e',
'aphront-tokenizer-control-css' => '04875312',
'aphront-tooltip-css' => '7672b60f',
'aphront-typeahead-control-css' => '0e403212',
'auth-css' => '0877ed6e',
'bulk-job-css' => 'df9c1d4a',
'calendar-icon-css' => 'c69aa59f',
'changeset-view-manager' => '58562350',
'conduit-api-css' => '7bc725c4',
'config-options-css' => '0ede4c9b',
'config-welcome-css' => '6abd79be',
'conpherence-durable-column-view' => '86396117',
'conpherence-menu-css' => 'f99fee4c',
'conpherence-message-pane-css' => '5897d3ac',
'conpherence-notification-css' => '6cdcc253',
'conpherence-thread-manager' => '01774ab2',
'conpherence-transaction-css' => '85d0974c',
'conpherence-update-css' => 'faf6be09',
'conpherence-widget-pane-css' => '775eaaba',
'differential-changeset-view-css' => 'b6b0d1bb',
'differential-core-view-css' => '7ac3cabc',
'differential-inline-comment-editor' => '64a5550f',
'differential-revision-add-comment-css' => 'c47f8c40',
'differential-revision-comment-css' => '14b8565a',
'differential-revision-history-css' => '0e8eb855',
'differential-revision-list-css' => 'f3c47d33',
'differential-table-of-contents-css' => 'ae4b7a55',
'diffusion-icons-css' => '2941baf1',
'diffusion-readme-css' => '2106ea08',
'diffusion-source-css' => '66fdf661',
'diviner-shared-css' => '5a337049',
'font-fontawesome' => 'd2fc4e8d',
'font-lato' => '5ab1a46a',
'font-roboto-slab' => 'f24a53cb',
'global-drag-and-drop-css' => '697324ad',
'harbormaster-css' => '49d64eb4',
'herald-css' => '826075fa',
'herald-rule-editor' => '91a6031b',
'herald-test-css' => 'a52e323e',
'inline-comment-summary-css' => '51efda3a',
'javelin-aphlict' => '5359e785',
'javelin-behavior' => '61cbc29a',
'javelin-behavior-aphlict-dropdown' => '031cee25',
'javelin-behavior-aphlict-listen' => 'fb20ac8d',
'javelin-behavior-aphlict-status' => 'ea681761',
'javelin-behavior-aphront-basic-tokenizer' => 'b3a4b884',
'javelin-behavior-aphront-crop' => 'fa0f4fc2',
'javelin-behavior-aphront-drag-and-drop-textarea' => '6d49590e',
'javelin-behavior-aphront-form-disable-on-submit' => '5c54cbf3',
'javelin-behavior-aphront-more' => 'a80d0378',
'javelin-behavior-audio-source' => '59b251eb',
'javelin-behavior-audit-preview' => 'd835b03a',
'javelin-behavior-bulk-job-reload' => 'edf8a145',
'javelin-behavior-choose-control' => '6153c708',
'javelin-behavior-config-reorder-fields' => 'b6993408',
'javelin-behavior-conpherence-drag-and-drop-photo' => 'cf86d16a',
'javelin-behavior-conpherence-menu' => '1d45c74d',
'javelin-behavior-conpherence-pontificate' => '21ba5861',
'javelin-behavior-conpherence-widget-pane' => 'a8458711',
'javelin-behavior-countdown-timer' => 'e4cc26b3',
'javelin-behavior-dark-console' => 'f411b6ae',
'javelin-behavior-dashboard-async-panel' => '469c0d9e',
'javelin-behavior-dashboard-move-panels' => '82439934',
'javelin-behavior-dashboard-query-panel-select' => '453c5375',
'javelin-behavior-dashboard-tab-panel' => 'd4eecc63',
'javelin-behavior-day-view' => '5c46cff2',
'javelin-behavior-desktop-notifications-control' => 'edd1ba66',
'javelin-behavior-device' => 'a205cf28',
'javelin-behavior-differential-add-reviewers-and-ccs' => 'e10f8e18',
'javelin-behavior-differential-comment-jump' => '4fdb476d',
'javelin-behavior-differential-diff-radios' => 'e1ff79b1',
'javelin-behavior-differential-dropdown-menus' => '2035b9cb',
'javelin-behavior-differential-edit-inline-comments' => '65ef6074',
'javelin-behavior-differential-feedback-preview' => 'b064af76',
'javelin-behavior-differential-keyboard-navigation' => '2c426492',
'javelin-behavior-differential-populate' => '8694b1df',
'javelin-behavior-differential-toggle-files' => 'ca3f91eb',
'javelin-behavior-differential-user-select' => 'a8d8459d',
'javelin-behavior-diffusion-commit-branches' => 'bdaf4d04',
'javelin-behavior-diffusion-commit-graph' => '9007c197',
'javelin-behavior-diffusion-jump-to' => '73d09eef',
'javelin-behavior-diffusion-locate-file' => '6d3e1947',
'javelin-behavior-diffusion-pull-lastmodified' => '2b228192',
'javelin-behavior-doorkeeper-tag' => 'e5822781',
'javelin-behavior-durable-column' => 'c72aa091',
'javelin-behavior-error-log' => '6882e80a',
'javelin-behavior-event-all-day' => '38dcf3c8',
'javelin-behavior-fancy-datepicker' => '665cf6ac',
'javelin-behavior-global-drag-and-drop' => 'c8e57404',
'javelin-behavior-herald-rule-editor' => '7ebaeed3',
'javelin-behavior-high-security-warning' => 'a464fe03',
'javelin-behavior-history-install' => '7ee2b591',
'javelin-behavior-icon-composer' => '8ef9ab58',
'javelin-behavior-launch-icon-composer' => '48086888',
'javelin-behavior-lightbox-attachments' => 'f8ba29d7',
'javelin-behavior-line-chart' => '88f0c5b3',
'javelin-behavior-load-blame' => '42126667',
'javelin-behavior-maniphest-batch-editor' => '782ab6e7',
'javelin-behavior-maniphest-batch-selector' => '7b98d7c5',
'javelin-behavior-maniphest-list-editor' => 'a9f88de2',
'javelin-behavior-maniphest-subpriority-editor' => '71237763',
'javelin-behavior-maniphest-transaction-controls' => '44168bad',
'javelin-behavior-maniphest-transaction-expand' => '5fefb143',
'javelin-behavior-maniphest-transaction-preview' => '4c95d29e',
'javelin-behavior-owners-path-editor' => '7a68dda3',
'javelin-behavior-passphrase-credential-control' => '3cb0b2fc',
'javelin-behavior-persona-login' => '9414ff18',
'javelin-behavior-phabricator-active-nav' => 'e379b58e',
'javelin-behavior-phabricator-autofocus' => '7319e029',
'javelin-behavior-phabricator-busy-example' => '60479091',
'javelin-behavior-phabricator-file-tree' => '88236f00',
'javelin-behavior-phabricator-gesture' => '3ab51e2c',
'javelin-behavior-phabricator-gesture-example' => '558829c2',
'javelin-behavior-phabricator-hovercards' => 'f36e01af',
'javelin-behavior-phabricator-keyboard-pager' => 'a8da01f0',
'javelin-behavior-phabricator-keyboard-shortcuts' => 'd75709e6',
'javelin-behavior-phabricator-line-linker' => '1499a8cb',
'javelin-behavior-phabricator-nav' => '56a1ca03',
'javelin-behavior-phabricator-notification-example' => '8ce821c5',
'javelin-behavior-phabricator-object-selector' => '49b73b36',
'javelin-behavior-phabricator-oncopy' => '2926fff2',
'javelin-behavior-phabricator-remarkup-assist' => 'eeaa9e5a',
'javelin-behavior-phabricator-reveal-content' => '60821bc7',
'javelin-behavior-phabricator-search-typeahead' => '048330fa',
'javelin-behavior-phabricator-show-older-transactions' => 'dbbf48b6',
'javelin-behavior-phabricator-tooltips' => '3ee3408b',
'javelin-behavior-phabricator-transaction-comment-form' => 'b23b49e6',
'javelin-behavior-phabricator-transaction-list' => '13c739ea',
'javelin-behavior-phabricator-watch-anchor' => '9f36c42d',
'javelin-behavior-phame-post-preview' => 'be807912',
'javelin-behavior-pholio-mock-edit' => '246dc085',
'javelin-behavior-pholio-mock-view' => 'fbe497e7',
'javelin-behavior-phui-dropdown-menu' => '54733475',
'javelin-behavior-phui-object-box-tabs' => '2bfa2836',
'javelin-behavior-policy-control' => '7d470398',
'javelin-behavior-policy-rule-editor' => '5e9f347c',
'javelin-behavior-project-boards' => 'ba4fa35c',
'javelin-behavior-project-create' => '065227cc',
'javelin-behavior-quicksand-blacklist' => '7927a7d3',
'javelin-behavior-recurring-edit' => '5f1c4d5f',
'javelin-behavior-refresh-csrf' => '7814b593',
'javelin-behavior-releeph-preview-branch' => 'b2b4fbaf',
'javelin-behavior-releeph-request-state-change' => 'a0b57eb8',
'javelin-behavior-releeph-request-typeahead' => 'de2e896f',
'javelin-behavior-remarkup-preview' => 'f7379f45',
'javelin-behavior-reorder-applications' => '76b9fc3e',
'javelin-behavior-reorder-columns' => 'e1d25dfb',
'javelin-behavior-repository-crossreference' => 'e5339c43',
'javelin-behavior-scrollbar' => '834a1173',
'javelin-behavior-search-reorder-queries' => 'e9581f08',
'javelin-behavior-select-on-click' => '4e3e79a6',
'javelin-behavior-slowvote-embed' => '887ad43f',
'javelin-behavior-stripe-payment-form' => '3f5d6dbf',
'javelin-behavior-test-payment-form' => 'fc91ab6c',
'javelin-behavior-time-typeahead' => 'f80d6bf0',
'javelin-behavior-toggle-class' => '5d7c9f33',
'javelin-behavior-typeahead-browse' => '635de1ec',
'javelin-behavior-typeahead-search' => '93d0c9e3',
'javelin-behavior-view-placeholder' => '47830651',
'javelin-behavior-workflow' => '0a3f3021',
'javelin-color' => '7e41274a',
'javelin-cookie' => '62dfea03',
'javelin-diffusion-locate-file-source' => 'b42eddc7',
'javelin-dom' => '805b806a',
'javelin-dynval' => 'f6555212',
'javelin-event' => '85ea0626',
'javelin-fx' => '54b612ba',
'javelin-history' => 'd4505101',
'javelin-install' => '05270951',
'javelin-json' => '69adf288',
'javelin-leader' => '331b1611',
'javelin-magical-init' => '3010e992',
'javelin-mask' => '8a41885b',
'javelin-quicksand' => '4cebc641',
'javelin-reactor' => '2b8de964',
'javelin-reactor-dom' => 'c90a04fc',
'javelin-reactor-node-calmer' => '76f4ebed',
'javelin-reactornode' => '1ad0a787',
'javelin-request' => '94b750d2',
'javelin-resource' => '44959b73',
'javelin-routable' => 'b3e7d692',
'javelin-router' => '29274e2b',
'javelin-scrollbar' => '087e919c',
'javelin-sound' => '949c0fe5',
'javelin-stratcom' => '6c53634d',
'javelin-tokenizer' => 'ab5f468d',
'javelin-typeahead' => '70baed2f',
'javelin-typeahead-composite-source' => '503e17fd',
'javelin-typeahead-normalizer' => 'e6e25838',
'javelin-typeahead-ondemand-source' => '8b3fd187',
'javelin-typeahead-preloaded-source' => '54f314a0',
'javelin-typeahead-source' => '2818f5ce',
'javelin-typeahead-static-source' => '6c0e62fa',
'javelin-uri' => '6eff08aa',
'javelin-util' => '93cc50d6',
'javelin-vector' => '2caa8fb8',
'javelin-view' => '0f764c35',
'javelin-view-html' => 'fe287620',
'javelin-view-interpreter' => 'f829edb3',
'javelin-view-renderer' => '6c2b09a2',
'javelin-view-visitor' => 'efe49472',
'javelin-websocket' => 'e292eaf4',
'javelin-workflow' => '5b2e3e2b',
'lightbox-attachment-css' => '7acac05d',
'maniphest-batch-editor' => 'b0f0b6d5',
'maniphest-report-css' => 'f6931fdf',
'maniphest-task-edit-css' => 'fda62a9b',
'maniphest-task-summary-css' => '11cc5344',
'multirow-row-manager' => 'b5d57730',
'owners-path-editor' => 'aa1733d0',
'owners-path-editor-css' => '2f00933b',
- 'paste-css' => '1898e534',
+ 'paste-css' => 'b2f5a543',
'path-typeahead' => 'f7fc67ec',
'people-profile-css' => '25970776',
'phabricator-action-list-view-css' => 'c5eba19d',
'phabricator-application-launch-view-css' => '95351601',
'phabricator-busy' => '59a7976a',
'phabricator-chatlog-css' => 'd295b020',
'phabricator-content-source-view-css' => '4b8b05d4',
'phabricator-core-css' => 'a76cefc9',
'phabricator-countdown-css' => 'e7544472',
'phabricator-dashboard-css' => 'eb458607',
'phabricator-drag-and-drop-file-upload' => 'ad10aeac',
'phabricator-draggable-list' => 'a16ec1c6',
'phabricator-fatal-config-template-css' => '8e6c6fcd',
'phabricator-feed-css' => 'ecd4ec57',
'phabricator-file-upload' => '477359c8',
'phabricator-filetree-view-css' => 'fccf9f82',
'phabricator-flag-css' => '5337623f',
'phabricator-hovercard' => '14ac66f5',
'phabricator-hovercard-view-css' => '1239cd52',
'phabricator-keyboard-shortcut' => '1ae869f2',
'phabricator-keyboard-shortcut-manager' => 'c1700f6f',
'phabricator-main-menu-view' => '2f670a96',
'phabricator-nav-view-css' => 'a24cb589',
'phabricator-notification' => 'ccf1cbf8',
'phabricator-notification-css' => '9c279160',
'phabricator-notification-menu-css' => 'f31c0bde',
'phabricator-object-selector-css' => '85ee8ce6',
'phabricator-phtize' => 'd254d646',
'phabricator-prefab' => '6920d200',
- 'phabricator-remarkup-css' => '1c4ac273',
+ 'phabricator-remarkup-css' => 'e27a26b2',
'phabricator-search-results-css' => '7dea472c',
'phabricator-shaped-request' => '7cbe244b',
'phabricator-side-menu-view-css' => 'bec2458e',
'phabricator-slowvote-css' => '475b4bd2',
- 'phabricator-source-code-view-css' => '5e0178de',
+ 'phabricator-source-code-view-css' => 'cbeef983',
'phabricator-standard-page-view' => '1f53d056',
'phabricator-textareautils' => '5c93c52c',
'phabricator-title' => 'df5e11d2',
'phabricator-tooltip' => '1d298e3a',
'phabricator-ui-example-css' => '528b19de',
'phabricator-uiexample-javelin-view' => 'd4a14807',
'phabricator-uiexample-reactor-button' => 'd19198c8',
'phabricator-uiexample-reactor-checkbox' => '519705ea',
'phabricator-uiexample-reactor-focus' => '40a6a403',
'phabricator-uiexample-reactor-input' => '886fd850',
'phabricator-uiexample-reactor-mouseover' => '47c794d8',
'phabricator-uiexample-reactor-radio' => '988040b4',
'phabricator-uiexample-reactor-select' => 'a155550f',
'phabricator-uiexample-reactor-sendclass' => '1def2711',
'phabricator-uiexample-reactor-sendproperties' => 'b1f0ccee',
'phabricator-zindex-css' => '57ddcaa2',
'phame-css' => 'bb147387',
'pholio-css' => '95174bdd',
'pholio-edit-css' => '3ad9d1ee',
'pholio-inline-comments-css' => '8e545e49',
'phortune-credit-card-form' => '2290aeef',
'phortune-credit-card-form-css' => '8391eb02',
'phortune-css' => '9149f103',
'phrequent-css' => 'ffc185ad',
'phriction-document-css' => 'd1861e06',
- 'phui-action-panel-css' => '3ee9afd5',
+ 'phui-action-panel-css' => '91c7b835',
'phui-badge-view-css' => 'f25c3476',
'phui-box-css' => 'a5bb366d',
'phui-button-css' => '16020a60',
'phui-calendar-css' => 'ccabe893',
'phui-calendar-day-css' => 'd1cf6f93',
'phui-calendar-list-css' => 'c1c7f338',
'phui-calendar-month-css' => '476be7e0',
'phui-crumbs-view-css' => 'd842f867',
'phui-document-view-css' => '0267054b',
'phui-feed-story-css' => 'b7b26d23',
'phui-font-icon-base-css' => 'ecbbb4c2',
'phui-fontkit-css' => 'cb8ae7ad',
'phui-form-css' => 'afdb2c6e',
'phui-form-view-css' => '621b21c5',
'phui-header-view-css' => '55bb32dd',
'phui-icon-view-css' => 'b0a6b1b6',
'phui-image-mask-css' => '5a8b09c8',
'phui-info-panel-css' => '27ea50a1',
'phui-info-view-css' => '5b16bac6',
'phui-inline-comment-view-css' => '0fdb3667',
'phui-list-view-css' => '125599df',
'phui-object-box-css' => '407eaf5a',
'phui-object-item-list-view-css' => '26c30d3f',
'phui-pager-css' => 'bea33d23',
'phui-pinboard-view-css' => '2495140e',
'phui-property-list-view-css' => '03904f6b',
'phui-remarkup-preview-css' => '867f85b3',
'phui-spacing-css' => '042804d6',
'phui-status-list-view-css' => '888cedb8',
'phui-tag-view-css' => '402691cc',
'phui-text-css' => 'cf019f54',
'phui-theme-css' => '6b451f24',
'phui-timeline-view-css' => 'f1bccf73',
'phui-two-column-view-css' => '39ecafb1',
'phui-workboard-view-css' => '6704d68d',
'phui-workpanel-view-css' => 'adec7699',
'phuix-action-list-view' => 'b5c256b8',
'phuix-action-view' => '8cf6d262',
'phuix-dropdown-menu' => 'bd4c8dca',
'policy-css' => '957ea14c',
'policy-edit-css' => '815c66f7',
'policy-transaction-detail-css' => '82100a43',
'ponder-view-css' => '7b0df4da',
'project-icon-css' => '4e3eaa5a',
'raphael-core' => '51ee6b43',
'raphael-g' => '40dde778',
'raphael-g-line' => '40da039e',
'releeph-core' => '9b3c5733',
'releeph-preview-branch' => 'b7a6f4a5',
'releeph-request-differential-create-dialog' => '8d8b92cd',
'releeph-request-typeahead-css' => '667a48ae',
'setup-issue-css' => 'db7e9c40',
'sprite-login-css' => '1ebb9bf9',
'sprite-main-header-css' => 'f07bbb87',
'sprite-menu-css' => '9dd65b92',
'sprite-projects-css' => 'e5ad842a',
'sprite-tokens-css' => '4f399012',
'syntax-highlighting-css' => '9fd11da8',
'tokens-css' => '3d0f239e',
'typeahead-browse-css' => 'd8581d2c',
'unhandled-exception-css' => '4c96257a',
),
'requires' => array(
'01774ab2' => array(
'javelin-dom',
'javelin-util',
'javelin-stratcom',
'javelin-install',
'javelin-aphlict',
'javelin-workflow',
'javelin-router',
'javelin-behavior-device',
'javelin-vector',
),
'031cee25' => array(
'javelin-behavior',
'javelin-request',
'javelin-stratcom',
'javelin-vector',
'javelin-dom',
'javelin-uri',
'javelin-behavior-device',
'phabricator-title',
),
'048330fa' => array(
'javelin-behavior',
'javelin-typeahead-ondemand-source',
'javelin-typeahead',
'javelin-dom',
'javelin-uri',
'javelin-util',
'javelin-stratcom',
'phabricator-prefab',
),
'04875312' => array(
'aphront-typeahead-control-css',
'phui-tag-view-css',
),
'05270951' => array(
'javelin-util',
'javelin-magical-init',
),
'065227cc' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'javelin-workflow',
),
'087e919c' => array(
'javelin-install',
'javelin-dom',
'javelin-stratcom',
'javelin-vector',
),
'0a3f3021' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-workflow',
'javelin-dom',
'javelin-router',
),
'0f764c35' => array(
'javelin-install',
'javelin-util',
),
'13c739ea' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-workflow',
'javelin-dom',
'javelin-uri',
'phabricator-textareautils',
),
'1499a8cb' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'javelin-history',
),
'14ac66f5' => array(
'javelin-install',
'javelin-dom',
'javelin-vector',
'javelin-request',
'javelin-uri',
),
'1ad0a787' => array(
'javelin-install',
'javelin-reactor',
'javelin-util',
'javelin-reactor-node-calmer',
),
'1ae869f2' => array(
'javelin-install',
'javelin-util',
'phabricator-keyboard-shortcut-manager',
),
'1d298e3a' => array(
'javelin-install',
'javelin-util',
'javelin-dom',
'javelin-vector',
),
'1d45c74d' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'javelin-stratcom',
'javelin-workflow',
'javelin-behavior-device',
'javelin-history',
'javelin-vector',
'javelin-scrollbar',
'phabricator-title',
'phabricator-shaped-request',
'conpherence-thread-manager',
),
'1def2711' => array(
'javelin-install',
'javelin-dom',
'javelin-reactor-dom',
),
'2035b9cb' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'javelin-stratcom',
'javelin-workflow',
'phuix-dropdown-menu',
'phuix-action-list-view',
'phuix-action-view',
'phabricator-phtize',
'changeset-view-manager',
),
'21ba5861' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'javelin-workflow',
'javelin-stratcom',
'conpherence-thread-manager',
),
'2290aeef' => array(
'javelin-install',
'javelin-dom',
'javelin-json',
'javelin-workflow',
'javelin-util',
),
'246dc085' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'javelin-workflow',
'javelin-quicksand',
'phabricator-phtize',
'phabricator-drag-and-drop-file-upload',
'phabricator-draggable-list',
),
'2818f5ce' => array(
'javelin-install',
'javelin-util',
'javelin-dom',
'javelin-typeahead-normalizer',
),
'2926fff2' => array(
'javelin-behavior',
'javelin-dom',
),
'29274e2b' => array(
'javelin-install',
'javelin-util',
),
'2b228192' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'javelin-workflow',
'javelin-json',
),
'2b8de964' => array(
'javelin-install',
'javelin-util',
),
'2bfa2836' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
),
'2c426492' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'phabricator-keyboard-shortcut',
),
'2caa8fb8' => array(
'javelin-install',
'javelin-event',
),
'2f670a96' => array(
'phui-theme-css',
),
'331b1611' => array(
'javelin-install',
),
'3ab51e2c' => array(
'javelin-behavior',
'javelin-behavior-device',
'javelin-stratcom',
'javelin-vector',
'javelin-dom',
'javelin-magical-init',
),
'3cb0b2fc' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'javelin-workflow',
'javelin-util',
'javelin-uri',
),
'3ee3408b' => array(
'javelin-behavior',
'javelin-behavior-device',
'javelin-stratcom',
'phabricator-tooltip',
),
'3f5d6dbf' => array(
'javelin-behavior',
'javelin-dom',
'phortune-credit-card-form',
),
'40a6a403' => array(
'javelin-install',
'javelin-dom',
'javelin-reactor-dom',
),
42126667 => array(
'javelin-behavior',
'javelin-dom',
'javelin-request',
),
'44168bad' => array(
'javelin-behavior',
'javelin-dom',
'phabricator-prefab',
),
'44959b73' => array(
'javelin-util',
'javelin-uri',
'javelin-install',
),
'453c5375' => array(
'javelin-behavior',
'javelin-dom',
),
'469c0d9e' => array(
'javelin-behavior',
'javelin-dom',
'javelin-workflow',
),
'477359c8' => array(
'javelin-install',
'javelin-dom',
'phabricator-notification',
),
47830651 => array(
'javelin-behavior',
'javelin-dom',
'javelin-view-renderer',
'javelin-install',
),
'47c794d8' => array(
'javelin-install',
'javelin-dom',
'javelin-reactor-dom',
),
48086888 => array(
'javelin-behavior',
'javelin-dom',
'javelin-workflow',
),
'49b73b36' => array(
'javelin-behavior',
'javelin-dom',
'javelin-request',
'javelin-util',
),
'4c95d29e' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'javelin-json',
'javelin-stratcom',
'phabricator-shaped-request',
),
'4cebc641' => array(
'javelin-install',
),
'4e3e79a6' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
),
'4fdb476d' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
),
'503e17fd' => array(
'javelin-install',
'javelin-typeahead-source',
'javelin-util',
),
'519705ea' => array(
'javelin-install',
'javelin-dom',
'javelin-reactor-dom',
),
'5359e785' => array(
'javelin-install',
'javelin-util',
'javelin-websocket',
'javelin-leader',
'javelin-json',
),
54733475 => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'phuix-dropdown-menu',
),
'54b612ba' => array(
'javelin-color',
'javelin-install',
'javelin-util',
),
'54f314a0' => array(
'javelin-install',
'javelin-util',
'javelin-request',
'javelin-typeahead-source',
),
'558829c2' => array(
'javelin-stratcom',
'javelin-behavior',
'javelin-vector',
'javelin-dom',
),
'56a1ca03' => array(
'javelin-behavior',
'javelin-behavior-device',
'javelin-stratcom',
'javelin-dom',
'javelin-magical-init',
'javelin-vector',
'javelin-request',
'javelin-util',
),
58562350 => array(
'javelin-dom',
'javelin-util',
'javelin-stratcom',
'javelin-install',
'javelin-workflow',
'javelin-router',
'javelin-behavior-device',
'javelin-vector',
),
'59a7976a' => array(
'javelin-install',
'javelin-dom',
'javelin-fx',
),
'59b251eb' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-vector',
'javelin-dom',
),
'5ab1a46a' => array(
'phui-fontkit-css',
),
'5b2e3e2b' => array(
'javelin-stratcom',
'javelin-request',
'javelin-dom',
'javelin-vector',
'javelin-install',
'javelin-util',
'javelin-mask',
'javelin-uri',
'javelin-routable',
),
'5c54cbf3' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
),
'5c93c52c' => array(
'javelin-install',
'javelin-dom',
'javelin-vector',
),
'5d7c9f33' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
),
'5e9f347c' => array(
'javelin-behavior',
'multirow-row-manager',
'javelin-dom',
'javelin-util',
'phabricator-prefab',
'javelin-json',
),
'5fefb143' => array(
'javelin-behavior',
'javelin-dom',
'javelin-workflow',
'javelin-stratcom',
),
60479091 => array(
'phabricator-busy',
'javelin-behavior',
),
'60821bc7' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
),
'6153c708' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'javelin-workflow',
),
'61cbc29a' => array(
'javelin-magical-init',
'javelin-util',
),
'62dfea03' => array(
'javelin-install',
'javelin-util',
),
'635de1ec' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-workflow',
'javelin-dom',
),
'64a5550f' => array(
'javelin-dom',
'javelin-util',
'javelin-stratcom',
'javelin-install',
'javelin-request',
'javelin-workflow',
),
'65ef6074' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'javelin-util',
'javelin-vector',
'differential-inline-comment-editor',
),
'665cf6ac' => array(
'javelin-behavior',
'javelin-util',
'javelin-dom',
'javelin-stratcom',
'javelin-vector',
),
'6882e80a' => array(
'javelin-dom',
),
'6920d200' => array(
'javelin-install',
'javelin-util',
'javelin-dom',
'javelin-typeahead',
'javelin-tokenizer',
'javelin-typeahead-preloaded-source',
'javelin-typeahead-ondemand-source',
'javelin-dom',
'javelin-stratcom',
'javelin-util',
),
'69adf288' => array(
'javelin-install',
),
'6c0e62fa' => array(
'javelin-install',
'javelin-typeahead-source',
),
'6c2b09a2' => array(
'javelin-install',
'javelin-util',
),
'6c53634d' => array(
'javelin-install',
'javelin-event',
'javelin-util',
'javelin-magical-init',
),
'6d3e1947' => array(
'javelin-behavior',
'javelin-diffusion-locate-file-source',
'javelin-dom',
'javelin-typeahead',
'javelin-uri',
),
'6d49590e' => array(
'javelin-behavior',
'javelin-dom',
'phabricator-drag-and-drop-file-upload',
'phabricator-textareautils',
),
'6eff08aa' => array(
'javelin-install',
'javelin-util',
'javelin-stratcom',
),
'70baed2f' => array(
'javelin-install',
'javelin-dom',
'javelin-vector',
'javelin-util',
),
71237763 => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'javelin-workflow',
'phabricator-draggable-list',
),
'7319e029' => array(
'javelin-behavior',
'javelin-dom',
),
'73d09eef' => array(
'javelin-behavior',
'javelin-vector',
'javelin-dom',
),
'76b9fc3e' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-workflow',
'javelin-dom',
'phabricator-draggable-list',
),
'76f4ebed' => array(
'javelin-install',
'javelin-reactor',
'javelin-util',
),
'7814b593' => array(
'javelin-request',
'javelin-behavior',
'javelin-dom',
'javelin-router',
'javelin-util',
'phabricator-busy',
),
'782ab6e7' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'phabricator-prefab',
'multirow-row-manager',
'javelin-json',
),
'7927a7d3' => array(
'javelin-behavior',
'javelin-quicksand',
),
'7a68dda3' => array(
'owners-path-editor',
'javelin-behavior',
),
'7b98d7c5' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'javelin-util',
),
'7cbe244b' => array(
'javelin-install',
'javelin-util',
'javelin-request',
'javelin-router',
),
'7d470398' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'phuix-dropdown-menu',
'phuix-action-list-view',
'phuix-action-view',
'javelin-workflow',
),
'7e41274a' => array(
'javelin-install',
),
'7ebaeed3' => array(
'herald-rule-editor',
'javelin-behavior',
),
'7ee2b591' => array(
'javelin-behavior',
'javelin-history',
),
'805b806a' => array(
'javelin-magical-init',
'javelin-install',
'javelin-util',
'javelin-vector',
'javelin-stratcom',
),
82439934 => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'javelin-stratcom',
'javelin-workflow',
'phabricator-draggable-list',
),
'834a1173' => array(
'javelin-behavior',
'javelin-scrollbar',
),
'85ea0626' => array(
'javelin-install',
),
'85ee8ce6' => array(
'aphront-dialog-view-css',
),
'8694b1df' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'phabricator-tooltip',
'changeset-view-manager',
),
'88236f00' => array(
'javelin-behavior',
'phabricator-keyboard-shortcut',
'javelin-stratcom',
),
'886fd850' => array(
'javelin-install',
'javelin-reactor-dom',
'javelin-view-html',
'javelin-view-interpreter',
'javelin-view-renderer',
),
'887ad43f' => array(
'javelin-behavior',
'javelin-request',
'javelin-stratcom',
'javelin-dom',
),
'88f0c5b3' => array(
'javelin-behavior',
'javelin-dom',
'javelin-vector',
),
'8a41885b' => array(
'javelin-install',
'javelin-dom',
),
'8b3fd187' => array(
'javelin-install',
'javelin-util',
'javelin-request',
'javelin-typeahead-source',
),
'8ce821c5' => array(
'phabricator-notification',
'javelin-stratcom',
'javelin-behavior',
),
'8cf6d262' => array(
'javelin-install',
'javelin-dom',
'javelin-util',
),
'8ef9ab58' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
),
'9007c197' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
),
'91a6031b' => array(
'multirow-row-manager',
'javelin-install',
'javelin-util',
'javelin-dom',
'javelin-stratcom',
'javelin-json',
'phabricator-prefab',
),
'93d0c9e3' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-workflow',
'javelin-dom',
),
'9414ff18' => array(
'javelin-behavior',
'javelin-resource',
'javelin-stratcom',
'javelin-workflow',
'javelin-util',
),
'949c0fe5' => array(
'javelin-install',
),
'94b750d2' => array(
'javelin-install',
'javelin-stratcom',
'javelin-util',
'javelin-behavior',
'javelin-json',
'javelin-dom',
'javelin-resource',
'javelin-routable',
),
'988040b4' => array(
'javelin-install',
'javelin-dom',
'javelin-reactor-dom',
),
'9f36c42d' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'javelin-vector',
),
'a0b57eb8' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'javelin-workflow',
'javelin-util',
'phabricator-keyboard-shortcut',
),
'a155550f' => array(
'javelin-install',
'javelin-dom',
'javelin-reactor-dom',
),
'a16ec1c6' => array(
'javelin-install',
'javelin-dom',
'javelin-stratcom',
'javelin-util',
'javelin-vector',
'javelin-magical-init',
),
'a205cf28' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'javelin-vector',
'javelin-install',
),
'a464fe03' => array(
'javelin-behavior',
'javelin-uri',
'phabricator-notification',
),
'a80d0378' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
),
'a8458711' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'javelin-workflow',
'javelin-util',
'phabricator-notification',
'javelin-behavior-device',
'phuix-dropdown-menu',
'phuix-action-list-view',
'phuix-action-view',
'conpherence-thread-manager',
),
'a8d8459d' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
),
'a8da01f0' => array(
'javelin-behavior',
'javelin-uri',
'phabricator-keyboard-shortcut',
),
'a9f88de2' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'javelin-workflow',
'javelin-fx',
'javelin-util',
),
'aa1733d0' => array(
'multirow-row-manager',
'javelin-install',
'path-typeahead',
'javelin-dom',
'javelin-util',
'phabricator-prefab',
),
'ab5f468d' => array(
'javelin-dom',
'javelin-util',
'javelin-stratcom',
'javelin-install',
),
'ad10aeac' => array(
'javelin-install',
'javelin-util',
'javelin-request',
'javelin-dom',
'javelin-uri',
'phabricator-file-upload',
),
'b064af76' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'javelin-request',
'javelin-util',
'phabricator-shaped-request',
),
'b1f0ccee' => array(
'javelin-install',
'javelin-dom',
'javelin-reactor-dom',
),
'b23b49e6' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'javelin-request',
'phabricator-shaped-request',
),
'b2b4fbaf' => array(
'javelin-behavior',
'javelin-dom',
'javelin-uri',
'javelin-request',
),
'b3a4b884' => array(
'javelin-behavior',
'phabricator-prefab',
),
'b3e7d692' => array(
'javelin-install',
),
'b42eddc7' => array(
'javelin-install',
'javelin-dom',
'javelin-typeahead-preloaded-source',
'javelin-util',
),
'b5c256b8' => array(
'javelin-install',
'javelin-dom',
),
'b5d57730' => array(
'javelin-install',
'javelin-stratcom',
'javelin-dom',
'javelin-util',
),
'b6993408' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'javelin-json',
'phabricator-draggable-list',
),
'b6b0d1bb' => array(
'phui-inline-comment-view-css',
),
'ba4fa35c' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'javelin-vector',
'javelin-stratcom',
'javelin-workflow',
'phabricator-draggable-list',
),
'bd4c8dca' => array(
'javelin-install',
'javelin-util',
'javelin-dom',
'javelin-vector',
'javelin-stratcom',
),
'bdaf4d04' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'javelin-request',
),
'be807912' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'phabricator-shaped-request',
),
'c1700f6f' => array(
'javelin-install',
'javelin-util',
'javelin-stratcom',
'javelin-dom',
'javelin-vector',
),
'c72aa091' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'javelin-behavior-device',
'javelin-scrollbar',
'javelin-quicksand',
'phabricator-keyboard-shortcut',
'conpherence-thread-manager',
),
'c8e57404' => array(
'javelin-behavior',
'javelin-dom',
'javelin-uri',
'javelin-mask',
'phabricator-drag-and-drop-file-upload',
),
'c90a04fc' => array(
'javelin-dom',
'javelin-dynval',
'javelin-reactor',
'javelin-reactornode',
'javelin-install',
'javelin-util',
),
'ca3f91eb' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'phabricator-phtize',
),
'ccf1cbf8' => array(
'javelin-install',
'javelin-dom',
'javelin-stratcom',
'javelin-util',
'phabricator-notification-css',
),
'cf86d16a' => array(
'javelin-behavior',
'javelin-dom',
'javelin-workflow',
'phabricator-drag-and-drop-file-upload',
),
'd19198c8' => array(
'javelin-install',
'javelin-dom',
'javelin-util',
'javelin-dynval',
'javelin-reactor-dom',
),
'd254d646' => array(
'javelin-util',
),
'd4505101' => array(
'javelin-stratcom',
'javelin-install',
'javelin-uri',
'javelin-util',
),
'd4a14807' => array(
'javelin-install',
'javelin-dom',
'javelin-view',
),
'd4eecc63' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
),
'd75709e6' => array(
'javelin-behavior',
'javelin-workflow',
'javelin-json',
'javelin-dom',
'phabricator-keyboard-shortcut',
),
'd835b03a' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'phabricator-shaped-request',
),
'dbbf48b6' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'phabricator-busy',
),
'de2e896f' => array(
'javelin-behavior',
'javelin-dom',
'javelin-typeahead',
'javelin-typeahead-ondemand-source',
'javelin-dom',
),
'df5e11d2' => array(
'javelin-install',
),
'e10f8e18' => array(
'javelin-behavior',
'javelin-dom',
'phabricator-prefab',
),
'e1d25dfb' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-workflow',
'javelin-dom',
'phabricator-draggable-list',
),
'e1ff79b1' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
),
'e292eaf4' => array(
'javelin-install',
),
'e379b58e' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-vector',
'javelin-dom',
'javelin-uri',
),
'e4cc26b3' => array(
'javelin-behavior',
'javelin-dom',
),
'e5339c43' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'javelin-uri',
),
'e5822781' => array(
'javelin-behavior',
'javelin-dom',
'javelin-json',
'javelin-workflow',
'javelin-magical-init',
),
'e6e25838' => array(
'javelin-install',
),
'e9581f08' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-workflow',
'javelin-dom',
'phabricator-draggable-list',
),
'ea681761' => array(
'javelin-behavior',
'javelin-aphlict',
'phabricator-phtize',
'javelin-dom',
),
'edd1ba66' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'javelin-uri',
'phabricator-notification',
),
'edf8a145' => array(
'javelin-behavior',
'javelin-uri',
),
'eeaa9e5a' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'phabricator-phtize',
'phabricator-textareautils',
'javelin-workflow',
'javelin-vector',
),
'efe49472' => array(
'javelin-install',
'javelin-util',
),
'f24a53cb' => array(
'phui-fontkit-css',
),
'f36e01af' => array(
'javelin-behavior',
'javelin-behavior-device',
'javelin-stratcom',
'javelin-vector',
'phabricator-hovercard',
),
'f411b6ae' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-util',
'javelin-dom',
'javelin-request',
'phabricator-keyboard-shortcut',
),
'f6555212' => array(
'javelin-install',
'javelin-reactornode',
'javelin-util',
'javelin-reactor',
),
'f7379f45' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'phabricator-shaped-request',
),
'f7fc67ec' => array(
'javelin-install',
'javelin-typeahead',
'javelin-dom',
'javelin-request',
'javelin-typeahead-ondemand-source',
'javelin-util',
),
'f80d6bf0' => array(
'javelin-behavior',
'javelin-util',
'javelin-dom',
'javelin-stratcom',
'javelin-vector',
'javelin-typeahead-static-source',
),
'f829edb3' => array(
'javelin-view',
'javelin-install',
'javelin-dom',
),
'f8ba29d7' => array(
'javelin-behavior',
'javelin-stratcom',
'javelin-dom',
'javelin-mask',
'javelin-util',
'phabricator-busy',
),
'fa0f4fc2' => array(
'javelin-behavior',
'javelin-dom',
'javelin-vector',
'javelin-magical-init',
),
'fb20ac8d' => array(
'javelin-behavior',
'javelin-aphlict',
'javelin-stratcom',
'javelin-request',
'javelin-uri',
'javelin-dom',
'javelin-json',
'javelin-router',
'javelin-util',
'javelin-leader',
'javelin-sound',
'phabricator-notification',
),
'fbe497e7' => array(
'javelin-behavior',
'javelin-util',
'javelin-stratcom',
'javelin-dom',
'javelin-vector',
'javelin-magical-init',
'javelin-request',
'javelin-history',
'javelin-workflow',
'javelin-mask',
'javelin-behavior-device',
'phabricator-keyboard-shortcut',
),
'fc91ab6c' => array(
'javelin-behavior',
'javelin-dom',
'phortune-credit-card-form',
),
'fe287620' => array(
'javelin-install',
'javelin-dom',
'javelin-view-visitor',
'javelin-util',
),
),
'packages' => array(
'core.pkg.css' => array(
'phabricator-core-css',
'phabricator-zindex-css',
'phui-button-css',
'phabricator-standard-page-view',
'aphront-dialog-view-css',
'phui-form-view-css',
'aphront-panel-view-css',
'aphront-table-view-css',
'aphront-tokenizer-control-css',
'aphront-typeahead-control-css',
'aphront-list-filter-view-css',
'phabricator-remarkup-css',
'syntax-highlighting-css',
'phui-pager-css',
'aphront-tooltip-css',
'phabricator-flag-css',
'phui-info-view-css',
'sprite-menu-css',
'phabricator-main-menu-view',
'phabricator-notification-css',
'phabricator-notification-menu-css',
'lightbox-attachment-css',
'phui-header-view-css',
'phabricator-filetree-view-css',
'phabricator-nav-view-css',
'phabricator-side-menu-view-css',
'phui-crumbs-view-css',
'phui-object-item-list-view-css',
'global-drag-and-drop-css',
'phui-spacing-css',
'phui-form-css',
'phui-icon-view-css',
'phabricator-application-launch-view-css',
'phabricator-action-list-view-css',
'phui-property-list-view-css',
'phui-tag-view-css',
'phui-list-view-css',
'font-fontawesome',
'phui-font-icon-base-css',
'phui-box-css',
'phui-object-box-css',
'phui-timeline-view-css',
'sprite-tokens-css',
'tokens-css',
'phui-status-list-view-css',
'phui-feed-story-css',
'phabricator-feed-css',
'phabricator-dashboard-css',
'aphront-multi-column-view-css',
'conpherence-durable-column-view',
),
'core.pkg.js' => array(
'javelin-util',
'javelin-install',
'javelin-event',
'javelin-stratcom',
'javelin-behavior',
'javelin-resource',
'javelin-request',
'javelin-vector',
'javelin-dom',
'javelin-json',
'javelin-uri',
'javelin-workflow',
'javelin-mask',
'javelin-typeahead',
'javelin-typeahead-normalizer',
'javelin-typeahead-source',
'javelin-typeahead-preloaded-source',
'javelin-typeahead-ondemand-source',
'javelin-tokenizer',
'javelin-history',
'javelin-router',
'javelin-routable',
'javelin-behavior-aphront-basic-tokenizer',
'javelin-behavior-workflow',
'javelin-behavior-aphront-form-disable-on-submit',
'phabricator-keyboard-shortcut-manager',
'phabricator-keyboard-shortcut',
'javelin-behavior-phabricator-keyboard-shortcuts',
'javelin-behavior-refresh-csrf',
'javelin-behavior-phabricator-watch-anchor',
'javelin-behavior-phabricator-autofocus',
'phuix-dropdown-menu',
'phuix-action-list-view',
'phuix-action-view',
'phabricator-phtize',
'javelin-behavior-phabricator-oncopy',
'phabricator-tooltip',
'javelin-behavior-phabricator-tooltips',
'phabricator-prefab',
'javelin-behavior-device',
'javelin-behavior-toggle-class',
'javelin-behavior-lightbox-attachments',
'phabricator-busy',
'javelin-aphlict',
'phabricator-notification',
'javelin-behavior-aphlict-listen',
'javelin-behavior-phabricator-search-typeahead',
'javelin-behavior-aphlict-dropdown',
'javelin-behavior-history-install',
'javelin-behavior-phabricator-gesture',
'javelin-behavior-phabricator-active-nav',
'javelin-behavior-phabricator-nav',
'javelin-behavior-phabricator-remarkup-assist',
'phabricator-textareautils',
'phabricator-file-upload',
'javelin-behavior-global-drag-and-drop',
'javelin-behavior-phabricator-reveal-content',
'phabricator-hovercard',
'javelin-behavior-phabricator-hovercards',
'javelin-color',
'javelin-fx',
'phabricator-draggable-list',
'javelin-behavior-phabricator-transaction-list',
'javelin-behavior-phabricator-show-older-transactions',
'javelin-behavior-phui-dropdown-menu',
'javelin-behavior-doorkeeper-tag',
'phabricator-title',
'javelin-leader',
'javelin-websocket',
'javelin-behavior-dashboard-async-panel',
'javelin-behavior-dashboard-tab-panel',
'javelin-quicksand',
'javelin-behavior-quicksand-blacklist',
'javelin-behavior-high-security-warning',
'javelin-scrollbar',
'javelin-behavior-scrollbar',
'javelin-behavior-durable-column',
'conpherence-thread-manager',
),
'darkconsole.pkg.js' => array(
'javelin-behavior-dark-console',
'javelin-behavior-error-log',
),
'differential.pkg.css' => array(
'differential-core-view-css',
'differential-changeset-view-css',
'differential-revision-history-css',
'differential-revision-list-css',
'differential-table-of-contents-css',
'differential-revision-comment-css',
'differential-revision-add-comment-css',
'phabricator-object-selector-css',
'phabricator-content-source-view-css',
'inline-comment-summary-css',
'phui-inline-comment-view-css',
),
'differential.pkg.js' => array(
'phabricator-drag-and-drop-file-upload',
'phabricator-shaped-request',
'javelin-behavior-differential-feedback-preview',
'javelin-behavior-differential-edit-inline-comments',
'javelin-behavior-differential-populate',
'javelin-behavior-differential-diff-radios',
'javelin-behavior-differential-comment-jump',
'javelin-behavior-differential-add-reviewers-and-ccs',
'javelin-behavior-differential-keyboard-navigation',
'javelin-behavior-aphront-drag-and-drop-textarea',
'javelin-behavior-phabricator-object-selector',
'javelin-behavior-repository-crossreference',
'javelin-behavior-load-blame',
'differential-inline-comment-editor',
'javelin-behavior-differential-dropdown-menus',
'javelin-behavior-differential-toggle-files',
'javelin-behavior-differential-user-select',
'javelin-behavior-aphront-more',
'changeset-view-manager',
),
'diffusion.pkg.css' => array(
'diffusion-icons-css',
),
'diffusion.pkg.js' => array(
'javelin-behavior-diffusion-pull-lastmodified',
'javelin-behavior-diffusion-commit-graph',
'javelin-behavior-audit-preview',
),
'maniphest.pkg.css' => array(
'maniphest-task-summary-css',
),
'maniphest.pkg.js' => array(
'javelin-behavior-maniphest-batch-selector',
'javelin-behavior-maniphest-transaction-controls',
'javelin-behavior-maniphest-transaction-preview',
'javelin-behavior-maniphest-transaction-expand',
'javelin-behavior-maniphest-subpriority-editor',
'javelin-behavior-maniphest-list-editor',
),
),
);
diff --git a/resources/cows/builtin/companion.cow b/resources/cows/builtin/companion.cow
new file mode 100644
index 000000000..e3514cda6
--- /dev/null
+++ b/resources/cows/builtin/companion.cow
@@ -0,0 +1,9 @@
+ $thoughts
+ $thoughts
+ /---\__/---\\
+ | / .... \ ||
+ \ ..--.. //
+ |..($eyes). ||
+ / ..--.. \\
+ | \ .... / ||
+ \---/--\---//
diff --git a/resources/cows/custom/README b/resources/cows/custom/README
new file mode 100644
index 000000000..d0c28b6a5
--- /dev/null
+++ b/resources/cows/custom/README
@@ -0,0 +1,2 @@
+You can add custom ".cow" files here to make them available to the "cowsay"
+interpreter in Remarkup.
diff --git a/resources/figlet/custom/README b/resources/figlet/custom/README
new file mode 100644
index 000000000..c667bb20e
--- /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.
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
index c9db433f4..6fba6e6dc 100644
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -1,7863 +1,7863 @@
<?php
/**
* This file is automatically generated. Use 'arc liberate' to rebuild it.
*
* @generated
* @phutil-library-version 2
*/
phutil_register_library_map(array(
'__library_version__' => 2,
'class' => array(
'AlmanacAddress' => 'applications/almanac/util/AlmanacAddress.php',
'AlmanacBinding' => 'applications/almanac/storage/AlmanacBinding.php',
'AlmanacBindingEditController' => 'applications/almanac/controller/AlmanacBindingEditController.php',
'AlmanacBindingEditor' => 'applications/almanac/editor/AlmanacBindingEditor.php',
'AlmanacBindingPHIDType' => 'applications/almanac/phid/AlmanacBindingPHIDType.php',
'AlmanacBindingQuery' => 'applications/almanac/query/AlmanacBindingQuery.php',
'AlmanacBindingTableView' => 'applications/almanac/view/AlmanacBindingTableView.php',
'AlmanacBindingTransaction' => 'applications/almanac/storage/AlmanacBindingTransaction.php',
'AlmanacBindingTransactionQuery' => 'applications/almanac/query/AlmanacBindingTransactionQuery.php',
'AlmanacBindingViewController' => 'applications/almanac/controller/AlmanacBindingViewController.php',
'AlmanacClusterDatabaseServiceType' => 'applications/almanac/servicetype/AlmanacClusterDatabaseServiceType.php',
'AlmanacClusterRepositoryServiceType' => 'applications/almanac/servicetype/AlmanacClusterRepositoryServiceType.php',
'AlmanacClusterServiceType' => 'applications/almanac/servicetype/AlmanacClusterServiceType.php',
'AlmanacConduitAPIMethod' => 'applications/almanac/conduit/AlmanacConduitAPIMethod.php',
'AlmanacConsoleController' => 'applications/almanac/controller/AlmanacConsoleController.php',
'AlmanacController' => 'applications/almanac/controller/AlmanacController.php',
'AlmanacCoreCustomField' => 'applications/almanac/customfield/AlmanacCoreCustomField.php',
'AlmanacCreateClusterServicesCapability' => 'applications/almanac/capability/AlmanacCreateClusterServicesCapability.php',
'AlmanacCreateDevicesCapability' => 'applications/almanac/capability/AlmanacCreateDevicesCapability.php',
'AlmanacCreateNetworksCapability' => 'applications/almanac/capability/AlmanacCreateNetworksCapability.php',
'AlmanacCreateServicesCapability' => 'applications/almanac/capability/AlmanacCreateServicesCapability.php',
'AlmanacCustomField' => 'applications/almanac/customfield/AlmanacCustomField.php',
'AlmanacCustomServiceType' => 'applications/almanac/servicetype/AlmanacCustomServiceType.php',
'AlmanacDAO' => 'applications/almanac/storage/AlmanacDAO.php',
'AlmanacDevice' => 'applications/almanac/storage/AlmanacDevice.php',
'AlmanacDeviceController' => 'applications/almanac/controller/AlmanacDeviceController.php',
'AlmanacDeviceEditController' => 'applications/almanac/controller/AlmanacDeviceEditController.php',
'AlmanacDeviceEditor' => 'applications/almanac/editor/AlmanacDeviceEditor.php',
'AlmanacDeviceListController' => 'applications/almanac/controller/AlmanacDeviceListController.php',
'AlmanacDevicePHIDType' => 'applications/almanac/phid/AlmanacDevicePHIDType.php',
'AlmanacDeviceQuery' => 'applications/almanac/query/AlmanacDeviceQuery.php',
'AlmanacDeviceSearchEngine' => 'applications/almanac/query/AlmanacDeviceSearchEngine.php',
'AlmanacDeviceTransaction' => 'applications/almanac/storage/AlmanacDeviceTransaction.php',
'AlmanacDeviceTransactionQuery' => 'applications/almanac/query/AlmanacDeviceTransactionQuery.php',
'AlmanacDeviceViewController' => 'applications/almanac/controller/AlmanacDeviceViewController.php',
'AlmanacInterface' => 'applications/almanac/storage/AlmanacInterface.php',
'AlmanacInterfaceDatasource' => 'applications/almanac/typeahead/AlmanacInterfaceDatasource.php',
'AlmanacInterfaceEditController' => 'applications/almanac/controller/AlmanacInterfaceEditController.php',
'AlmanacInterfacePHIDType' => 'applications/almanac/phid/AlmanacInterfacePHIDType.php',
'AlmanacInterfaceQuery' => 'applications/almanac/query/AlmanacInterfaceQuery.php',
'AlmanacInterfaceTableView' => 'applications/almanac/view/AlmanacInterfaceTableView.php',
'AlmanacKeys' => 'applications/almanac/util/AlmanacKeys.php',
'AlmanacManagementLockWorkflow' => 'applications/almanac/management/AlmanacManagementLockWorkflow.php',
'AlmanacManagementRegisterWorkflow' => 'applications/almanac/management/AlmanacManagementRegisterWorkflow.php',
'AlmanacManagementTrustKeyWorkflow' => 'applications/almanac/management/AlmanacManagementTrustKeyWorkflow.php',
'AlmanacManagementUnlockWorkflow' => 'applications/almanac/management/AlmanacManagementUnlockWorkflow.php',
'AlmanacManagementUntrustKeyWorkflow' => 'applications/almanac/management/AlmanacManagementUntrustKeyWorkflow.php',
'AlmanacManagementWorkflow' => 'applications/almanac/management/AlmanacManagementWorkflow.php',
'AlmanacNames' => 'applications/almanac/util/AlmanacNames.php',
'AlmanacNamesTestCase' => 'applications/almanac/util/__tests__/AlmanacNamesTestCase.php',
'AlmanacNetwork' => 'applications/almanac/storage/AlmanacNetwork.php',
'AlmanacNetworkController' => 'applications/almanac/controller/AlmanacNetworkController.php',
'AlmanacNetworkEditController' => 'applications/almanac/controller/AlmanacNetworkEditController.php',
'AlmanacNetworkEditor' => 'applications/almanac/editor/AlmanacNetworkEditor.php',
'AlmanacNetworkListController' => 'applications/almanac/controller/AlmanacNetworkListController.php',
'AlmanacNetworkPHIDType' => 'applications/almanac/phid/AlmanacNetworkPHIDType.php',
'AlmanacNetworkQuery' => 'applications/almanac/query/AlmanacNetworkQuery.php',
'AlmanacNetworkSearchEngine' => 'applications/almanac/query/AlmanacNetworkSearchEngine.php',
'AlmanacNetworkTransaction' => 'applications/almanac/storage/AlmanacNetworkTransaction.php',
'AlmanacNetworkTransactionQuery' => 'applications/almanac/query/AlmanacNetworkTransactionQuery.php',
'AlmanacNetworkViewController' => 'applications/almanac/controller/AlmanacNetworkViewController.php',
'AlmanacProperty' => 'applications/almanac/storage/AlmanacProperty.php',
'AlmanacPropertyController' => 'applications/almanac/controller/AlmanacPropertyController.php',
'AlmanacPropertyDeleteController' => 'applications/almanac/controller/AlmanacPropertyDeleteController.php',
'AlmanacPropertyEditController' => 'applications/almanac/controller/AlmanacPropertyEditController.php',
'AlmanacPropertyInterface' => 'applications/almanac/property/AlmanacPropertyInterface.php',
'AlmanacPropertyQuery' => 'applications/almanac/query/AlmanacPropertyQuery.php',
'AlmanacQuery' => 'applications/almanac/query/AlmanacQuery.php',
'AlmanacQueryDevicesConduitAPIMethod' => 'applications/almanac/conduit/AlmanacQueryDevicesConduitAPIMethod.php',
'AlmanacQueryServicesConduitAPIMethod' => 'applications/almanac/conduit/AlmanacQueryServicesConduitAPIMethod.php',
'AlmanacSchemaSpec' => 'applications/almanac/storage/AlmanacSchemaSpec.php',
'AlmanacService' => 'applications/almanac/storage/AlmanacService.php',
'AlmanacServiceController' => 'applications/almanac/controller/AlmanacServiceController.php',
'AlmanacServiceDatasource' => 'applications/almanac/typeahead/AlmanacServiceDatasource.php',
'AlmanacServiceEditController' => 'applications/almanac/controller/AlmanacServiceEditController.php',
'AlmanacServiceEditor' => 'applications/almanac/editor/AlmanacServiceEditor.php',
'AlmanacServiceListController' => 'applications/almanac/controller/AlmanacServiceListController.php',
'AlmanacServicePHIDType' => 'applications/almanac/phid/AlmanacServicePHIDType.php',
'AlmanacServiceQuery' => 'applications/almanac/query/AlmanacServiceQuery.php',
'AlmanacServiceSearchEngine' => 'applications/almanac/query/AlmanacServiceSearchEngine.php',
'AlmanacServiceTransaction' => 'applications/almanac/storage/AlmanacServiceTransaction.php',
'AlmanacServiceTransactionQuery' => 'applications/almanac/query/AlmanacServiceTransactionQuery.php',
'AlmanacServiceType' => 'applications/almanac/servicetype/AlmanacServiceType.php',
'AlmanacServiceTypeTestCase' => 'applications/almanac/servicetype/__tests__/AlmanacServiceTypeTestCase.php',
'AlmanacServiceViewController' => 'applications/almanac/controller/AlmanacServiceViewController.php',
'AphlictDropdownDataQuery' => 'applications/aphlict/query/AphlictDropdownDataQuery.php',
'Aphront304Response' => 'aphront/response/Aphront304Response.php',
'Aphront400Response' => 'aphront/response/Aphront400Response.php',
'Aphront403Response' => 'aphront/response/Aphront403Response.php',
'Aphront404Response' => 'aphront/response/Aphront404Response.php',
'AphrontAjaxResponse' => 'aphront/response/AphrontAjaxResponse.php',
'AphrontApplicationConfiguration' => 'aphront/configuration/AphrontApplicationConfiguration.php',
'AphrontBarView' => 'view/widget/bars/AphrontBarView.php',
'AphrontCSRFException' => 'aphront/exception/AphrontCSRFException.php',
'AphrontCalendarEventView' => 'applications/calendar/view/AphrontCalendarEventView.php',
'AphrontController' => 'aphront/AphrontController.php',
'AphrontCursorPagerView' => 'view/control/AphrontCursorPagerView.php',
'AphrontDefaultApplicationConfiguration' => 'aphront/configuration/AphrontDefaultApplicationConfiguration.php',
'AphrontDialogResponse' => 'aphront/response/AphrontDialogResponse.php',
'AphrontDialogView' => 'view/AphrontDialogView.php',
'AphrontException' => 'aphront/exception/AphrontException.php',
'AphrontFileResponse' => 'aphront/response/AphrontFileResponse.php',
'AphrontFormCheckboxControl' => 'view/form/control/AphrontFormCheckboxControl.php',
'AphrontFormChooseButtonControl' => 'view/form/control/AphrontFormChooseButtonControl.php',
'AphrontFormControl' => 'view/form/control/AphrontFormControl.php',
'AphrontFormDateControl' => 'view/form/control/AphrontFormDateControl.php',
'AphrontFormDateControlValue' => 'view/form/control/AphrontFormDateControlValue.php',
'AphrontFormDividerControl' => 'view/form/control/AphrontFormDividerControl.php',
'AphrontFormFileControl' => 'view/form/control/AphrontFormFileControl.php',
'AphrontFormMarkupControl' => 'view/form/control/AphrontFormMarkupControl.php',
'AphrontFormPasswordControl' => 'view/form/control/AphrontFormPasswordControl.php',
'AphrontFormPolicyControl' => 'view/form/control/AphrontFormPolicyControl.php',
'AphrontFormRadioButtonControl' => 'view/form/control/AphrontFormRadioButtonControl.php',
'AphrontFormRecaptchaControl' => 'view/form/control/AphrontFormRecaptchaControl.php',
'AphrontFormSelectControl' => 'view/form/control/AphrontFormSelectControl.php',
'AphrontFormStaticControl' => 'view/form/control/AphrontFormStaticControl.php',
'AphrontFormSubmitControl' => 'view/form/control/AphrontFormSubmitControl.php',
'AphrontFormTextAreaControl' => 'view/form/control/AphrontFormTextAreaControl.php',
'AphrontFormTextControl' => 'view/form/control/AphrontFormTextControl.php',
'AphrontFormTextWithSubmitControl' => 'view/form/control/AphrontFormTextWithSubmitControl.php',
'AphrontFormTokenizerControl' => 'view/form/control/AphrontFormTokenizerControl.php',
'AphrontFormTypeaheadControl' => 'view/form/control/AphrontFormTypeaheadControl.php',
'AphrontFormView' => 'view/form/AphrontFormView.php',
'AphrontGlyphBarView' => 'view/widget/bars/AphrontGlyphBarView.php',
'AphrontHTMLResponse' => 'aphront/response/AphrontHTMLResponse.php',
'AphrontHTTPProxyResponse' => 'aphront/response/AphrontHTTPProxyResponse.php',
'AphrontHTTPSink' => 'aphront/sink/AphrontHTTPSink.php',
'AphrontHTTPSinkTestCase' => 'aphront/sink/__tests__/AphrontHTTPSinkTestCase.php',
'AphrontIsolatedDatabaseConnectionTestCase' => 'infrastructure/storage/__tests__/AphrontIsolatedDatabaseConnectionTestCase.php',
'AphrontIsolatedHTTPSink' => 'aphront/sink/AphrontIsolatedHTTPSink.php',
'AphrontJSONResponse' => 'aphront/response/AphrontJSONResponse.php',
'AphrontJavelinView' => 'view/AphrontJavelinView.php',
'AphrontKeyboardShortcutsAvailableView' => 'view/widget/AphrontKeyboardShortcutsAvailableView.php',
'AphrontListFilterView' => 'view/layout/AphrontListFilterView.php',
'AphrontMalformedRequestException' => 'aphront/exception/AphrontMalformedRequestException.php',
'AphrontMoreView' => 'view/layout/AphrontMoreView.php',
'AphrontMultiColumnView' => 'view/layout/AphrontMultiColumnView.php',
'AphrontMySQLDatabaseConnectionTestCase' => 'infrastructure/storage/__tests__/AphrontMySQLDatabaseConnectionTestCase.php',
'AphrontNullView' => 'view/AphrontNullView.php',
'AphrontPHPHTTPSink' => 'aphront/sink/AphrontPHPHTTPSink.php',
'AphrontPageView' => 'view/page/AphrontPageView.php',
'AphrontPlainTextResponse' => 'aphront/response/AphrontPlainTextResponse.php',
'AphrontProgressBarView' => 'view/widget/bars/AphrontProgressBarView.php',
'AphrontProxyResponse' => 'aphront/response/AphrontProxyResponse.php',
'AphrontRedirectResponse' => 'aphront/response/AphrontRedirectResponse.php',
'AphrontRedirectResponseTestCase' => 'aphront/response/__tests__/AphrontRedirectResponseTestCase.php',
'AphrontReloadResponse' => 'aphront/response/AphrontReloadResponse.php',
'AphrontRequest' => 'aphront/AphrontRequest.php',
'AphrontRequestExceptionHandler' => 'aphront/handler/AphrontRequestExceptionHandler.php',
'AphrontRequestTestCase' => 'aphront/__tests__/AphrontRequestTestCase.php',
'AphrontResponse' => 'aphront/response/AphrontResponse.php',
'AphrontResponseProducerInterface' => 'aphront/interface/AphrontResponseProducerInterface.php',
'AphrontRoutingMap' => 'aphront/site/AphrontRoutingMap.php',
'AphrontRoutingResult' => 'aphront/site/AphrontRoutingResult.php',
'AphrontSideNavFilterView' => 'view/layout/AphrontSideNavFilterView.php',
'AphrontSite' => 'aphront/site/AphrontSite.php',
'AphrontStackTraceView' => 'view/widget/AphrontStackTraceView.php',
'AphrontStandaloneHTMLResponse' => 'aphront/response/AphrontStandaloneHTMLResponse.php',
'AphrontTableView' => 'view/control/AphrontTableView.php',
'AphrontTagView' => 'view/AphrontTagView.php',
'AphrontTokenizerTemplateView' => 'view/control/AphrontTokenizerTemplateView.php',
'AphrontTypeaheadTemplateView' => 'view/control/AphrontTypeaheadTemplateView.php',
'AphrontUnhandledExceptionResponse' => 'aphront/response/AphrontUnhandledExceptionResponse.php',
'AphrontView' => 'view/AphrontView.php',
'AphrontWebpageResponse' => 'aphront/response/AphrontWebpageResponse.php',
'ArcanistConduitAPIMethod' => 'applications/arcanist/conduit/ArcanistConduitAPIMethod.php',
'AuditConduitAPIMethod' => 'applications/audit/conduit/AuditConduitAPIMethod.php',
'AuditQueryConduitAPIMethod' => 'applications/audit/conduit/AuditQueryConduitAPIMethod.php',
'AuthManageProvidersCapability' => 'applications/auth/capability/AuthManageProvidersCapability.php',
'CalendarTimeUtil' => 'applications/calendar/util/CalendarTimeUtil.php',
'CalendarTimeUtilTestCase' => 'applications/calendar/__tests__/CalendarTimeUtilTestCase.php',
'CelerityAPI' => 'applications/celerity/CelerityAPI.php',
'CelerityDefaultPostprocessor' => 'applications/celerity/postprocessor/CelerityDefaultPostprocessor.php',
'CelerityHighContrastPostprocessor' => 'applications/celerity/postprocessor/CelerityHighContrastPostprocessor.php',
'CelerityLargeFontPostprocessor' => 'applications/celerity/postprocessor/CelerityLargeFontPostprocessor.php',
'CelerityManagementMapWorkflow' => 'applications/celerity/management/CelerityManagementMapWorkflow.php',
'CelerityManagementWorkflow' => 'applications/celerity/management/CelerityManagementWorkflow.php',
'CelerityPhabricatorResourceController' => 'applications/celerity/controller/CelerityPhabricatorResourceController.php',
'CelerityPhabricatorResources' => 'applications/celerity/resources/CelerityPhabricatorResources.php',
'CelerityPhysicalResources' => 'applications/celerity/resources/CelerityPhysicalResources.php',
'CelerityPhysicalResourcesTestCase' => 'applications/celerity/resources/__tests__/CelerityPhysicalResourcesTestCase.php',
'CelerityPostprocessor' => 'applications/celerity/postprocessor/CelerityPostprocessor.php',
'CelerityPostprocessorTestCase' => 'applications/celerity/__tests__/CelerityPostprocessorTestCase.php',
'CelerityResourceController' => 'applications/celerity/controller/CelerityResourceController.php',
'CelerityResourceGraph' => 'applications/celerity/CelerityResourceGraph.php',
'CelerityResourceMap' => 'applications/celerity/CelerityResourceMap.php',
'CelerityResourceMapGenerator' => 'applications/celerity/CelerityResourceMapGenerator.php',
'CelerityResourceTransformer' => 'applications/celerity/CelerityResourceTransformer.php',
'CelerityResourceTransformerTestCase' => 'applications/celerity/__tests__/CelerityResourceTransformerTestCase.php',
'CelerityResources' => 'applications/celerity/resources/CelerityResources.php',
'CelerityResourcesOnDisk' => 'applications/celerity/resources/CelerityResourcesOnDisk.php',
'CeleritySpriteGenerator' => 'applications/celerity/CeleritySpriteGenerator.php',
'CelerityStaticResourceResponse' => 'applications/celerity/CelerityStaticResourceResponse.php',
'ChatLogConduitAPIMethod' => 'applications/chatlog/conduit/ChatLogConduitAPIMethod.php',
'ChatLogQueryConduitAPIMethod' => 'applications/chatlog/conduit/ChatLogQueryConduitAPIMethod.php',
'ChatLogRecordConduitAPIMethod' => 'applications/chatlog/conduit/ChatLogRecordConduitAPIMethod.php',
'ConduitAPIMethod' => 'applications/conduit/method/ConduitAPIMethod.php',
'ConduitAPIMethodTestCase' => 'applications/conduit/method/__tests__/ConduitAPIMethodTestCase.php',
'ConduitAPIRequest' => 'applications/conduit/protocol/ConduitAPIRequest.php',
'ConduitAPIResponse' => 'applications/conduit/protocol/ConduitAPIResponse.php',
'ConduitApplicationNotInstalledException' => 'applications/conduit/protocol/exception/ConduitApplicationNotInstalledException.php',
'ConduitCall' => 'applications/conduit/call/ConduitCall.php',
'ConduitCallTestCase' => 'applications/conduit/call/__tests__/ConduitCallTestCase.php',
'ConduitConnectConduitAPIMethod' => 'applications/conduit/method/ConduitConnectConduitAPIMethod.php',
'ConduitConnectionGarbageCollector' => 'applications/conduit/garbagecollector/ConduitConnectionGarbageCollector.php',
'ConduitDeprecatedCallSetupCheck' => 'applications/conduit/check/ConduitDeprecatedCallSetupCheck.php',
'ConduitException' => 'applications/conduit/protocol/exception/ConduitException.php',
'ConduitGetCapabilitiesConduitAPIMethod' => 'applications/conduit/method/ConduitGetCapabilitiesConduitAPIMethod.php',
'ConduitGetCertificateConduitAPIMethod' => 'applications/conduit/method/ConduitGetCertificateConduitAPIMethod.php',
'ConduitLogGarbageCollector' => 'applications/conduit/garbagecollector/ConduitLogGarbageCollector.php',
'ConduitMethodDoesNotExistException' => 'applications/conduit/protocol/exception/ConduitMethodDoesNotExistException.php',
'ConduitMethodNotFoundException' => 'applications/conduit/protocol/exception/ConduitMethodNotFoundException.php',
'ConduitPingConduitAPIMethod' => 'applications/conduit/method/ConduitPingConduitAPIMethod.php',
'ConduitQueryConduitAPIMethod' => 'applications/conduit/method/ConduitQueryConduitAPIMethod.php',
'ConduitSSHWorkflow' => 'applications/conduit/ssh/ConduitSSHWorkflow.php',
'ConduitTokenGarbageCollector' => 'applications/conduit/garbagecollector/ConduitTokenGarbageCollector.php',
'ConpherenceColumnViewController' => 'applications/conpherence/controller/ConpherenceColumnViewController.php',
'ConpherenceConduitAPIMethod' => 'applications/conpherence/conduit/ConpherenceConduitAPIMethod.php',
'ConpherenceConfigOptions' => 'applications/conpherence/config/ConpherenceConfigOptions.php',
'ConpherenceConstants' => 'applications/conpherence/constants/ConpherenceConstants.php',
'ConpherenceController' => 'applications/conpherence/controller/ConpherenceController.php',
'ConpherenceCreateThreadConduitAPIMethod' => 'applications/conpherence/conduit/ConpherenceCreateThreadConduitAPIMethod.php',
'ConpherenceCreateThreadMailReceiver' => 'applications/conpherence/mail/ConpherenceCreateThreadMailReceiver.php',
'ConpherenceDAO' => 'applications/conpherence/storage/ConpherenceDAO.php',
'ConpherenceDurableColumnView' => 'applications/conpherence/view/ConpherenceDurableColumnView.php',
'ConpherenceEditor' => 'applications/conpherence/editor/ConpherenceEditor.php',
'ConpherenceFormDragAndDropUploadControl' => 'applications/conpherence/view/ConpherenceFormDragAndDropUploadControl.php',
'ConpherenceFulltextQuery' => 'applications/conpherence/query/ConpherenceFulltextQuery.php',
'ConpherenceHovercardEventListener' => 'applications/conpherence/events/ConpherenceHovercardEventListener.php',
'ConpherenceImageData' => 'applications/conpherence/constants/ConpherenceImageData.php',
'ConpherenceIndex' => 'applications/conpherence/storage/ConpherenceIndex.php',
'ConpherenceLayoutView' => 'applications/conpherence/view/ConpherenceLayoutView.php',
'ConpherenceListController' => 'applications/conpherence/controller/ConpherenceListController.php',
'ConpherenceMenuItemView' => 'applications/conpherence/view/ConpherenceMenuItemView.php',
'ConpherenceNewRoomController' => 'applications/conpherence/controller/ConpherenceNewRoomController.php',
'ConpherenceNotificationPanelController' => 'applications/conpherence/controller/ConpherenceNotificationPanelController.php',
'ConpherenceParticipant' => 'applications/conpherence/storage/ConpherenceParticipant.php',
'ConpherenceParticipantCountQuery' => 'applications/conpherence/query/ConpherenceParticipantCountQuery.php',
'ConpherenceParticipantQuery' => 'applications/conpherence/query/ConpherenceParticipantQuery.php',
'ConpherenceParticipationStatus' => 'applications/conpherence/constants/ConpherenceParticipationStatus.php',
'ConpherencePeopleWidgetView' => 'applications/conpherence/view/ConpherencePeopleWidgetView.php',
'ConpherencePicCropControl' => 'applications/conpherence/view/ConpherencePicCropControl.php',
'ConpherenceQueryThreadConduitAPIMethod' => 'applications/conpherence/conduit/ConpherenceQueryThreadConduitAPIMethod.php',
'ConpherenceQueryTransactionConduitAPIMethod' => 'applications/conpherence/conduit/ConpherenceQueryTransactionConduitAPIMethod.php',
'ConpherenceReplyHandler' => 'applications/conpherence/mail/ConpherenceReplyHandler.php',
'ConpherenceRoomListController' => 'applications/conpherence/controller/ConpherenceRoomListController.php',
'ConpherenceRoomTestCase' => 'applications/conpherence/__tests__/ConpherenceRoomTestCase.php',
'ConpherenceSchemaSpec' => 'applications/conpherence/storage/ConpherenceSchemaSpec.php',
'ConpherenceSettings' => 'applications/conpherence/constants/ConpherenceSettings.php',
'ConpherenceTestCase' => 'applications/conpherence/__tests__/ConpherenceTestCase.php',
'ConpherenceThread' => 'applications/conpherence/storage/ConpherenceThread.php',
'ConpherenceThreadIndexer' => 'applications/conpherence/search/ConpherenceThreadIndexer.php',
'ConpherenceThreadListView' => 'applications/conpherence/view/ConpherenceThreadListView.php',
'ConpherenceThreadMailReceiver' => 'applications/conpherence/mail/ConpherenceThreadMailReceiver.php',
'ConpherenceThreadMembersPolicyRule' => 'applications/conpherence/policyrule/ConpherenceThreadMembersPolicyRule.php',
'ConpherenceThreadQuery' => 'applications/conpherence/query/ConpherenceThreadQuery.php',
'ConpherenceThreadRemarkupRule' => 'applications/conpherence/remarkup/ConpherenceThreadRemarkupRule.php',
'ConpherenceThreadSearchEngine' => 'applications/conpherence/query/ConpherenceThreadSearchEngine.php',
'ConpherenceTransaction' => 'applications/conpherence/storage/ConpherenceTransaction.php',
'ConpherenceTransactionComment' => 'applications/conpherence/storage/ConpherenceTransactionComment.php',
'ConpherenceTransactionQuery' => 'applications/conpherence/query/ConpherenceTransactionQuery.php',
'ConpherenceTransactionRenderer' => 'applications/conpherence/ConpherenceTransactionRenderer.php',
'ConpherenceTransactionView' => 'applications/conpherence/view/ConpherenceTransactionView.php',
'ConpherenceUpdateActions' => 'applications/conpherence/constants/ConpherenceUpdateActions.php',
'ConpherenceUpdateController' => 'applications/conpherence/controller/ConpherenceUpdateController.php',
'ConpherenceUpdateThreadConduitAPIMethod' => 'applications/conpherence/conduit/ConpherenceUpdateThreadConduitAPIMethod.php',
'ConpherenceViewController' => 'applications/conpherence/controller/ConpherenceViewController.php',
'ConpherenceWidgetConfigConstants' => 'applications/conpherence/constants/ConpherenceWidgetConfigConstants.php',
'ConpherenceWidgetController' => 'applications/conpherence/controller/ConpherenceWidgetController.php',
'ConpherenceWidgetView' => 'applications/conpherence/view/ConpherenceWidgetView.php',
'DarkConsoleController' => 'applications/console/controller/DarkConsoleController.php',
'DarkConsoleCore' => 'applications/console/core/DarkConsoleCore.php',
'DarkConsoleDataController' => 'applications/console/controller/DarkConsoleDataController.php',
'DarkConsoleErrorLogPlugin' => 'applications/console/plugin/DarkConsoleErrorLogPlugin.php',
'DarkConsoleErrorLogPluginAPI' => 'applications/console/plugin/errorlog/DarkConsoleErrorLogPluginAPI.php',
'DarkConsoleEventPlugin' => 'applications/console/plugin/DarkConsoleEventPlugin.php',
'DarkConsoleEventPluginAPI' => 'applications/console/plugin/event/DarkConsoleEventPluginAPI.php',
'DarkConsolePlugin' => 'applications/console/plugin/DarkConsolePlugin.php',
'DarkConsoleRequestPlugin' => 'applications/console/plugin/DarkConsoleRequestPlugin.php',
'DarkConsoleServicesPlugin' => 'applications/console/plugin/DarkConsoleServicesPlugin.php',
'DarkConsoleStartupPlugin' => 'applications/console/plugin/DarkConsoleStartupPlugin.php',
'DarkConsoleXHProfPlugin' => 'applications/console/plugin/DarkConsoleXHProfPlugin.php',
'DarkConsoleXHProfPluginAPI' => 'applications/console/plugin/xhprof/DarkConsoleXHProfPluginAPI.php',
'DatabaseConfigurationProvider' => 'infrastructure/storage/configuration/DatabaseConfigurationProvider.php',
'DefaultDatabaseConfigurationProvider' => 'infrastructure/storage/configuration/DefaultDatabaseConfigurationProvider.php',
'DifferentialAction' => 'applications/differential/constants/DifferentialAction.php',
'DifferentialActionEmailCommand' => 'applications/differential/command/DifferentialActionEmailCommand.php',
'DifferentialActionMenuEventListener' => 'applications/differential/event/DifferentialActionMenuEventListener.php',
'DifferentialAddCommentView' => 'applications/differential/view/DifferentialAddCommentView.php',
'DifferentialAdjustmentMapTestCase' => 'applications/differential/storage/__tests__/DifferentialAdjustmentMapTestCase.php',
'DifferentialAffectedPath' => 'applications/differential/storage/DifferentialAffectedPath.php',
'DifferentialApplyPatchField' => 'applications/differential/customfield/DifferentialApplyPatchField.php',
'DifferentialAsanaRepresentationField' => 'applications/differential/customfield/DifferentialAsanaRepresentationField.php',
'DifferentialAuditorsField' => 'applications/differential/customfield/DifferentialAuditorsField.php',
'DifferentialAuthorField' => 'applications/differential/customfield/DifferentialAuthorField.php',
'DifferentialBlameRevisionField' => 'applications/differential/customfield/DifferentialBlameRevisionField.php',
'DifferentialBlockHeraldAction' => 'applications/differential/herald/DifferentialBlockHeraldAction.php',
'DifferentialBranchField' => 'applications/differential/customfield/DifferentialBranchField.php',
'DifferentialChangeHeraldFieldGroup' => 'applications/differential/herald/DifferentialChangeHeraldFieldGroup.php',
'DifferentialChangeType' => 'applications/differential/constants/DifferentialChangeType.php',
'DifferentialChangesSinceLastUpdateField' => 'applications/differential/customfield/DifferentialChangesSinceLastUpdateField.php',
'DifferentialChangeset' => 'applications/differential/storage/DifferentialChangeset.php',
'DifferentialChangesetDetailView' => 'applications/differential/view/DifferentialChangesetDetailView.php',
'DifferentialChangesetFileTreeSideNavBuilder' => 'applications/differential/view/DifferentialChangesetFileTreeSideNavBuilder.php',
'DifferentialChangesetHTMLRenderer' => 'applications/differential/render/DifferentialChangesetHTMLRenderer.php',
'DifferentialChangesetListView' => 'applications/differential/view/DifferentialChangesetListView.php',
'DifferentialChangesetOneUpRenderer' => 'applications/differential/render/DifferentialChangesetOneUpRenderer.php',
'DifferentialChangesetOneUpTestRenderer' => 'applications/differential/render/DifferentialChangesetOneUpTestRenderer.php',
'DifferentialChangesetParser' => 'applications/differential/parser/DifferentialChangesetParser.php',
'DifferentialChangesetParserTestCase' => 'applications/differential/parser/__tests__/DifferentialChangesetParserTestCase.php',
'DifferentialChangesetQuery' => 'applications/differential/query/DifferentialChangesetQuery.php',
'DifferentialChangesetRenderer' => 'applications/differential/render/DifferentialChangesetRenderer.php',
'DifferentialChangesetTestRenderer' => 'applications/differential/render/DifferentialChangesetTestRenderer.php',
'DifferentialChangesetTwoUpRenderer' => 'applications/differential/render/DifferentialChangesetTwoUpRenderer.php',
'DifferentialChangesetTwoUpTestRenderer' => 'applications/differential/render/DifferentialChangesetTwoUpTestRenderer.php',
'DifferentialChangesetViewController' => 'applications/differential/controller/DifferentialChangesetViewController.php',
'DifferentialCloseConduitAPIMethod' => 'applications/differential/conduit/DifferentialCloseConduitAPIMethod.php',
'DifferentialCommentPreviewController' => 'applications/differential/controller/DifferentialCommentPreviewController.php',
'DifferentialCommentSaveController' => 'applications/differential/controller/DifferentialCommentSaveController.php',
'DifferentialCommitMessageParser' => 'applications/differential/parser/DifferentialCommitMessageParser.php',
'DifferentialCommitMessageParserTestCase' => 'applications/differential/parser/__tests__/DifferentialCommitMessageParserTestCase.php',
'DifferentialCommitsField' => 'applications/differential/customfield/DifferentialCommitsField.php',
'DifferentialConduitAPIMethod' => 'applications/differential/conduit/DifferentialConduitAPIMethod.php',
'DifferentialConflictsField' => 'applications/differential/customfield/DifferentialConflictsField.php',
'DifferentialController' => 'applications/differential/controller/DifferentialController.php',
'DifferentialCoreCustomField' => 'applications/differential/customfield/DifferentialCoreCustomField.php',
'DifferentialCreateCommentConduitAPIMethod' => 'applications/differential/conduit/DifferentialCreateCommentConduitAPIMethod.php',
'DifferentialCreateDiffConduitAPIMethod' => 'applications/differential/conduit/DifferentialCreateDiffConduitAPIMethod.php',
'DifferentialCreateInlineConduitAPIMethod' => 'applications/differential/conduit/DifferentialCreateInlineConduitAPIMethod.php',
'DifferentialCreateMailReceiver' => 'applications/differential/mail/DifferentialCreateMailReceiver.php',
'DifferentialCreateRawDiffConduitAPIMethod' => 'applications/differential/conduit/DifferentialCreateRawDiffConduitAPIMethod.php',
'DifferentialCreateRevisionConduitAPIMethod' => 'applications/differential/conduit/DifferentialCreateRevisionConduitAPIMethod.php',
'DifferentialCustomField' => 'applications/differential/customfield/DifferentialCustomField.php',
'DifferentialCustomFieldDependsOnParser' => 'applications/differential/parser/DifferentialCustomFieldDependsOnParser.php',
'DifferentialCustomFieldDependsOnParserTestCase' => 'applications/differential/parser/__tests__/DifferentialCustomFieldDependsOnParserTestCase.php',
'DifferentialCustomFieldNumericIndex' => 'applications/differential/storage/DifferentialCustomFieldNumericIndex.php',
'DifferentialCustomFieldRevertsParser' => 'applications/differential/parser/DifferentialCustomFieldRevertsParser.php',
'DifferentialCustomFieldRevertsParserTestCase' => 'applications/differential/parser/__tests__/DifferentialCustomFieldRevertsParserTestCase.php',
'DifferentialCustomFieldStorage' => 'applications/differential/storage/DifferentialCustomFieldStorage.php',
'DifferentialCustomFieldStringIndex' => 'applications/differential/storage/DifferentialCustomFieldStringIndex.php',
'DifferentialDAO' => 'applications/differential/storage/DifferentialDAO.php',
'DifferentialDefaultViewCapability' => 'applications/differential/capability/DifferentialDefaultViewCapability.php',
'DifferentialDependenciesField' => 'applications/differential/customfield/DifferentialDependenciesField.php',
'DifferentialDependsOnField' => 'applications/differential/customfield/DifferentialDependsOnField.php',
'DifferentialDiff' => 'applications/differential/storage/DifferentialDiff.php',
'DifferentialDiffAffectedFilesHeraldField' => 'applications/differential/herald/DifferentialDiffAffectedFilesHeraldField.php',
'DifferentialDiffAuthorHeraldField' => 'applications/differential/herald/DifferentialDiffAuthorHeraldField.php',
'DifferentialDiffAuthorProjectsHeraldField' => 'applications/differential/herald/DifferentialDiffAuthorProjectsHeraldField.php',
'DifferentialDiffContentAddedHeraldField' => 'applications/differential/herald/DifferentialDiffContentAddedHeraldField.php',
'DifferentialDiffContentHeraldField' => 'applications/differential/herald/DifferentialDiffContentHeraldField.php',
'DifferentialDiffContentRemovedHeraldField' => 'applications/differential/herald/DifferentialDiffContentRemovedHeraldField.php',
'DifferentialDiffCreateController' => 'applications/differential/controller/DifferentialDiffCreateController.php',
'DifferentialDiffEditor' => 'applications/differential/editor/DifferentialDiffEditor.php',
'DifferentialDiffHeraldField' => 'applications/differential/herald/DifferentialDiffHeraldField.php',
'DifferentialDiffHeraldFieldGroup' => 'applications/differential/herald/DifferentialDiffHeraldFieldGroup.php',
'DifferentialDiffInlineCommentQuery' => 'applications/differential/query/DifferentialDiffInlineCommentQuery.php',
'DifferentialDiffPHIDType' => 'applications/differential/phid/DifferentialDiffPHIDType.php',
'DifferentialDiffProperty' => 'applications/differential/storage/DifferentialDiffProperty.php',
'DifferentialDiffQuery' => 'applications/differential/query/DifferentialDiffQuery.php',
'DifferentialDiffRepositoryHeraldField' => 'applications/differential/herald/DifferentialDiffRepositoryHeraldField.php',
'DifferentialDiffRepositoryProjectsHeraldField' => 'applications/differential/herald/DifferentialDiffRepositoryProjectsHeraldField.php',
'DifferentialDiffTestCase' => 'applications/differential/storage/__tests__/DifferentialDiffTestCase.php',
'DifferentialDiffTransaction' => 'applications/differential/storage/DifferentialDiffTransaction.php',
'DifferentialDiffTransactionQuery' => 'applications/differential/query/DifferentialDiffTransactionQuery.php',
'DifferentialDiffViewController' => 'applications/differential/controller/DifferentialDiffViewController.php',
'DifferentialDoorkeeperRevisionFeedStoryPublisher' => 'applications/differential/doorkeeper/DifferentialDoorkeeperRevisionFeedStoryPublisher.php',
'DifferentialDraft' => 'applications/differential/storage/DifferentialDraft.php',
'DifferentialEditPolicyField' => 'applications/differential/customfield/DifferentialEditPolicyField.php',
'DifferentialFieldParseException' => 'applications/differential/exception/DifferentialFieldParseException.php',
'DifferentialFieldValidationException' => 'applications/differential/exception/DifferentialFieldValidationException.php',
'DifferentialFindConduitAPIMethod' => 'applications/differential/conduit/DifferentialFindConduitAPIMethod.php',
'DifferentialGetAllDiffsConduitAPIMethod' => 'applications/differential/conduit/DifferentialGetAllDiffsConduitAPIMethod.php',
'DifferentialGetCommitMessageConduitAPIMethod' => 'applications/differential/conduit/DifferentialGetCommitMessageConduitAPIMethod.php',
'DifferentialGetCommitPathsConduitAPIMethod' => 'applications/differential/conduit/DifferentialGetCommitPathsConduitAPIMethod.php',
'DifferentialGetDiffConduitAPIMethod' => 'applications/differential/conduit/DifferentialGetDiffConduitAPIMethod.php',
'DifferentialGetRawDiffConduitAPIMethod' => 'applications/differential/conduit/DifferentialGetRawDiffConduitAPIMethod.php',
'DifferentialGetRevisionCommentsConduitAPIMethod' => 'applications/differential/conduit/DifferentialGetRevisionCommentsConduitAPIMethod.php',
'DifferentialGetRevisionConduitAPIMethod' => 'applications/differential/conduit/DifferentialGetRevisionConduitAPIMethod.php',
'DifferentialGetWorkingCopy' => 'applications/differential/DifferentialGetWorkingCopy.php',
'DifferentialGitHubLandingStrategy' => 'applications/differential/landing/DifferentialGitHubLandingStrategy.php',
'DifferentialGitSVNIDField' => 'applications/differential/customfield/DifferentialGitSVNIDField.php',
'DifferentialHarbormasterField' => 'applications/differential/customfield/DifferentialHarbormasterField.php',
'DifferentialHiddenComment' => 'applications/differential/storage/DifferentialHiddenComment.php',
'DifferentialHostField' => 'applications/differential/customfield/DifferentialHostField.php',
'DifferentialHostedGitLandingStrategy' => 'applications/differential/landing/DifferentialHostedGitLandingStrategy.php',
'DifferentialHostedMercurialLandingStrategy' => 'applications/differential/landing/DifferentialHostedMercurialLandingStrategy.php',
'DifferentialHovercardEventListener' => 'applications/differential/event/DifferentialHovercardEventListener.php',
'DifferentialHunk' => 'applications/differential/storage/DifferentialHunk.php',
'DifferentialHunkParser' => 'applications/differential/parser/DifferentialHunkParser.php',
'DifferentialHunkParserTestCase' => 'applications/differential/parser/__tests__/DifferentialHunkParserTestCase.php',
'DifferentialHunkQuery' => 'applications/differential/query/DifferentialHunkQuery.php',
'DifferentialHunkTestCase' => 'applications/differential/storage/__tests__/DifferentialHunkTestCase.php',
'DifferentialInlineComment' => 'applications/differential/storage/DifferentialInlineComment.php',
'DifferentialInlineCommentEditController' => 'applications/differential/controller/DifferentialInlineCommentEditController.php',
'DifferentialInlineCommentPreviewController' => 'applications/differential/controller/DifferentialInlineCommentPreviewController.php',
'DifferentialInlineCommentQuery' => 'applications/differential/query/DifferentialInlineCommentQuery.php',
'DifferentialJIRAIssuesField' => 'applications/differential/customfield/DifferentialJIRAIssuesField.php',
'DifferentialLandingActionMenuEventListener' => 'applications/differential/landing/DifferentialLandingActionMenuEventListener.php',
'DifferentialLandingStrategy' => 'applications/differential/landing/DifferentialLandingStrategy.php',
'DifferentialLegacyHunk' => 'applications/differential/storage/DifferentialLegacyHunk.php',
'DifferentialLineAdjustmentMap' => 'applications/differential/parser/DifferentialLineAdjustmentMap.php',
'DifferentialLintField' => 'applications/differential/customfield/DifferentialLintField.php',
'DifferentialLintStatus' => 'applications/differential/constants/DifferentialLintStatus.php',
'DifferentialLocalCommitsView' => 'applications/differential/view/DifferentialLocalCommitsView.php',
'DifferentialManiphestTasksField' => 'applications/differential/customfield/DifferentialManiphestTasksField.php',
'DifferentialModernHunk' => 'applications/differential/storage/DifferentialModernHunk.php',
'DifferentialParseCacheGarbageCollector' => 'applications/differential/garbagecollector/DifferentialParseCacheGarbageCollector.php',
'DifferentialParseCommitMessageConduitAPIMethod' => 'applications/differential/conduit/DifferentialParseCommitMessageConduitAPIMethod.php',
'DifferentialParseRenderTestCase' => 'applications/differential/__tests__/DifferentialParseRenderTestCase.php',
'DifferentialPathField' => 'applications/differential/customfield/DifferentialPathField.php',
'DifferentialPrimaryPaneView' => 'applications/differential/view/DifferentialPrimaryPaneView.php',
'DifferentialProjectReviewersField' => 'applications/differential/customfield/DifferentialProjectReviewersField.php',
'DifferentialProjectsField' => 'applications/differential/customfield/DifferentialProjectsField.php',
'DifferentialQueryConduitAPIMethod' => 'applications/differential/conduit/DifferentialQueryConduitAPIMethod.php',
'DifferentialQueryDiffsConduitAPIMethod' => 'applications/differential/conduit/DifferentialQueryDiffsConduitAPIMethod.php',
'DifferentialRawDiffRenderer' => 'applications/differential/render/DifferentialRawDiffRenderer.php',
'DifferentialReleephRequestFieldSpecification' => 'applications/releeph/differential/DifferentialReleephRequestFieldSpecification.php',
'DifferentialRemarkupRule' => 'applications/differential/remarkup/DifferentialRemarkupRule.php',
'DifferentialReplyHandler' => 'applications/differential/mail/DifferentialReplyHandler.php',
'DifferentialRepositoryField' => 'applications/differential/customfield/DifferentialRepositoryField.php',
'DifferentialRepositoryLookup' => 'applications/differential/query/DifferentialRepositoryLookup.php',
'DifferentialRequiredSignaturesField' => 'applications/differential/customfield/DifferentialRequiredSignaturesField.php',
'DifferentialRevertPlanField' => 'applications/differential/customfield/DifferentialRevertPlanField.php',
'DifferentialReviewedByField' => 'applications/differential/customfield/DifferentialReviewedByField.php',
'DifferentialReviewer' => 'applications/differential/storage/DifferentialReviewer.php',
'DifferentialReviewerForRevisionEdgeType' => 'applications/differential/edge/DifferentialReviewerForRevisionEdgeType.php',
'DifferentialReviewerStatus' => 'applications/differential/constants/DifferentialReviewerStatus.php',
'DifferentialReviewersAddBlockingReviewersHeraldAction' => 'applications/differential/herald/DifferentialReviewersAddBlockingReviewersHeraldAction.php',
'DifferentialReviewersAddBlockingSelfHeraldAction' => 'applications/differential/herald/DifferentialReviewersAddBlockingSelfHeraldAction.php',
'DifferentialReviewersAddReviewersHeraldAction' => 'applications/differential/herald/DifferentialReviewersAddReviewersHeraldAction.php',
'DifferentialReviewersAddSelfHeraldAction' => 'applications/differential/herald/DifferentialReviewersAddSelfHeraldAction.php',
'DifferentialReviewersField' => 'applications/differential/customfield/DifferentialReviewersField.php',
'DifferentialReviewersHeraldAction' => 'applications/differential/herald/DifferentialReviewersHeraldAction.php',
'DifferentialReviewersView' => 'applications/differential/view/DifferentialReviewersView.php',
'DifferentialRevision' => 'applications/differential/storage/DifferentialRevision.php',
'DifferentialRevisionAffectedFilesHeraldField' => 'applications/differential/herald/DifferentialRevisionAffectedFilesHeraldField.php',
'DifferentialRevisionAuthorHeraldField' => 'applications/differential/herald/DifferentialRevisionAuthorHeraldField.php',
'DifferentialRevisionAuthorProjectsHeraldField' => 'applications/differential/herald/DifferentialRevisionAuthorProjectsHeraldField.php',
'DifferentialRevisionCloseDetailsController' => 'applications/differential/controller/DifferentialRevisionCloseDetailsController.php',
'DifferentialRevisionContentAddedHeraldField' => 'applications/differential/herald/DifferentialRevisionContentAddedHeraldField.php',
'DifferentialRevisionContentHeraldField' => 'applications/differential/herald/DifferentialRevisionContentHeraldField.php',
'DifferentialRevisionContentRemovedHeraldField' => 'applications/differential/herald/DifferentialRevisionContentRemovedHeraldField.php',
'DifferentialRevisionControlSystem' => 'applications/differential/constants/DifferentialRevisionControlSystem.php',
'DifferentialRevisionDependedOnByRevisionEdgeType' => 'applications/differential/edge/DifferentialRevisionDependedOnByRevisionEdgeType.php',
'DifferentialRevisionDependsOnRevisionEdgeType' => 'applications/differential/edge/DifferentialRevisionDependsOnRevisionEdgeType.php',
'DifferentialRevisionDetailView' => 'applications/differential/view/DifferentialRevisionDetailView.php',
'DifferentialRevisionEditController' => 'applications/differential/controller/DifferentialRevisionEditController.php',
'DifferentialRevisionHasCommitEdgeType' => 'applications/differential/edge/DifferentialRevisionHasCommitEdgeType.php',
'DifferentialRevisionHasReviewerEdgeType' => 'applications/differential/edge/DifferentialRevisionHasReviewerEdgeType.php',
'DifferentialRevisionHasTaskEdgeType' => 'applications/differential/edge/DifferentialRevisionHasTaskEdgeType.php',
'DifferentialRevisionHeraldField' => 'applications/differential/herald/DifferentialRevisionHeraldField.php',
'DifferentialRevisionHeraldFieldGroup' => 'applications/differential/herald/DifferentialRevisionHeraldFieldGroup.php',
'DifferentialRevisionIDField' => 'applications/differential/customfield/DifferentialRevisionIDField.php',
'DifferentialRevisionLandController' => 'applications/differential/controller/DifferentialRevisionLandController.php',
'DifferentialRevisionListController' => 'applications/differential/controller/DifferentialRevisionListController.php',
'DifferentialRevisionListView' => 'applications/differential/view/DifferentialRevisionListView.php',
'DifferentialRevisionMailReceiver' => 'applications/differential/mail/DifferentialRevisionMailReceiver.php',
'DifferentialRevisionPHIDType' => 'applications/differential/phid/DifferentialRevisionPHIDType.php',
'DifferentialRevisionPackageHeraldField' => 'applications/differential/herald/DifferentialRevisionPackageHeraldField.php',
'DifferentialRevisionPackageOwnerHeraldField' => 'applications/differential/herald/DifferentialRevisionPackageOwnerHeraldField.php',
'DifferentialRevisionQuery' => 'applications/differential/query/DifferentialRevisionQuery.php',
'DifferentialRevisionRepositoryHeraldField' => 'applications/differential/herald/DifferentialRevisionRepositoryHeraldField.php',
'DifferentialRevisionRepositoryProjectsHeraldField' => 'applications/differential/herald/DifferentialRevisionRepositoryProjectsHeraldField.php',
'DifferentialRevisionReviewersHeraldField' => 'applications/differential/herald/DifferentialRevisionReviewersHeraldField.php',
'DifferentialRevisionSearchEngine' => 'applications/differential/query/DifferentialRevisionSearchEngine.php',
'DifferentialRevisionStatus' => 'applications/differential/constants/DifferentialRevisionStatus.php',
'DifferentialRevisionSummaryHeraldField' => 'applications/differential/herald/DifferentialRevisionSummaryHeraldField.php',
'DifferentialRevisionTitleHeraldField' => 'applications/differential/herald/DifferentialRevisionTitleHeraldField.php',
'DifferentialRevisionUpdateHistoryView' => 'applications/differential/view/DifferentialRevisionUpdateHistoryView.php',
'DifferentialRevisionViewController' => 'applications/differential/controller/DifferentialRevisionViewController.php',
'DifferentialSchemaSpec' => 'applications/differential/storage/DifferentialSchemaSpec.php',
'DifferentialSearchIndexer' => 'applications/differential/search/DifferentialSearchIndexer.php',
'DifferentialSetDiffPropertyConduitAPIMethod' => 'applications/differential/conduit/DifferentialSetDiffPropertyConduitAPIMethod.php',
'DifferentialStoredCustomField' => 'applications/differential/customfield/DifferentialStoredCustomField.php',
'DifferentialSubscribersField' => 'applications/differential/customfield/DifferentialSubscribersField.php',
'DifferentialSummaryField' => 'applications/differential/customfield/DifferentialSummaryField.php',
'DifferentialTestPlanField' => 'applications/differential/customfield/DifferentialTestPlanField.php',
'DifferentialTitleField' => 'applications/differential/customfield/DifferentialTitleField.php',
'DifferentialTransaction' => 'applications/differential/storage/DifferentialTransaction.php',
'DifferentialTransactionComment' => 'applications/differential/storage/DifferentialTransactionComment.php',
'DifferentialTransactionEditor' => 'applications/differential/editor/DifferentialTransactionEditor.php',
'DifferentialTransactionQuery' => 'applications/differential/query/DifferentialTransactionQuery.php',
'DifferentialTransactionView' => 'applications/differential/view/DifferentialTransactionView.php',
'DifferentialUnitField' => 'applications/differential/customfield/DifferentialUnitField.php',
'DifferentialUnitStatus' => 'applications/differential/constants/DifferentialUnitStatus.php',
'DifferentialUnitTestResult' => 'applications/differential/constants/DifferentialUnitTestResult.php',
'DifferentialUpdateRevisionConduitAPIMethod' => 'applications/differential/conduit/DifferentialUpdateRevisionConduitAPIMethod.php',
'DifferentialViewPolicyField' => 'applications/differential/customfield/DifferentialViewPolicyField.php',
'DiffusionAuditorDatasource' => 'applications/diffusion/typeahead/DiffusionAuditorDatasource.php',
'DiffusionAuditorFunctionDatasource' => 'applications/diffusion/typeahead/DiffusionAuditorFunctionDatasource.php',
'DiffusionAuditorsAddAuditorsHeraldAction' => 'applications/diffusion/herald/DiffusionAuditorsAddAuditorsHeraldAction.php',
'DiffusionAuditorsAddSelfHeraldAction' => 'applications/diffusion/herald/DiffusionAuditorsAddSelfHeraldAction.php',
'DiffusionAuditorsHeraldAction' => 'applications/diffusion/herald/DiffusionAuditorsHeraldAction.php',
'DiffusionBlockHeraldAction' => 'applications/diffusion/herald/DiffusionBlockHeraldAction.php',
'DiffusionBranchQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionBranchQueryConduitAPIMethod.php',
'DiffusionBranchTableController' => 'applications/diffusion/controller/DiffusionBranchTableController.php',
'DiffusionBranchTableView' => 'applications/diffusion/view/DiffusionBranchTableView.php',
'DiffusionBrowseController' => 'applications/diffusion/controller/DiffusionBrowseController.php',
'DiffusionBrowseDirectoryController' => 'applications/diffusion/controller/DiffusionBrowseDirectoryController.php',
'DiffusionBrowseFileController' => 'applications/diffusion/controller/DiffusionBrowseFileController.php',
'DiffusionBrowseMainController' => 'applications/diffusion/controller/DiffusionBrowseMainController.php',
'DiffusionBrowseQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionBrowseQueryConduitAPIMethod.php',
'DiffusionBrowseResultSet' => 'applications/diffusion/data/DiffusionBrowseResultSet.php',
'DiffusionBrowseSearchController' => 'applications/diffusion/controller/DiffusionBrowseSearchController.php',
'DiffusionBrowseTableView' => 'applications/diffusion/view/DiffusionBrowseTableView.php',
'DiffusionCachedResolveRefsQuery' => 'applications/diffusion/query/DiffusionCachedResolveRefsQuery.php',
'DiffusionChangeController' => 'applications/diffusion/controller/DiffusionChangeController.php',
'DiffusionChangeHeraldFieldGroup' => 'applications/diffusion/herald/DiffusionChangeHeraldFieldGroup.php',
'DiffusionCommitAffectedFilesHeraldField' => 'applications/diffusion/herald/DiffusionCommitAffectedFilesHeraldField.php',
'DiffusionCommitAuthorHeraldField' => 'applications/diffusion/herald/DiffusionCommitAuthorHeraldField.php',
'DiffusionCommitAutocloseHeraldField' => 'applications/diffusion/herald/DiffusionCommitAutocloseHeraldField.php',
'DiffusionCommitBranchesController' => 'applications/diffusion/controller/DiffusionCommitBranchesController.php',
'DiffusionCommitBranchesHeraldField' => 'applications/diffusion/herald/DiffusionCommitBranchesHeraldField.php',
'DiffusionCommitCommitterHeraldField' => 'applications/diffusion/herald/DiffusionCommitCommitterHeraldField.php',
'DiffusionCommitController' => 'applications/diffusion/controller/DiffusionCommitController.php',
'DiffusionCommitDiffContentAddedHeraldField' => 'applications/diffusion/herald/DiffusionCommitDiffContentAddedHeraldField.php',
'DiffusionCommitDiffContentHeraldField' => 'applications/diffusion/herald/DiffusionCommitDiffContentHeraldField.php',
'DiffusionCommitDiffContentRemovedHeraldField' => 'applications/diffusion/herald/DiffusionCommitDiffContentRemovedHeraldField.php',
'DiffusionCommitDiffEnormousHeraldField' => 'applications/diffusion/herald/DiffusionCommitDiffEnormousHeraldField.php',
'DiffusionCommitEditController' => 'applications/diffusion/controller/DiffusionCommitEditController.php',
'DiffusionCommitHasRevisionEdgeType' => 'applications/diffusion/edge/DiffusionCommitHasRevisionEdgeType.php',
'DiffusionCommitHasTaskEdgeType' => 'applications/diffusion/edge/DiffusionCommitHasTaskEdgeType.php',
'DiffusionCommitHash' => 'applications/diffusion/data/DiffusionCommitHash.php',
'DiffusionCommitHeraldField' => 'applications/diffusion/herald/DiffusionCommitHeraldField.php',
'DiffusionCommitHeraldFieldGroup' => 'applications/diffusion/herald/DiffusionCommitHeraldFieldGroup.php',
'DiffusionCommitHookEngine' => 'applications/diffusion/engine/DiffusionCommitHookEngine.php',
'DiffusionCommitHookRejectException' => 'applications/diffusion/exception/DiffusionCommitHookRejectException.php',
'DiffusionCommitMessageHeraldField' => 'applications/diffusion/herald/DiffusionCommitMessageHeraldField.php',
'DiffusionCommitPackageAuditHeraldField' => 'applications/diffusion/herald/DiffusionCommitPackageAuditHeraldField.php',
'DiffusionCommitPackageHeraldField' => 'applications/diffusion/herald/DiffusionCommitPackageHeraldField.php',
'DiffusionCommitPackageOwnerHeraldField' => 'applications/diffusion/herald/DiffusionCommitPackageOwnerHeraldField.php',
'DiffusionCommitParentsQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionCommitParentsQueryConduitAPIMethod.php',
'DiffusionCommitQuery' => 'applications/diffusion/query/DiffusionCommitQuery.php',
'DiffusionCommitRef' => 'applications/diffusion/data/DiffusionCommitRef.php',
'DiffusionCommitRemarkupRule' => 'applications/diffusion/remarkup/DiffusionCommitRemarkupRule.php',
'DiffusionCommitRemarkupRuleTestCase' => 'applications/diffusion/remarkup/__tests__/DiffusionCommitRemarkupRuleTestCase.php',
'DiffusionCommitRepositoryHeraldField' => 'applications/diffusion/herald/DiffusionCommitRepositoryHeraldField.php',
'DiffusionCommitRepositoryProjectsHeraldField' => 'applications/diffusion/herald/DiffusionCommitRepositoryProjectsHeraldField.php',
'DiffusionCommitRevertedByCommitEdgeType' => 'applications/diffusion/edge/DiffusionCommitRevertedByCommitEdgeType.php',
'DiffusionCommitRevertsCommitEdgeType' => 'applications/diffusion/edge/DiffusionCommitRevertsCommitEdgeType.php',
'DiffusionCommitReviewerHeraldField' => 'applications/diffusion/herald/DiffusionCommitReviewerHeraldField.php',
'DiffusionCommitRevisionAcceptedHeraldField' => 'applications/diffusion/herald/DiffusionCommitRevisionAcceptedHeraldField.php',
'DiffusionCommitRevisionHeraldField' => 'applications/diffusion/herald/DiffusionCommitRevisionHeraldField.php',
'DiffusionCommitRevisionReviewersHeraldField' => 'applications/diffusion/herald/DiffusionCommitRevisionReviewersHeraldField.php',
'DiffusionCommitRevisionSubscribersHeraldField' => 'applications/diffusion/herald/DiffusionCommitRevisionSubscribersHeraldField.php',
'DiffusionCommitTagsController' => 'applications/diffusion/controller/DiffusionCommitTagsController.php',
'DiffusionConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionConduitAPIMethod.php',
'DiffusionController' => 'applications/diffusion/controller/DiffusionController.php',
'DiffusionCreateCommentConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionCreateCommentConduitAPIMethod.php',
'DiffusionCreateRepositoriesCapability' => 'applications/diffusion/capability/DiffusionCreateRepositoriesCapability.php',
'DiffusionDefaultEditCapability' => 'applications/diffusion/capability/DiffusionDefaultEditCapability.php',
'DiffusionDefaultPushCapability' => 'applications/diffusion/capability/DiffusionDefaultPushCapability.php',
'DiffusionDefaultViewCapability' => 'applications/diffusion/capability/DiffusionDefaultViewCapability.php',
'DiffusionDiffController' => 'applications/diffusion/controller/DiffusionDiffController.php',
'DiffusionDiffInlineCommentQuery' => 'applications/diffusion/query/DiffusionDiffInlineCommentQuery.php',
'DiffusionDiffQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionDiffQueryConduitAPIMethod.php',
'DiffusionDoorkeeperCommitFeedStoryPublisher' => 'applications/diffusion/doorkeeper/DiffusionDoorkeeperCommitFeedStoryPublisher.php',
'DiffusionEmptyResultView' => 'applications/diffusion/view/DiffusionEmptyResultView.php',
'DiffusionExistsQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionExistsQueryConduitAPIMethod.php',
'DiffusionExternalController' => 'applications/diffusion/controller/DiffusionExternalController.php',
'DiffusionExternalSymbolQuery' => 'applications/diffusion/symbol/DiffusionExternalSymbolQuery.php',
'DiffusionExternalSymbolsSource' => 'applications/diffusion/symbol/DiffusionExternalSymbolsSource.php',
'DiffusionFileContent' => 'applications/diffusion/data/DiffusionFileContent.php',
'DiffusionFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionFileContentQuery.php',
'DiffusionFileContentQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionFileContentQueryConduitAPIMethod.php',
'DiffusionFindSymbolsConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionFindSymbolsConduitAPIMethod.php',
'DiffusionGetCommitsConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionGetCommitsConduitAPIMethod.php',
'DiffusionGetLintMessagesConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionGetLintMessagesConduitAPIMethod.php',
'DiffusionGetRecentCommitsByPathConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionGetRecentCommitsByPathConduitAPIMethod.php',
'DiffusionGitBranch' => 'applications/diffusion/data/DiffusionGitBranch.php',
'DiffusionGitBranchTestCase' => 'applications/diffusion/data/__tests__/DiffusionGitBranchTestCase.php',
'DiffusionGitFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionGitFileContentQuery.php',
'DiffusionGitFileContentQueryTestCase' => 'applications/diffusion/query/__tests__/DiffusionGitFileContentQueryTestCase.php',
'DiffusionGitRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionGitRawDiffQuery.php',
'DiffusionGitReceivePackSSHWorkflow' => 'applications/diffusion/ssh/DiffusionGitReceivePackSSHWorkflow.php',
'DiffusionGitRequest' => 'applications/diffusion/request/DiffusionGitRequest.php',
'DiffusionGitResponse' => 'applications/diffusion/response/DiffusionGitResponse.php',
'DiffusionGitSSHWorkflow' => 'applications/diffusion/ssh/DiffusionGitSSHWorkflow.php',
'DiffusionGitUploadPackSSHWorkflow' => 'applications/diffusion/ssh/DiffusionGitUploadPackSSHWorkflow.php',
'DiffusionHistoryController' => 'applications/diffusion/controller/DiffusionHistoryController.php',
'DiffusionHistoryQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionHistoryQueryConduitAPIMethod.php',
'DiffusionHistoryTableView' => 'applications/diffusion/view/DiffusionHistoryTableView.php',
'DiffusionHovercardEventListener' => 'applications/diffusion/events/DiffusionHovercardEventListener.php',
'DiffusionInlineCommentController' => 'applications/diffusion/controller/DiffusionInlineCommentController.php',
'DiffusionInlineCommentPreviewController' => 'applications/diffusion/controller/DiffusionInlineCommentPreviewController.php',
'DiffusionLastModifiedController' => 'applications/diffusion/controller/DiffusionLastModifiedController.php',
'DiffusionLastModifiedQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionLastModifiedQueryConduitAPIMethod.php',
'DiffusionLintController' => 'applications/diffusion/controller/DiffusionLintController.php',
'DiffusionLintCountQuery' => 'applications/diffusion/query/DiffusionLintCountQuery.php',
'DiffusionLintDetailsController' => 'applications/diffusion/controller/DiffusionLintDetailsController.php',
'DiffusionLintSaveRunner' => 'applications/diffusion/DiffusionLintSaveRunner.php',
'DiffusionLookSoonConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionLookSoonConduitAPIMethod.php',
'DiffusionLowLevelCommitFieldsQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelCommitFieldsQuery.php',
'DiffusionLowLevelCommitQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelCommitQuery.php',
'DiffusionLowLevelGitRefQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelGitRefQuery.php',
'DiffusionLowLevelMercurialBranchesQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelMercurialBranchesQuery.php',
'DiffusionLowLevelMercurialPathsQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelMercurialPathsQuery.php',
'DiffusionLowLevelParentsQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelParentsQuery.php',
'DiffusionLowLevelQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelQuery.php',
'DiffusionLowLevelResolveRefsQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelResolveRefsQuery.php',
'DiffusionMercurialFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionMercurialFileContentQuery.php',
'DiffusionMercurialRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionMercurialRawDiffQuery.php',
'DiffusionMercurialRequest' => 'applications/diffusion/request/DiffusionMercurialRequest.php',
'DiffusionMercurialResponse' => 'applications/diffusion/response/DiffusionMercurialResponse.php',
'DiffusionMercurialSSHWorkflow' => 'applications/diffusion/ssh/DiffusionMercurialSSHWorkflow.php',
'DiffusionMercurialServeSSHWorkflow' => 'applications/diffusion/ssh/DiffusionMercurialServeSSHWorkflow.php',
'DiffusionMercurialWireClientSSHProtocolChannel' => 'applications/diffusion/ssh/DiffusionMercurialWireClientSSHProtocolChannel.php',
'DiffusionMercurialWireProtocol' => 'applications/diffusion/protocol/DiffusionMercurialWireProtocol.php',
'DiffusionMercurialWireSSHTestCase' => 'applications/diffusion/ssh/__tests__/DiffusionMercurialWireSSHTestCase.php',
'DiffusionMergedCommitsQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionMergedCommitsQueryConduitAPIMethod.php',
'DiffusionMirrorDeleteController' => 'applications/diffusion/controller/DiffusionMirrorDeleteController.php',
'DiffusionMirrorEditController' => 'applications/diffusion/controller/DiffusionMirrorEditController.php',
'DiffusionPathChange' => 'applications/diffusion/data/DiffusionPathChange.php',
'DiffusionPathChangeQuery' => 'applications/diffusion/query/pathchange/DiffusionPathChangeQuery.php',
'DiffusionPathCompleteController' => 'applications/diffusion/controller/DiffusionPathCompleteController.php',
'DiffusionPathIDQuery' => 'applications/diffusion/query/pathid/DiffusionPathIDQuery.php',
'DiffusionPathQuery' => 'applications/diffusion/query/DiffusionPathQuery.php',
'DiffusionPathQueryTestCase' => 'applications/diffusion/query/pathid/__tests__/DiffusionPathQueryTestCase.php',
'DiffusionPathTreeController' => 'applications/diffusion/controller/DiffusionPathTreeController.php',
'DiffusionPathValidateController' => 'applications/diffusion/controller/DiffusionPathValidateController.php',
'DiffusionPhpExternalSymbolsSource' => 'applications/diffusion/symbol/DiffusionPhpExternalSymbolsSource.php',
'DiffusionPreCommitContentAffectedFilesHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentAffectedFilesHeraldField.php',
'DiffusionPreCommitContentAuthorHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentAuthorHeraldField.php',
'DiffusionPreCommitContentAuthorRawHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentAuthorRawHeraldField.php',
'DiffusionPreCommitContentBranchesHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentBranchesHeraldField.php',
'DiffusionPreCommitContentCommitterHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentCommitterHeraldField.php',
'DiffusionPreCommitContentCommitterRawHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentCommitterRawHeraldField.php',
'DiffusionPreCommitContentDiffContentAddedHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentDiffContentAddedHeraldField.php',
'DiffusionPreCommitContentDiffContentHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentDiffContentHeraldField.php',
'DiffusionPreCommitContentDiffContentRemovedHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentDiffContentRemovedHeraldField.php',
'DiffusionPreCommitContentDiffEnormousHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentDiffEnormousHeraldField.php',
'DiffusionPreCommitContentHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentHeraldField.php',
'DiffusionPreCommitContentMergeHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentMergeHeraldField.php',
'DiffusionPreCommitContentMessageHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentMessageHeraldField.php',
'DiffusionPreCommitContentPusherHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentPusherHeraldField.php',
'DiffusionPreCommitContentPusherIsCommitterHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentPusherIsCommitterHeraldField.php',
'DiffusionPreCommitContentPusherProjectsHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentPusherProjectsHeraldField.php',
'DiffusionPreCommitContentRepositoryHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRepositoryHeraldField.php',
'DiffusionPreCommitContentRepositoryProjectsHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRepositoryProjectsHeraldField.php',
'DiffusionPreCommitContentRevisionAcceptedHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRevisionAcceptedHeraldField.php',
'DiffusionPreCommitContentRevisionHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRevisionHeraldField.php',
'DiffusionPreCommitContentRevisionReviewersHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRevisionReviewersHeraldField.php',
'DiffusionPreCommitContentRevisionSubscribersHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRevisionSubscribersHeraldField.php',
'DiffusionPreCommitRefChangeHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefChangeHeraldField.php',
'DiffusionPreCommitRefHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefHeraldField.php',
'DiffusionPreCommitRefHeraldFieldGroup' => 'applications/diffusion/herald/DiffusionPreCommitRefHeraldFieldGroup.php',
'DiffusionPreCommitRefNameHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefNameHeraldField.php',
'DiffusionPreCommitRefPusherHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefPusherHeraldField.php',
'DiffusionPreCommitRefPusherProjectsHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefPusherProjectsHeraldField.php',
'DiffusionPreCommitRefRepositoryHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefRepositoryHeraldField.php',
'DiffusionPreCommitRefRepositoryProjectsHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefRepositoryProjectsHeraldField.php',
'DiffusionPreCommitRefTypeHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefTypeHeraldField.php',
'DiffusionPushCapability' => 'applications/diffusion/capability/DiffusionPushCapability.php',
'DiffusionPushEventViewController' => 'applications/diffusion/controller/DiffusionPushEventViewController.php',
'DiffusionPushLogController' => 'applications/diffusion/controller/DiffusionPushLogController.php',
'DiffusionPushLogListController' => 'applications/diffusion/controller/DiffusionPushLogListController.php',
'DiffusionPushLogListView' => 'applications/diffusion/view/DiffusionPushLogListView.php',
'DiffusionPythonExternalSymbolsSource' => 'applications/diffusion/symbol/DiffusionPythonExternalSymbolsSource.php',
'DiffusionQuery' => 'applications/diffusion/query/DiffusionQuery.php',
'DiffusionQueryCommitsConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionQueryCommitsConduitAPIMethod.php',
'DiffusionQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionQueryConduitAPIMethod.php',
'DiffusionQueryPathsConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionQueryPathsConduitAPIMethod.php',
'DiffusionRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionRawDiffQuery.php',
'DiffusionRawDiffQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionRawDiffQueryConduitAPIMethod.php',
'DiffusionReadmeView' => 'applications/diffusion/view/DiffusionReadmeView.php',
'DiffusionRefNotFoundException' => 'applications/diffusion/exception/DiffusionRefNotFoundException.php',
'DiffusionRefTableController' => 'applications/diffusion/controller/DiffusionRefTableController.php',
'DiffusionRefsQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionRefsQueryConduitAPIMethod.php',
'DiffusionRenameHistoryQuery' => 'applications/diffusion/query/DiffusionRenameHistoryQuery.php',
'DiffusionRepositoryByIDRemarkupRule' => 'applications/diffusion/remarkup/DiffusionRepositoryByIDRemarkupRule.php',
'DiffusionRepositoryController' => 'applications/diffusion/controller/DiffusionRepositoryController.php',
'DiffusionRepositoryCreateController' => 'applications/diffusion/controller/DiffusionRepositoryCreateController.php',
'DiffusionRepositoryDatasource' => 'applications/diffusion/typeahead/DiffusionRepositoryDatasource.php',
'DiffusionRepositoryDefaultController' => 'applications/diffusion/controller/DiffusionRepositoryDefaultController.php',
'DiffusionRepositoryEditActionsController' => 'applications/diffusion/controller/DiffusionRepositoryEditActionsController.php',
'DiffusionRepositoryEditActivateController' => 'applications/diffusion/controller/DiffusionRepositoryEditActivateController.php',
'DiffusionRepositoryEditBasicController' => 'applications/diffusion/controller/DiffusionRepositoryEditBasicController.php',
'DiffusionRepositoryEditBranchesController' => 'applications/diffusion/controller/DiffusionRepositoryEditBranchesController.php',
'DiffusionRepositoryEditController' => 'applications/diffusion/controller/DiffusionRepositoryEditController.php',
'DiffusionRepositoryEditDangerousController' => 'applications/diffusion/controller/DiffusionRepositoryEditDangerousController.php',
'DiffusionRepositoryEditDeleteController' => 'applications/diffusion/controller/DiffusionRepositoryEditDeleteController.php',
'DiffusionRepositoryEditEncodingController' => 'applications/diffusion/controller/DiffusionRepositoryEditEncodingController.php',
'DiffusionRepositoryEditHostingController' => 'applications/diffusion/controller/DiffusionRepositoryEditHostingController.php',
'DiffusionRepositoryEditMainController' => 'applications/diffusion/controller/DiffusionRepositoryEditMainController.php',
'DiffusionRepositoryEditStagingController' => 'applications/diffusion/controller/DiffusionRepositoryEditStagingController.php',
'DiffusionRepositoryEditStorageController' => 'applications/diffusion/controller/DiffusionRepositoryEditStorageController.php',
'DiffusionRepositoryEditSubversionController' => 'applications/diffusion/controller/DiffusionRepositoryEditSubversionController.php',
'DiffusionRepositoryEditUpdateController' => 'applications/diffusion/controller/DiffusionRepositoryEditUpdateController.php',
'DiffusionRepositoryListController' => 'applications/diffusion/controller/DiffusionRepositoryListController.php',
'DiffusionRepositoryNewController' => 'applications/diffusion/controller/DiffusionRepositoryNewController.php',
'DiffusionRepositoryPath' => 'applications/diffusion/data/DiffusionRepositoryPath.php',
'DiffusionRepositoryRef' => 'applications/diffusion/data/DiffusionRepositoryRef.php',
'DiffusionRepositoryRemarkupRule' => 'applications/diffusion/remarkup/DiffusionRepositoryRemarkupRule.php',
'DiffusionRepositorySymbolsController' => 'applications/diffusion/controller/DiffusionRepositorySymbolsController.php',
'DiffusionRepositoryTag' => 'applications/diffusion/data/DiffusionRepositoryTag.php',
'DiffusionRequest' => 'applications/diffusion/request/DiffusionRequest.php',
'DiffusionResolveRefsConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionResolveRefsConduitAPIMethod.php',
'DiffusionResolveUserQuery' => 'applications/diffusion/query/DiffusionResolveUserQuery.php',
'DiffusionSSHWorkflow' => 'applications/diffusion/ssh/DiffusionSSHWorkflow.php',
'DiffusionSearchQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionSearchQueryConduitAPIMethod.php',
'DiffusionServeController' => 'applications/diffusion/controller/DiffusionServeController.php',
'DiffusionSetPasswordSettingsPanel' => 'applications/diffusion/panel/DiffusionSetPasswordSettingsPanel.php',
'DiffusionSetupException' => 'applications/diffusion/exception/DiffusionSetupException.php',
'DiffusionSubversionSSHWorkflow' => 'applications/diffusion/ssh/DiffusionSubversionSSHWorkflow.php',
'DiffusionSubversionServeSSHWorkflow' => 'applications/diffusion/ssh/DiffusionSubversionServeSSHWorkflow.php',
'DiffusionSubversionWireProtocol' => 'applications/diffusion/protocol/DiffusionSubversionWireProtocol.php',
'DiffusionSubversionWireProtocolTestCase' => 'applications/diffusion/protocol/__tests__/DiffusionSubversionWireProtocolTestCase.php',
'DiffusionSvnFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionSvnFileContentQuery.php',
'DiffusionSvnRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionSvnRawDiffQuery.php',
'DiffusionSvnRequest' => 'applications/diffusion/request/DiffusionSvnRequest.php',
'DiffusionSymbolController' => 'applications/diffusion/controller/DiffusionSymbolController.php',
'DiffusionSymbolDatasource' => 'applications/diffusion/typeahead/DiffusionSymbolDatasource.php',
'DiffusionSymbolQuery' => 'applications/diffusion/query/DiffusionSymbolQuery.php',
'DiffusionTagListController' => 'applications/diffusion/controller/DiffusionTagListController.php',
'DiffusionTagListView' => 'applications/diffusion/view/DiffusionTagListView.php',
'DiffusionTagsQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionTagsQueryConduitAPIMethod.php',
'DiffusionURITestCase' => 'applications/diffusion/request/__tests__/DiffusionURITestCase.php',
'DiffusionUpdateCoverageConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionUpdateCoverageConduitAPIMethod.php',
'DiffusionView' => 'applications/diffusion/view/DiffusionView.php',
'DivinerArticleAtomizer' => 'applications/diviner/atomizer/DivinerArticleAtomizer.php',
'DivinerAtom' => 'applications/diviner/atom/DivinerAtom.php',
'DivinerAtomCache' => 'applications/diviner/cache/DivinerAtomCache.php',
'DivinerAtomController' => 'applications/diviner/controller/DivinerAtomController.php',
'DivinerAtomListController' => 'applications/diviner/controller/DivinerAtomListController.php',
'DivinerAtomPHIDType' => 'applications/diviner/phid/DivinerAtomPHIDType.php',
'DivinerAtomQuery' => 'applications/diviner/query/DivinerAtomQuery.php',
'DivinerAtomRef' => 'applications/diviner/atom/DivinerAtomRef.php',
'DivinerAtomSearchEngine' => 'applications/diviner/query/DivinerAtomSearchEngine.php',
'DivinerAtomSearchIndexer' => 'applications/diviner/search/DivinerAtomSearchIndexer.php',
'DivinerAtomizeWorkflow' => 'applications/diviner/workflow/DivinerAtomizeWorkflow.php',
'DivinerAtomizer' => 'applications/diviner/atomizer/DivinerAtomizer.php',
'DivinerBookController' => 'applications/diviner/controller/DivinerBookController.php',
'DivinerBookDatasource' => 'applications/diviner/typeahead/DivinerBookDatasource.php',
'DivinerBookEditController' => 'applications/diviner/controller/DivinerBookEditController.php',
'DivinerBookItemView' => 'applications/diviner/view/DivinerBookItemView.php',
'DivinerBookPHIDType' => 'applications/diviner/phid/DivinerBookPHIDType.php',
'DivinerBookQuery' => 'applications/diviner/query/DivinerBookQuery.php',
'DivinerBookSearchIndexer' => 'applications/diviner/search/DivinerBookSearchIndexer.php',
'DivinerController' => 'applications/diviner/controller/DivinerController.php',
'DivinerDAO' => 'applications/diviner/storage/DivinerDAO.php',
'DivinerDefaultEditCapability' => 'applications/diviner/capability/DivinerDefaultEditCapability.php',
'DivinerDefaultRenderer' => 'applications/diviner/renderer/DivinerDefaultRenderer.php',
'DivinerDefaultViewCapability' => 'applications/diviner/capability/DivinerDefaultViewCapability.php',
'DivinerDiskCache' => 'applications/diviner/cache/DivinerDiskCache.php',
'DivinerFileAtomizer' => 'applications/diviner/atomizer/DivinerFileAtomizer.php',
'DivinerFindController' => 'applications/diviner/controller/DivinerFindController.php',
'DivinerGenerateWorkflow' => 'applications/diviner/workflow/DivinerGenerateWorkflow.php',
'DivinerLiveAtom' => 'applications/diviner/storage/DivinerLiveAtom.php',
'DivinerLiveBook' => 'applications/diviner/storage/DivinerLiveBook.php',
'DivinerLiveBookEditor' => 'applications/diviner/editor/DivinerLiveBookEditor.php',
'DivinerLiveBookTransaction' => 'applications/diviner/storage/DivinerLiveBookTransaction.php',
'DivinerLiveBookTransactionQuery' => 'applications/diviner/query/DivinerLiveBookTransactionQuery.php',
'DivinerLivePublisher' => 'applications/diviner/publisher/DivinerLivePublisher.php',
'DivinerLiveSymbol' => 'applications/diviner/storage/DivinerLiveSymbol.php',
'DivinerMainController' => 'applications/diviner/controller/DivinerMainController.php',
'DivinerPHPAtomizer' => 'applications/diviner/atomizer/DivinerPHPAtomizer.php',
'DivinerParameterTableView' => 'applications/diviner/view/DivinerParameterTableView.php',
'DivinerPublishCache' => 'applications/diviner/cache/DivinerPublishCache.php',
'DivinerPublisher' => 'applications/diviner/publisher/DivinerPublisher.php',
'DivinerRenderer' => 'applications/diviner/renderer/DivinerRenderer.php',
'DivinerReturnTableView' => 'applications/diviner/view/DivinerReturnTableView.php',
'DivinerSchemaSpec' => 'applications/diviner/storage/DivinerSchemaSpec.php',
'DivinerSectionView' => 'applications/diviner/view/DivinerSectionView.php',
'DivinerStaticPublisher' => 'applications/diviner/publisher/DivinerStaticPublisher.php',
'DivinerSymbolRemarkupRule' => 'applications/diviner/markup/DivinerSymbolRemarkupRule.php',
'DivinerWorkflow' => 'applications/diviner/workflow/DivinerWorkflow.php',
'DoorkeeperAsanaFeedWorker' => 'applications/doorkeeper/worker/DoorkeeperAsanaFeedWorker.php',
'DoorkeeperAsanaRemarkupRule' => 'applications/doorkeeper/remarkup/DoorkeeperAsanaRemarkupRule.php',
'DoorkeeperBridge' => 'applications/doorkeeper/bridge/DoorkeeperBridge.php',
'DoorkeeperBridgeAsana' => 'applications/doorkeeper/bridge/DoorkeeperBridgeAsana.php',
'DoorkeeperBridgeJIRA' => 'applications/doorkeeper/bridge/DoorkeeperBridgeJIRA.php',
'DoorkeeperBridgeJIRATestCase' => 'applications/doorkeeper/bridge/__tests__/DoorkeeperBridgeJIRATestCase.php',
'DoorkeeperDAO' => 'applications/doorkeeper/storage/DoorkeeperDAO.php',
'DoorkeeperExternalObject' => 'applications/doorkeeper/storage/DoorkeeperExternalObject.php',
'DoorkeeperExternalObjectQuery' => 'applications/doorkeeper/query/DoorkeeperExternalObjectQuery.php',
'DoorkeeperFeedStoryPublisher' => 'applications/doorkeeper/engine/DoorkeeperFeedStoryPublisher.php',
'DoorkeeperFeedWorker' => 'applications/doorkeeper/worker/DoorkeeperFeedWorker.php',
'DoorkeeperImportEngine' => 'applications/doorkeeper/engine/DoorkeeperImportEngine.php',
'DoorkeeperJIRAFeedWorker' => 'applications/doorkeeper/worker/DoorkeeperJIRAFeedWorker.php',
'DoorkeeperJIRARemarkupRule' => 'applications/doorkeeper/remarkup/DoorkeeperJIRARemarkupRule.php',
'DoorkeeperMissingLinkException' => 'applications/doorkeeper/exception/DoorkeeperMissingLinkException.php',
'DoorkeeperObjectRef' => 'applications/doorkeeper/engine/DoorkeeperObjectRef.php',
'DoorkeeperRemarkupRule' => 'applications/doorkeeper/remarkup/DoorkeeperRemarkupRule.php',
'DoorkeeperSchemaSpec' => 'applications/doorkeeper/storage/DoorkeeperSchemaSpec.php',
'DoorkeeperTagView' => 'applications/doorkeeper/view/DoorkeeperTagView.php',
'DoorkeeperTagsController' => 'applications/doorkeeper/controller/DoorkeeperTagsController.php',
'DrydockAllocatorWorker' => 'applications/drydock/worker/DrydockAllocatorWorker.php',
'DrydockApacheWebrootInterface' => 'applications/drydock/interface/webroot/DrydockApacheWebrootInterface.php',
'DrydockBlueprint' => 'applications/drydock/storage/DrydockBlueprint.php',
'DrydockBlueprintController' => 'applications/drydock/controller/DrydockBlueprintController.php',
'DrydockBlueprintCoreCustomField' => 'applications/drydock/customfield/DrydockBlueprintCoreCustomField.php',
'DrydockBlueprintCreateController' => 'applications/drydock/controller/DrydockBlueprintCreateController.php',
'DrydockBlueprintCustomField' => 'applications/drydock/customfield/DrydockBlueprintCustomField.php',
'DrydockBlueprintDatasource' => 'applications/drydock/typeahead/DrydockBlueprintDatasource.php',
'DrydockBlueprintEditController' => 'applications/drydock/controller/DrydockBlueprintEditController.php',
'DrydockBlueprintEditor' => 'applications/drydock/editor/DrydockBlueprintEditor.php',
'DrydockBlueprintImplementation' => 'applications/drydock/blueprint/DrydockBlueprintImplementation.php',
'DrydockBlueprintImplementationTestCase' => 'applications/drydock/blueprint/__tests__/DrydockBlueprintImplementationTestCase.php',
'DrydockBlueprintListController' => 'applications/drydock/controller/DrydockBlueprintListController.php',
'DrydockBlueprintPHIDType' => 'applications/drydock/phid/DrydockBlueprintPHIDType.php',
'DrydockBlueprintQuery' => 'applications/drydock/query/DrydockBlueprintQuery.php',
'DrydockBlueprintScopeGuard' => 'applications/drydock/util/DrydockBlueprintScopeGuard.php',
'DrydockBlueprintSearchEngine' => 'applications/drydock/query/DrydockBlueprintSearchEngine.php',
'DrydockBlueprintTransaction' => 'applications/drydock/storage/DrydockBlueprintTransaction.php',
'DrydockBlueprintTransactionQuery' => 'applications/drydock/query/DrydockBlueprintTransactionQuery.php',
'DrydockBlueprintViewController' => 'applications/drydock/controller/DrydockBlueprintViewController.php',
'DrydockCommandInterface' => 'applications/drydock/interface/command/DrydockCommandInterface.php',
'DrydockConsoleController' => 'applications/drydock/controller/DrydockConsoleController.php',
'DrydockConstants' => 'applications/drydock/constants/DrydockConstants.php',
'DrydockController' => 'applications/drydock/controller/DrydockController.php',
'DrydockCreateBlueprintsCapability' => 'applications/drydock/capability/DrydockCreateBlueprintsCapability.php',
'DrydockDAO' => 'applications/drydock/storage/DrydockDAO.php',
'DrydockDefaultEditCapability' => 'applications/drydock/capability/DrydockDefaultEditCapability.php',
'DrydockDefaultViewCapability' => 'applications/drydock/capability/DrydockDefaultViewCapability.php',
'DrydockFilesystemInterface' => 'applications/drydock/interface/filesystem/DrydockFilesystemInterface.php',
'DrydockInterface' => 'applications/drydock/interface/DrydockInterface.php',
'DrydockLease' => 'applications/drydock/storage/DrydockLease.php',
'DrydockLeaseController' => 'applications/drydock/controller/DrydockLeaseController.php',
'DrydockLeaseDatasource' => 'applications/drydock/typeahead/DrydockLeaseDatasource.php',
'DrydockLeaseListController' => 'applications/drydock/controller/DrydockLeaseListController.php',
'DrydockLeaseListView' => 'applications/drydock/view/DrydockLeaseListView.php',
'DrydockLeasePHIDType' => 'applications/drydock/phid/DrydockLeasePHIDType.php',
'DrydockLeaseQuery' => 'applications/drydock/query/DrydockLeaseQuery.php',
'DrydockLeaseReleaseController' => 'applications/drydock/controller/DrydockLeaseReleaseController.php',
'DrydockLeaseSearchEngine' => 'applications/drydock/query/DrydockLeaseSearchEngine.php',
'DrydockLeaseStatus' => 'applications/drydock/constants/DrydockLeaseStatus.php',
'DrydockLeaseViewController' => 'applications/drydock/controller/DrydockLeaseViewController.php',
'DrydockLocalCommandInterface' => 'applications/drydock/interface/command/DrydockLocalCommandInterface.php',
'DrydockLog' => 'applications/drydock/storage/DrydockLog.php',
'DrydockLogController' => 'applications/drydock/controller/DrydockLogController.php',
'DrydockLogListController' => 'applications/drydock/controller/DrydockLogListController.php',
'DrydockLogListView' => 'applications/drydock/view/DrydockLogListView.php',
'DrydockLogQuery' => 'applications/drydock/query/DrydockLogQuery.php',
'DrydockLogSearchEngine' => 'applications/drydock/query/DrydockLogSearchEngine.php',
'DrydockManagementCloseWorkflow' => 'applications/drydock/management/DrydockManagementCloseWorkflow.php',
'DrydockManagementCreateResourceWorkflow' => 'applications/drydock/management/DrydockManagementCreateResourceWorkflow.php',
'DrydockManagementLeaseWorkflow' => 'applications/drydock/management/DrydockManagementLeaseWorkflow.php',
'DrydockManagementReleaseWorkflow' => 'applications/drydock/management/DrydockManagementReleaseWorkflow.php',
'DrydockManagementWorkflow' => 'applications/drydock/management/DrydockManagementWorkflow.php',
'DrydockPreallocatedHostBlueprintImplementation' => 'applications/drydock/blueprint/DrydockPreallocatedHostBlueprintImplementation.php',
'DrydockQuery' => 'applications/drydock/query/DrydockQuery.php',
'DrydockResource' => 'applications/drydock/storage/DrydockResource.php',
'DrydockResourceCloseController' => 'applications/drydock/controller/DrydockResourceCloseController.php',
'DrydockResourceController' => 'applications/drydock/controller/DrydockResourceController.php',
'DrydockResourceDatasource' => 'applications/drydock/typeahead/DrydockResourceDatasource.php',
'DrydockResourceListController' => 'applications/drydock/controller/DrydockResourceListController.php',
'DrydockResourceListView' => 'applications/drydock/view/DrydockResourceListView.php',
'DrydockResourcePHIDType' => 'applications/drydock/phid/DrydockResourcePHIDType.php',
'DrydockResourceQuery' => 'applications/drydock/query/DrydockResourceQuery.php',
'DrydockResourceSearchEngine' => 'applications/drydock/query/DrydockResourceSearchEngine.php',
'DrydockResourceStatus' => 'applications/drydock/constants/DrydockResourceStatus.php',
'DrydockResourceViewController' => 'applications/drydock/controller/DrydockResourceViewController.php',
'DrydockSFTPFilesystemInterface' => 'applications/drydock/interface/filesystem/DrydockSFTPFilesystemInterface.php',
'DrydockSSHCommandInterface' => 'applications/drydock/interface/command/DrydockSSHCommandInterface.php',
'DrydockWebrootInterface' => 'applications/drydock/interface/webroot/DrydockWebrootInterface.php',
'DrydockWorkingCopyBlueprintImplementation' => 'applications/drydock/blueprint/DrydockWorkingCopyBlueprintImplementation.php',
'FeedConduitAPIMethod' => 'applications/feed/conduit/FeedConduitAPIMethod.php',
'FeedPublishConduitAPIMethod' => 'applications/feed/conduit/FeedPublishConduitAPIMethod.php',
'FeedPublisherHTTPWorker' => 'applications/feed/worker/FeedPublisherHTTPWorker.php',
'FeedPublisherWorker' => 'applications/feed/worker/FeedPublisherWorker.php',
'FeedPushWorker' => 'applications/feed/worker/FeedPushWorker.php',
'FeedQueryConduitAPIMethod' => 'applications/feed/conduit/FeedQueryConduitAPIMethod.php',
'FeedStoryNotificationGarbageCollector' => 'applications/notification/garbagecollector/FeedStoryNotificationGarbageCollector.php',
'FileAllocateConduitAPIMethod' => 'applications/files/conduit/FileAllocateConduitAPIMethod.php',
'FileConduitAPIMethod' => 'applications/files/conduit/FileConduitAPIMethod.php',
'FileCreateMailReceiver' => 'applications/files/mail/FileCreateMailReceiver.php',
'FileDownloadConduitAPIMethod' => 'applications/files/conduit/FileDownloadConduitAPIMethod.php',
'FileInfoConduitAPIMethod' => 'applications/files/conduit/FileInfoConduitAPIMethod.php',
'FileMailReceiver' => 'applications/files/mail/FileMailReceiver.php',
'FileQueryChunksConduitAPIMethod' => 'applications/files/conduit/FileQueryChunksConduitAPIMethod.php',
'FileReplyHandler' => 'applications/files/mail/FileReplyHandler.php',
'FileUploadChunkConduitAPIMethod' => 'applications/files/conduit/FileUploadChunkConduitAPIMethod.php',
'FileUploadConduitAPIMethod' => 'applications/files/conduit/FileUploadConduitAPIMethod.php',
'FileUploadHashConduitAPIMethod' => 'applications/files/conduit/FileUploadHashConduitAPIMethod.php',
'FilesDefaultViewCapability' => 'applications/files/capability/FilesDefaultViewCapability.php',
'FlagConduitAPIMethod' => 'applications/flag/conduit/FlagConduitAPIMethod.php',
'FlagDeleteConduitAPIMethod' => 'applications/flag/conduit/FlagDeleteConduitAPIMethod.php',
'FlagEditConduitAPIMethod' => 'applications/flag/conduit/FlagEditConduitAPIMethod.php',
'FlagQueryConduitAPIMethod' => 'applications/flag/conduit/FlagQueryConduitAPIMethod.php',
'FundBacker' => 'applications/fund/storage/FundBacker.php',
'FundBackerCart' => 'applications/fund/phortune/FundBackerCart.php',
'FundBackerEditor' => 'applications/fund/editor/FundBackerEditor.php',
'FundBackerListController' => 'applications/fund/controller/FundBackerListController.php',
'FundBackerPHIDType' => 'applications/fund/phid/FundBackerPHIDType.php',
'FundBackerProduct' => 'applications/fund/phortune/FundBackerProduct.php',
'FundBackerQuery' => 'applications/fund/query/FundBackerQuery.php',
'FundBackerSearchEngine' => 'applications/fund/query/FundBackerSearchEngine.php',
'FundBackerTransaction' => 'applications/fund/storage/FundBackerTransaction.php',
'FundBackerTransactionQuery' => 'applications/fund/query/FundBackerTransactionQuery.php',
'FundController' => 'applications/fund/controller/FundController.php',
'FundCreateInitiativesCapability' => 'applications/fund/capability/FundCreateInitiativesCapability.php',
'FundDAO' => 'applications/fund/storage/FundDAO.php',
'FundDefaultViewCapability' => 'applications/fund/capability/FundDefaultViewCapability.php',
'FundInitiative' => 'applications/fund/storage/FundInitiative.php',
'FundInitiativeBackController' => 'applications/fund/controller/FundInitiativeBackController.php',
'FundInitiativeCloseController' => 'applications/fund/controller/FundInitiativeCloseController.php',
'FundInitiativeEditController' => 'applications/fund/controller/FundInitiativeEditController.php',
'FundInitiativeEditor' => 'applications/fund/editor/FundInitiativeEditor.php',
'FundInitiativeIndexer' => 'applications/fund/search/FundInitiativeIndexer.php',
'FundInitiativeListController' => 'applications/fund/controller/FundInitiativeListController.php',
'FundInitiativePHIDType' => 'applications/fund/phid/FundInitiativePHIDType.php',
'FundInitiativeQuery' => 'applications/fund/query/FundInitiativeQuery.php',
'FundInitiativeRemarkupRule' => 'applications/fund/remarkup/FundInitiativeRemarkupRule.php',
'FundInitiativeReplyHandler' => 'applications/fund/mail/FundInitiativeReplyHandler.php',
'FundInitiativeSearchEngine' => 'applications/fund/query/FundInitiativeSearchEngine.php',
'FundInitiativeTransaction' => 'applications/fund/storage/FundInitiativeTransaction.php',
'FundInitiativeTransactionQuery' => 'applications/fund/query/FundInitiativeTransactionQuery.php',
'FundInitiativeViewController' => 'applications/fund/controller/FundInitiativeViewController.php',
'FundSchemaSpec' => 'applications/fund/storage/FundSchemaSpec.php',
'HarbormasterArcLintBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterArcLintBuildStepImplementation.php',
'HarbormasterArcUnitBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterArcUnitBuildStepImplementation.php',
'HarbormasterArtifact' => 'applications/harbormaster/artifact/HarbormasterArtifact.php',
'HarbormasterAutotargetsTestCase' => 'applications/harbormaster/__tests__/HarbormasterAutotargetsTestCase.php',
'HarbormasterBuild' => 'applications/harbormaster/storage/build/HarbormasterBuild.php',
'HarbormasterBuildAbortedException' => 'applications/harbormaster/exception/HarbormasterBuildAbortedException.php',
'HarbormasterBuildActionController' => 'applications/harbormaster/controller/HarbormasterBuildActionController.php',
'HarbormasterBuildArcanistAutoplan' => 'applications/harbormaster/autoplan/HarbormasterBuildArcanistAutoplan.php',
'HarbormasterBuildArtifact' => 'applications/harbormaster/storage/build/HarbormasterBuildArtifact.php',
'HarbormasterBuildArtifactPHIDType' => 'applications/harbormaster/phid/HarbormasterBuildArtifactPHIDType.php',
'HarbormasterBuildArtifactQuery' => 'applications/harbormaster/query/HarbormasterBuildArtifactQuery.php',
'HarbormasterBuildAutoplan' => 'applications/harbormaster/autoplan/HarbormasterBuildAutoplan.php',
'HarbormasterBuildCommand' => 'applications/harbormaster/storage/HarbormasterBuildCommand.php',
'HarbormasterBuildDependencyDatasource' => 'applications/harbormaster/typeahead/HarbormasterBuildDependencyDatasource.php',
'HarbormasterBuildEngine' => 'applications/harbormaster/engine/HarbormasterBuildEngine.php',
'HarbormasterBuildFailureException' => 'applications/harbormaster/exception/HarbormasterBuildFailureException.php',
'HarbormasterBuildGraph' => 'applications/harbormaster/engine/HarbormasterBuildGraph.php',
'HarbormasterBuildLintMessage' => 'applications/harbormaster/storage/build/HarbormasterBuildLintMessage.php',
'HarbormasterBuildLog' => 'applications/harbormaster/storage/build/HarbormasterBuildLog.php',
'HarbormasterBuildLogPHIDType' => 'applications/harbormaster/phid/HarbormasterBuildLogPHIDType.php',
'HarbormasterBuildLogQuery' => 'applications/harbormaster/query/HarbormasterBuildLogQuery.php',
'HarbormasterBuildMessage' => 'applications/harbormaster/storage/HarbormasterBuildMessage.php',
'HarbormasterBuildMessageQuery' => 'applications/harbormaster/query/HarbormasterBuildMessageQuery.php',
'HarbormasterBuildPHIDType' => 'applications/harbormaster/phid/HarbormasterBuildPHIDType.php',
'HarbormasterBuildPlan' => 'applications/harbormaster/storage/configuration/HarbormasterBuildPlan.php',
'HarbormasterBuildPlanDatasource' => 'applications/harbormaster/typeahead/HarbormasterBuildPlanDatasource.php',
'HarbormasterBuildPlanEditor' => 'applications/harbormaster/editor/HarbormasterBuildPlanEditor.php',
'HarbormasterBuildPlanPHIDType' => 'applications/harbormaster/phid/HarbormasterBuildPlanPHIDType.php',
'HarbormasterBuildPlanQuery' => 'applications/harbormaster/query/HarbormasterBuildPlanQuery.php',
'HarbormasterBuildPlanSearchEngine' => 'applications/harbormaster/query/HarbormasterBuildPlanSearchEngine.php',
'HarbormasterBuildPlanTransaction' => 'applications/harbormaster/storage/configuration/HarbormasterBuildPlanTransaction.php',
'HarbormasterBuildPlanTransactionQuery' => 'applications/harbormaster/query/HarbormasterBuildPlanTransactionQuery.php',
'HarbormasterBuildQuery' => 'applications/harbormaster/query/HarbormasterBuildQuery.php',
'HarbormasterBuildStep' => 'applications/harbormaster/storage/configuration/HarbormasterBuildStep.php',
'HarbormasterBuildStepCoreCustomField' => 'applications/harbormaster/customfield/HarbormasterBuildStepCoreCustomField.php',
'HarbormasterBuildStepCustomField' => 'applications/harbormaster/customfield/HarbormasterBuildStepCustomField.php',
'HarbormasterBuildStepEditor' => 'applications/harbormaster/editor/HarbormasterBuildStepEditor.php',
'HarbormasterBuildStepGroup' => 'applications/harbormaster/stepgroup/HarbormasterBuildStepGroup.php',
'HarbormasterBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterBuildStepImplementation.php',
'HarbormasterBuildStepImplementationTestCase' => 'applications/harbormaster/step/__tests__/HarbormasterBuildStepImplementationTestCase.php',
'HarbormasterBuildStepPHIDType' => 'applications/harbormaster/phid/HarbormasterBuildStepPHIDType.php',
'HarbormasterBuildStepQuery' => 'applications/harbormaster/query/HarbormasterBuildStepQuery.php',
'HarbormasterBuildStepTransaction' => 'applications/harbormaster/storage/configuration/HarbormasterBuildStepTransaction.php',
'HarbormasterBuildStepTransactionQuery' => 'applications/harbormaster/query/HarbormasterBuildStepTransactionQuery.php',
'HarbormasterBuildTarget' => 'applications/harbormaster/storage/build/HarbormasterBuildTarget.php',
'HarbormasterBuildTargetPHIDType' => 'applications/harbormaster/phid/HarbormasterBuildTargetPHIDType.php',
'HarbormasterBuildTargetQuery' => 'applications/harbormaster/query/HarbormasterBuildTargetQuery.php',
'HarbormasterBuildTransaction' => 'applications/harbormaster/storage/HarbormasterBuildTransaction.php',
'HarbormasterBuildTransactionEditor' => 'applications/harbormaster/editor/HarbormasterBuildTransactionEditor.php',
'HarbormasterBuildTransactionQuery' => 'applications/harbormaster/query/HarbormasterBuildTransactionQuery.php',
'HarbormasterBuildUnitMessage' => 'applications/harbormaster/storage/build/HarbormasterBuildUnitMessage.php',
'HarbormasterBuildViewController' => 'applications/harbormaster/controller/HarbormasterBuildViewController.php',
'HarbormasterBuildWorker' => 'applications/harbormaster/worker/HarbormasterBuildWorker.php',
'HarbormasterBuildable' => 'applications/harbormaster/storage/HarbormasterBuildable.php',
'HarbormasterBuildableActionController' => 'applications/harbormaster/controller/HarbormasterBuildableActionController.php',
'HarbormasterBuildableAdapterInterface' => 'applications/harbormaster/herald/HarbormasterBuildableAdapterInterface.php',
'HarbormasterBuildableInterface' => 'applications/harbormaster/interface/HarbormasterBuildableInterface.php',
'HarbormasterBuildableListController' => 'applications/harbormaster/controller/HarbormasterBuildableListController.php',
'HarbormasterBuildablePHIDType' => 'applications/harbormaster/phid/HarbormasterBuildablePHIDType.php',
'HarbormasterBuildableQuery' => 'applications/harbormaster/query/HarbormasterBuildableQuery.php',
'HarbormasterBuildableSearchEngine' => 'applications/harbormaster/query/HarbormasterBuildableSearchEngine.php',
'HarbormasterBuildableTransaction' => 'applications/harbormaster/storage/HarbormasterBuildableTransaction.php',
'HarbormasterBuildableTransactionEditor' => 'applications/harbormaster/editor/HarbormasterBuildableTransactionEditor.php',
'HarbormasterBuildableTransactionQuery' => 'applications/harbormaster/query/HarbormasterBuildableTransactionQuery.php',
'HarbormasterBuildableViewController' => 'applications/harbormaster/controller/HarbormasterBuildableViewController.php',
'HarbormasterBuiltinBuildStepGroup' => 'applications/harbormaster/stepgroup/HarbormasterBuiltinBuildStepGroup.php',
'HarbormasterCommandBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterCommandBuildStepImplementation.php',
'HarbormasterConduitAPIMethod' => 'applications/harbormaster/conduit/HarbormasterConduitAPIMethod.php',
'HarbormasterController' => 'applications/harbormaster/controller/HarbormasterController.php',
'HarbormasterCreateArtifactConduitAPIMethod' => 'applications/harbormaster/conduit/HarbormasterCreateArtifactConduitAPIMethod.php',
'HarbormasterDAO' => 'applications/harbormaster/storage/HarbormasterDAO.php',
'HarbormasterExternalBuildStepGroup' => 'applications/harbormaster/stepgroup/HarbormasterExternalBuildStepGroup.php',
'HarbormasterFileArtifact' => 'applications/harbormaster/artifact/HarbormasterFileArtifact.php',
'HarbormasterHTTPRequestBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterHTTPRequestBuildStepImplementation.php',
'HarbormasterHostArtifact' => 'applications/harbormaster/artifact/HarbormasterHostArtifact.php',
'HarbormasterLeaseHostBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterLeaseHostBuildStepImplementation.php',
'HarbormasterLintMessagesController' => 'applications/harbormaster/controller/HarbormasterLintMessagesController.php',
'HarbormasterLintPropertyView' => 'applications/harbormaster/view/HarbormasterLintPropertyView.php',
'HarbormasterManagePlansCapability' => 'applications/harbormaster/capability/HarbormasterManagePlansCapability.php',
'HarbormasterManagementBuildWorkflow' => 'applications/harbormaster/management/HarbormasterManagementBuildWorkflow.php',
'HarbormasterManagementUpdateWorkflow' => 'applications/harbormaster/management/HarbormasterManagementUpdateWorkflow.php',
'HarbormasterManagementWorkflow' => 'applications/harbormaster/management/HarbormasterManagementWorkflow.php',
'HarbormasterMessageType' => 'applications/harbormaster/engine/HarbormasterMessageType.php',
'HarbormasterObject' => 'applications/harbormaster/storage/HarbormasterObject.php',
'HarbormasterOtherBuildStepGroup' => 'applications/harbormaster/stepgroup/HarbormasterOtherBuildStepGroup.php',
'HarbormasterPlanController' => 'applications/harbormaster/controller/HarbormasterPlanController.php',
'HarbormasterPlanDisableController' => 'applications/harbormaster/controller/HarbormasterPlanDisableController.php',
'HarbormasterPlanEditController' => 'applications/harbormaster/controller/HarbormasterPlanEditController.php',
'HarbormasterPlanListController' => 'applications/harbormaster/controller/HarbormasterPlanListController.php',
'HarbormasterPlanRunController' => 'applications/harbormaster/controller/HarbormasterPlanRunController.php',
'HarbormasterPlanViewController' => 'applications/harbormaster/controller/HarbormasterPlanViewController.php',
'HarbormasterPrototypeBuildStepGroup' => 'applications/harbormaster/stepgroup/HarbormasterPrototypeBuildStepGroup.php',
'HarbormasterPublishFragmentBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterPublishFragmentBuildStepImplementation.php',
'HarbormasterQueryAutotargetsConduitAPIMethod' => 'applications/harbormaster/conduit/HarbormasterQueryAutotargetsConduitAPIMethod.php',
'HarbormasterQueryBuildablesConduitAPIMethod' => 'applications/harbormaster/conduit/HarbormasterQueryBuildablesConduitAPIMethod.php',
'HarbormasterQueryBuildsConduitAPIMethod' => 'applications/harbormaster/conduit/HarbormasterQueryBuildsConduitAPIMethod.php',
'HarbormasterRemarkupRule' => 'applications/harbormaster/remarkup/HarbormasterRemarkupRule.php',
'HarbormasterRunBuildPlansHeraldAction' => 'applications/harbormaster/herald/HarbormasterRunBuildPlansHeraldAction.php',
'HarbormasterSchemaSpec' => 'applications/harbormaster/storage/HarbormasterSchemaSpec.php',
'HarbormasterScratchTable' => 'applications/harbormaster/storage/HarbormasterScratchTable.php',
'HarbormasterSendMessageConduitAPIMethod' => 'applications/harbormaster/conduit/HarbormasterSendMessageConduitAPIMethod.php',
'HarbormasterSleepBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterSleepBuildStepImplementation.php',
'HarbormasterStepAddController' => 'applications/harbormaster/controller/HarbormasterStepAddController.php',
'HarbormasterStepDeleteController' => 'applications/harbormaster/controller/HarbormasterStepDeleteController.php',
'HarbormasterStepEditController' => 'applications/harbormaster/controller/HarbormasterStepEditController.php',
'HarbormasterTargetEngine' => 'applications/harbormaster/engine/HarbormasterTargetEngine.php',
'HarbormasterTargetWorker' => 'applications/harbormaster/worker/HarbormasterTargetWorker.php',
'HarbormasterTestBuildStepGroup' => 'applications/harbormaster/stepgroup/HarbormasterTestBuildStepGroup.php',
'HarbormasterThrowExceptionBuildStep' => 'applications/harbormaster/step/HarbormasterThrowExceptionBuildStep.php',
'HarbormasterUIEventListener' => 'applications/harbormaster/event/HarbormasterUIEventListener.php',
'HarbormasterURIArtifact' => 'applications/harbormaster/artifact/HarbormasterURIArtifact.php',
'HarbormasterUnitMessagesController' => 'applications/harbormaster/controller/HarbormasterUnitMessagesController.php',
'HarbormasterUnitPropertyView' => 'applications/harbormaster/view/HarbormasterUnitPropertyView.php',
'HarbormasterUploadArtifactBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterUploadArtifactBuildStepImplementation.php',
'HarbormasterWaitForPreviousBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterWaitForPreviousBuildStepImplementation.php',
'HarbormasterWorker' => 'applications/harbormaster/worker/HarbormasterWorker.php',
'HeraldAction' => 'applications/herald/action/HeraldAction.php',
'HeraldActionGroup' => 'applications/herald/action/HeraldActionGroup.php',
'HeraldActionRecord' => 'applications/herald/storage/HeraldActionRecord.php',
'HeraldAdapter' => 'applications/herald/adapter/HeraldAdapter.php',
'HeraldAlwaysField' => 'applications/herald/field/HeraldAlwaysField.php',
'HeraldAnotherRuleField' => 'applications/herald/field/HeraldAnotherRuleField.php',
'HeraldApplicationActionGroup' => 'applications/herald/action/HeraldApplicationActionGroup.php',
'HeraldApplyTranscript' => 'applications/herald/storage/transcript/HeraldApplyTranscript.php',
'HeraldBasicFieldGroup' => 'applications/herald/field/HeraldBasicFieldGroup.php',
'HeraldCommitAdapter' => 'applications/diffusion/herald/HeraldCommitAdapter.php',
'HeraldCondition' => 'applications/herald/storage/HeraldCondition.php',
'HeraldConditionTranscript' => 'applications/herald/storage/transcript/HeraldConditionTranscript.php',
'HeraldContentSourceField' => 'applications/herald/field/HeraldContentSourceField.php',
'HeraldController' => 'applications/herald/controller/HeraldController.php',
'HeraldDAO' => 'applications/herald/storage/HeraldDAO.php',
'HeraldDifferentialAdapter' => 'applications/differential/herald/HeraldDifferentialAdapter.php',
'HeraldDifferentialDiffAdapter' => 'applications/differential/herald/HeraldDifferentialDiffAdapter.php',
'HeraldDifferentialRevisionAdapter' => 'applications/differential/herald/HeraldDifferentialRevisionAdapter.php',
'HeraldDisableController' => 'applications/herald/controller/HeraldDisableController.php',
'HeraldDoNothingAction' => 'applications/herald/action/HeraldDoNothingAction.php',
'HeraldEditFieldGroup' => 'applications/herald/field/HeraldEditFieldGroup.php',
'HeraldEffect' => 'applications/herald/engine/HeraldEffect.php',
'HeraldEmptyFieldValue' => 'applications/herald/value/HeraldEmptyFieldValue.php',
'HeraldEngine' => 'applications/herald/engine/HeraldEngine.php',
'HeraldField' => 'applications/herald/field/HeraldField.php',
'HeraldFieldGroup' => 'applications/herald/field/HeraldFieldGroup.php',
'HeraldFieldTestCase' => 'applications/herald/field/__tests__/HeraldFieldTestCase.php',
'HeraldFieldValue' => 'applications/herald/value/HeraldFieldValue.php',
'HeraldGroup' => 'applications/herald/group/HeraldGroup.php',
'HeraldInvalidActionException' => 'applications/herald/engine/exception/HeraldInvalidActionException.php',
'HeraldInvalidConditionException' => 'applications/herald/engine/exception/HeraldInvalidConditionException.php',
'HeraldManageGlobalRulesCapability' => 'applications/herald/capability/HeraldManageGlobalRulesCapability.php',
'HeraldManiphestTaskAdapter' => 'applications/maniphest/herald/HeraldManiphestTaskAdapter.php',
'HeraldNewController' => 'applications/herald/controller/HeraldNewController.php',
'HeraldNewObjectField' => 'applications/herald/field/HeraldNewObjectField.php',
'HeraldNotifyActionGroup' => 'applications/herald/action/HeraldNotifyActionGroup.php',
'HeraldObjectTranscript' => 'applications/herald/storage/transcript/HeraldObjectTranscript.php',
'HeraldPholioMockAdapter' => 'applications/pholio/herald/HeraldPholioMockAdapter.php',
'HeraldPonderQuestionAdapter' => 'applications/ponder/herald/HeraldPonderQuestionAdapter.php',
'HeraldPreCommitAdapter' => 'applications/diffusion/herald/HeraldPreCommitAdapter.php',
'HeraldPreCommitContentAdapter' => 'applications/diffusion/herald/HeraldPreCommitContentAdapter.php',
'HeraldPreCommitRefAdapter' => 'applications/diffusion/herald/HeraldPreCommitRefAdapter.php',
'HeraldPreventActionGroup' => 'applications/herald/action/HeraldPreventActionGroup.php',
'HeraldProjectsField' => 'applications/project/herald/HeraldProjectsField.php',
'HeraldRecursiveConditionsException' => 'applications/herald/engine/exception/HeraldRecursiveConditionsException.php',
'HeraldRelatedFieldGroup' => 'applications/herald/field/HeraldRelatedFieldGroup.php',
'HeraldRemarkupRule' => 'applications/herald/remarkup/HeraldRemarkupRule.php',
'HeraldRepetitionPolicyConfig' => 'applications/herald/config/HeraldRepetitionPolicyConfig.php',
'HeraldRule' => 'applications/herald/storage/HeraldRule.php',
'HeraldRuleController' => 'applications/herald/controller/HeraldRuleController.php',
'HeraldRuleEditor' => 'applications/herald/editor/HeraldRuleEditor.php',
'HeraldRuleListController' => 'applications/herald/controller/HeraldRuleListController.php',
'HeraldRulePHIDType' => 'applications/herald/phid/HeraldRulePHIDType.php',
'HeraldRuleQuery' => 'applications/herald/query/HeraldRuleQuery.php',
'HeraldRuleSearchEngine' => 'applications/herald/query/HeraldRuleSearchEngine.php',
'HeraldRuleTestCase' => 'applications/herald/storage/__tests__/HeraldRuleTestCase.php',
'HeraldRuleTransaction' => 'applications/herald/storage/HeraldRuleTransaction.php',
'HeraldRuleTransactionComment' => 'applications/herald/storage/HeraldRuleTransactionComment.php',
'HeraldRuleTranscript' => 'applications/herald/storage/transcript/HeraldRuleTranscript.php',
'HeraldRuleTypeConfig' => 'applications/herald/config/HeraldRuleTypeConfig.php',
'HeraldRuleViewController' => 'applications/herald/controller/HeraldRuleViewController.php',
'HeraldSchemaSpec' => 'applications/herald/storage/HeraldSchemaSpec.php',
'HeraldSelectFieldValue' => 'applications/herald/value/HeraldSelectFieldValue.php',
'HeraldSpaceField' => 'applications/spaces/herald/HeraldSpaceField.php',
'HeraldSubscribersField' => 'applications/subscriptions/herald/HeraldSubscribersField.php',
'HeraldSupportActionGroup' => 'applications/herald/action/HeraldSupportActionGroup.php',
'HeraldSupportFieldGroup' => 'applications/herald/field/HeraldSupportFieldGroup.php',
'HeraldTestConsoleController' => 'applications/herald/controller/HeraldTestConsoleController.php',
'HeraldTextFieldValue' => 'applications/herald/value/HeraldTextFieldValue.php',
'HeraldTokenizerFieldValue' => 'applications/herald/value/HeraldTokenizerFieldValue.php',
'HeraldTransactionQuery' => 'applications/herald/query/HeraldTransactionQuery.php',
'HeraldTranscript' => 'applications/herald/storage/transcript/HeraldTranscript.php',
'HeraldTranscriptController' => 'applications/herald/controller/HeraldTranscriptController.php',
'HeraldTranscriptGarbageCollector' => 'applications/herald/garbagecollector/HeraldTranscriptGarbageCollector.php',
'HeraldTranscriptListController' => 'applications/herald/controller/HeraldTranscriptListController.php',
'HeraldTranscriptQuery' => 'applications/herald/query/HeraldTranscriptQuery.php',
'HeraldTranscriptSearchEngine' => 'applications/herald/query/HeraldTranscriptSearchEngine.php',
'HeraldTranscriptTestCase' => 'applications/herald/storage/__tests__/HeraldTranscriptTestCase.php',
'HeraldUtilityActionGroup' => 'applications/herald/action/HeraldUtilityActionGroup.php',
'Javelin' => 'infrastructure/javelin/Javelin.php',
'JavelinReactorUIExample' => 'applications/uiexample/examples/JavelinReactorUIExample.php',
'JavelinUIExample' => 'applications/uiexample/examples/JavelinUIExample.php',
'JavelinViewExampleServerView' => 'applications/uiexample/examples/JavelinViewExampleServerView.php',
'JavelinViewUIExample' => 'applications/uiexample/examples/JavelinViewUIExample.php',
'LegalpadController' => 'applications/legalpad/controller/LegalpadController.php',
'LegalpadCreateDocumentsCapability' => 'applications/legalpad/capability/LegalpadCreateDocumentsCapability.php',
'LegalpadDAO' => 'applications/legalpad/storage/LegalpadDAO.php',
'LegalpadDefaultEditCapability' => 'applications/legalpad/capability/LegalpadDefaultEditCapability.php',
'LegalpadDefaultViewCapability' => 'applications/legalpad/capability/LegalpadDefaultViewCapability.php',
'LegalpadDocument' => 'applications/legalpad/storage/LegalpadDocument.php',
'LegalpadDocumentBody' => 'applications/legalpad/storage/LegalpadDocumentBody.php',
'LegalpadDocumentCommentController' => 'applications/legalpad/controller/LegalpadDocumentCommentController.php',
'LegalpadDocumentDatasource' => 'applications/legalpad/typeahead/LegalpadDocumentDatasource.php',
'LegalpadDocumentDoneController' => 'applications/legalpad/controller/LegalpadDocumentDoneController.php',
'LegalpadDocumentEditController' => 'applications/legalpad/controller/LegalpadDocumentEditController.php',
'LegalpadDocumentEditor' => 'applications/legalpad/editor/LegalpadDocumentEditor.php',
'LegalpadDocumentListController' => 'applications/legalpad/controller/LegalpadDocumentListController.php',
'LegalpadDocumentManageController' => 'applications/legalpad/controller/LegalpadDocumentManageController.php',
'LegalpadDocumentQuery' => 'applications/legalpad/query/LegalpadDocumentQuery.php',
'LegalpadDocumentRemarkupRule' => 'applications/legalpad/remarkup/LegalpadDocumentRemarkupRule.php',
'LegalpadDocumentSearchEngine' => 'applications/legalpad/query/LegalpadDocumentSearchEngine.php',
'LegalpadDocumentSignController' => 'applications/legalpad/controller/LegalpadDocumentSignController.php',
'LegalpadDocumentSignature' => 'applications/legalpad/storage/LegalpadDocumentSignature.php',
'LegalpadDocumentSignatureAddController' => 'applications/legalpad/controller/LegalpadDocumentSignatureAddController.php',
'LegalpadDocumentSignatureListController' => 'applications/legalpad/controller/LegalpadDocumentSignatureListController.php',
'LegalpadDocumentSignatureQuery' => 'applications/legalpad/query/LegalpadDocumentSignatureQuery.php',
'LegalpadDocumentSignatureSearchEngine' => 'applications/legalpad/query/LegalpadDocumentSignatureSearchEngine.php',
'LegalpadDocumentSignatureVerificationController' => 'applications/legalpad/controller/LegalpadDocumentSignatureVerificationController.php',
'LegalpadDocumentSignatureViewController' => 'applications/legalpad/controller/LegalpadDocumentSignatureViewController.php',
'LegalpadMailReceiver' => 'applications/legalpad/mail/LegalpadMailReceiver.php',
'LegalpadObjectNeedsSignatureEdgeType' => 'applications/legalpad/edge/LegalpadObjectNeedsSignatureEdgeType.php',
'LegalpadReplyHandler' => 'applications/legalpad/mail/LegalpadReplyHandler.php',
'LegalpadRequireSignatureHeraldAction' => 'applications/legalpad/herald/LegalpadRequireSignatureHeraldAction.php',
'LegalpadSchemaSpec' => 'applications/legalpad/storage/LegalpadSchemaSpec.php',
'LegalpadSignatureNeededByObjectEdgeType' => 'applications/legalpad/edge/LegalpadSignatureNeededByObjectEdgeType.php',
'LegalpadTransaction' => 'applications/legalpad/storage/LegalpadTransaction.php',
'LegalpadTransactionComment' => 'applications/legalpad/storage/LegalpadTransactionComment.php',
'LegalpadTransactionQuery' => 'applications/legalpad/query/LegalpadTransactionQuery.php',
'LegalpadTransactionView' => 'applications/legalpad/view/LegalpadTransactionView.php',
'LiskChunkTestCase' => 'infrastructure/storage/lisk/__tests__/LiskChunkTestCase.php',
'LiskDAO' => 'infrastructure/storage/lisk/LiskDAO.php',
'LiskDAOSet' => 'infrastructure/storage/lisk/LiskDAOSet.php',
'LiskDAOTestCase' => 'infrastructure/storage/lisk/__tests__/LiskDAOTestCase.php',
'LiskEphemeralObjectException' => 'infrastructure/storage/lisk/LiskEphemeralObjectException.php',
'LiskFixtureTestCase' => 'infrastructure/storage/lisk/__tests__/LiskFixtureTestCase.php',
'LiskIsolationTestCase' => 'infrastructure/storage/lisk/__tests__/LiskIsolationTestCase.php',
'LiskIsolationTestDAO' => 'infrastructure/storage/lisk/__tests__/LiskIsolationTestDAO.php',
'LiskIsolationTestDAOException' => 'infrastructure/storage/lisk/__tests__/LiskIsolationTestDAOException.php',
'LiskMigrationIterator' => 'infrastructure/storage/lisk/LiskMigrationIterator.php',
'LiskRawMigrationIterator' => 'infrastructure/storage/lisk/LiskRawMigrationIterator.php',
'MacroConduitAPIMethod' => 'applications/macro/conduit/MacroConduitAPIMethod.php',
'MacroCreateMemeConduitAPIMethod' => 'applications/macro/conduit/MacroCreateMemeConduitAPIMethod.php',
'MacroQueryConduitAPIMethod' => 'applications/macro/conduit/MacroQueryConduitAPIMethod.php',
'ManiphestAssignEmailCommand' => 'applications/maniphest/command/ManiphestAssignEmailCommand.php',
'ManiphestAssigneeDatasource' => 'applications/maniphest/typeahead/ManiphestAssigneeDatasource.php',
'ManiphestBatchEditController' => 'applications/maniphest/controller/ManiphestBatchEditController.php',
'ManiphestBulkEditCapability' => 'applications/maniphest/capability/ManiphestBulkEditCapability.php',
'ManiphestClaimEmailCommand' => 'applications/maniphest/command/ManiphestClaimEmailCommand.php',
'ManiphestCloseEmailCommand' => 'applications/maniphest/command/ManiphestCloseEmailCommand.php',
'ManiphestConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestConduitAPIMethod.php',
'ManiphestConfiguredCustomField' => 'applications/maniphest/field/ManiphestConfiguredCustomField.php',
'ManiphestConstants' => 'applications/maniphest/constants/ManiphestConstants.php',
'ManiphestController' => 'applications/maniphest/controller/ManiphestController.php',
'ManiphestCreateMailReceiver' => 'applications/maniphest/mail/ManiphestCreateMailReceiver.php',
'ManiphestCreateTaskConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestCreateTaskConduitAPIMethod.php',
'ManiphestCustomField' => 'applications/maniphest/field/ManiphestCustomField.php',
'ManiphestCustomFieldNumericIndex' => 'applications/maniphest/storage/ManiphestCustomFieldNumericIndex.php',
'ManiphestCustomFieldStatusParser' => 'applications/maniphest/field/parser/ManiphestCustomFieldStatusParser.php',
'ManiphestCustomFieldStatusParserTestCase' => 'applications/maniphest/field/parser/__tests__/ManiphestCustomFieldStatusParserTestCase.php',
'ManiphestCustomFieldStorage' => 'applications/maniphest/storage/ManiphestCustomFieldStorage.php',
'ManiphestCustomFieldStringIndex' => 'applications/maniphest/storage/ManiphestCustomFieldStringIndex.php',
'ManiphestDAO' => 'applications/maniphest/storage/ManiphestDAO.php',
'ManiphestDefaultEditCapability' => 'applications/maniphest/capability/ManiphestDefaultEditCapability.php',
'ManiphestDefaultViewCapability' => 'applications/maniphest/capability/ManiphestDefaultViewCapability.php',
'ManiphestEditAssignCapability' => 'applications/maniphest/capability/ManiphestEditAssignCapability.php',
'ManiphestEditPoliciesCapability' => 'applications/maniphest/capability/ManiphestEditPoliciesCapability.php',
'ManiphestEditPriorityCapability' => 'applications/maniphest/capability/ManiphestEditPriorityCapability.php',
'ManiphestEditProjectsCapability' => 'applications/maniphest/capability/ManiphestEditProjectsCapability.php',
'ManiphestEditStatusCapability' => 'applications/maniphest/capability/ManiphestEditStatusCapability.php',
'ManiphestEmailCommand' => 'applications/maniphest/command/ManiphestEmailCommand.php',
'ManiphestExcelDefaultFormat' => 'applications/maniphest/export/ManiphestExcelDefaultFormat.php',
'ManiphestExcelFormat' => 'applications/maniphest/export/ManiphestExcelFormat.php',
'ManiphestExcelFormatTestCase' => 'applications/maniphest/export/__tests__/ManiphestExcelFormatTestCase.php',
'ManiphestExportController' => 'applications/maniphest/controller/ManiphestExportController.php',
'ManiphestGetTaskTransactionsConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestGetTaskTransactionsConduitAPIMethod.php',
'ManiphestHovercardEventListener' => 'applications/maniphest/event/ManiphestHovercardEventListener.php',
'ManiphestInfoConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestInfoConduitAPIMethod.php',
'ManiphestNameIndex' => 'applications/maniphest/storage/ManiphestNameIndex.php',
'ManiphestNameIndexEventListener' => 'applications/maniphest/event/ManiphestNameIndexEventListener.php',
'ManiphestPriorityEmailCommand' => 'applications/maniphest/command/ManiphestPriorityEmailCommand.php',
'ManiphestQueryConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestQueryConduitAPIMethod.php',
'ManiphestQueryStatusesConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestQueryStatusesConduitAPIMethod.php',
'ManiphestRemarkupRule' => 'applications/maniphest/remarkup/ManiphestRemarkupRule.php',
'ManiphestReplyHandler' => 'applications/maniphest/mail/ManiphestReplyHandler.php',
'ManiphestReportController' => 'applications/maniphest/controller/ManiphestReportController.php',
'ManiphestSchemaSpec' => 'applications/maniphest/storage/ManiphestSchemaSpec.php',
'ManiphestSearchIndexer' => 'applications/maniphest/search/ManiphestSearchIndexer.php',
'ManiphestStatusConfigOptionType' => 'applications/maniphest/config/ManiphestStatusConfigOptionType.php',
'ManiphestStatusEmailCommand' => 'applications/maniphest/command/ManiphestStatusEmailCommand.php',
'ManiphestSubpriorityController' => 'applications/maniphest/controller/ManiphestSubpriorityController.php',
'ManiphestTask' => 'applications/maniphest/storage/ManiphestTask.php',
'ManiphestTaskAssignHeraldAction' => 'applications/maniphest/herald/ManiphestTaskAssignHeraldAction.php',
'ManiphestTaskAssignOtherHeraldAction' => 'applications/maniphest/herald/ManiphestTaskAssignOtherHeraldAction.php',
'ManiphestTaskAssignSelfHeraldAction' => 'applications/maniphest/herald/ManiphestTaskAssignSelfHeraldAction.php',
'ManiphestTaskAssigneeHeraldField' => 'applications/maniphest/herald/ManiphestTaskAssigneeHeraldField.php',
'ManiphestTaskAuthorHeraldField' => 'applications/maniphest/herald/ManiphestTaskAuthorHeraldField.php',
'ManiphestTaskAuthorPolicyRule' => 'applications/maniphest/policyrule/ManiphestTaskAuthorPolicyRule.php',
'ManiphestTaskClosedStatusDatasource' => 'applications/maniphest/typeahead/ManiphestTaskClosedStatusDatasource.php',
'ManiphestTaskDependedOnByTaskEdgeType' => 'applications/maniphest/edge/ManiphestTaskDependedOnByTaskEdgeType.php',
'ManiphestTaskDependsOnTaskEdgeType' => 'applications/maniphest/edge/ManiphestTaskDependsOnTaskEdgeType.php',
'ManiphestTaskDescriptionHeraldField' => 'applications/maniphest/herald/ManiphestTaskDescriptionHeraldField.php',
'ManiphestTaskDetailController' => 'applications/maniphest/controller/ManiphestTaskDetailController.php',
'ManiphestTaskEditBulkJobType' => 'applications/maniphest/bulk/ManiphestTaskEditBulkJobType.php',
'ManiphestTaskEditController' => 'applications/maniphest/controller/ManiphestTaskEditController.php',
'ManiphestTaskHasCommitEdgeType' => 'applications/maniphest/edge/ManiphestTaskHasCommitEdgeType.php',
'ManiphestTaskHasMockEdgeType' => 'applications/maniphest/edge/ManiphestTaskHasMockEdgeType.php',
'ManiphestTaskHasRevisionEdgeType' => 'applications/maniphest/edge/ManiphestTaskHasRevisionEdgeType.php',
'ManiphestTaskHeraldField' => 'applications/maniphest/herald/ManiphestTaskHeraldField.php',
'ManiphestTaskHeraldFieldGroup' => 'applications/maniphest/herald/ManiphestTaskHeraldFieldGroup.php',
'ManiphestTaskListController' => 'applications/maniphest/controller/ManiphestTaskListController.php',
'ManiphestTaskListView' => 'applications/maniphest/view/ManiphestTaskListView.php',
'ManiphestTaskMailReceiver' => 'applications/maniphest/mail/ManiphestTaskMailReceiver.php',
'ManiphestTaskOpenStatusDatasource' => 'applications/maniphest/typeahead/ManiphestTaskOpenStatusDatasource.php',
'ManiphestTaskPHIDType' => 'applications/maniphest/phid/ManiphestTaskPHIDType.php',
'ManiphestTaskPriority' => 'applications/maniphest/constants/ManiphestTaskPriority.php',
'ManiphestTaskPriorityDatasource' => 'applications/maniphest/typeahead/ManiphestTaskPriorityDatasource.php',
'ManiphestTaskPriorityHeraldField' => 'applications/maniphest/herald/ManiphestTaskPriorityHeraldField.php',
'ManiphestTaskQuery' => 'applications/maniphest/query/ManiphestTaskQuery.php',
'ManiphestTaskResultListView' => 'applications/maniphest/view/ManiphestTaskResultListView.php',
'ManiphestTaskSearchEngine' => 'applications/maniphest/query/ManiphestTaskSearchEngine.php',
'ManiphestTaskStatus' => 'applications/maniphest/constants/ManiphestTaskStatus.php',
'ManiphestTaskStatusDatasource' => 'applications/maniphest/typeahead/ManiphestTaskStatusDatasource.php',
'ManiphestTaskStatusFunctionDatasource' => 'applications/maniphest/typeahead/ManiphestTaskStatusFunctionDatasource.php',
'ManiphestTaskStatusHeraldField' => 'applications/maniphest/herald/ManiphestTaskStatusHeraldField.php',
'ManiphestTaskStatusTestCase' => 'applications/maniphest/constants/__tests__/ManiphestTaskStatusTestCase.php',
'ManiphestTaskTestCase' => 'applications/maniphest/__tests__/ManiphestTaskTestCase.php',
'ManiphestTaskTitleHeraldField' => 'applications/maniphest/herald/ManiphestTaskTitleHeraldField.php',
'ManiphestTransaction' => 'applications/maniphest/storage/ManiphestTransaction.php',
'ManiphestTransactionComment' => 'applications/maniphest/storage/ManiphestTransactionComment.php',
'ManiphestTransactionEditor' => 'applications/maniphest/editor/ManiphestTransactionEditor.php',
'ManiphestTransactionPreviewController' => 'applications/maniphest/controller/ManiphestTransactionPreviewController.php',
'ManiphestTransactionQuery' => 'applications/maniphest/query/ManiphestTransactionQuery.php',
'ManiphestTransactionSaveController' => 'applications/maniphest/controller/ManiphestTransactionSaveController.php',
'ManiphestUpdateConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestUpdateConduitAPIMethod.php',
'ManiphestView' => 'applications/maniphest/view/ManiphestView.php',
'MetaMTAEmailTransactionCommand' => 'applications/metamta/command/MetaMTAEmailTransactionCommand.php',
'MetaMTAEmailTransactionCommandTestCase' => 'applications/metamta/command/__tests__/MetaMTAEmailTransactionCommandTestCase.php',
'MetaMTAMailReceivedGarbageCollector' => 'applications/metamta/garbagecollector/MetaMTAMailReceivedGarbageCollector.php',
'MetaMTAMailSentGarbageCollector' => 'applications/metamta/garbagecollector/MetaMTAMailSentGarbageCollector.php',
'MetaMTAReceivedMailStatus' => 'applications/metamta/constants/MetaMTAReceivedMailStatus.php',
'MultimeterContext' => 'applications/multimeter/storage/MultimeterContext.php',
'MultimeterControl' => 'applications/multimeter/data/MultimeterControl.php',
'MultimeterController' => 'applications/multimeter/controller/MultimeterController.php',
'MultimeterDAO' => 'applications/multimeter/storage/MultimeterDAO.php',
'MultimeterDimension' => 'applications/multimeter/storage/MultimeterDimension.php',
'MultimeterEvent' => 'applications/multimeter/storage/MultimeterEvent.php',
'MultimeterEventGarbageCollector' => 'applications/multimeter/garbagecollector/MultimeterEventGarbageCollector.php',
'MultimeterHost' => 'applications/multimeter/storage/MultimeterHost.php',
'MultimeterLabel' => 'applications/multimeter/storage/MultimeterLabel.php',
'MultimeterSampleController' => 'applications/multimeter/controller/MultimeterSampleController.php',
'MultimeterViewer' => 'applications/multimeter/storage/MultimeterViewer.php',
'NuanceConduitAPIMethod' => 'applications/nuance/conduit/NuanceConduitAPIMethod.php',
'NuanceConsoleController' => 'applications/nuance/controller/NuanceConsoleController.php',
'NuanceController' => 'applications/nuance/controller/NuanceController.php',
'NuanceCreateItemConduitAPIMethod' => 'applications/nuance/conduit/NuanceCreateItemConduitAPIMethod.php',
'NuanceDAO' => 'applications/nuance/storage/NuanceDAO.php',
'NuanceItem' => 'applications/nuance/storage/NuanceItem.php',
'NuanceItemEditController' => 'applications/nuance/controller/NuanceItemEditController.php',
'NuanceItemEditor' => 'applications/nuance/editor/NuanceItemEditor.php',
'NuanceItemPHIDType' => 'applications/nuance/phid/NuanceItemPHIDType.php',
'NuanceItemQuery' => 'applications/nuance/query/NuanceItemQuery.php',
'NuanceItemTransaction' => 'applications/nuance/storage/NuanceItemTransaction.php',
'NuanceItemTransactionComment' => 'applications/nuance/storage/NuanceItemTransactionComment.php',
'NuanceItemTransactionQuery' => 'applications/nuance/query/NuanceItemTransactionQuery.php',
'NuanceItemViewController' => 'applications/nuance/controller/NuanceItemViewController.php',
'NuancePhabricatorFormSourceDefinition' => 'applications/nuance/source/NuancePhabricatorFormSourceDefinition.php',
'NuanceQuery' => 'applications/nuance/query/NuanceQuery.php',
'NuanceQueue' => 'applications/nuance/storage/NuanceQueue.php',
'NuanceQueueDatasource' => 'applications/nuance/typeahead/NuanceQueueDatasource.php',
'NuanceQueueEditController' => 'applications/nuance/controller/NuanceQueueEditController.php',
'NuanceQueueEditor' => 'applications/nuance/editor/NuanceQueueEditor.php',
'NuanceQueueListController' => 'applications/nuance/controller/NuanceQueueListController.php',
'NuanceQueuePHIDType' => 'applications/nuance/phid/NuanceQueuePHIDType.php',
'NuanceQueueQuery' => 'applications/nuance/query/NuanceQueueQuery.php',
'NuanceQueueSearchEngine' => 'applications/nuance/query/NuanceQueueSearchEngine.php',
'NuanceQueueTransaction' => 'applications/nuance/storage/NuanceQueueTransaction.php',
'NuanceQueueTransactionComment' => 'applications/nuance/storage/NuanceQueueTransactionComment.php',
'NuanceQueueTransactionQuery' => 'applications/nuance/query/NuanceQueueTransactionQuery.php',
'NuanceQueueViewController' => 'applications/nuance/controller/NuanceQueueViewController.php',
'NuanceRequestor' => 'applications/nuance/storage/NuanceRequestor.php',
'NuanceRequestorEditController' => 'applications/nuance/controller/NuanceRequestorEditController.php',
'NuanceRequestorEditor' => 'applications/nuance/editor/NuanceRequestorEditor.php',
'NuanceRequestorPHIDType' => 'applications/nuance/phid/NuanceRequestorPHIDType.php',
'NuanceRequestorQuery' => 'applications/nuance/query/NuanceRequestorQuery.php',
'NuanceRequestorSource' => 'applications/nuance/storage/NuanceRequestorSource.php',
'NuanceRequestorTransaction' => 'applications/nuance/storage/NuanceRequestorTransaction.php',
'NuanceRequestorTransactionComment' => 'applications/nuance/storage/NuanceRequestorTransactionComment.php',
'NuanceRequestorTransactionQuery' => 'applications/nuance/query/NuanceRequestorTransactionQuery.php',
'NuanceRequestorViewController' => 'applications/nuance/controller/NuanceRequestorViewController.php',
'NuanceSchemaSpec' => 'applications/nuance/storage/NuanceSchemaSpec.php',
'NuanceSource' => 'applications/nuance/storage/NuanceSource.php',
'NuanceSourceActionController' => 'applications/nuance/controller/NuanceSourceActionController.php',
'NuanceSourceCreateController' => 'applications/nuance/controller/NuanceSourceCreateController.php',
'NuanceSourceDefaultEditCapability' => 'applications/nuance/capability/NuanceSourceDefaultEditCapability.php',
'NuanceSourceDefaultViewCapability' => 'applications/nuance/capability/NuanceSourceDefaultViewCapability.php',
'NuanceSourceDefinition' => 'applications/nuance/source/NuanceSourceDefinition.php',
'NuanceSourceDefinitionTestCase' => 'applications/nuance/source/__tests__/NuanceSourceDefinitionTestCase.php',
'NuanceSourceEditController' => 'applications/nuance/controller/NuanceSourceEditController.php',
'NuanceSourceEditor' => 'applications/nuance/editor/NuanceSourceEditor.php',
'NuanceSourceListController' => 'applications/nuance/controller/NuanceSourceListController.php',
'NuanceSourceManageCapability' => 'applications/nuance/capability/NuanceSourceManageCapability.php',
'NuanceSourcePHIDType' => 'applications/nuance/phid/NuanceSourcePHIDType.php',
'NuanceSourceQuery' => 'applications/nuance/query/NuanceSourceQuery.php',
'NuanceSourceSearchEngine' => 'applications/nuance/query/NuanceSourceSearchEngine.php',
'NuanceSourceTransaction' => 'applications/nuance/storage/NuanceSourceTransaction.php',
'NuanceSourceTransactionComment' => 'applications/nuance/storage/NuanceSourceTransactionComment.php',
'NuanceSourceTransactionQuery' => 'applications/nuance/query/NuanceSourceTransactionQuery.php',
'NuanceSourceViewController' => 'applications/nuance/controller/NuanceSourceViewController.php',
'NuanceTransaction' => 'applications/nuance/storage/NuanceTransaction.php',
'OwnersConduitAPIMethod' => 'applications/owners/conduit/OwnersConduitAPIMethod.php',
'OwnersPackageReplyHandler' => 'applications/owners/mail/OwnersPackageReplyHandler.php',
'OwnersQueryConduitAPIMethod' => 'applications/owners/conduit/OwnersQueryConduitAPIMethod.php',
'PHIDConduitAPIMethod' => 'applications/phid/conduit/PHIDConduitAPIMethod.php',
'PHIDInfoConduitAPIMethod' => 'applications/phid/conduit/PHIDInfoConduitAPIMethod.php',
'PHIDLookupConduitAPIMethod' => 'applications/phid/conduit/PHIDLookupConduitAPIMethod.php',
'PHIDQueryConduitAPIMethod' => 'applications/phid/conduit/PHIDQueryConduitAPIMethod.php',
'PHUI' => 'view/phui/PHUI.php',
'PHUIActionPanelExample' => 'applications/uiexample/examples/PHUIActionPanelExample.php',
'PHUIActionPanelView' => 'view/phui/PHUIActionPanelView.php',
'PHUIBadgeBoxView' => 'view/phui/PHUIBadgeBoxView.php',
'PHUIBadgeExample' => 'applications/uiexample/examples/PHUIBadgeExample.php',
'PHUIBadgeMiniView' => 'view/phui/PHUIBadgeMiniView.php',
'PHUIBadgeView' => 'view/phui/PHUIBadgeView.php',
'PHUIBoxExample' => 'applications/uiexample/examples/PHUIBoxExample.php',
'PHUIBoxView' => 'view/phui/PHUIBoxView.php',
'PHUIButtonBarExample' => 'applications/uiexample/examples/PHUIButtonBarExample.php',
'PHUIButtonBarView' => 'view/phui/PHUIButtonBarView.php',
'PHUIButtonExample' => 'applications/uiexample/examples/PHUIButtonExample.php',
'PHUIButtonView' => 'view/phui/PHUIButtonView.php',
'PHUICalendarDayView' => 'view/phui/calendar/PHUICalendarDayView.php',
'PHUICalendarListView' => 'view/phui/calendar/PHUICalendarListView.php',
'PHUICalendarMonthView' => 'view/phui/calendar/PHUICalendarMonthView.php',
'PHUICalendarWidgetView' => 'view/phui/calendar/PHUICalendarWidgetView.php',
'PHUIColorPalletteExample' => 'applications/uiexample/examples/PHUIColorPalletteExample.php',
'PHUICrumbView' => 'view/phui/PHUICrumbView.php',
'PHUICrumbsView' => 'view/phui/PHUICrumbsView.php',
'PHUIDiffInlineCommentDetailView' => 'infrastructure/diff/view/PHUIDiffInlineCommentDetailView.php',
'PHUIDiffInlineCommentEditView' => 'infrastructure/diff/view/PHUIDiffInlineCommentEditView.php',
'PHUIDiffInlineCommentRowScaffold' => 'infrastructure/diff/view/PHUIDiffInlineCommentRowScaffold.php',
'PHUIDiffInlineCommentTableScaffold' => 'infrastructure/diff/view/PHUIDiffInlineCommentTableScaffold.php',
'PHUIDiffInlineCommentUndoView' => 'infrastructure/diff/view/PHUIDiffInlineCommentUndoView.php',
'PHUIDiffInlineCommentView' => 'infrastructure/diff/view/PHUIDiffInlineCommentView.php',
'PHUIDiffOneUpInlineCommentRowScaffold' => 'infrastructure/diff/view/PHUIDiffOneUpInlineCommentRowScaffold.php',
'PHUIDiffRevealIconView' => 'infrastructure/diff/view/PHUIDiffRevealIconView.php',
'PHUIDiffTableOfContentsItemView' => 'infrastructure/diff/view/PHUIDiffTableOfContentsItemView.php',
'PHUIDiffTableOfContentsListView' => 'infrastructure/diff/view/PHUIDiffTableOfContentsListView.php',
'PHUIDiffTwoUpInlineCommentRowScaffold' => 'infrastructure/diff/view/PHUIDiffTwoUpInlineCommentRowScaffold.php',
'PHUIDocumentExample' => 'applications/uiexample/examples/PHUIDocumentExample.php',
'PHUIDocumentView' => 'view/phui/PHUIDocumentView.php',
'PHUIFeedStoryExample' => 'applications/uiexample/examples/PHUIFeedStoryExample.php',
'PHUIFeedStoryView' => 'view/phui/PHUIFeedStoryView.php',
'PHUIFormDividerControl' => 'view/form/control/PHUIFormDividerControl.php',
'PHUIFormFreeformDateControl' => 'view/form/control/PHUIFormFreeformDateControl.php',
'PHUIFormInsetView' => 'view/form/PHUIFormInsetView.php',
'PHUIFormLayoutView' => 'view/form/PHUIFormLayoutView.php',
'PHUIFormMultiSubmitControl' => 'view/form/control/PHUIFormMultiSubmitControl.php',
'PHUIFormPageView' => 'view/form/PHUIFormPageView.php',
'PHUIHandleListView' => 'applications/phid/view/PHUIHandleListView.php',
'PHUIHandleTagListView' => 'applications/phid/view/PHUIHandleTagListView.php',
'PHUIHandleView' => 'applications/phid/view/PHUIHandleView.php',
'PHUIHeaderView' => 'view/phui/PHUIHeaderView.php',
'PHUIIconExample' => 'applications/uiexample/examples/PHUIIconExample.php',
'PHUIIconView' => 'view/phui/PHUIIconView.php',
'PHUIImageMaskExample' => 'applications/uiexample/examples/PHUIImageMaskExample.php',
'PHUIImageMaskView' => 'view/phui/PHUIImageMaskView.php',
'PHUIInfoExample' => 'applications/uiexample/examples/PHUIInfoExample.php',
'PHUIInfoPanelExample' => 'applications/uiexample/examples/PHUIInfoPanelExample.php',
'PHUIInfoPanelView' => 'view/phui/PHUIInfoPanelView.php',
'PHUIInfoView' => 'view/form/PHUIInfoView.php',
'PHUIListExample' => 'applications/uiexample/examples/PHUIListExample.php',
'PHUIListItemView' => 'view/phui/PHUIListItemView.php',
'PHUIListView' => 'view/phui/PHUIListView.php',
'PHUIListViewTestCase' => 'view/layout/__tests__/PHUIListViewTestCase.php',
'PHUIObjectBoxView' => 'view/phui/PHUIObjectBoxView.php',
'PHUIObjectItemListExample' => 'applications/uiexample/examples/PHUIObjectItemListExample.php',
'PHUIObjectItemListView' => 'view/phui/PHUIObjectItemListView.php',
'PHUIObjectItemView' => 'view/phui/PHUIObjectItemView.php',
'PHUIPagedFormView' => 'view/form/PHUIPagedFormView.php',
'PHUIPagerView' => 'view/phui/PHUIPagerView.php',
'PHUIPinboardItemView' => 'view/phui/PHUIPinboardItemView.php',
'PHUIPinboardView' => 'view/phui/PHUIPinboardView.php',
'PHUIPropertyGroupView' => 'view/phui/PHUIPropertyGroupView.php',
'PHUIPropertyListExample' => 'applications/uiexample/examples/PHUIPropertyListExample.php',
'PHUIPropertyListView' => 'view/phui/PHUIPropertyListView.php',
'PHUIRemarkupPreviewPanel' => 'view/phui/PHUIRemarkupPreviewPanel.php',
'PHUISpacesNamespaceContextView' => 'applications/spaces/view/PHUISpacesNamespaceContextView.php',
'PHUIStatusItemView' => 'view/phui/PHUIStatusItemView.php',
'PHUIStatusListView' => 'view/phui/PHUIStatusListView.php',
'PHUITagExample' => 'applications/uiexample/examples/PHUITagExample.php',
'PHUITagView' => 'view/phui/PHUITagView.php',
'PHUITextExample' => 'applications/uiexample/examples/PHUITextExample.php',
'PHUITextView' => 'view/phui/PHUITextView.php',
'PHUITimelineEventView' => 'view/phui/PHUITimelineEventView.php',
'PHUITimelineExample' => 'applications/uiexample/examples/PHUITimelineExample.php',
'PHUITimelineView' => 'view/phui/PHUITimelineView.php',
'PHUITwoColumnView' => 'view/phui/PHUITwoColumnView.php',
'PHUITypeaheadExample' => 'applications/uiexample/examples/PHUITypeaheadExample.php',
'PHUIWorkboardView' => 'view/phui/PHUIWorkboardView.php',
'PHUIWorkpanelView' => 'view/phui/PHUIWorkpanelView.php',
'PassphraseAbstractKey' => 'applications/passphrase/keys/PassphraseAbstractKey.php',
'PassphraseConduitAPIMethod' => 'applications/passphrase/conduit/PassphraseConduitAPIMethod.php',
'PassphraseController' => 'applications/passphrase/controller/PassphraseController.php',
'PassphraseCredential' => 'applications/passphrase/storage/PassphraseCredential.php',
'PassphraseCredentialAuthorPolicyRule' => 'applications/passphrase/policyrule/PassphraseCredentialAuthorPolicyRule.php',
'PassphraseCredentialConduitController' => 'applications/passphrase/controller/PassphraseCredentialConduitController.php',
'PassphraseCredentialControl' => 'applications/passphrase/view/PassphraseCredentialControl.php',
'PassphraseCredentialCreateController' => 'applications/passphrase/controller/PassphraseCredentialCreateController.php',
'PassphraseCredentialDestroyController' => 'applications/passphrase/controller/PassphraseCredentialDestroyController.php',
'PassphraseCredentialEditController' => 'applications/passphrase/controller/PassphraseCredentialEditController.php',
'PassphraseCredentialListController' => 'applications/passphrase/controller/PassphraseCredentialListController.php',
'PassphraseCredentialLockController' => 'applications/passphrase/controller/PassphraseCredentialLockController.php',
'PassphraseCredentialPHIDType' => 'applications/passphrase/phid/PassphraseCredentialPHIDType.php',
'PassphraseCredentialPublicController' => 'applications/passphrase/controller/PassphraseCredentialPublicController.php',
'PassphraseCredentialQuery' => 'applications/passphrase/query/PassphraseCredentialQuery.php',
'PassphraseCredentialRevealController' => 'applications/passphrase/controller/PassphraseCredentialRevealController.php',
'PassphraseCredentialSearchEngine' => 'applications/passphrase/query/PassphraseCredentialSearchEngine.php',
'PassphraseCredentialTransaction' => 'applications/passphrase/storage/PassphraseCredentialTransaction.php',
'PassphraseCredentialTransactionEditor' => 'applications/passphrase/editor/PassphraseCredentialTransactionEditor.php',
'PassphraseCredentialTransactionQuery' => 'applications/passphrase/query/PassphraseCredentialTransactionQuery.php',
'PassphraseCredentialType' => 'applications/passphrase/credentialtype/PassphraseCredentialType.php',
'PassphraseCredentialTypeTestCase' => 'applications/passphrase/credentialtype/__tests__/PassphraseCredentialTypeTestCase.php',
'PassphraseCredentialViewController' => 'applications/passphrase/controller/PassphraseCredentialViewController.php',
'PassphraseDAO' => 'applications/passphrase/storage/PassphraseDAO.php',
'PassphraseDefaultEditCapability' => 'applications/passphrase/capability/PassphraseDefaultEditCapability.php',
'PassphraseDefaultViewCapability' => 'applications/passphrase/capability/PassphraseDefaultViewCapability.php',
'PassphraseNoteCredentialType' => 'applications/passphrase/credentialtype/PassphraseNoteCredentialType.php',
'PassphrasePasswordCredentialType' => 'applications/passphrase/credentialtype/PassphrasePasswordCredentialType.php',
'PassphrasePasswordKey' => 'applications/passphrase/keys/PassphrasePasswordKey.php',
'PassphraseQueryConduitAPIMethod' => 'applications/passphrase/conduit/PassphraseQueryConduitAPIMethod.php',
'PassphraseRemarkupRule' => 'applications/passphrase/remarkup/PassphraseRemarkupRule.php',
'PassphraseSSHGeneratedKeyCredentialType' => 'applications/passphrase/credentialtype/PassphraseSSHGeneratedKeyCredentialType.php',
'PassphraseSSHKey' => 'applications/passphrase/keys/PassphraseSSHKey.php',
'PassphraseSSHPrivateKeyCredentialType' => 'applications/passphrase/credentialtype/PassphraseSSHPrivateKeyCredentialType.php',
'PassphraseSSHPrivateKeyFileCredentialType' => 'applications/passphrase/credentialtype/PassphraseSSHPrivateKeyFileCredentialType.php',
'PassphraseSSHPrivateKeyTextCredentialType' => 'applications/passphrase/credentialtype/PassphraseSSHPrivateKeyTextCredentialType.php',
'PassphraseSchemaSpec' => 'applications/passphrase/storage/PassphraseSchemaSpec.php',
'PassphraseSearchIndexer' => 'applications/passphrase/search/PassphraseSearchIndexer.php',
'PassphraseSecret' => 'applications/passphrase/storage/PassphraseSecret.php',
'PasteConduitAPIMethod' => 'applications/paste/conduit/PasteConduitAPIMethod.php',
'PasteCreateConduitAPIMethod' => 'applications/paste/conduit/PasteCreateConduitAPIMethod.php',
'PasteCreateMailReceiver' => 'applications/paste/mail/PasteCreateMailReceiver.php',
'PasteDefaultEditCapability' => 'applications/paste/capability/PasteDefaultEditCapability.php',
'PasteDefaultViewCapability' => 'applications/paste/capability/PasteDefaultViewCapability.php',
'PasteEmbedView' => 'applications/paste/view/PasteEmbedView.php',
'PasteInfoConduitAPIMethod' => 'applications/paste/conduit/PasteInfoConduitAPIMethod.php',
'PasteMailReceiver' => 'applications/paste/mail/PasteMailReceiver.php',
'PasteQueryConduitAPIMethod' => 'applications/paste/conduit/PasteQueryConduitAPIMethod.php',
'PasteReplyHandler' => 'applications/paste/mail/PasteReplyHandler.php',
'PeopleBrowseUserDirectoryCapability' => 'applications/people/capability/PeopleBrowseUserDirectoryCapability.php',
'PeopleCreateUsersCapability' => 'applications/people/capability/PeopleCreateUsersCapability.php',
'PeopleUserLogGarbageCollector' => 'applications/people/garbagecollector/PeopleUserLogGarbageCollector.php',
'Phabricator404Controller' => 'applications/base/controller/Phabricator404Controller.php',
'PhabricatorAWSConfigOptions' => 'applications/config/option/PhabricatorAWSConfigOptions.php',
'PhabricatorAccessControlTestCase' => 'applications/base/controller/__tests__/PhabricatorAccessControlTestCase.php',
'PhabricatorAccessLog' => 'infrastructure/log/PhabricatorAccessLog.php',
'PhabricatorAccessLogConfigOptions' => 'applications/config/option/PhabricatorAccessLogConfigOptions.php',
'PhabricatorAccountSettingsPanel' => 'applications/settings/panel/PhabricatorAccountSettingsPanel.php',
'PhabricatorActionListView' => 'view/layout/PhabricatorActionListView.php',
'PhabricatorActionView' => 'view/layout/PhabricatorActionView.php',
'PhabricatorActivitySettingsPanel' => 'applications/settings/panel/PhabricatorActivitySettingsPanel.php',
'PhabricatorAdministratorsPolicyRule' => 'applications/policy/rule/PhabricatorAdministratorsPolicyRule.php',
'PhabricatorAjaxRequestExceptionHandler' => 'aphront/handler/PhabricatorAjaxRequestExceptionHandler.php',
'PhabricatorAlmanacApplication' => 'applications/almanac/application/PhabricatorAlmanacApplication.php',
'PhabricatorAmazonAuthProvider' => 'applications/auth/provider/PhabricatorAmazonAuthProvider.php',
'PhabricatorAnchorView' => 'view/layout/PhabricatorAnchorView.php',
'PhabricatorAphlictManagementDebugWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementDebugWorkflow.php',
'PhabricatorAphlictManagementRestartWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementRestartWorkflow.php',
'PhabricatorAphlictManagementStartWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementStartWorkflow.php',
'PhabricatorAphlictManagementStatusWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementStatusWorkflow.php',
'PhabricatorAphlictManagementStopWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementStopWorkflow.php',
'PhabricatorAphlictManagementWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementWorkflow.php',
'PhabricatorAphlictSetupCheck' => 'applications/notification/setup/PhabricatorAphlictSetupCheck.php',
'PhabricatorAphrontBarUIExample' => 'applications/uiexample/examples/PhabricatorAphrontBarUIExample.php',
'PhabricatorAphrontViewTestCase' => 'view/__tests__/PhabricatorAphrontViewTestCase.php',
'PhabricatorAppSearchEngine' => 'applications/meta/query/PhabricatorAppSearchEngine.php',
'PhabricatorApplication' => 'applications/base/PhabricatorApplication.php',
'PhabricatorApplicationApplicationPHIDType' => 'applications/meta/phid/PhabricatorApplicationApplicationPHIDType.php',
'PhabricatorApplicationConfigOptions' => 'applications/config/option/PhabricatorApplicationConfigOptions.php',
'PhabricatorApplicationConfigurationPanel' => 'applications/meta/panel/PhabricatorApplicationConfigurationPanel.php',
'PhabricatorApplicationConfigurationPanelTestCase' => 'applications/meta/panel/__tests__/PhabricatorApplicationConfigurationPanelTestCase.php',
'PhabricatorApplicationDatasource' => 'applications/meta/typeahead/PhabricatorApplicationDatasource.php',
'PhabricatorApplicationDetailViewController' => 'applications/meta/controller/PhabricatorApplicationDetailViewController.php',
'PhabricatorApplicationEditController' => 'applications/meta/controller/PhabricatorApplicationEditController.php',
'PhabricatorApplicationEmailCommandsController' => 'applications/meta/controller/PhabricatorApplicationEmailCommandsController.php',
'PhabricatorApplicationLaunchView' => 'applications/meta/view/PhabricatorApplicationLaunchView.php',
'PhabricatorApplicationPanelController' => 'applications/meta/controller/PhabricatorApplicationPanelController.php',
'PhabricatorApplicationQuery' => 'applications/meta/query/PhabricatorApplicationQuery.php',
'PhabricatorApplicationSearchController' => 'applications/search/controller/PhabricatorApplicationSearchController.php',
'PhabricatorApplicationSearchEngine' => 'applications/search/engine/PhabricatorApplicationSearchEngine.php',
'PhabricatorApplicationSearchEngineTestCase' => 'applications/search/engine/__tests__/PhabricatorApplicationSearchEngineTestCase.php',
'PhabricatorApplicationSearchResultView' => 'applications/search/view/PhabricatorApplicationSearchResultView.php',
'PhabricatorApplicationStatusView' => 'applications/meta/view/PhabricatorApplicationStatusView.php',
'PhabricatorApplicationTestCase' => 'applications/base/__tests__/PhabricatorApplicationTestCase.php',
'PhabricatorApplicationTransaction' => 'applications/transactions/storage/PhabricatorApplicationTransaction.php',
'PhabricatorApplicationTransactionComment' => 'applications/transactions/storage/PhabricatorApplicationTransactionComment.php',
'PhabricatorApplicationTransactionCommentEditController' => 'applications/transactions/controller/PhabricatorApplicationTransactionCommentEditController.php',
'PhabricatorApplicationTransactionCommentEditor' => 'applications/transactions/editor/PhabricatorApplicationTransactionCommentEditor.php',
'PhabricatorApplicationTransactionCommentHistoryController' => 'applications/transactions/controller/PhabricatorApplicationTransactionCommentHistoryController.php',
'PhabricatorApplicationTransactionCommentQuery' => 'applications/transactions/query/PhabricatorApplicationTransactionCommentQuery.php',
'PhabricatorApplicationTransactionCommentQuoteController' => 'applications/transactions/controller/PhabricatorApplicationTransactionCommentQuoteController.php',
'PhabricatorApplicationTransactionCommentRawController' => 'applications/transactions/controller/PhabricatorApplicationTransactionCommentRawController.php',
'PhabricatorApplicationTransactionCommentRemoveController' => 'applications/transactions/controller/PhabricatorApplicationTransactionCommentRemoveController.php',
'PhabricatorApplicationTransactionCommentView' => 'applications/transactions/view/PhabricatorApplicationTransactionCommentView.php',
'PhabricatorApplicationTransactionController' => 'applications/transactions/controller/PhabricatorApplicationTransactionController.php',
'PhabricatorApplicationTransactionDetailController' => 'applications/transactions/controller/PhabricatorApplicationTransactionDetailController.php',
'PhabricatorApplicationTransactionEditor' => 'applications/transactions/editor/PhabricatorApplicationTransactionEditor.php',
'PhabricatorApplicationTransactionFeedStory' => 'applications/transactions/feed/PhabricatorApplicationTransactionFeedStory.php',
'PhabricatorApplicationTransactionInterface' => 'applications/transactions/interface/PhabricatorApplicationTransactionInterface.php',
'PhabricatorApplicationTransactionNoEffectException' => 'applications/transactions/exception/PhabricatorApplicationTransactionNoEffectException.php',
'PhabricatorApplicationTransactionNoEffectResponse' => 'applications/transactions/response/PhabricatorApplicationTransactionNoEffectResponse.php',
'PhabricatorApplicationTransactionPublishWorker' => 'applications/transactions/worker/PhabricatorApplicationTransactionPublishWorker.php',
'PhabricatorApplicationTransactionQuery' => 'applications/transactions/query/PhabricatorApplicationTransactionQuery.php',
'PhabricatorApplicationTransactionReplyHandler' => 'applications/transactions/replyhandler/PhabricatorApplicationTransactionReplyHandler.php',
'PhabricatorApplicationTransactionResponse' => 'applications/transactions/response/PhabricatorApplicationTransactionResponse.php',
'PhabricatorApplicationTransactionShowOlderController' => 'applications/transactions/controller/PhabricatorApplicationTransactionShowOlderController.php',
'PhabricatorApplicationTransactionStructureException' => 'applications/transactions/exception/PhabricatorApplicationTransactionStructureException.php',
'PhabricatorApplicationTransactionTemplatedCommentQuery' => 'applications/transactions/query/PhabricatorApplicationTransactionTemplatedCommentQuery.php',
'PhabricatorApplicationTransactionTextDiffDetailView' => 'applications/transactions/view/PhabricatorApplicationTransactionTextDiffDetailView.php',
'PhabricatorApplicationTransactionTransactionPHIDType' => 'applications/transactions/phid/PhabricatorApplicationTransactionTransactionPHIDType.php',
'PhabricatorApplicationTransactionValidationError' => 'applications/transactions/error/PhabricatorApplicationTransactionValidationError.php',
'PhabricatorApplicationTransactionValidationException' => 'applications/transactions/exception/PhabricatorApplicationTransactionValidationException.php',
'PhabricatorApplicationTransactionValidationResponse' => 'applications/transactions/response/PhabricatorApplicationTransactionValidationResponse.php',
'PhabricatorApplicationTransactionValueController' => 'applications/transactions/controller/PhabricatorApplicationTransactionValueController.php',
'PhabricatorApplicationTransactionView' => 'applications/transactions/view/PhabricatorApplicationTransactionView.php',
'PhabricatorApplicationUninstallController' => 'applications/meta/controller/PhabricatorApplicationUninstallController.php',
'PhabricatorApplicationsApplication' => 'applications/meta/application/PhabricatorApplicationsApplication.php',
'PhabricatorApplicationsController' => 'applications/meta/controller/PhabricatorApplicationsController.php',
'PhabricatorApplicationsListController' => 'applications/meta/controller/PhabricatorApplicationsListController.php',
'PhabricatorAsanaAuthProvider' => 'applications/auth/provider/PhabricatorAsanaAuthProvider.php',
'PhabricatorAsanaConfigOptions' => 'applications/doorkeeper/option/PhabricatorAsanaConfigOptions.php',
'PhabricatorAsanaSubtaskHasObjectEdgeType' => 'applications/doorkeeper/edge/PhabricatorAsanaSubtaskHasObjectEdgeType.php',
'PhabricatorAsanaTaskHasObjectEdgeType' => 'applications/doorkeeper/edge/PhabricatorAsanaTaskHasObjectEdgeType.php',
'PhabricatorAuditActionConstants' => 'applications/audit/constants/PhabricatorAuditActionConstants.php',
'PhabricatorAuditAddCommentController' => 'applications/audit/controller/PhabricatorAuditAddCommentController.php',
'PhabricatorAuditApplication' => 'applications/audit/application/PhabricatorAuditApplication.php',
'PhabricatorAuditCommentEditor' => 'applications/audit/editor/PhabricatorAuditCommentEditor.php',
'PhabricatorAuditCommitStatusConstants' => 'applications/audit/constants/PhabricatorAuditCommitStatusConstants.php',
'PhabricatorAuditController' => 'applications/audit/controller/PhabricatorAuditController.php',
'PhabricatorAuditEditor' => 'applications/audit/editor/PhabricatorAuditEditor.php',
'PhabricatorAuditInlineComment' => 'applications/audit/storage/PhabricatorAuditInlineComment.php',
'PhabricatorAuditListController' => 'applications/audit/controller/PhabricatorAuditListController.php',
'PhabricatorAuditListView' => 'applications/audit/view/PhabricatorAuditListView.php',
'PhabricatorAuditMailReceiver' => 'applications/audit/mail/PhabricatorAuditMailReceiver.php',
'PhabricatorAuditManagementDeleteWorkflow' => 'applications/audit/management/PhabricatorAuditManagementDeleteWorkflow.php',
'PhabricatorAuditManagementWorkflow' => 'applications/audit/management/PhabricatorAuditManagementWorkflow.php',
'PhabricatorAuditPreviewController' => 'applications/audit/controller/PhabricatorAuditPreviewController.php',
'PhabricatorAuditReplyHandler' => 'applications/audit/mail/PhabricatorAuditReplyHandler.php',
'PhabricatorAuditStatusConstants' => 'applications/audit/constants/PhabricatorAuditStatusConstants.php',
'PhabricatorAuditTransaction' => 'applications/audit/storage/PhabricatorAuditTransaction.php',
'PhabricatorAuditTransactionComment' => 'applications/audit/storage/PhabricatorAuditTransactionComment.php',
'PhabricatorAuditTransactionQuery' => 'applications/audit/query/PhabricatorAuditTransactionQuery.php',
'PhabricatorAuditTransactionView' => 'applications/audit/view/PhabricatorAuditTransactionView.php',
'PhabricatorAuthAccountView' => 'applications/auth/view/PhabricatorAuthAccountView.php',
'PhabricatorAuthApplication' => 'applications/auth/application/PhabricatorAuthApplication.php',
'PhabricatorAuthAuthFactorPHIDType' => 'applications/auth/phid/PhabricatorAuthAuthFactorPHIDType.php',
'PhabricatorAuthAuthProviderPHIDType' => 'applications/auth/phid/PhabricatorAuthAuthProviderPHIDType.php',
'PhabricatorAuthConduitAPIMethod' => 'applications/auth/conduit/PhabricatorAuthConduitAPIMethod.php',
'PhabricatorAuthConfirmLinkController' => 'applications/auth/controller/PhabricatorAuthConfirmLinkController.php',
'PhabricatorAuthController' => 'applications/auth/controller/PhabricatorAuthController.php',
'PhabricatorAuthDAO' => 'applications/auth/storage/PhabricatorAuthDAO.php',
'PhabricatorAuthDisableController' => 'applications/auth/controller/config/PhabricatorAuthDisableController.php',
'PhabricatorAuthDowngradeSessionController' => 'applications/auth/controller/PhabricatorAuthDowngradeSessionController.php',
'PhabricatorAuthEditController' => 'applications/auth/controller/config/PhabricatorAuthEditController.php',
'PhabricatorAuthFactor' => 'applications/auth/factor/PhabricatorAuthFactor.php',
'PhabricatorAuthFactorConfig' => 'applications/auth/storage/PhabricatorAuthFactorConfig.php',
'PhabricatorAuthFactorTestCase' => 'applications/auth/factor/__tests__/PhabricatorAuthFactorTestCase.php',
'PhabricatorAuthFinishController' => 'applications/auth/controller/PhabricatorAuthFinishController.php',
'PhabricatorAuthHighSecurityRequiredException' => 'applications/auth/exception/PhabricatorAuthHighSecurityRequiredException.php',
'PhabricatorAuthHighSecurityToken' => 'applications/auth/data/PhabricatorAuthHighSecurityToken.php',
'PhabricatorAuthInvite' => 'applications/auth/storage/PhabricatorAuthInvite.php',
'PhabricatorAuthInviteAccountException' => 'applications/auth/exception/PhabricatorAuthInviteAccountException.php',
'PhabricatorAuthInviteAction' => 'applications/auth/data/PhabricatorAuthInviteAction.php',
'PhabricatorAuthInviteActionTableView' => 'applications/auth/view/PhabricatorAuthInviteActionTableView.php',
'PhabricatorAuthInviteController' => 'applications/auth/controller/PhabricatorAuthInviteController.php',
'PhabricatorAuthInviteDialogException' => 'applications/auth/exception/PhabricatorAuthInviteDialogException.php',
'PhabricatorAuthInviteEngine' => 'applications/auth/engine/PhabricatorAuthInviteEngine.php',
'PhabricatorAuthInviteException' => 'applications/auth/exception/PhabricatorAuthInviteException.php',
'PhabricatorAuthInviteInvalidException' => 'applications/auth/exception/PhabricatorAuthInviteInvalidException.php',
'PhabricatorAuthInviteLoginException' => 'applications/auth/exception/PhabricatorAuthInviteLoginException.php',
'PhabricatorAuthInvitePHIDType' => 'applications/auth/phid/PhabricatorAuthInvitePHIDType.php',
'PhabricatorAuthInviteQuery' => 'applications/auth/query/PhabricatorAuthInviteQuery.php',
'PhabricatorAuthInviteRegisteredException' => 'applications/auth/exception/PhabricatorAuthInviteRegisteredException.php',
'PhabricatorAuthInviteSearchEngine' => 'applications/auth/query/PhabricatorAuthInviteSearchEngine.php',
'PhabricatorAuthInviteTestCase' => 'applications/auth/factor/__tests__/PhabricatorAuthInviteTestCase.php',
'PhabricatorAuthInviteVerifyException' => 'applications/auth/exception/PhabricatorAuthInviteVerifyException.php',
'PhabricatorAuthInviteWorker' => 'applications/auth/worker/PhabricatorAuthInviteWorker.php',
'PhabricatorAuthLinkController' => 'applications/auth/controller/PhabricatorAuthLinkController.php',
'PhabricatorAuthListController' => 'applications/auth/controller/config/PhabricatorAuthListController.php',
'PhabricatorAuthLoginController' => 'applications/auth/controller/PhabricatorAuthLoginController.php',
'PhabricatorAuthLoginHandler' => 'applications/auth/handler/PhabricatorAuthLoginHandler.php',
'PhabricatorAuthManagementCachePKCS8Workflow' => 'applications/auth/management/PhabricatorAuthManagementCachePKCS8Workflow.php',
'PhabricatorAuthManagementLDAPWorkflow' => 'applications/auth/management/PhabricatorAuthManagementLDAPWorkflow.php',
'PhabricatorAuthManagementListFactorsWorkflow' => 'applications/auth/management/PhabricatorAuthManagementListFactorsWorkflow.php',
'PhabricatorAuthManagementRecoverWorkflow' => 'applications/auth/management/PhabricatorAuthManagementRecoverWorkflow.php',
'PhabricatorAuthManagementRefreshWorkflow' => 'applications/auth/management/PhabricatorAuthManagementRefreshWorkflow.php',
'PhabricatorAuthManagementStripWorkflow' => 'applications/auth/management/PhabricatorAuthManagementStripWorkflow.php',
'PhabricatorAuthManagementTrustOAuthClientWorkflow' => 'applications/auth/management/PhabricatorAuthManagementTrustOAuthClientWorkflow.php',
+ 'PhabricatorAuthManagementUnlimitWorkflow' => 'applications/auth/management/PhabricatorAuthManagementUnlimitWorkflow.php',
'PhabricatorAuthManagementUntrustOAuthClientWorkflow' => 'applications/auth/management/PhabricatorAuthManagementUntrustOAuthClientWorkflow.php',
'PhabricatorAuthManagementVerifyWorkflow' => 'applications/auth/management/PhabricatorAuthManagementVerifyWorkflow.php',
'PhabricatorAuthManagementWorkflow' => 'applications/auth/management/PhabricatorAuthManagementWorkflow.php',
'PhabricatorAuthNeedsApprovalController' => 'applications/auth/controller/PhabricatorAuthNeedsApprovalController.php',
'PhabricatorAuthNeedsMultiFactorController' => 'applications/auth/controller/PhabricatorAuthNeedsMultiFactorController.php',
'PhabricatorAuthNewController' => 'applications/auth/controller/config/PhabricatorAuthNewController.php',
'PhabricatorAuthOldOAuthRedirectController' => 'applications/auth/controller/PhabricatorAuthOldOAuthRedirectController.php',
'PhabricatorAuthOneTimeLoginController' => 'applications/auth/controller/PhabricatorAuthOneTimeLoginController.php',
'PhabricatorAuthProvider' => 'applications/auth/provider/PhabricatorAuthProvider.php',
'PhabricatorAuthProviderConfig' => 'applications/auth/storage/PhabricatorAuthProviderConfig.php',
'PhabricatorAuthProviderConfigController' => 'applications/auth/controller/config/PhabricatorAuthProviderConfigController.php',
'PhabricatorAuthProviderConfigEditor' => 'applications/auth/editor/PhabricatorAuthProviderConfigEditor.php',
'PhabricatorAuthProviderConfigQuery' => 'applications/auth/query/PhabricatorAuthProviderConfigQuery.php',
'PhabricatorAuthProviderConfigTransaction' => 'applications/auth/storage/PhabricatorAuthProviderConfigTransaction.php',
'PhabricatorAuthProviderConfigTransactionQuery' => 'applications/auth/query/PhabricatorAuthProviderConfigTransactionQuery.php',
'PhabricatorAuthQueryPublicKeysConduitAPIMethod' => 'applications/auth/conduit/PhabricatorAuthQueryPublicKeysConduitAPIMethod.php',
'PhabricatorAuthRegisterController' => 'applications/auth/controller/PhabricatorAuthRegisterController.php',
'PhabricatorAuthRevokeTokenController' => 'applications/auth/controller/PhabricatorAuthRevokeTokenController.php',
'PhabricatorAuthSSHKey' => 'applications/auth/storage/PhabricatorAuthSSHKey.php',
'PhabricatorAuthSSHKeyController' => 'applications/auth/controller/PhabricatorAuthSSHKeyController.php',
'PhabricatorAuthSSHKeyDeleteController' => 'applications/auth/controller/PhabricatorAuthSSHKeyDeleteController.php',
'PhabricatorAuthSSHKeyEditController' => 'applications/auth/controller/PhabricatorAuthSSHKeyEditController.php',
'PhabricatorAuthSSHKeyGenerateController' => 'applications/auth/controller/PhabricatorAuthSSHKeyGenerateController.php',
'PhabricatorAuthSSHKeyQuery' => 'applications/auth/query/PhabricatorAuthSSHKeyQuery.php',
'PhabricatorAuthSSHKeyTableView' => 'applications/auth/view/PhabricatorAuthSSHKeyTableView.php',
'PhabricatorAuthSSHPublicKey' => 'applications/auth/sshkey/PhabricatorAuthSSHPublicKey.php',
'PhabricatorAuthSession' => 'applications/auth/storage/PhabricatorAuthSession.php',
'PhabricatorAuthSessionEngine' => 'applications/auth/engine/PhabricatorAuthSessionEngine.php',
'PhabricatorAuthSessionGarbageCollector' => 'applications/auth/garbagecollector/PhabricatorAuthSessionGarbageCollector.php',
'PhabricatorAuthSessionQuery' => 'applications/auth/query/PhabricatorAuthSessionQuery.php',
'PhabricatorAuthSetupCheck' => 'applications/config/check/PhabricatorAuthSetupCheck.php',
'PhabricatorAuthStartController' => 'applications/auth/controller/PhabricatorAuthStartController.php',
'PhabricatorAuthTemporaryToken' => 'applications/auth/storage/PhabricatorAuthTemporaryToken.php',
'PhabricatorAuthTemporaryTokenGarbageCollector' => 'applications/auth/garbagecollector/PhabricatorAuthTemporaryTokenGarbageCollector.php',
'PhabricatorAuthTemporaryTokenQuery' => 'applications/auth/query/PhabricatorAuthTemporaryTokenQuery.php',
'PhabricatorAuthTerminateSessionController' => 'applications/auth/controller/PhabricatorAuthTerminateSessionController.php',
'PhabricatorAuthTryFactorAction' => 'applications/auth/action/PhabricatorAuthTryFactorAction.php',
'PhabricatorAuthUnlinkController' => 'applications/auth/controller/PhabricatorAuthUnlinkController.php',
'PhabricatorAuthValidateController' => 'applications/auth/controller/PhabricatorAuthValidateController.php',
'PhabricatorAuthenticationConfigOptions' => 'applications/config/option/PhabricatorAuthenticationConfigOptions.php',
'PhabricatorAutoEventListener' => 'infrastructure/events/PhabricatorAutoEventListener.php',
'PhabricatorBadgeHasRecipientEdgeType' => 'applications/badges/edge/PhabricatorBadgeHasRecipientEdgeType.php',
'PhabricatorBadgesApplication' => 'applications/badges/application/PhabricatorBadgesApplication.php',
'PhabricatorBadgesBadge' => 'applications/badges/storage/PhabricatorBadgesBadge.php',
'PhabricatorBadgesCommentController' => 'applications/badges/controller/PhabricatorBadgesCommentController.php',
'PhabricatorBadgesController' => 'applications/badges/controller/PhabricatorBadgesController.php',
'PhabricatorBadgesCreateCapability' => 'applications/badges/capability/PhabricatorBadgesCreateCapability.php',
'PhabricatorBadgesDAO' => 'applications/badges/storage/PhabricatorBadgesDAO.php',
'PhabricatorBadgesDefaultEditCapability' => 'applications/badges/capability/PhabricatorBadgesDefaultEditCapability.php',
'PhabricatorBadgesEditController' => 'applications/badges/controller/PhabricatorBadgesEditController.php',
'PhabricatorBadgesEditIconController' => 'applications/badges/controller/PhabricatorBadgesEditIconController.php',
'PhabricatorBadgesEditRecipientsController' => 'applications/badges/controller/PhabricatorBadgesEditRecipientsController.php',
'PhabricatorBadgesEditor' => 'applications/badges/editor/PhabricatorBadgesEditor.php',
'PhabricatorBadgesIcon' => 'applications/badges/icon/PhabricatorBadgesIcon.php',
'PhabricatorBadgesListController' => 'applications/badges/controller/PhabricatorBadgesListController.php',
'PhabricatorBadgesMailReceiver' => 'applications/badges/mail/PhabricatorBadgesMailReceiver.php',
'PhabricatorBadgesPHIDType' => 'applications/badges/phid/PhabricatorBadgesPHIDType.php',
'PhabricatorBadgesQuery' => 'applications/badges/query/PhabricatorBadgesQuery.php',
'PhabricatorBadgesRecipientsListView' => 'applications/badges/view/PhabricatorBadgesRecipientsListView.php',
'PhabricatorBadgesRemoveRecipientsController' => 'applications/badges/controller/PhabricatorBadgesRemoveRecipientsController.php',
'PhabricatorBadgesReplyHandler' => 'applications/badges/mail/PhabricatorBadgesReplyHandler.php',
'PhabricatorBadgesSchemaSpec' => 'applications/badges/storage/PhabricatorBadgesSchemaSpec.php',
'PhabricatorBadgesSearchEngine' => 'applications/badges/query/PhabricatorBadgesSearchEngine.php',
'PhabricatorBadgesTransaction' => 'applications/badges/storage/PhabricatorBadgesTransaction.php',
'PhabricatorBadgesTransactionComment' => 'applications/badges/storage/PhabricatorBadgesTransactionComment.php',
'PhabricatorBadgesTransactionQuery' => 'applications/badges/query/PhabricatorBadgesTransactionQuery.php',
'PhabricatorBadgesViewController' => 'applications/badges/controller/PhabricatorBadgesViewController.php',
'PhabricatorBarePageUIExample' => 'applications/uiexample/examples/PhabricatorBarePageUIExample.php',
'PhabricatorBarePageView' => 'view/page/PhabricatorBarePageView.php',
'PhabricatorBaseURISetupCheck' => 'applications/config/check/PhabricatorBaseURISetupCheck.php',
'PhabricatorBcryptPasswordHasher' => 'infrastructure/util/password/PhabricatorBcryptPasswordHasher.php',
'PhabricatorBinariesSetupCheck' => 'applications/config/check/PhabricatorBinariesSetupCheck.php',
'PhabricatorBitbucketAuthProvider' => 'applications/auth/provider/PhabricatorBitbucketAuthProvider.php',
'PhabricatorBot' => 'infrastructure/daemon/bot/PhabricatorBot.php',
'PhabricatorBotChannel' => 'infrastructure/daemon/bot/target/PhabricatorBotChannel.php',
'PhabricatorBotDebugLogHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotDebugLogHandler.php',
'PhabricatorBotFeedNotificationHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotFeedNotificationHandler.php',
'PhabricatorBotFlowdockProtocolAdapter' => 'infrastructure/daemon/bot/adapter/PhabricatorBotFlowdockProtocolAdapter.php',
'PhabricatorBotHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotHandler.php',
'PhabricatorBotLogHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotLogHandler.php',
'PhabricatorBotMacroHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotMacroHandler.php',
'PhabricatorBotMessage' => 'infrastructure/daemon/bot/PhabricatorBotMessage.php',
'PhabricatorBotObjectNameHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotObjectNameHandler.php',
'PhabricatorBotSymbolHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotSymbolHandler.php',
'PhabricatorBotTarget' => 'infrastructure/daemon/bot/target/PhabricatorBotTarget.php',
'PhabricatorBotUser' => 'infrastructure/daemon/bot/target/PhabricatorBotUser.php',
'PhabricatorBotWhatsNewHandler' => 'infrastructure/daemon/bot/handler/PhabricatorBotWhatsNewHandler.php',
'PhabricatorBritishEnglishTranslation' => 'infrastructure/internationalization/translation/PhabricatorBritishEnglishTranslation.php',
'PhabricatorBuiltinPatchList' => 'infrastructure/storage/patch/PhabricatorBuiltinPatchList.php',
'PhabricatorBusyUIExample' => 'applications/uiexample/examples/PhabricatorBusyUIExample.php',
'PhabricatorCacheDAO' => 'applications/cache/storage/PhabricatorCacheDAO.php',
'PhabricatorCacheGeneralGarbageCollector' => 'applications/cache/garbagecollector/PhabricatorCacheGeneralGarbageCollector.php',
'PhabricatorCacheManagementPurgeWorkflow' => 'applications/cache/management/PhabricatorCacheManagementPurgeWorkflow.php',
'PhabricatorCacheManagementWorkflow' => 'applications/cache/management/PhabricatorCacheManagementWorkflow.php',
'PhabricatorCacheMarkupGarbageCollector' => 'applications/cache/garbagecollector/PhabricatorCacheMarkupGarbageCollector.php',
'PhabricatorCacheSchemaSpec' => 'applications/cache/storage/PhabricatorCacheSchemaSpec.php',
'PhabricatorCacheSetupCheck' => 'applications/config/check/PhabricatorCacheSetupCheck.php',
'PhabricatorCacheSpec' => 'applications/cache/spec/PhabricatorCacheSpec.php',
'PhabricatorCacheTTLGarbageCollector' => 'applications/cache/garbagecollector/PhabricatorCacheTTLGarbageCollector.php',
'PhabricatorCaches' => 'applications/cache/PhabricatorCaches.php',
'PhabricatorCachesTestCase' => 'applications/cache/__tests__/PhabricatorCachesTestCase.php',
'PhabricatorCalendarApplication' => 'applications/calendar/application/PhabricatorCalendarApplication.php',
'PhabricatorCalendarController' => 'applications/calendar/controller/PhabricatorCalendarController.php',
'PhabricatorCalendarDAO' => 'applications/calendar/storage/PhabricatorCalendarDAO.php',
'PhabricatorCalendarEvent' => 'applications/calendar/storage/PhabricatorCalendarEvent.php',
'PhabricatorCalendarEventCancelController' => 'applications/calendar/controller/PhabricatorCalendarEventCancelController.php',
'PhabricatorCalendarEventCommentController' => 'applications/calendar/controller/PhabricatorCalendarEventCommentController.php',
'PhabricatorCalendarEventDragController' => 'applications/calendar/controller/PhabricatorCalendarEventDragController.php',
'PhabricatorCalendarEventEditController' => 'applications/calendar/controller/PhabricatorCalendarEventEditController.php',
'PhabricatorCalendarEventEditIconController' => 'applications/calendar/controller/PhabricatorCalendarEventEditIconController.php',
'PhabricatorCalendarEventEditor' => 'applications/calendar/editor/PhabricatorCalendarEventEditor.php',
'PhabricatorCalendarEventEmailCommand' => 'applications/calendar/command/PhabricatorCalendarEventEmailCommand.php',
'PhabricatorCalendarEventInvitee' => 'applications/calendar/storage/PhabricatorCalendarEventInvitee.php',
'PhabricatorCalendarEventInviteeQuery' => 'applications/calendar/query/PhabricatorCalendarEventInviteeQuery.php',
'PhabricatorCalendarEventJoinController' => 'applications/calendar/controller/PhabricatorCalendarEventJoinController.php',
'PhabricatorCalendarEventListController' => 'applications/calendar/controller/PhabricatorCalendarEventListController.php',
'PhabricatorCalendarEventMailReceiver' => 'applications/calendar/mail/PhabricatorCalendarEventMailReceiver.php',
'PhabricatorCalendarEventPHIDType' => 'applications/calendar/phid/PhabricatorCalendarEventPHIDType.php',
'PhabricatorCalendarEventQuery' => 'applications/calendar/query/PhabricatorCalendarEventQuery.php',
'PhabricatorCalendarEventRSVPEmailCommand' => 'applications/calendar/command/PhabricatorCalendarEventRSVPEmailCommand.php',
'PhabricatorCalendarEventSearchEngine' => 'applications/calendar/query/PhabricatorCalendarEventSearchEngine.php',
'PhabricatorCalendarEventSearchIndexer' => 'applications/calendar/search/PhabricatorCalendarEventSearchIndexer.php',
'PhabricatorCalendarEventTransaction' => 'applications/calendar/storage/PhabricatorCalendarEventTransaction.php',
'PhabricatorCalendarEventTransactionComment' => 'applications/calendar/storage/PhabricatorCalendarEventTransactionComment.php',
'PhabricatorCalendarEventTransactionQuery' => 'applications/calendar/query/PhabricatorCalendarEventTransactionQuery.php',
'PhabricatorCalendarEventViewController' => 'applications/calendar/controller/PhabricatorCalendarEventViewController.php',
'PhabricatorCalendarHoliday' => 'applications/calendar/storage/PhabricatorCalendarHoliday.php',
'PhabricatorCalendarHolidayTestCase' => 'applications/calendar/storage/__tests__/PhabricatorCalendarHolidayTestCase.php',
'PhabricatorCalendarIcon' => 'applications/calendar/icon/PhabricatorCalendarIcon.php',
'PhabricatorCalendarRemarkupRule' => 'applications/calendar/remarkup/PhabricatorCalendarRemarkupRule.php',
'PhabricatorCalendarReplyHandler' => 'applications/calendar/mail/PhabricatorCalendarReplyHandler.php',
'PhabricatorCalendarSchemaSpec' => 'applications/calendar/storage/PhabricatorCalendarSchemaSpec.php',
'PhabricatorCampfireProtocolAdapter' => 'infrastructure/daemon/bot/adapter/PhabricatorCampfireProtocolAdapter.php',
'PhabricatorCelerityApplication' => 'applications/celerity/application/PhabricatorCelerityApplication.php',
'PhabricatorCelerityTestCase' => '__tests__/PhabricatorCelerityTestCase.php',
'PhabricatorChangeParserTestCase' => 'applications/repository/worker/__tests__/PhabricatorChangeParserTestCase.php',
'PhabricatorChangesetResponse' => 'infrastructure/diff/PhabricatorChangesetResponse.php',
'PhabricatorChatLogApplication' => 'applications/chatlog/application/PhabricatorChatLogApplication.php',
'PhabricatorChatLogChannel' => 'applications/chatlog/storage/PhabricatorChatLogChannel.php',
'PhabricatorChatLogChannelListController' => 'applications/chatlog/controller/PhabricatorChatLogChannelListController.php',
'PhabricatorChatLogChannelLogController' => 'applications/chatlog/controller/PhabricatorChatLogChannelLogController.php',
'PhabricatorChatLogChannelQuery' => 'applications/chatlog/query/PhabricatorChatLogChannelQuery.php',
'PhabricatorChatLogController' => 'applications/chatlog/controller/PhabricatorChatLogController.php',
'PhabricatorChatLogDAO' => 'applications/chatlog/storage/PhabricatorChatLogDAO.php',
'PhabricatorChatLogEvent' => 'applications/chatlog/storage/PhabricatorChatLogEvent.php',
'PhabricatorChatLogQuery' => 'applications/chatlog/query/PhabricatorChatLogQuery.php',
'PhabricatorChunkedFileStorageEngine' => 'applications/files/engine/PhabricatorChunkedFileStorageEngine.php',
'PhabricatorClusterConfigOptions' => 'applications/config/option/PhabricatorClusterConfigOptions.php',
'PhabricatorCommitBranchesField' => 'applications/repository/customfield/PhabricatorCommitBranchesField.php',
'PhabricatorCommitCustomField' => 'applications/repository/customfield/PhabricatorCommitCustomField.php',
'PhabricatorCommitMergedCommitsField' => 'applications/repository/customfield/PhabricatorCommitMergedCommitsField.php',
'PhabricatorCommitRepositoryField' => 'applications/repository/customfield/PhabricatorCommitRepositoryField.php',
'PhabricatorCommitSearchEngine' => 'applications/audit/query/PhabricatorCommitSearchEngine.php',
'PhabricatorCommitTagsField' => 'applications/repository/customfield/PhabricatorCommitTagsField.php',
'PhabricatorCommonPasswords' => 'applications/auth/constants/PhabricatorCommonPasswords.php',
'PhabricatorConduitAPIController' => 'applications/conduit/controller/PhabricatorConduitAPIController.php',
'PhabricatorConduitApplication' => 'applications/conduit/application/PhabricatorConduitApplication.php',
'PhabricatorConduitCertificateSettingsPanel' => 'applications/settings/panel/PhabricatorConduitCertificateSettingsPanel.php',
'PhabricatorConduitCertificateToken' => 'applications/conduit/storage/PhabricatorConduitCertificateToken.php',
'PhabricatorConduitConnectionLog' => 'applications/conduit/storage/PhabricatorConduitConnectionLog.php',
'PhabricatorConduitConsoleController' => 'applications/conduit/controller/PhabricatorConduitConsoleController.php',
'PhabricatorConduitController' => 'applications/conduit/controller/PhabricatorConduitController.php',
'PhabricatorConduitDAO' => 'applications/conduit/storage/PhabricatorConduitDAO.php',
'PhabricatorConduitListController' => 'applications/conduit/controller/PhabricatorConduitListController.php',
'PhabricatorConduitLogController' => 'applications/conduit/controller/PhabricatorConduitLogController.php',
'PhabricatorConduitLogQuery' => 'applications/conduit/query/PhabricatorConduitLogQuery.php',
'PhabricatorConduitMethodCallLog' => 'applications/conduit/storage/PhabricatorConduitMethodCallLog.php',
'PhabricatorConduitMethodQuery' => 'applications/conduit/query/PhabricatorConduitMethodQuery.php',
'PhabricatorConduitRequestExceptionHandler' => 'aphront/handler/PhabricatorConduitRequestExceptionHandler.php',
'PhabricatorConduitSearchEngine' => 'applications/conduit/query/PhabricatorConduitSearchEngine.php',
'PhabricatorConduitTestCase' => '__tests__/PhabricatorConduitTestCase.php',
'PhabricatorConduitToken' => 'applications/conduit/storage/PhabricatorConduitToken.php',
'PhabricatorConduitTokenController' => 'applications/conduit/controller/PhabricatorConduitTokenController.php',
'PhabricatorConduitTokenEditController' => 'applications/conduit/controller/PhabricatorConduitTokenEditController.php',
'PhabricatorConduitTokenHandshakeController' => 'applications/conduit/controller/PhabricatorConduitTokenHandshakeController.php',
'PhabricatorConduitTokenQuery' => 'applications/conduit/query/PhabricatorConduitTokenQuery.php',
'PhabricatorConduitTokenTerminateController' => 'applications/conduit/controller/PhabricatorConduitTokenTerminateController.php',
'PhabricatorConduitTokensSettingsPanel' => 'applications/conduit/settings/PhabricatorConduitTokensSettingsPanel.php',
'PhabricatorConfigAllController' => 'applications/config/controller/PhabricatorConfigAllController.php',
'PhabricatorConfigApplication' => 'applications/config/application/PhabricatorConfigApplication.php',
'PhabricatorConfigCacheController' => 'applications/config/controller/PhabricatorConfigCacheController.php',
'PhabricatorConfigColumnSchema' => 'applications/config/schema/PhabricatorConfigColumnSchema.php',
'PhabricatorConfigConfigPHIDType' => 'applications/config/phid/PhabricatorConfigConfigPHIDType.php',
'PhabricatorConfigController' => 'applications/config/controller/PhabricatorConfigController.php',
'PhabricatorConfigCoreSchemaSpec' => 'applications/config/schema/PhabricatorConfigCoreSchemaSpec.php',
'PhabricatorConfigDatabaseController' => 'applications/config/controller/PhabricatorConfigDatabaseController.php',
'PhabricatorConfigDatabaseIssueController' => 'applications/config/controller/PhabricatorConfigDatabaseIssueController.php',
'PhabricatorConfigDatabaseSchema' => 'applications/config/schema/PhabricatorConfigDatabaseSchema.php',
'PhabricatorConfigDatabaseSource' => 'infrastructure/env/PhabricatorConfigDatabaseSource.php',
'PhabricatorConfigDatabaseStatusController' => 'applications/config/controller/PhabricatorConfigDatabaseStatusController.php',
'PhabricatorConfigDefaultSource' => 'infrastructure/env/PhabricatorConfigDefaultSource.php',
'PhabricatorConfigDictionarySource' => 'infrastructure/env/PhabricatorConfigDictionarySource.php',
'PhabricatorConfigEdgeModule' => 'applications/config/module/PhabricatorConfigEdgeModule.php',
'PhabricatorConfigEditController' => 'applications/config/controller/PhabricatorConfigEditController.php',
'PhabricatorConfigEditor' => 'applications/config/editor/PhabricatorConfigEditor.php',
'PhabricatorConfigEntry' => 'applications/config/storage/PhabricatorConfigEntry.php',
'PhabricatorConfigEntryDAO' => 'applications/config/storage/PhabricatorConfigEntryDAO.php',
'PhabricatorConfigEntryQuery' => 'applications/config/query/PhabricatorConfigEntryQuery.php',
'PhabricatorConfigFileSource' => 'infrastructure/env/PhabricatorConfigFileSource.php',
'PhabricatorConfigGroupController' => 'applications/config/controller/PhabricatorConfigGroupController.php',
'PhabricatorConfigHistoryController' => 'applications/config/controller/PhabricatorConfigHistoryController.php',
'PhabricatorConfigIgnoreController' => 'applications/config/controller/PhabricatorConfigIgnoreController.php',
'PhabricatorConfigIssueListController' => 'applications/config/controller/PhabricatorConfigIssueListController.php',
'PhabricatorConfigIssueViewController' => 'applications/config/controller/PhabricatorConfigIssueViewController.php',
'PhabricatorConfigJSON' => 'applications/config/json/PhabricatorConfigJSON.php',
'PhabricatorConfigJSONOptionType' => 'applications/config/custom/PhabricatorConfigJSONOptionType.php',
'PhabricatorConfigKeySchema' => 'applications/config/schema/PhabricatorConfigKeySchema.php',
'PhabricatorConfigListController' => 'applications/config/controller/PhabricatorConfigListController.php',
'PhabricatorConfigLocalSource' => 'infrastructure/env/PhabricatorConfigLocalSource.php',
'PhabricatorConfigManagementDeleteWorkflow' => 'applications/config/management/PhabricatorConfigManagementDeleteWorkflow.php',
'PhabricatorConfigManagementGetWorkflow' => 'applications/config/management/PhabricatorConfigManagementGetWorkflow.php',
'PhabricatorConfigManagementListWorkflow' => 'applications/config/management/PhabricatorConfigManagementListWorkflow.php',
'PhabricatorConfigManagementMigrateWorkflow' => 'applications/config/management/PhabricatorConfigManagementMigrateWorkflow.php',
'PhabricatorConfigManagementSetWorkflow' => 'applications/config/management/PhabricatorConfigManagementSetWorkflow.php',
'PhabricatorConfigManagementWorkflow' => 'applications/config/management/PhabricatorConfigManagementWorkflow.php',
'PhabricatorConfigModule' => 'applications/config/module/PhabricatorConfigModule.php',
'PhabricatorConfigModuleController' => 'applications/config/controller/PhabricatorConfigModuleController.php',
'PhabricatorConfigOption' => 'applications/config/option/PhabricatorConfigOption.php',
'PhabricatorConfigOptionType' => 'applications/config/custom/PhabricatorConfigOptionType.php',
'PhabricatorConfigPHIDModule' => 'applications/config/module/PhabricatorConfigPHIDModule.php',
'PhabricatorConfigProxySource' => 'infrastructure/env/PhabricatorConfigProxySource.php',
'PhabricatorConfigPurgeCacheController' => 'applications/config/controller/PhabricatorConfigPurgeCacheController.php',
'PhabricatorConfigRequestExceptionHandlerModule' => 'applications/config/module/PhabricatorConfigRequestExceptionHandlerModule.php',
'PhabricatorConfigResponse' => 'applications/config/response/PhabricatorConfigResponse.php',
'PhabricatorConfigSchemaQuery' => 'applications/config/schema/PhabricatorConfigSchemaQuery.php',
'PhabricatorConfigSchemaSpec' => 'applications/config/schema/PhabricatorConfigSchemaSpec.php',
'PhabricatorConfigServerSchema' => 'applications/config/schema/PhabricatorConfigServerSchema.php',
'PhabricatorConfigSiteModule' => 'applications/config/module/PhabricatorConfigSiteModule.php',
'PhabricatorConfigSiteSource' => 'infrastructure/env/PhabricatorConfigSiteSource.php',
'PhabricatorConfigSource' => 'infrastructure/env/PhabricatorConfigSource.php',
'PhabricatorConfigStackSource' => 'infrastructure/env/PhabricatorConfigStackSource.php',
'PhabricatorConfigStorageSchema' => 'applications/config/schema/PhabricatorConfigStorageSchema.php',
'PhabricatorConfigTableSchema' => 'applications/config/schema/PhabricatorConfigTableSchema.php',
'PhabricatorConfigTransaction' => 'applications/config/storage/PhabricatorConfigTransaction.php',
'PhabricatorConfigTransactionQuery' => 'applications/config/query/PhabricatorConfigTransactionQuery.php',
'PhabricatorConfigValidationException' => 'applications/config/exception/PhabricatorConfigValidationException.php',
'PhabricatorConfigWelcomeController' => 'applications/config/controller/PhabricatorConfigWelcomeController.php',
'PhabricatorConpherenceApplication' => 'applications/conpherence/application/PhabricatorConpherenceApplication.php',
'PhabricatorConpherencePreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorConpherencePreferencesSettingsPanel.php',
'PhabricatorConpherenceThreadPHIDType' => 'applications/conpherence/phid/PhabricatorConpherenceThreadPHIDType.php',
'PhabricatorConsoleApplication' => 'applications/console/application/PhabricatorConsoleApplication.php',
'PhabricatorContentSource' => 'applications/metamta/contentsource/PhabricatorContentSource.php',
'PhabricatorContentSourceView' => 'applications/metamta/contentsource/PhabricatorContentSourceView.php',
'PhabricatorContributedToObjectEdgeType' => 'applications/transactions/edges/PhabricatorContributedToObjectEdgeType.php',
'PhabricatorController' => 'applications/base/controller/PhabricatorController.php',
'PhabricatorCookies' => 'applications/auth/constants/PhabricatorCookies.php',
'PhabricatorCoreConfigOptions' => 'applications/config/option/PhabricatorCoreConfigOptions.php',
'PhabricatorCountdown' => 'applications/countdown/storage/PhabricatorCountdown.php',
'PhabricatorCountdownApplication' => 'applications/countdown/application/PhabricatorCountdownApplication.php',
'PhabricatorCountdownCommentController' => 'applications/countdown/controller/PhabricatorCountdownCommentController.php',
'PhabricatorCountdownController' => 'applications/countdown/controller/PhabricatorCountdownController.php',
'PhabricatorCountdownCountdownPHIDType' => 'applications/countdown/phid/PhabricatorCountdownCountdownPHIDType.php',
'PhabricatorCountdownDAO' => 'applications/countdown/storage/PhabricatorCountdownDAO.php',
'PhabricatorCountdownDefaultEditCapability' => 'applications/countdown/capability/PhabricatorCountdownDefaultEditCapability.php',
'PhabricatorCountdownDefaultViewCapability' => 'applications/countdown/capability/PhabricatorCountdownDefaultViewCapability.php',
'PhabricatorCountdownDeleteController' => 'applications/countdown/controller/PhabricatorCountdownDeleteController.php',
'PhabricatorCountdownEditController' => 'applications/countdown/controller/PhabricatorCountdownEditController.php',
'PhabricatorCountdownEditor' => 'applications/countdown/editor/PhabricatorCountdownEditor.php',
'PhabricatorCountdownListController' => 'applications/countdown/controller/PhabricatorCountdownListController.php',
'PhabricatorCountdownMailReceiver' => 'applications/countdown/mail/PhabricatorCountdownMailReceiver.php',
'PhabricatorCountdownQuery' => 'applications/countdown/query/PhabricatorCountdownQuery.php',
'PhabricatorCountdownRemarkupRule' => 'applications/countdown/remarkup/PhabricatorCountdownRemarkupRule.php',
'PhabricatorCountdownReplyHandler' => 'applications/countdown/mail/PhabricatorCountdownReplyHandler.php',
'PhabricatorCountdownSchemaSpec' => 'applications/countdown/storage/PhabricatorCountdownSchemaSpec.php',
'PhabricatorCountdownSearchEngine' => 'applications/countdown/query/PhabricatorCountdownSearchEngine.php',
'PhabricatorCountdownTransaction' => 'applications/countdown/storage/PhabricatorCountdownTransaction.php',
'PhabricatorCountdownTransactionComment' => 'applications/countdown/storage/PhabricatorCountdownTransactionComment.php',
'PhabricatorCountdownTransactionQuery' => 'applications/countdown/query/PhabricatorCountdownTransactionQuery.php',
'PhabricatorCountdownView' => 'applications/countdown/view/PhabricatorCountdownView.php',
'PhabricatorCountdownViewController' => 'applications/countdown/controller/PhabricatorCountdownViewController.php',
'PhabricatorCredentialsUsedByObjectEdgeType' => 'applications/passphrase/edge/PhabricatorCredentialsUsedByObjectEdgeType.php',
'PhabricatorCursorPagedPolicyAwareQuery' => 'infrastructure/query/policy/PhabricatorCursorPagedPolicyAwareQuery.php',
'PhabricatorCustomField' => 'infrastructure/customfield/field/PhabricatorCustomField.php',
'PhabricatorCustomFieldAttachment' => 'infrastructure/customfield/field/PhabricatorCustomFieldAttachment.php',
'PhabricatorCustomFieldConfigOptionType' => 'infrastructure/customfield/config/PhabricatorCustomFieldConfigOptionType.php',
'PhabricatorCustomFieldDataNotAvailableException' => 'infrastructure/customfield/exception/PhabricatorCustomFieldDataNotAvailableException.php',
'PhabricatorCustomFieldHeraldField' => 'infrastructure/customfield/herald/PhabricatorCustomFieldHeraldField.php',
'PhabricatorCustomFieldHeraldFieldGroup' => 'infrastructure/customfield/herald/PhabricatorCustomFieldHeraldFieldGroup.php',
'PhabricatorCustomFieldImplementationIncompleteException' => 'infrastructure/customfield/exception/PhabricatorCustomFieldImplementationIncompleteException.php',
'PhabricatorCustomFieldIndexStorage' => 'infrastructure/customfield/storage/PhabricatorCustomFieldIndexStorage.php',
'PhabricatorCustomFieldInterface' => 'infrastructure/customfield/interface/PhabricatorCustomFieldInterface.php',
'PhabricatorCustomFieldList' => 'infrastructure/customfield/field/PhabricatorCustomFieldList.php',
'PhabricatorCustomFieldMonogramParser' => 'infrastructure/customfield/parser/PhabricatorCustomFieldMonogramParser.php',
'PhabricatorCustomFieldNotAttachedException' => 'infrastructure/customfield/exception/PhabricatorCustomFieldNotAttachedException.php',
'PhabricatorCustomFieldNotProxyException' => 'infrastructure/customfield/exception/PhabricatorCustomFieldNotProxyException.php',
'PhabricatorCustomFieldNumericIndexStorage' => 'infrastructure/customfield/storage/PhabricatorCustomFieldNumericIndexStorage.php',
'PhabricatorCustomFieldStorage' => 'infrastructure/customfield/storage/PhabricatorCustomFieldStorage.php',
'PhabricatorCustomFieldStringIndexStorage' => 'infrastructure/customfield/storage/PhabricatorCustomFieldStringIndexStorage.php',
'PhabricatorCustomHeaderConfigType' => 'applications/config/custom/PhabricatorCustomHeaderConfigType.php',
'PhabricatorDaemon' => 'infrastructure/daemon/PhabricatorDaemon.php',
'PhabricatorDaemonBulkJobListController' => 'applications/daemon/controller/PhabricatorDaemonBulkJobListController.php',
'PhabricatorDaemonBulkJobMonitorController' => 'applications/daemon/controller/PhabricatorDaemonBulkJobMonitorController.php',
'PhabricatorDaemonBulkJobViewController' => 'applications/daemon/controller/PhabricatorDaemonBulkJobViewController.php',
'PhabricatorDaemonConsoleController' => 'applications/daemon/controller/PhabricatorDaemonConsoleController.php',
'PhabricatorDaemonController' => 'applications/daemon/controller/PhabricatorDaemonController.php',
'PhabricatorDaemonDAO' => 'applications/daemon/storage/PhabricatorDaemonDAO.php',
'PhabricatorDaemonEventListener' => 'applications/daemon/event/PhabricatorDaemonEventListener.php',
'PhabricatorDaemonLog' => 'applications/daemon/storage/PhabricatorDaemonLog.php',
'PhabricatorDaemonLogEvent' => 'applications/daemon/storage/PhabricatorDaemonLogEvent.php',
'PhabricatorDaemonLogEventGarbageCollector' => 'applications/daemon/garbagecollector/PhabricatorDaemonLogEventGarbageCollector.php',
'PhabricatorDaemonLogEventViewController' => 'applications/daemon/controller/PhabricatorDaemonLogEventViewController.php',
'PhabricatorDaemonLogEventsView' => 'applications/daemon/view/PhabricatorDaemonLogEventsView.php',
'PhabricatorDaemonLogGarbageCollector' => 'applications/daemon/garbagecollector/PhabricatorDaemonLogGarbageCollector.php',
'PhabricatorDaemonLogListController' => 'applications/daemon/controller/PhabricatorDaemonLogListController.php',
'PhabricatorDaemonLogListView' => 'applications/daemon/view/PhabricatorDaemonLogListView.php',
'PhabricatorDaemonLogQuery' => 'applications/daemon/query/PhabricatorDaemonLogQuery.php',
'PhabricatorDaemonLogViewController' => 'applications/daemon/controller/PhabricatorDaemonLogViewController.php',
'PhabricatorDaemonManagementDebugWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementDebugWorkflow.php',
'PhabricatorDaemonManagementLaunchWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementLaunchWorkflow.php',
'PhabricatorDaemonManagementListWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementListWorkflow.php',
'PhabricatorDaemonManagementLogWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementLogWorkflow.php',
'PhabricatorDaemonManagementReloadWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementReloadWorkflow.php',
'PhabricatorDaemonManagementRestartWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementRestartWorkflow.php',
'PhabricatorDaemonManagementStartWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementStartWorkflow.php',
'PhabricatorDaemonManagementStatusWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementStatusWorkflow.php',
'PhabricatorDaemonManagementStopWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementStopWorkflow.php',
'PhabricatorDaemonManagementWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementWorkflow.php',
'PhabricatorDaemonReference' => 'infrastructure/daemon/control/PhabricatorDaemonReference.php',
'PhabricatorDaemonTaskGarbageCollector' => 'applications/daemon/garbagecollector/PhabricatorDaemonTaskGarbageCollector.php',
'PhabricatorDaemonTasksTableView' => 'applications/daemon/view/PhabricatorDaemonTasksTableView.php',
'PhabricatorDaemonsApplication' => 'applications/daemon/application/PhabricatorDaemonsApplication.php',
'PhabricatorDaemonsSetupCheck' => 'applications/config/check/PhabricatorDaemonsSetupCheck.php',
'PhabricatorDailyRoutineTriggerClock' => 'infrastructure/daemon/workers/clock/PhabricatorDailyRoutineTriggerClock.php',
'PhabricatorDashboard' => 'applications/dashboard/storage/PhabricatorDashboard.php',
'PhabricatorDashboardAddPanelController' => 'applications/dashboard/controller/PhabricatorDashboardAddPanelController.php',
'PhabricatorDashboardApplication' => 'applications/dashboard/application/PhabricatorDashboardApplication.php',
'PhabricatorDashboardController' => 'applications/dashboard/controller/PhabricatorDashboardController.php',
'PhabricatorDashboardCopyController' => 'applications/dashboard/controller/PhabricatorDashboardCopyController.php',
'PhabricatorDashboardDAO' => 'applications/dashboard/storage/PhabricatorDashboardDAO.php',
'PhabricatorDashboardDashboardHasPanelEdgeType' => 'applications/dashboard/edge/PhabricatorDashboardDashboardHasPanelEdgeType.php',
'PhabricatorDashboardDashboardPHIDType' => 'applications/dashboard/phid/PhabricatorDashboardDashboardPHIDType.php',
'PhabricatorDashboardEditController' => 'applications/dashboard/controller/PhabricatorDashboardEditController.php',
'PhabricatorDashboardHistoryController' => 'applications/dashboard/controller/PhabricatorDashboardHistoryController.php',
'PhabricatorDashboardInstall' => 'applications/dashboard/storage/PhabricatorDashboardInstall.php',
'PhabricatorDashboardInstallController' => 'applications/dashboard/controller/PhabricatorDashboardInstallController.php',
'PhabricatorDashboardLayoutConfig' => 'applications/dashboard/layoutconfig/PhabricatorDashboardLayoutConfig.php',
'PhabricatorDashboardListController' => 'applications/dashboard/controller/PhabricatorDashboardListController.php',
'PhabricatorDashboardManageController' => 'applications/dashboard/controller/PhabricatorDashboardManageController.php',
'PhabricatorDashboardMovePanelController' => 'applications/dashboard/controller/PhabricatorDashboardMovePanelController.php',
'PhabricatorDashboardPanel' => 'applications/dashboard/storage/PhabricatorDashboardPanel.php',
'PhabricatorDashboardPanelArchiveController' => 'applications/dashboard/controller/PhabricatorDashboardPanelArchiveController.php',
'PhabricatorDashboardPanelCoreCustomField' => 'applications/dashboard/customfield/PhabricatorDashboardPanelCoreCustomField.php',
'PhabricatorDashboardPanelCustomField' => 'applications/dashboard/customfield/PhabricatorDashboardPanelCustomField.php',
'PhabricatorDashboardPanelEditController' => 'applications/dashboard/controller/PhabricatorDashboardPanelEditController.php',
'PhabricatorDashboardPanelHasDashboardEdgeType' => 'applications/dashboard/edge/PhabricatorDashboardPanelHasDashboardEdgeType.php',
'PhabricatorDashboardPanelListController' => 'applications/dashboard/controller/PhabricatorDashboardPanelListController.php',
'PhabricatorDashboardPanelPHIDType' => 'applications/dashboard/phid/PhabricatorDashboardPanelPHIDType.php',
'PhabricatorDashboardPanelQuery' => 'applications/dashboard/query/PhabricatorDashboardPanelQuery.php',
'PhabricatorDashboardPanelRenderController' => 'applications/dashboard/controller/PhabricatorDashboardPanelRenderController.php',
'PhabricatorDashboardPanelRenderingEngine' => 'applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php',
'PhabricatorDashboardPanelSearchApplicationCustomField' => 'applications/dashboard/customfield/PhabricatorDashboardPanelSearchApplicationCustomField.php',
'PhabricatorDashboardPanelSearchEngine' => 'applications/dashboard/query/PhabricatorDashboardPanelSearchEngine.php',
'PhabricatorDashboardPanelSearchQueryCustomField' => 'applications/dashboard/customfield/PhabricatorDashboardPanelSearchQueryCustomField.php',
'PhabricatorDashboardPanelTabsCustomField' => 'applications/dashboard/customfield/PhabricatorDashboardPanelTabsCustomField.php',
'PhabricatorDashboardPanelTransaction' => 'applications/dashboard/storage/PhabricatorDashboardPanelTransaction.php',
'PhabricatorDashboardPanelTransactionEditor' => 'applications/dashboard/editor/PhabricatorDashboardPanelTransactionEditor.php',
'PhabricatorDashboardPanelTransactionQuery' => 'applications/dashboard/query/PhabricatorDashboardPanelTransactionQuery.php',
'PhabricatorDashboardPanelType' => 'applications/dashboard/paneltype/PhabricatorDashboardPanelType.php',
'PhabricatorDashboardPanelViewController' => 'applications/dashboard/controller/PhabricatorDashboardPanelViewController.php',
'PhabricatorDashboardQuery' => 'applications/dashboard/query/PhabricatorDashboardQuery.php',
'PhabricatorDashboardQueryPanelType' => 'applications/dashboard/paneltype/PhabricatorDashboardQueryPanelType.php',
'PhabricatorDashboardRemarkupRule' => 'applications/dashboard/remarkup/PhabricatorDashboardRemarkupRule.php',
'PhabricatorDashboardRemovePanelController' => 'applications/dashboard/controller/PhabricatorDashboardRemovePanelController.php',
'PhabricatorDashboardRenderingEngine' => 'applications/dashboard/engine/PhabricatorDashboardRenderingEngine.php',
'PhabricatorDashboardSchemaSpec' => 'applications/dashboard/storage/PhabricatorDashboardSchemaSpec.php',
'PhabricatorDashboardSearchEngine' => 'applications/dashboard/query/PhabricatorDashboardSearchEngine.php',
'PhabricatorDashboardTabsPanelType' => 'applications/dashboard/paneltype/PhabricatorDashboardTabsPanelType.php',
'PhabricatorDashboardTextPanelType' => 'applications/dashboard/paneltype/PhabricatorDashboardTextPanelType.php',
'PhabricatorDashboardTransaction' => 'applications/dashboard/storage/PhabricatorDashboardTransaction.php',
'PhabricatorDashboardTransactionEditor' => 'applications/dashboard/editor/PhabricatorDashboardTransactionEditor.php',
'PhabricatorDashboardTransactionQuery' => 'applications/dashboard/query/PhabricatorDashboardTransactionQuery.php',
'PhabricatorDashboardUninstallController' => 'applications/dashboard/controller/PhabricatorDashboardUninstallController.php',
'PhabricatorDashboardViewController' => 'applications/dashboard/controller/PhabricatorDashboardViewController.php',
'PhabricatorDataCacheSpec' => 'applications/cache/spec/PhabricatorDataCacheSpec.php',
'PhabricatorDataNotAttachedException' => 'infrastructure/storage/lisk/PhabricatorDataNotAttachedException.php',
'PhabricatorDatabaseSetupCheck' => 'applications/config/check/PhabricatorDatabaseSetupCheck.php',
'PhabricatorDateTimeSettingsPanel' => 'applications/settings/panel/PhabricatorDateTimeSettingsPanel.php',
'PhabricatorDebugController' => 'applications/system/controller/PhabricatorDebugController.php',
'PhabricatorDefaultRequestExceptionHandler' => 'aphront/handler/PhabricatorDefaultRequestExceptionHandler.php',
'PhabricatorDesktopNotificationsSettingsPanel' => 'applications/settings/panel/PhabricatorDesktopNotificationsSettingsPanel.php',
'PhabricatorDestructibleInterface' => 'applications/system/interface/PhabricatorDestructibleInterface.php',
'PhabricatorDestructionEngine' => 'applications/system/engine/PhabricatorDestructionEngine.php',
'PhabricatorDeveloperConfigOptions' => 'applications/config/option/PhabricatorDeveloperConfigOptions.php',
'PhabricatorDeveloperPreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorDeveloperPreferencesSettingsPanel.php',
'PhabricatorDiffInlineCommentQuery' => 'infrastructure/diff/query/PhabricatorDiffInlineCommentQuery.php',
'PhabricatorDiffPreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorDiffPreferencesSettingsPanel.php',
'PhabricatorDifferenceEngine' => 'infrastructure/diff/PhabricatorDifferenceEngine.php',
'PhabricatorDifferentialApplication' => 'applications/differential/application/PhabricatorDifferentialApplication.php',
'PhabricatorDifferentialConfigOptions' => 'applications/differential/config/PhabricatorDifferentialConfigOptions.php',
'PhabricatorDifferentialRevisionTestDataGenerator' => 'applications/differential/lipsum/PhabricatorDifferentialRevisionTestDataGenerator.php',
'PhabricatorDiffusionApplication' => 'applications/diffusion/application/PhabricatorDiffusionApplication.php',
'PhabricatorDiffusionConfigOptions' => 'applications/diffusion/config/PhabricatorDiffusionConfigOptions.php',
'PhabricatorDisabledUserController' => 'applications/auth/controller/PhabricatorDisabledUserController.php',
'PhabricatorDisplayPreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorDisplayPreferencesSettingsPanel.php',
'PhabricatorDisqusAuthProvider' => 'applications/auth/provider/PhabricatorDisqusAuthProvider.php',
'PhabricatorDisqusConfigOptions' => 'applications/config/option/PhabricatorDisqusConfigOptions.php',
'PhabricatorDivinerApplication' => 'applications/diviner/application/PhabricatorDivinerApplication.php',
'PhabricatorDoorkeeperApplication' => 'applications/doorkeeper/application/PhabricatorDoorkeeperApplication.php',
'PhabricatorDraft' => 'applications/draft/storage/PhabricatorDraft.php',
'PhabricatorDraftDAO' => 'applications/draft/storage/PhabricatorDraftDAO.php',
'PhabricatorDrydockApplication' => 'applications/drydock/application/PhabricatorDrydockApplication.php',
'PhabricatorEdgeConfig' => 'infrastructure/edges/constants/PhabricatorEdgeConfig.php',
'PhabricatorEdgeConstants' => 'infrastructure/edges/constants/PhabricatorEdgeConstants.php',
'PhabricatorEdgeCycleException' => 'infrastructure/edges/exception/PhabricatorEdgeCycleException.php',
'PhabricatorEdgeEditor' => 'infrastructure/edges/editor/PhabricatorEdgeEditor.php',
'PhabricatorEdgeGraph' => 'infrastructure/edges/util/PhabricatorEdgeGraph.php',
'PhabricatorEdgeQuery' => 'infrastructure/edges/query/PhabricatorEdgeQuery.php',
'PhabricatorEdgeTestCase' => 'infrastructure/edges/__tests__/PhabricatorEdgeTestCase.php',
'PhabricatorEdgeType' => 'infrastructure/edges/type/PhabricatorEdgeType.php',
'PhabricatorEdgeTypeTestCase' => 'infrastructure/edges/type/__tests__/PhabricatorEdgeTypeTestCase.php',
'PhabricatorEditor' => 'infrastructure/PhabricatorEditor.php',
'PhabricatorElasticSearchEngine' => 'applications/search/engine/PhabricatorElasticSearchEngine.php',
'PhabricatorElasticSearchSetupCheck' => 'applications/config/check/PhabricatorElasticSearchSetupCheck.php',
'PhabricatorEmailAddressesSettingsPanel' => 'applications/settings/panel/PhabricatorEmailAddressesSettingsPanel.php',
'PhabricatorEmailFormatSettingsPanel' => 'applications/settings/panel/PhabricatorEmailFormatSettingsPanel.php',
'PhabricatorEmailLoginController' => 'applications/auth/controller/PhabricatorEmailLoginController.php',
'PhabricatorEmailPreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorEmailPreferencesSettingsPanel.php',
'PhabricatorEmailVerificationController' => 'applications/auth/controller/PhabricatorEmailVerificationController.php',
'PhabricatorEmbedFileRemarkupRule' => 'applications/files/markup/PhabricatorEmbedFileRemarkupRule.php',
'PhabricatorEmojiRemarkupRule' => 'applications/macro/markup/PhabricatorEmojiRemarkupRule.php',
'PhabricatorEmptyQueryException' => 'infrastructure/query/PhabricatorEmptyQueryException.php',
'PhabricatorEnv' => 'infrastructure/env/PhabricatorEnv.php',
'PhabricatorEnvTestCase' => 'infrastructure/env/__tests__/PhabricatorEnvTestCase.php',
'PhabricatorEvent' => 'infrastructure/events/PhabricatorEvent.php',
'PhabricatorEventEngine' => 'infrastructure/events/PhabricatorEventEngine.php',
'PhabricatorEventListener' => 'infrastructure/events/PhabricatorEventListener.php',
'PhabricatorEventType' => 'infrastructure/events/constant/PhabricatorEventType.php',
'PhabricatorExampleEventListener' => 'infrastructure/events/PhabricatorExampleEventListener.php',
'PhabricatorExtendedPolicyInterface' => 'applications/policy/interface/PhabricatorExtendedPolicyInterface.php',
'PhabricatorExtendingPhabricatorConfigOptions' => 'applications/config/option/PhabricatorExtendingPhabricatorConfigOptions.php',
'PhabricatorExtensionsSetupCheck' => 'applications/config/check/PhabricatorExtensionsSetupCheck.php',
'PhabricatorExternalAccount' => 'applications/people/storage/PhabricatorExternalAccount.php',
'PhabricatorExternalAccountQuery' => 'applications/auth/query/PhabricatorExternalAccountQuery.php',
'PhabricatorExternalAccountsSettingsPanel' => 'applications/settings/panel/PhabricatorExternalAccountsSettingsPanel.php',
'PhabricatorExtraConfigSetupCheck' => 'applications/config/check/PhabricatorExtraConfigSetupCheck.php',
'PhabricatorFacebookAuthProvider' => 'applications/auth/provider/PhabricatorFacebookAuthProvider.php',
'PhabricatorFactAggregate' => 'applications/fact/storage/PhabricatorFactAggregate.php',
'PhabricatorFactApplication' => 'applications/fact/application/PhabricatorFactApplication.php',
'PhabricatorFactChartController' => 'applications/fact/controller/PhabricatorFactChartController.php',
'PhabricatorFactController' => 'applications/fact/controller/PhabricatorFactController.php',
'PhabricatorFactCountEngine' => 'applications/fact/engine/PhabricatorFactCountEngine.php',
'PhabricatorFactCursor' => 'applications/fact/storage/PhabricatorFactCursor.php',
'PhabricatorFactDAO' => 'applications/fact/storage/PhabricatorFactDAO.php',
'PhabricatorFactDaemon' => 'applications/fact/daemon/PhabricatorFactDaemon.php',
'PhabricatorFactEngine' => 'applications/fact/engine/PhabricatorFactEngine.php',
'PhabricatorFactEngineTestCase' => 'applications/fact/engine/__tests__/PhabricatorFactEngineTestCase.php',
'PhabricatorFactHomeController' => 'applications/fact/controller/PhabricatorFactHomeController.php',
'PhabricatorFactLastUpdatedEngine' => 'applications/fact/engine/PhabricatorFactLastUpdatedEngine.php',
'PhabricatorFactManagementAnalyzeWorkflow' => 'applications/fact/management/PhabricatorFactManagementAnalyzeWorkflow.php',
'PhabricatorFactManagementCursorsWorkflow' => 'applications/fact/management/PhabricatorFactManagementCursorsWorkflow.php',
'PhabricatorFactManagementDestroyWorkflow' => 'applications/fact/management/PhabricatorFactManagementDestroyWorkflow.php',
'PhabricatorFactManagementListWorkflow' => 'applications/fact/management/PhabricatorFactManagementListWorkflow.php',
'PhabricatorFactManagementStatusWorkflow' => 'applications/fact/management/PhabricatorFactManagementStatusWorkflow.php',
'PhabricatorFactManagementWorkflow' => 'applications/fact/management/PhabricatorFactManagementWorkflow.php',
'PhabricatorFactRaw' => 'applications/fact/storage/PhabricatorFactRaw.php',
'PhabricatorFactSimpleSpec' => 'applications/fact/spec/PhabricatorFactSimpleSpec.php',
'PhabricatorFactSpec' => 'applications/fact/spec/PhabricatorFactSpec.php',
'PhabricatorFactUpdateIterator' => 'applications/fact/extract/PhabricatorFactUpdateIterator.php',
'PhabricatorFeedApplication' => 'applications/feed/application/PhabricatorFeedApplication.php',
'PhabricatorFeedBuilder' => 'applications/feed/builder/PhabricatorFeedBuilder.php',
'PhabricatorFeedConfigOptions' => 'applications/feed/config/PhabricatorFeedConfigOptions.php',
'PhabricatorFeedController' => 'applications/feed/controller/PhabricatorFeedController.php',
'PhabricatorFeedDAO' => 'applications/feed/storage/PhabricatorFeedDAO.php',
'PhabricatorFeedDetailController' => 'applications/feed/controller/PhabricatorFeedDetailController.php',
'PhabricatorFeedListController' => 'applications/feed/controller/PhabricatorFeedListController.php',
'PhabricatorFeedManagementRepublishWorkflow' => 'applications/feed/management/PhabricatorFeedManagementRepublishWorkflow.php',
'PhabricatorFeedManagementWorkflow' => 'applications/feed/management/PhabricatorFeedManagementWorkflow.php',
'PhabricatorFeedQuery' => 'applications/feed/query/PhabricatorFeedQuery.php',
'PhabricatorFeedSearchEngine' => 'applications/feed/query/PhabricatorFeedSearchEngine.php',
'PhabricatorFeedStory' => 'applications/feed/story/PhabricatorFeedStory.php',
'PhabricatorFeedStoryData' => 'applications/feed/storage/PhabricatorFeedStoryData.php',
'PhabricatorFeedStoryNotification' => 'applications/notification/storage/PhabricatorFeedStoryNotification.php',
'PhabricatorFeedStoryPublisher' => 'applications/feed/PhabricatorFeedStoryPublisher.php',
'PhabricatorFeedStoryReference' => 'applications/feed/storage/PhabricatorFeedStoryReference.php',
'PhabricatorFile' => 'applications/files/storage/PhabricatorFile.php',
'PhabricatorFileBundleLoader' => 'applications/files/query/PhabricatorFileBundleLoader.php',
'PhabricatorFileChunk' => 'applications/files/storage/PhabricatorFileChunk.php',
'PhabricatorFileChunkIterator' => 'applications/files/engine/PhabricatorFileChunkIterator.php',
'PhabricatorFileChunkQuery' => 'applications/files/query/PhabricatorFileChunkQuery.php',
'PhabricatorFileCommentController' => 'applications/files/controller/PhabricatorFileCommentController.php',
'PhabricatorFileComposeController' => 'applications/files/controller/PhabricatorFileComposeController.php',
'PhabricatorFileController' => 'applications/files/controller/PhabricatorFileController.php',
'PhabricatorFileDAO' => 'applications/files/storage/PhabricatorFileDAO.php',
'PhabricatorFileDataController' => 'applications/files/controller/PhabricatorFileDataController.php',
'PhabricatorFileDeleteController' => 'applications/files/controller/PhabricatorFileDeleteController.php',
'PhabricatorFileDropUploadController' => 'applications/files/controller/PhabricatorFileDropUploadController.php',
'PhabricatorFileEditController' => 'applications/files/controller/PhabricatorFileEditController.php',
'PhabricatorFileEditor' => 'applications/files/editor/PhabricatorFileEditor.php',
'PhabricatorFileFilePHIDType' => 'applications/files/phid/PhabricatorFileFilePHIDType.php',
'PhabricatorFileHasObjectEdgeType' => 'applications/files/edge/PhabricatorFileHasObjectEdgeType.php',
'PhabricatorFileImageMacro' => 'applications/macro/storage/PhabricatorFileImageMacro.php',
'PhabricatorFileImageTransform' => 'applications/files/transform/PhabricatorFileImageTransform.php',
'PhabricatorFileInfoController' => 'applications/files/controller/PhabricatorFileInfoController.php',
'PhabricatorFileLinkListView' => 'view/layout/PhabricatorFileLinkListView.php',
'PhabricatorFileLinkView' => 'view/layout/PhabricatorFileLinkView.php',
'PhabricatorFileListController' => 'applications/files/controller/PhabricatorFileListController.php',
'PhabricatorFileQuery' => 'applications/files/query/PhabricatorFileQuery.php',
'PhabricatorFileSchemaSpec' => 'applications/files/storage/PhabricatorFileSchemaSpec.php',
'PhabricatorFileSearchEngine' => 'applications/files/query/PhabricatorFileSearchEngine.php',
'PhabricatorFileStorageBlob' => 'applications/files/storage/PhabricatorFileStorageBlob.php',
'PhabricatorFileStorageConfigurationException' => 'applications/files/exception/PhabricatorFileStorageConfigurationException.php',
'PhabricatorFileStorageEngine' => 'applications/files/engine/PhabricatorFileStorageEngine.php',
'PhabricatorFileStorageEngineTestCase' => 'applications/files/engine/__tests__/PhabricatorFileStorageEngineTestCase.php',
'PhabricatorFileTemporaryGarbageCollector' => 'applications/files/garbagecollector/PhabricatorFileTemporaryGarbageCollector.php',
'PhabricatorFileTestCase' => 'applications/files/storage/__tests__/PhabricatorFileTestCase.php',
'PhabricatorFileTestDataGenerator' => 'applications/files/lipsum/PhabricatorFileTestDataGenerator.php',
'PhabricatorFileThumbnailTransform' => 'applications/files/transform/PhabricatorFileThumbnailTransform.php',
'PhabricatorFileTransaction' => 'applications/files/storage/PhabricatorFileTransaction.php',
'PhabricatorFileTransactionComment' => 'applications/files/storage/PhabricatorFileTransactionComment.php',
'PhabricatorFileTransactionQuery' => 'applications/files/query/PhabricatorFileTransactionQuery.php',
'PhabricatorFileTransform' => 'applications/files/transform/PhabricatorFileTransform.php',
'PhabricatorFileTransformController' => 'applications/files/controller/PhabricatorFileTransformController.php',
'PhabricatorFileTransformListController' => 'applications/files/controller/PhabricatorFileTransformListController.php',
'PhabricatorFileTransformTestCase' => 'applications/files/transform/__tests__/PhabricatorFileTransformTestCase.php',
'PhabricatorFileUploadController' => 'applications/files/controller/PhabricatorFileUploadController.php',
'PhabricatorFileUploadDialogController' => 'applications/files/controller/PhabricatorFileUploadDialogController.php',
'PhabricatorFileUploadException' => 'applications/files/exception/PhabricatorFileUploadException.php',
'PhabricatorFileinfoSetupCheck' => 'applications/config/check/PhabricatorFileinfoSetupCheck.php',
'PhabricatorFilesApplication' => 'applications/files/application/PhabricatorFilesApplication.php',
'PhabricatorFilesApplicationStorageEnginePanel' => 'applications/files/applicationpanel/PhabricatorFilesApplicationStorageEnginePanel.php',
'PhabricatorFilesConfigOptions' => 'applications/files/config/PhabricatorFilesConfigOptions.php',
'PhabricatorFilesManagementCatWorkflow' => 'applications/files/management/PhabricatorFilesManagementCatWorkflow.php',
'PhabricatorFilesManagementCompactWorkflow' => 'applications/files/management/PhabricatorFilesManagementCompactWorkflow.php',
'PhabricatorFilesManagementEnginesWorkflow' => 'applications/files/management/PhabricatorFilesManagementEnginesWorkflow.php',
'PhabricatorFilesManagementMigrateWorkflow' => 'applications/files/management/PhabricatorFilesManagementMigrateWorkflow.php',
'PhabricatorFilesManagementPurgeWorkflow' => 'applications/files/management/PhabricatorFilesManagementPurgeWorkflow.php',
'PhabricatorFilesManagementRebuildWorkflow' => 'applications/files/management/PhabricatorFilesManagementRebuildWorkflow.php',
'PhabricatorFilesManagementWorkflow' => 'applications/files/management/PhabricatorFilesManagementWorkflow.php',
'PhabricatorFilesOutboundRequestAction' => 'applications/files/action/PhabricatorFilesOutboundRequestAction.php',
'PhabricatorFlag' => 'applications/flag/storage/PhabricatorFlag.php',
'PhabricatorFlagAddFlagHeraldAction' => 'applications/flag/herald/PhabricatorFlagAddFlagHeraldAction.php',
'PhabricatorFlagColor' => 'applications/flag/constants/PhabricatorFlagColor.php',
'PhabricatorFlagConstants' => 'applications/flag/constants/PhabricatorFlagConstants.php',
'PhabricatorFlagController' => 'applications/flag/controller/PhabricatorFlagController.php',
'PhabricatorFlagDAO' => 'applications/flag/storage/PhabricatorFlagDAO.php',
'PhabricatorFlagDeleteController' => 'applications/flag/controller/PhabricatorFlagDeleteController.php',
'PhabricatorFlagEditController' => 'applications/flag/controller/PhabricatorFlagEditController.php',
'PhabricatorFlagListController' => 'applications/flag/controller/PhabricatorFlagListController.php',
'PhabricatorFlagQuery' => 'applications/flag/query/PhabricatorFlagQuery.php',
'PhabricatorFlagSearchEngine' => 'applications/flag/query/PhabricatorFlagSearchEngine.php',
'PhabricatorFlagSelectControl' => 'applications/flag/view/PhabricatorFlagSelectControl.php',
'PhabricatorFlaggableInterface' => 'applications/flag/interface/PhabricatorFlaggableInterface.php',
'PhabricatorFlagsApplication' => 'applications/flag/application/PhabricatorFlagsApplication.php',
'PhabricatorFlagsUIEventListener' => 'applications/flag/events/PhabricatorFlagsUIEventListener.php',
'PhabricatorFundApplication' => 'applications/fund/application/PhabricatorFundApplication.php',
'PhabricatorGDSetupCheck' => 'applications/config/check/PhabricatorGDSetupCheck.php',
'PhabricatorGarbageCollector' => 'infrastructure/daemon/garbagecollector/PhabricatorGarbageCollector.php',
'PhabricatorGarbageCollectorConfigOptions' => 'applications/config/option/PhabricatorGarbageCollectorConfigOptions.php',
'PhabricatorGestureUIExample' => 'applications/uiexample/examples/PhabricatorGestureUIExample.php',
'PhabricatorGitGraphStream' => 'applications/repository/daemon/PhabricatorGitGraphStream.php',
'PhabricatorGitHubAuthProvider' => 'applications/auth/provider/PhabricatorGitHubAuthProvider.php',
'PhabricatorGlobalLock' => 'infrastructure/util/PhabricatorGlobalLock.php',
'PhabricatorGlobalUploadTargetView' => 'applications/files/view/PhabricatorGlobalUploadTargetView.php',
'PhabricatorGoogleAuthProvider' => 'applications/auth/provider/PhabricatorGoogleAuthProvider.php',
'PhabricatorHandleList' => 'applications/phid/handle/pool/PhabricatorHandleList.php',
'PhabricatorHandleObjectSelectorDataView' => 'applications/phid/handle/view/PhabricatorHandleObjectSelectorDataView.php',
'PhabricatorHandlePool' => 'applications/phid/handle/pool/PhabricatorHandlePool.php',
'PhabricatorHandlePoolTestCase' => 'applications/phid/handle/pool/__tests__/PhabricatorHandlePoolTestCase.php',
'PhabricatorHandleQuery' => 'applications/phid/query/PhabricatorHandleQuery.php',
'PhabricatorHarbormasterApplication' => 'applications/harbormaster/application/PhabricatorHarbormasterApplication.php',
'PhabricatorHarbormasterConfigOptions' => 'applications/harbormaster/config/PhabricatorHarbormasterConfigOptions.php',
'PhabricatorHash' => 'infrastructure/util/PhabricatorHash.php',
'PhabricatorHashTestCase' => 'infrastructure/util/__tests__/PhabricatorHashTestCase.php',
'PhabricatorHelpApplication' => 'applications/help/application/PhabricatorHelpApplication.php',
'PhabricatorHelpController' => 'applications/help/controller/PhabricatorHelpController.php',
'PhabricatorHelpDocumentationController' => 'applications/help/controller/PhabricatorHelpDocumentationController.php',
'PhabricatorHelpEditorProtocolController' => 'applications/help/controller/PhabricatorHelpEditorProtocolController.php',
'PhabricatorHelpKeyboardShortcutController' => 'applications/help/controller/PhabricatorHelpKeyboardShortcutController.php',
'PhabricatorHeraldApplication' => 'applications/herald/application/PhabricatorHeraldApplication.php',
'PhabricatorHighSecurityRequestExceptionHandler' => 'aphront/handler/PhabricatorHighSecurityRequestExceptionHandler.php',
'PhabricatorHomeApplication' => 'applications/home/application/PhabricatorHomeApplication.php',
'PhabricatorHomeController' => 'applications/home/controller/PhabricatorHomeController.php',
'PhabricatorHomeMainController' => 'applications/home/controller/PhabricatorHomeMainController.php',
'PhabricatorHomePreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorHomePreferencesSettingsPanel.php',
'PhabricatorHomeQuickCreateController' => 'applications/home/controller/PhabricatorHomeQuickCreateController.php',
'PhabricatorHovercardUIExample' => 'applications/uiexample/examples/PhabricatorHovercardUIExample.php',
'PhabricatorHovercardView' => 'view/widget/hovercard/PhabricatorHovercardView.php',
'PhabricatorHunksManagementMigrateWorkflow' => 'applications/differential/management/PhabricatorHunksManagementMigrateWorkflow.php',
'PhabricatorHunksManagementWorkflow' => 'applications/differential/management/PhabricatorHunksManagementWorkflow.php',
'PhabricatorIRCProtocolAdapter' => 'infrastructure/daemon/bot/adapter/PhabricatorIRCProtocolAdapter.php',
'PhabricatorIconRemarkupRule' => 'applications/macro/markup/PhabricatorIconRemarkupRule.php',
'PhabricatorImageMacroRemarkupRule' => 'applications/macro/markup/PhabricatorImageMacroRemarkupRule.php',
'PhabricatorImageTransformer' => 'applications/files/PhabricatorImageTransformer.php',
'PhabricatorImagemagickSetupCheck' => 'applications/config/check/PhabricatorImagemagickSetupCheck.php',
'PhabricatorInfrastructureTestCase' => '__tests__/PhabricatorInfrastructureTestCase.php',
'PhabricatorInlineCommentController' => 'infrastructure/diff/PhabricatorInlineCommentController.php',
'PhabricatorInlineCommentInterface' => 'infrastructure/diff/interface/PhabricatorInlineCommentInterface.php',
'PhabricatorInlineCommentPreviewController' => 'infrastructure/diff/PhabricatorInlineCommentPreviewController.php',
'PhabricatorInlineSummaryView' => 'infrastructure/diff/view/PhabricatorInlineSummaryView.php',
'PhabricatorInternationalizationManagementExtractWorkflow' => 'infrastructure/internationalization/management/PhabricatorInternationalizationManagementExtractWorkflow.php',
'PhabricatorInternationalizationManagementWorkflow' => 'infrastructure/internationalization/management/PhabricatorInternationalizationManagementWorkflow.php',
'PhabricatorInvalidConfigSetupCheck' => 'applications/config/check/PhabricatorInvalidConfigSetupCheck.php',
'PhabricatorIteratedMD5PasswordHasher' => 'infrastructure/util/password/PhabricatorIteratedMD5PasswordHasher.php',
'PhabricatorIteratedMD5PasswordHasherTestCase' => 'infrastructure/util/password/__tests__/PhabricatorIteratedMD5PasswordHasherTestCase.php',
'PhabricatorJIRAAuthProvider' => 'applications/auth/provider/PhabricatorJIRAAuthProvider.php',
'PhabricatorJavelinLinter' => 'infrastructure/lint/linter/PhabricatorJavelinLinter.php',
'PhabricatorJiraIssueHasObjectEdgeType' => 'applications/doorkeeper/edge/PhabricatorJiraIssueHasObjectEdgeType.php',
'PhabricatorJumpNavHandler' => 'applications/search/engine/PhabricatorJumpNavHandler.php',
'PhabricatorKeyValueDatabaseCache' => 'applications/cache/PhabricatorKeyValueDatabaseCache.php',
'PhabricatorLDAPAuthProvider' => 'applications/auth/provider/PhabricatorLDAPAuthProvider.php',
'PhabricatorLegalpadApplication' => 'applications/legalpad/application/PhabricatorLegalpadApplication.php',
'PhabricatorLegalpadConfigOptions' => 'applications/legalpad/config/PhabricatorLegalpadConfigOptions.php',
'PhabricatorLegalpadDocumentPHIDType' => 'applications/legalpad/phid/PhabricatorLegalpadDocumentPHIDType.php',
'PhabricatorLegalpadSignaturePolicyRule' => 'applications/policy/rule/PhabricatorLegalpadSignaturePolicyRule.php',
'PhabricatorLibraryTestCase' => '__tests__/PhabricatorLibraryTestCase.php',
'PhabricatorLipsumArtist' => 'applications/lipsum/image/PhabricatorLipsumArtist.php',
'PhabricatorLipsumGenerateWorkflow' => 'applications/lipsum/management/PhabricatorLipsumGenerateWorkflow.php',
'PhabricatorLipsumManagementWorkflow' => 'applications/lipsum/management/PhabricatorLipsumManagementWorkflow.php',
'PhabricatorLipsumMondrianArtist' => 'applications/lipsum/image/PhabricatorLipsumMondrianArtist.php',
'PhabricatorLiskDAO' => 'infrastructure/storage/lisk/PhabricatorLiskDAO.php',
'PhabricatorLiskSerializer' => 'infrastructure/storage/lisk/PhabricatorLiskSerializer.php',
'PhabricatorListFilterUIExample' => 'applications/uiexample/examples/PhabricatorListFilterUIExample.php',
'PhabricatorLocalDiskFileStorageEngine' => 'applications/files/engine/PhabricatorLocalDiskFileStorageEngine.php',
'PhabricatorLocalTimeTestCase' => 'view/__tests__/PhabricatorLocalTimeTestCase.php',
'PhabricatorLocaleScopeGuard' => 'infrastructure/internationalization/scope/PhabricatorLocaleScopeGuard.php',
'PhabricatorLocaleScopeGuardTestCase' => 'infrastructure/internationalization/scope/__tests__/PhabricatorLocaleScopeGuardTestCase.php',
'PhabricatorLogTriggerAction' => 'infrastructure/daemon/workers/action/PhabricatorLogTriggerAction.php',
'PhabricatorLogoutController' => 'applications/auth/controller/PhabricatorLogoutController.php',
'PhabricatorLunarPhasePolicyRule' => 'applications/policy/rule/PhabricatorLunarPhasePolicyRule.php',
'PhabricatorMacroApplication' => 'applications/macro/application/PhabricatorMacroApplication.php',
'PhabricatorMacroAudioController' => 'applications/macro/controller/PhabricatorMacroAudioController.php',
'PhabricatorMacroCommentController' => 'applications/macro/controller/PhabricatorMacroCommentController.php',
'PhabricatorMacroConfigOptions' => 'applications/macro/config/PhabricatorMacroConfigOptions.php',
'PhabricatorMacroController' => 'applications/macro/controller/PhabricatorMacroController.php',
'PhabricatorMacroDatasource' => 'applications/macro/typeahead/PhabricatorMacroDatasource.php',
'PhabricatorMacroDisableController' => 'applications/macro/controller/PhabricatorMacroDisableController.php',
'PhabricatorMacroEditController' => 'applications/macro/controller/PhabricatorMacroEditController.php',
'PhabricatorMacroEditor' => 'applications/macro/editor/PhabricatorMacroEditor.php',
'PhabricatorMacroListController' => 'applications/macro/controller/PhabricatorMacroListController.php',
'PhabricatorMacroMacroPHIDType' => 'applications/macro/phid/PhabricatorMacroMacroPHIDType.php',
'PhabricatorMacroMailReceiver' => 'applications/macro/mail/PhabricatorMacroMailReceiver.php',
'PhabricatorMacroManageCapability' => 'applications/macro/capability/PhabricatorMacroManageCapability.php',
'PhabricatorMacroMemeController' => 'applications/macro/controller/PhabricatorMacroMemeController.php',
'PhabricatorMacroMemeDialogController' => 'applications/macro/controller/PhabricatorMacroMemeDialogController.php',
'PhabricatorMacroQuery' => 'applications/macro/query/PhabricatorMacroQuery.php',
'PhabricatorMacroReplyHandler' => 'applications/macro/mail/PhabricatorMacroReplyHandler.php',
'PhabricatorMacroSearchEngine' => 'applications/macro/query/PhabricatorMacroSearchEngine.php',
'PhabricatorMacroTransaction' => 'applications/macro/storage/PhabricatorMacroTransaction.php',
'PhabricatorMacroTransactionComment' => 'applications/macro/storage/PhabricatorMacroTransactionComment.php',
'PhabricatorMacroTransactionQuery' => 'applications/macro/query/PhabricatorMacroTransactionQuery.php',
'PhabricatorMacroViewController' => 'applications/macro/controller/PhabricatorMacroViewController.php',
'PhabricatorMailEmailHeraldField' => 'applications/metamta/herald/PhabricatorMailEmailHeraldField.php',
'PhabricatorMailEmailHeraldFieldGroup' => 'applications/metamta/herald/PhabricatorMailEmailHeraldFieldGroup.php',
'PhabricatorMailEmailSubjectHeraldField' => 'applications/metamta/herald/PhabricatorMailEmailSubjectHeraldField.php',
'PhabricatorMailImplementationAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationAdapter.php',
'PhabricatorMailImplementationAmazonSESAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationAmazonSESAdapter.php',
'PhabricatorMailImplementationMailgunAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationMailgunAdapter.php',
'PhabricatorMailImplementationPHPMailerAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationPHPMailerAdapter.php',
'PhabricatorMailImplementationPHPMailerLiteAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationPHPMailerLiteAdapter.php',
'PhabricatorMailImplementationSendGridAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationSendGridAdapter.php',
'PhabricatorMailImplementationTestAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationTestAdapter.php',
'PhabricatorMailManagementListInboundWorkflow' => 'applications/metamta/management/PhabricatorMailManagementListInboundWorkflow.php',
'PhabricatorMailManagementListOutboundWorkflow' => 'applications/metamta/management/PhabricatorMailManagementListOutboundWorkflow.php',
'PhabricatorMailManagementReceiveTestWorkflow' => 'applications/metamta/management/PhabricatorMailManagementReceiveTestWorkflow.php',
'PhabricatorMailManagementResendWorkflow' => 'applications/metamta/management/PhabricatorMailManagementResendWorkflow.php',
'PhabricatorMailManagementSendTestWorkflow' => 'applications/metamta/management/PhabricatorMailManagementSendTestWorkflow.php',
'PhabricatorMailManagementShowInboundWorkflow' => 'applications/metamta/management/PhabricatorMailManagementShowInboundWorkflow.php',
'PhabricatorMailManagementShowOutboundWorkflow' => 'applications/metamta/management/PhabricatorMailManagementShowOutboundWorkflow.php',
'PhabricatorMailManagementVolumeWorkflow' => 'applications/metamta/management/PhabricatorMailManagementVolumeWorkflow.php',
'PhabricatorMailManagementWorkflow' => 'applications/metamta/management/PhabricatorMailManagementWorkflow.php',
'PhabricatorMailOutboundMailHeraldAdapter' => 'applications/metamta/herald/PhabricatorMailOutboundMailHeraldAdapter.php',
'PhabricatorMailOutboundRoutingHeraldAction' => 'applications/metamta/herald/PhabricatorMailOutboundRoutingHeraldAction.php',
'PhabricatorMailOutboundRoutingSelfEmailHeraldAction' => 'applications/metamta/herald/PhabricatorMailOutboundRoutingSelfEmailHeraldAction.php',
'PhabricatorMailOutboundRoutingSelfNotificationHeraldAction' => 'applications/metamta/herald/PhabricatorMailOutboundRoutingSelfNotificationHeraldAction.php',
'PhabricatorMailOutboundStatus' => 'applications/metamta/constants/PhabricatorMailOutboundStatus.php',
'PhabricatorMailReceiver' => 'applications/metamta/receiver/PhabricatorMailReceiver.php',
'PhabricatorMailReceiverTestCase' => 'applications/metamta/receiver/__tests__/PhabricatorMailReceiverTestCase.php',
'PhabricatorMailReplyHandler' => 'applications/metamta/replyhandler/PhabricatorMailReplyHandler.php',
'PhabricatorMailRoutingRule' => 'applications/metamta/constants/PhabricatorMailRoutingRule.php',
'PhabricatorMailSetupCheck' => 'applications/config/check/PhabricatorMailSetupCheck.php',
'PhabricatorMailTarget' => 'applications/metamta/replyhandler/PhabricatorMailTarget.php',
'PhabricatorMailgunConfigOptions' => 'applications/config/option/PhabricatorMailgunConfigOptions.php',
'PhabricatorMainMenuSearchView' => 'view/page/menu/PhabricatorMainMenuSearchView.php',
'PhabricatorMainMenuView' => 'view/page/menu/PhabricatorMainMenuView.php',
'PhabricatorManagementWorkflow' => 'infrastructure/management/PhabricatorManagementWorkflow.php',
'PhabricatorManiphestApplication' => 'applications/maniphest/application/PhabricatorManiphestApplication.php',
'PhabricatorManiphestConfigOptions' => 'applications/maniphest/config/PhabricatorManiphestConfigOptions.php',
'PhabricatorManiphestTaskTestDataGenerator' => 'applications/maniphest/lipsum/PhabricatorManiphestTaskTestDataGenerator.php',
'PhabricatorMarkupCache' => 'applications/cache/storage/PhabricatorMarkupCache.php',
'PhabricatorMarkupEngine' => 'infrastructure/markup/PhabricatorMarkupEngine.php',
'PhabricatorMarkupInterface' => 'infrastructure/markup/PhabricatorMarkupInterface.php',
'PhabricatorMarkupOneOff' => 'infrastructure/markup/PhabricatorMarkupOneOff.php',
'PhabricatorMarkupPreviewController' => 'infrastructure/markup/PhabricatorMarkupPreviewController.php',
'PhabricatorMemeRemarkupRule' => 'applications/macro/markup/PhabricatorMemeRemarkupRule.php',
'PhabricatorMentionRemarkupRule' => 'applications/people/markup/PhabricatorMentionRemarkupRule.php',
'PhabricatorMentionableInterface' => 'applications/transactions/interface/PhabricatorMentionableInterface.php',
'PhabricatorMercurialGraphStream' => 'applications/repository/daemon/PhabricatorMercurialGraphStream.php',
'PhabricatorMetaMTAActor' => 'applications/metamta/query/PhabricatorMetaMTAActor.php',
'PhabricatorMetaMTAActorQuery' => 'applications/metamta/query/PhabricatorMetaMTAActorQuery.php',
'PhabricatorMetaMTAApplication' => 'applications/metamta/application/PhabricatorMetaMTAApplication.php',
'PhabricatorMetaMTAApplicationEmail' => 'applications/metamta/storage/PhabricatorMetaMTAApplicationEmail.php',
'PhabricatorMetaMTAApplicationEmailDatasource' => 'applications/metamta/typeahead/PhabricatorMetaMTAApplicationEmailDatasource.php',
'PhabricatorMetaMTAApplicationEmailEditor' => 'applications/metamta/editor/PhabricatorMetaMTAApplicationEmailEditor.php',
'PhabricatorMetaMTAApplicationEmailHeraldField' => 'applications/metamta/herald/PhabricatorMetaMTAApplicationEmailHeraldField.php',
'PhabricatorMetaMTAApplicationEmailPHIDType' => 'applications/phid/PhabricatorMetaMTAApplicationEmailPHIDType.php',
'PhabricatorMetaMTAApplicationEmailPanel' => 'applications/metamta/applicationpanel/PhabricatorMetaMTAApplicationEmailPanel.php',
'PhabricatorMetaMTAApplicationEmailQuery' => 'applications/metamta/query/PhabricatorMetaMTAApplicationEmailQuery.php',
'PhabricatorMetaMTAApplicationEmailTransaction' => 'applications/metamta/storage/PhabricatorMetaMTAApplicationEmailTransaction.php',
'PhabricatorMetaMTAApplicationEmailTransactionQuery' => 'applications/metamta/query/PhabricatorMetaMTAApplicationEmailTransactionQuery.php',
'PhabricatorMetaMTAAttachment' => 'applications/metamta/storage/PhabricatorMetaMTAAttachment.php',
'PhabricatorMetaMTAConfigOptions' => 'applications/config/option/PhabricatorMetaMTAConfigOptions.php',
'PhabricatorMetaMTAController' => 'applications/metamta/controller/PhabricatorMetaMTAController.php',
'PhabricatorMetaMTADAO' => 'applications/metamta/storage/PhabricatorMetaMTADAO.php',
'PhabricatorMetaMTAEmailBodyParser' => 'applications/metamta/parser/PhabricatorMetaMTAEmailBodyParser.php',
'PhabricatorMetaMTAEmailBodyParserTestCase' => 'applications/metamta/parser/__tests__/PhabricatorMetaMTAEmailBodyParserTestCase.php',
'PhabricatorMetaMTAEmailHeraldAction' => 'applications/metamta/herald/PhabricatorMetaMTAEmailHeraldAction.php',
'PhabricatorMetaMTAEmailOthersHeraldAction' => 'applications/metamta/herald/PhabricatorMetaMTAEmailOthersHeraldAction.php',
'PhabricatorMetaMTAEmailSelfHeraldAction' => 'applications/metamta/herald/PhabricatorMetaMTAEmailSelfHeraldAction.php',
'PhabricatorMetaMTAErrorMailAction' => 'applications/metamta/action/PhabricatorMetaMTAErrorMailAction.php',
'PhabricatorMetaMTAMail' => 'applications/metamta/storage/PhabricatorMetaMTAMail.php',
'PhabricatorMetaMTAMailBody' => 'applications/metamta/view/PhabricatorMetaMTAMailBody.php',
'PhabricatorMetaMTAMailBodyTestCase' => 'applications/metamta/view/__tests__/PhabricatorMetaMTAMailBodyTestCase.php',
'PhabricatorMetaMTAMailHasRecipientEdgeType' => 'applications/metamta/edge/PhabricatorMetaMTAMailHasRecipientEdgeType.php',
'PhabricatorMetaMTAMailListController' => 'applications/metamta/controller/PhabricatorMetaMTAMailListController.php',
'PhabricatorMetaMTAMailPHIDType' => 'applications/metamta/phid/PhabricatorMetaMTAMailPHIDType.php',
'PhabricatorMetaMTAMailQuery' => 'applications/metamta/query/PhabricatorMetaMTAMailQuery.php',
'PhabricatorMetaMTAMailSearchEngine' => 'applications/metamta/query/PhabricatorMetaMTAMailSearchEngine.php',
'PhabricatorMetaMTAMailSection' => 'applications/metamta/view/PhabricatorMetaMTAMailSection.php',
'PhabricatorMetaMTAMailTestCase' => 'applications/metamta/storage/__tests__/PhabricatorMetaMTAMailTestCase.php',
'PhabricatorMetaMTAMailViewController' => 'applications/metamta/controller/PhabricatorMetaMTAMailViewController.php',
'PhabricatorMetaMTAMailableDatasource' => 'applications/metamta/typeahead/PhabricatorMetaMTAMailableDatasource.php',
'PhabricatorMetaMTAMailableFunctionDatasource' => 'applications/metamta/typeahead/PhabricatorMetaMTAMailableFunctionDatasource.php',
'PhabricatorMetaMTAMailgunReceiveController' => 'applications/metamta/controller/PhabricatorMetaMTAMailgunReceiveController.php',
'PhabricatorMetaMTAMailingList' => 'applications/mailinglists/storage/PhabricatorMetaMTAMailingList.php',
'PhabricatorMetaMTAMemberQuery' => 'applications/metamta/query/PhabricatorMetaMTAMemberQuery.php',
'PhabricatorMetaMTAPermanentFailureException' => 'applications/metamta/exception/PhabricatorMetaMTAPermanentFailureException.php',
'PhabricatorMetaMTAReceivedMail' => 'applications/metamta/storage/PhabricatorMetaMTAReceivedMail.php',
'PhabricatorMetaMTAReceivedMailProcessingException' => 'applications/metamta/exception/PhabricatorMetaMTAReceivedMailProcessingException.php',
'PhabricatorMetaMTAReceivedMailTestCase' => 'applications/metamta/storage/__tests__/PhabricatorMetaMTAReceivedMailTestCase.php',
'PhabricatorMetaMTASchemaSpec' => 'applications/metamta/storage/PhabricatorMetaMTASchemaSpec.php',
'PhabricatorMetaMTASendGridReceiveController' => 'applications/metamta/controller/PhabricatorMetaMTASendGridReceiveController.php',
'PhabricatorMetaMTAWorker' => 'applications/metamta/PhabricatorMetaMTAWorker.php',
'PhabricatorMetronomicTriggerClock' => 'infrastructure/daemon/workers/clock/PhabricatorMetronomicTriggerClock.php',
'PhabricatorMultiColumnUIExample' => 'applications/uiexample/examples/PhabricatorMultiColumnUIExample.php',
'PhabricatorMultiFactorSettingsPanel' => 'applications/settings/panel/PhabricatorMultiFactorSettingsPanel.php',
'PhabricatorMultimeterApplication' => 'applications/multimeter/application/PhabricatorMultimeterApplication.php',
'PhabricatorMustVerifyEmailController' => 'applications/auth/controller/PhabricatorMustVerifyEmailController.php',
'PhabricatorMySQLConfigOptions' => 'applications/config/option/PhabricatorMySQLConfigOptions.php',
'PhabricatorMySQLFileStorageEngine' => 'applications/files/engine/PhabricatorMySQLFileStorageEngine.php',
'PhabricatorMySQLSearchEngine' => 'applications/search/engine/PhabricatorMySQLSearchEngine.php',
'PhabricatorMySQLSetupCheck' => 'applications/config/check/PhabricatorMySQLSetupCheck.php',
'PhabricatorNamedQuery' => 'applications/search/storage/PhabricatorNamedQuery.php',
'PhabricatorNamedQueryQuery' => 'applications/search/query/PhabricatorNamedQueryQuery.php',
'PhabricatorNavigationRemarkupRule' => 'infrastructure/markup/rule/PhabricatorNavigationRemarkupRule.php',
'PhabricatorNeverTriggerClock' => 'infrastructure/daemon/workers/clock/PhabricatorNeverTriggerClock.php',
'PhabricatorNotificationBuilder' => 'applications/notification/builder/PhabricatorNotificationBuilder.php',
'PhabricatorNotificationClearController' => 'applications/notification/controller/PhabricatorNotificationClearController.php',
'PhabricatorNotificationClient' => 'applications/notification/client/PhabricatorNotificationClient.php',
'PhabricatorNotificationConfigOptions' => 'applications/config/option/PhabricatorNotificationConfigOptions.php',
'PhabricatorNotificationController' => 'applications/notification/controller/PhabricatorNotificationController.php',
'PhabricatorNotificationIndividualController' => 'applications/notification/controller/PhabricatorNotificationIndividualController.php',
'PhabricatorNotificationListController' => 'applications/notification/controller/PhabricatorNotificationListController.php',
'PhabricatorNotificationPanelController' => 'applications/notification/controller/PhabricatorNotificationPanelController.php',
'PhabricatorNotificationQuery' => 'applications/notification/query/PhabricatorNotificationQuery.php',
'PhabricatorNotificationSearchEngine' => 'applications/notification/query/PhabricatorNotificationSearchEngine.php',
'PhabricatorNotificationStatusController' => 'applications/notification/controller/PhabricatorNotificationStatusController.php',
'PhabricatorNotificationStatusView' => 'applications/notification/view/PhabricatorNotificationStatusView.php',
'PhabricatorNotificationTestController' => 'applications/notification/controller/PhabricatorNotificationTestController.php',
'PhabricatorNotificationTestFeedStory' => 'applications/notification/feed/PhabricatorNotificationTestFeedStory.php',
'PhabricatorNotificationUIExample' => 'applications/uiexample/examples/PhabricatorNotificationUIExample.php',
'PhabricatorNotificationsApplication' => 'applications/notification/application/PhabricatorNotificationsApplication.php',
'PhabricatorNuanceApplication' => 'applications/nuance/application/PhabricatorNuanceApplication.php',
'PhabricatorOAuth1AuthProvider' => 'applications/auth/provider/PhabricatorOAuth1AuthProvider.php',
'PhabricatorOAuth2AuthProvider' => 'applications/auth/provider/PhabricatorOAuth2AuthProvider.php',
'PhabricatorOAuthAuthProvider' => 'applications/auth/provider/PhabricatorOAuthAuthProvider.php',
'PhabricatorOAuthClientAuthorization' => 'applications/oauthserver/storage/PhabricatorOAuthClientAuthorization.php',
'PhabricatorOAuthClientAuthorizationQuery' => 'applications/oauthserver/query/PhabricatorOAuthClientAuthorizationQuery.php',
'PhabricatorOAuthClientController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientController.php',
'PhabricatorOAuthClientDeleteController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientDeleteController.php',
'PhabricatorOAuthClientEditController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientEditController.php',
'PhabricatorOAuthClientListController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientListController.php',
'PhabricatorOAuthClientSecretController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientSecretController.php',
'PhabricatorOAuthClientViewController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientViewController.php',
'PhabricatorOAuthResponse' => 'applications/oauthserver/PhabricatorOAuthResponse.php',
'PhabricatorOAuthServer' => 'applications/oauthserver/PhabricatorOAuthServer.php',
'PhabricatorOAuthServerAccessToken' => 'applications/oauthserver/storage/PhabricatorOAuthServerAccessToken.php',
'PhabricatorOAuthServerApplication' => 'applications/oauthserver/application/PhabricatorOAuthServerApplication.php',
'PhabricatorOAuthServerAuthController' => 'applications/oauthserver/controller/PhabricatorOAuthServerAuthController.php',
'PhabricatorOAuthServerAuthorizationCode' => 'applications/oauthserver/storage/PhabricatorOAuthServerAuthorizationCode.php',
'PhabricatorOAuthServerAuthorizationsSettingsPanel' => 'applications/oauthserver/panel/PhabricatorOAuthServerAuthorizationsSettingsPanel.php',
'PhabricatorOAuthServerClient' => 'applications/oauthserver/storage/PhabricatorOAuthServerClient.php',
'PhabricatorOAuthServerClientAuthorizationPHIDType' => 'applications/oauthserver/phid/PhabricatorOAuthServerClientAuthorizationPHIDType.php',
'PhabricatorOAuthServerClientPHIDType' => 'applications/oauthserver/phid/PhabricatorOAuthServerClientPHIDType.php',
'PhabricatorOAuthServerClientQuery' => 'applications/oauthserver/query/PhabricatorOAuthServerClientQuery.php',
'PhabricatorOAuthServerClientSearchEngine' => 'applications/oauthserver/query/PhabricatorOAuthServerClientSearchEngine.php',
'PhabricatorOAuthServerController' => 'applications/oauthserver/controller/PhabricatorOAuthServerController.php',
'PhabricatorOAuthServerCreateClientsCapability' => 'applications/oauthserver/capability/PhabricatorOAuthServerCreateClientsCapability.php',
'PhabricatorOAuthServerDAO' => 'applications/oauthserver/storage/PhabricatorOAuthServerDAO.php',
'PhabricatorOAuthServerScope' => 'applications/oauthserver/PhabricatorOAuthServerScope.php',
'PhabricatorOAuthServerTestCase' => 'applications/oauthserver/__tests__/PhabricatorOAuthServerTestCase.php',
'PhabricatorOAuthServerTestController' => 'applications/oauthserver/controller/PhabricatorOAuthServerTestController.php',
'PhabricatorOAuthServerTokenController' => 'applications/oauthserver/controller/PhabricatorOAuthServerTokenController.php',
'PhabricatorObjectHandle' => 'applications/phid/PhabricatorObjectHandle.php',
'PhabricatorObjectHasAsanaSubtaskEdgeType' => 'applications/doorkeeper/edge/PhabricatorObjectHasAsanaSubtaskEdgeType.php',
'PhabricatorObjectHasAsanaTaskEdgeType' => 'applications/doorkeeper/edge/PhabricatorObjectHasAsanaTaskEdgeType.php',
'PhabricatorObjectHasContributorEdgeType' => 'applications/transactions/edges/PhabricatorObjectHasContributorEdgeType.php',
'PhabricatorObjectHasFileEdgeType' => 'applications/transactions/edges/PhabricatorObjectHasFileEdgeType.php',
'PhabricatorObjectHasJiraIssueEdgeType' => 'applications/doorkeeper/edge/PhabricatorObjectHasJiraIssueEdgeType.php',
'PhabricatorObjectHasSubscriberEdgeType' => 'applications/transactions/edges/PhabricatorObjectHasSubscriberEdgeType.php',
'PhabricatorObjectHasUnsubscriberEdgeType' => 'applications/transactions/edges/PhabricatorObjectHasUnsubscriberEdgeType.php',
'PhabricatorObjectHasWatcherEdgeType' => 'applications/transactions/edges/PhabricatorObjectHasWatcherEdgeType.php',
'PhabricatorObjectListQuery' => 'applications/phid/query/PhabricatorObjectListQuery.php',
'PhabricatorObjectListQueryTestCase' => 'applications/phid/query/__tests__/PhabricatorObjectListQueryTestCase.php',
'PhabricatorObjectMailReceiver' => 'applications/metamta/receiver/PhabricatorObjectMailReceiver.php',
'PhabricatorObjectMailReceiverTestCase' => 'applications/metamta/receiver/__tests__/PhabricatorObjectMailReceiverTestCase.php',
'PhabricatorObjectMentionedByObjectEdgeType' => 'applications/transactions/edges/PhabricatorObjectMentionedByObjectEdgeType.php',
'PhabricatorObjectMentionsObjectEdgeType' => 'applications/transactions/edges/PhabricatorObjectMentionsObjectEdgeType.php',
'PhabricatorObjectQuery' => 'applications/phid/query/PhabricatorObjectQuery.php',
'PhabricatorObjectRemarkupRule' => 'infrastructure/markup/rule/PhabricatorObjectRemarkupRule.php',
'PhabricatorObjectSelectorDialog' => 'view/control/PhabricatorObjectSelectorDialog.php',
'PhabricatorObjectUsesCredentialsEdgeType' => 'applications/transactions/edges/PhabricatorObjectUsesCredentialsEdgeType.php',
'PhabricatorOffsetPagedQuery' => 'infrastructure/query/PhabricatorOffsetPagedQuery.php',
'PhabricatorOneTimeTriggerClock' => 'infrastructure/daemon/workers/clock/PhabricatorOneTimeTriggerClock.php',
'PhabricatorOpcodeCacheSpec' => 'applications/cache/spec/PhabricatorOpcodeCacheSpec.php',
'PhabricatorOwnerPathQuery' => 'applications/owners/query/PhabricatorOwnerPathQuery.php',
'PhabricatorOwnersApplication' => 'applications/owners/application/PhabricatorOwnersApplication.php',
'PhabricatorOwnersConfigOptions' => 'applications/owners/config/PhabricatorOwnersConfigOptions.php',
'PhabricatorOwnersConfiguredCustomField' => 'applications/owners/customfield/PhabricatorOwnersConfiguredCustomField.php',
'PhabricatorOwnersController' => 'applications/owners/controller/PhabricatorOwnersController.php',
'PhabricatorOwnersCustomField' => 'applications/owners/customfield/PhabricatorOwnersCustomField.php',
'PhabricatorOwnersCustomFieldNumericIndex' => 'applications/owners/storage/PhabricatorOwnersCustomFieldNumericIndex.php',
'PhabricatorOwnersCustomFieldStorage' => 'applications/owners/storage/PhabricatorOwnersCustomFieldStorage.php',
'PhabricatorOwnersCustomFieldStringIndex' => 'applications/owners/storage/PhabricatorOwnersCustomFieldStringIndex.php',
'PhabricatorOwnersDAO' => 'applications/owners/storage/PhabricatorOwnersDAO.php',
'PhabricatorOwnersDetailController' => 'applications/owners/controller/PhabricatorOwnersDetailController.php',
'PhabricatorOwnersEditController' => 'applications/owners/controller/PhabricatorOwnersEditController.php',
'PhabricatorOwnersListController' => 'applications/owners/controller/PhabricatorOwnersListController.php',
'PhabricatorOwnersOwner' => 'applications/owners/storage/PhabricatorOwnersOwner.php',
'PhabricatorOwnersPackage' => 'applications/owners/storage/PhabricatorOwnersPackage.php',
'PhabricatorOwnersPackageDatasource' => 'applications/owners/typeahead/PhabricatorOwnersPackageDatasource.php',
'PhabricatorOwnersPackageFunctionDatasource' => 'applications/owners/typeahead/PhabricatorOwnersPackageFunctionDatasource.php',
'PhabricatorOwnersPackageOwnerDatasource' => 'applications/owners/typeahead/PhabricatorOwnersPackageOwnerDatasource.php',
'PhabricatorOwnersPackagePHIDType' => 'applications/owners/phid/PhabricatorOwnersPackagePHIDType.php',
'PhabricatorOwnersPackageQuery' => 'applications/owners/query/PhabricatorOwnersPackageQuery.php',
'PhabricatorOwnersPackageSearchEngine' => 'applications/owners/query/PhabricatorOwnersPackageSearchEngine.php',
'PhabricatorOwnersPackageTestCase' => 'applications/owners/storage/__tests__/PhabricatorOwnersPackageTestCase.php',
'PhabricatorOwnersPackageTransaction' => 'applications/owners/storage/PhabricatorOwnersPackageTransaction.php',
'PhabricatorOwnersPackageTransactionEditor' => 'applications/owners/editor/PhabricatorOwnersPackageTransactionEditor.php',
'PhabricatorOwnersPackageTransactionQuery' => 'applications/owners/query/PhabricatorOwnersPackageTransactionQuery.php',
'PhabricatorOwnersPath' => 'applications/owners/storage/PhabricatorOwnersPath.php',
'PhabricatorOwnersPathsController' => 'applications/owners/controller/PhabricatorOwnersPathsController.php',
'PhabricatorOwnersSearchField' => 'applications/owners/searchfield/PhabricatorOwnersSearchField.php',
'PhabricatorPHDConfigOptions' => 'applications/config/option/PhabricatorPHDConfigOptions.php',
'PhabricatorPHID' => 'applications/phid/storage/PhabricatorPHID.php',
'PhabricatorPHIDConstants' => 'applications/phid/PhabricatorPHIDConstants.php',
'PhabricatorPHIDInterface' => 'applications/phid/interface/PhabricatorPHIDInterface.php',
'PhabricatorPHIDType' => 'applications/phid/type/PhabricatorPHIDType.php',
'PhabricatorPHIDTypeTestCase' => 'applications/phid/type/__tests__/PhabricatorPHIDTypeTestCase.php',
'PhabricatorPHPASTApplication' => 'applications/phpast/application/PhabricatorPHPASTApplication.php',
'PhabricatorPHPConfigSetupCheck' => 'applications/config/check/PhabricatorPHPConfigSetupCheck.php',
'PhabricatorPHPMailerConfigOptions' => 'applications/config/option/PhabricatorPHPMailerConfigOptions.php',
'PhabricatorPagedFormUIExample' => 'applications/uiexample/examples/PhabricatorPagedFormUIExample.php',
'PhabricatorPagerUIExample' => 'applications/uiexample/examples/PhabricatorPagerUIExample.php',
'PhabricatorPassphraseApplication' => 'applications/passphrase/application/PhabricatorPassphraseApplication.php',
'PhabricatorPasswordAuthProvider' => 'applications/auth/provider/PhabricatorPasswordAuthProvider.php',
'PhabricatorPasswordHasher' => 'infrastructure/util/password/PhabricatorPasswordHasher.php',
'PhabricatorPasswordHasherTestCase' => 'infrastructure/util/password/__tests__/PhabricatorPasswordHasherTestCase.php',
'PhabricatorPasswordHasherUnavailableException' => 'infrastructure/util/password/PhabricatorPasswordHasherUnavailableException.php',
'PhabricatorPasswordSettingsPanel' => 'applications/settings/panel/PhabricatorPasswordSettingsPanel.php',
'PhabricatorPaste' => 'applications/paste/storage/PhabricatorPaste.php',
'PhabricatorPasteApplication' => 'applications/paste/application/PhabricatorPasteApplication.php',
'PhabricatorPasteCommentController' => 'applications/paste/controller/PhabricatorPasteCommentController.php',
'PhabricatorPasteConfigOptions' => 'applications/paste/config/PhabricatorPasteConfigOptions.php',
'PhabricatorPasteController' => 'applications/paste/controller/PhabricatorPasteController.php',
'PhabricatorPasteDAO' => 'applications/paste/storage/PhabricatorPasteDAO.php',
'PhabricatorPasteEditController' => 'applications/paste/controller/PhabricatorPasteEditController.php',
'PhabricatorPasteEditor' => 'applications/paste/editor/PhabricatorPasteEditor.php',
'PhabricatorPasteListController' => 'applications/paste/controller/PhabricatorPasteListController.php',
'PhabricatorPastePastePHIDType' => 'applications/paste/phid/PhabricatorPastePastePHIDType.php',
'PhabricatorPasteQuery' => 'applications/paste/query/PhabricatorPasteQuery.php',
'PhabricatorPasteRemarkupRule' => 'applications/paste/remarkup/PhabricatorPasteRemarkupRule.php',
'PhabricatorPasteSchemaSpec' => 'applications/paste/storage/PhabricatorPasteSchemaSpec.php',
'PhabricatorPasteSearchEngine' => 'applications/paste/query/PhabricatorPasteSearchEngine.php',
'PhabricatorPasteTestDataGenerator' => 'applications/paste/lipsum/PhabricatorPasteTestDataGenerator.php',
'PhabricatorPasteTransaction' => 'applications/paste/storage/PhabricatorPasteTransaction.php',
'PhabricatorPasteTransactionComment' => 'applications/paste/storage/PhabricatorPasteTransactionComment.php',
'PhabricatorPasteTransactionQuery' => 'applications/paste/query/PhabricatorPasteTransactionQuery.php',
'PhabricatorPasteViewController' => 'applications/paste/controller/PhabricatorPasteViewController.php',
'PhabricatorPathSetupCheck' => 'applications/config/check/PhabricatorPathSetupCheck.php',
'PhabricatorPeopleAnyOwnerDatasource' => 'applications/people/typeahead/PhabricatorPeopleAnyOwnerDatasource.php',
'PhabricatorPeopleApplication' => 'applications/people/application/PhabricatorPeopleApplication.php',
'PhabricatorPeopleApproveController' => 'applications/people/controller/PhabricatorPeopleApproveController.php',
'PhabricatorPeopleCalendarController' => 'applications/people/controller/PhabricatorPeopleCalendarController.php',
'PhabricatorPeopleController' => 'applications/people/controller/PhabricatorPeopleController.php',
'PhabricatorPeopleCreateController' => 'applications/people/controller/PhabricatorPeopleCreateController.php',
'PhabricatorPeopleDatasource' => 'applications/people/typeahead/PhabricatorPeopleDatasource.php',
'PhabricatorPeopleDeleteController' => 'applications/people/controller/PhabricatorPeopleDeleteController.php',
'PhabricatorPeopleDisableController' => 'applications/people/controller/PhabricatorPeopleDisableController.php',
'PhabricatorPeopleEmpowerController' => 'applications/people/controller/PhabricatorPeopleEmpowerController.php',
'PhabricatorPeopleExternalPHIDType' => 'applications/people/phid/PhabricatorPeopleExternalPHIDType.php',
'PhabricatorPeopleHovercardEventListener' => 'applications/people/event/PhabricatorPeopleHovercardEventListener.php',
'PhabricatorPeopleInviteController' => 'applications/people/controller/PhabricatorPeopleInviteController.php',
'PhabricatorPeopleInviteListController' => 'applications/people/controller/PhabricatorPeopleInviteListController.php',
'PhabricatorPeopleInviteSendController' => 'applications/people/controller/PhabricatorPeopleInviteSendController.php',
'PhabricatorPeopleLdapController' => 'applications/people/controller/PhabricatorPeopleLdapController.php',
'PhabricatorPeopleListController' => 'applications/people/controller/PhabricatorPeopleListController.php',
'PhabricatorPeopleLogQuery' => 'applications/people/query/PhabricatorPeopleLogQuery.php',
'PhabricatorPeopleLogSearchEngine' => 'applications/people/query/PhabricatorPeopleLogSearchEngine.php',
'PhabricatorPeopleLogsController' => 'applications/people/controller/PhabricatorPeopleLogsController.php',
'PhabricatorPeopleNewController' => 'applications/people/controller/PhabricatorPeopleNewController.php',
'PhabricatorPeopleNoOwnerDatasource' => 'applications/people/typeahead/PhabricatorPeopleNoOwnerDatasource.php',
'PhabricatorPeopleOwnerDatasource' => 'applications/people/typeahead/PhabricatorPeopleOwnerDatasource.php',
'PhabricatorPeopleProfileController' => 'applications/people/controller/PhabricatorPeopleProfileController.php',
'PhabricatorPeopleProfileEditController' => 'applications/people/controller/PhabricatorPeopleProfileEditController.php',
'PhabricatorPeopleProfilePictureController' => 'applications/people/controller/PhabricatorPeopleProfilePictureController.php',
'PhabricatorPeopleQuery' => 'applications/people/query/PhabricatorPeopleQuery.php',
'PhabricatorPeopleRenameController' => 'applications/people/controller/PhabricatorPeopleRenameController.php',
'PhabricatorPeopleSearchEngine' => 'applications/people/query/PhabricatorPeopleSearchEngine.php',
'PhabricatorPeopleTestDataGenerator' => 'applications/people/lipsum/PhabricatorPeopleTestDataGenerator.php',
'PhabricatorPeopleTransactionQuery' => 'applications/people/query/PhabricatorPeopleTransactionQuery.php',
'PhabricatorPeopleUserFunctionDatasource' => 'applications/people/typeahead/PhabricatorPeopleUserFunctionDatasource.php',
'PhabricatorPeopleUserPHIDType' => 'applications/people/phid/PhabricatorPeopleUserPHIDType.php',
'PhabricatorPeopleWelcomeController' => 'applications/people/controller/PhabricatorPeopleWelcomeController.php',
'PhabricatorPersonaAuthProvider' => 'applications/auth/provider/PhabricatorPersonaAuthProvider.php',
'PhabricatorPhabricatorAuthProvider' => 'applications/auth/provider/PhabricatorPhabricatorAuthProvider.php',
'PhabricatorPhameApplication' => 'applications/phame/application/PhabricatorPhameApplication.php',
'PhabricatorPhameBlogPHIDType' => 'applications/phame/phid/PhabricatorPhameBlogPHIDType.php',
'PhabricatorPhameConfigOptions' => 'applications/phame/config/PhabricatorPhameConfigOptions.php',
'PhabricatorPhamePostPHIDType' => 'applications/phame/phid/PhabricatorPhamePostPHIDType.php',
'PhabricatorPhluxApplication' => 'applications/phlux/application/PhabricatorPhluxApplication.php',
'PhabricatorPholioApplication' => 'applications/pholio/application/PhabricatorPholioApplication.php',
'PhabricatorPholioConfigOptions' => 'applications/pholio/config/PhabricatorPholioConfigOptions.php',
'PhabricatorPholioMockTestDataGenerator' => 'applications/pholio/lipsum/PhabricatorPholioMockTestDataGenerator.php',
'PhabricatorPhortuneApplication' => 'applications/phortune/application/PhabricatorPhortuneApplication.php',
'PhabricatorPhortuneManagementInvoiceWorkflow' => 'applications/phortune/management/PhabricatorPhortuneManagementInvoiceWorkflow.php',
'PhabricatorPhortuneManagementWorkflow' => 'applications/phortune/management/PhabricatorPhortuneManagementWorkflow.php',
'PhabricatorPhragmentApplication' => 'applications/phragment/application/PhabricatorPhragmentApplication.php',
'PhabricatorPhrequentApplication' => 'applications/phrequent/application/PhabricatorPhrequentApplication.php',
'PhabricatorPhrequentConfigOptions' => 'applications/phrequent/config/PhabricatorPhrequentConfigOptions.php',
'PhabricatorPhrictionApplication' => 'applications/phriction/application/PhabricatorPhrictionApplication.php',
'PhabricatorPhrictionConfigOptions' => 'applications/phriction/config/PhabricatorPhrictionConfigOptions.php',
'PhabricatorPhurlApplication' => 'applications/phurl/application/PhabricatorPhurlApplication.php',
'PhabricatorPhurlController' => 'applications/phurl/controller/PhabricatorPhurlController.php',
'PhabricatorPhurlDAO' => 'applications/phurl/storage/PhabricatorPhurlDAO.php',
'PhabricatorPhurlSchemaSpec' => 'applications/phurl/storage/PhabricatorPhurlSchemaSpec.php',
'PhabricatorPhurlURL' => 'applications/phurl/storage/PhabricatorPhurlURL.php',
'PhabricatorPhurlURLEditController' => 'applications/phurl/controller/PhabricatorPhurlURLEditController.php',
'PhabricatorPhurlURLEditor' => 'applications/phurl/editor/PhabricatorPhurlURLEditor.php',
'PhabricatorPhurlURLListController' => 'applications/phurl/controller/PhabricatorPhurlURLListController.php',
'PhabricatorPhurlURLPHIDType' => 'applications/phurl/phid/PhabricatorPhurlURLPHIDType.php',
'PhabricatorPhurlURLQuery' => 'applications/phurl/query/PhabricatorPhurlURLQuery.php',
'PhabricatorPhurlURLSearchEngine' => 'applications/phurl/query/PhabricatorPhurlURLSearchEngine.php',
'PhabricatorPhurlURLTransaction' => 'applications/phurl/storage/PhabricatorPhurlURLTransaction.php',
'PhabricatorPhurlURLTransactionComment' => 'applications/phurl/storage/PhabricatorPhurlURLTransactionComment.php',
'PhabricatorPhurlURLTransactionQuery' => 'applications/phurl/query/PhabricatorPhurlURLTransactionQuery.php',
'PhabricatorPhurlURLViewController' => 'applications/phurl/controller/PhabricatorPhurlURLViewController.php',
'PhabricatorPlatformSite' => 'aphront/site/PhabricatorPlatformSite.php',
'PhabricatorPolicies' => 'applications/policy/constants/PhabricatorPolicies.php',
'PhabricatorPolicy' => 'applications/policy/storage/PhabricatorPolicy.php',
'PhabricatorPolicyApplication' => 'applications/policy/application/PhabricatorPolicyApplication.php',
'PhabricatorPolicyAwareQuery' => 'infrastructure/query/policy/PhabricatorPolicyAwareQuery.php',
'PhabricatorPolicyAwareTestQuery' => 'applications/policy/__tests__/PhabricatorPolicyAwareTestQuery.php',
'PhabricatorPolicyCanEditCapability' => 'applications/policy/capability/PhabricatorPolicyCanEditCapability.php',
'PhabricatorPolicyCanJoinCapability' => 'applications/policy/capability/PhabricatorPolicyCanJoinCapability.php',
'PhabricatorPolicyCanViewCapability' => 'applications/policy/capability/PhabricatorPolicyCanViewCapability.php',
'PhabricatorPolicyCapability' => 'applications/policy/capability/PhabricatorPolicyCapability.php',
'PhabricatorPolicyCapabilityTestCase' => 'applications/policy/capability/__tests__/PhabricatorPolicyCapabilityTestCase.php',
'PhabricatorPolicyConfigOptions' => 'applications/policy/config/PhabricatorPolicyConfigOptions.php',
'PhabricatorPolicyConstants' => 'applications/policy/constants/PhabricatorPolicyConstants.php',
'PhabricatorPolicyController' => 'applications/policy/controller/PhabricatorPolicyController.php',
'PhabricatorPolicyDAO' => 'applications/policy/storage/PhabricatorPolicyDAO.php',
'PhabricatorPolicyDataTestCase' => 'applications/policy/__tests__/PhabricatorPolicyDataTestCase.php',
'PhabricatorPolicyEditController' => 'applications/policy/controller/PhabricatorPolicyEditController.php',
'PhabricatorPolicyException' => 'applications/policy/exception/PhabricatorPolicyException.php',
'PhabricatorPolicyExplainController' => 'applications/policy/controller/PhabricatorPolicyExplainController.php',
'PhabricatorPolicyFilter' => 'applications/policy/filter/PhabricatorPolicyFilter.php',
'PhabricatorPolicyInterface' => 'applications/policy/interface/PhabricatorPolicyInterface.php',
'PhabricatorPolicyManagementShowWorkflow' => 'applications/policy/management/PhabricatorPolicyManagementShowWorkflow.php',
'PhabricatorPolicyManagementUnlockWorkflow' => 'applications/policy/management/PhabricatorPolicyManagementUnlockWorkflow.php',
'PhabricatorPolicyManagementWorkflow' => 'applications/policy/management/PhabricatorPolicyManagementWorkflow.php',
'PhabricatorPolicyPHIDTypePolicy' => 'applications/policy/phid/PhabricatorPolicyPHIDTypePolicy.php',
'PhabricatorPolicyQuery' => 'applications/policy/query/PhabricatorPolicyQuery.php',
'PhabricatorPolicyRequestExceptionHandler' => 'aphront/handler/PhabricatorPolicyRequestExceptionHandler.php',
'PhabricatorPolicyRule' => 'applications/policy/rule/PhabricatorPolicyRule.php',
'PhabricatorPolicyTestCase' => 'applications/policy/__tests__/PhabricatorPolicyTestCase.php',
'PhabricatorPolicyTestObject' => 'applications/policy/__tests__/PhabricatorPolicyTestObject.php',
'PhabricatorPolicyType' => 'applications/policy/constants/PhabricatorPolicyType.php',
'PhabricatorPonderApplication' => 'applications/ponder/application/PhabricatorPonderApplication.php',
'PhabricatorProject' => 'applications/project/storage/PhabricatorProject.php',
'PhabricatorProjectAddHeraldAction' => 'applications/project/herald/PhabricatorProjectAddHeraldAction.php',
'PhabricatorProjectApplication' => 'applications/project/application/PhabricatorProjectApplication.php',
'PhabricatorProjectArchiveController' => 'applications/project/controller/PhabricatorProjectArchiveController.php',
'PhabricatorProjectBoardController' => 'applications/project/controller/PhabricatorProjectBoardController.php',
'PhabricatorProjectBoardImportController' => 'applications/project/controller/PhabricatorProjectBoardImportController.php',
'PhabricatorProjectBoardReorderController' => 'applications/project/controller/PhabricatorProjectBoardReorderController.php',
'PhabricatorProjectBoardViewController' => 'applications/project/controller/PhabricatorProjectBoardViewController.php',
'PhabricatorProjectColumn' => 'applications/project/storage/PhabricatorProjectColumn.php',
'PhabricatorProjectColumnDetailController' => 'applications/project/controller/PhabricatorProjectColumnDetailController.php',
'PhabricatorProjectColumnEditController' => 'applications/project/controller/PhabricatorProjectColumnEditController.php',
'PhabricatorProjectColumnHideController' => 'applications/project/controller/PhabricatorProjectColumnHideController.php',
'PhabricatorProjectColumnPHIDType' => 'applications/project/phid/PhabricatorProjectColumnPHIDType.php',
'PhabricatorProjectColumnPosition' => 'applications/project/storage/PhabricatorProjectColumnPosition.php',
'PhabricatorProjectColumnPositionQuery' => 'applications/project/query/PhabricatorProjectColumnPositionQuery.php',
'PhabricatorProjectColumnQuery' => 'applications/project/query/PhabricatorProjectColumnQuery.php',
'PhabricatorProjectColumnTransaction' => 'applications/project/storage/PhabricatorProjectColumnTransaction.php',
'PhabricatorProjectColumnTransactionEditor' => 'applications/project/editor/PhabricatorProjectColumnTransactionEditor.php',
'PhabricatorProjectColumnTransactionQuery' => 'applications/project/query/PhabricatorProjectColumnTransactionQuery.php',
'PhabricatorProjectConfigOptions' => 'applications/project/config/PhabricatorProjectConfigOptions.php',
'PhabricatorProjectConfiguredCustomField' => 'applications/project/customfield/PhabricatorProjectConfiguredCustomField.php',
'PhabricatorProjectController' => 'applications/project/controller/PhabricatorProjectController.php',
'PhabricatorProjectCustomField' => 'applications/project/customfield/PhabricatorProjectCustomField.php',
'PhabricatorProjectCustomFieldNumericIndex' => 'applications/project/storage/PhabricatorProjectCustomFieldNumericIndex.php',
'PhabricatorProjectCustomFieldStorage' => 'applications/project/storage/PhabricatorProjectCustomFieldStorage.php',
'PhabricatorProjectCustomFieldStringIndex' => 'applications/project/storage/PhabricatorProjectCustomFieldStringIndex.php',
'PhabricatorProjectDAO' => 'applications/project/storage/PhabricatorProjectDAO.php',
'PhabricatorProjectDatasource' => 'applications/project/typeahead/PhabricatorProjectDatasource.php',
'PhabricatorProjectDescriptionField' => 'applications/project/customfield/PhabricatorProjectDescriptionField.php',
'PhabricatorProjectEditDetailsController' => 'applications/project/controller/PhabricatorProjectEditDetailsController.php',
'PhabricatorProjectEditIconController' => 'applications/project/controller/PhabricatorProjectEditIconController.php',
'PhabricatorProjectEditPictureController' => 'applications/project/controller/PhabricatorProjectEditPictureController.php',
'PhabricatorProjectEditorTestCase' => 'applications/project/editor/__tests__/PhabricatorProjectEditorTestCase.php',
'PhabricatorProjectFeedController' => 'applications/project/controller/PhabricatorProjectFeedController.php',
'PhabricatorProjectHeraldAction' => 'applications/project/herald/PhabricatorProjectHeraldAction.php',
'PhabricatorProjectIcon' => 'applications/project/icon/PhabricatorProjectIcon.php',
'PhabricatorProjectInterface' => 'applications/project/interface/PhabricatorProjectInterface.php',
'PhabricatorProjectListController' => 'applications/project/controller/PhabricatorProjectListController.php',
'PhabricatorProjectLogicalAndDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalAndDatasource.php',
'PhabricatorProjectLogicalDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalDatasource.php',
'PhabricatorProjectLogicalOrNotDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalOrNotDatasource.php',
'PhabricatorProjectLogicalUserDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalUserDatasource.php',
'PhabricatorProjectLogicalViewerDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalViewerDatasource.php',
'PhabricatorProjectMemberOfProjectEdgeType' => 'applications/project/edge/PhabricatorProjectMemberOfProjectEdgeType.php',
'PhabricatorProjectMembersDatasource' => 'applications/project/typeahead/PhabricatorProjectMembersDatasource.php',
'PhabricatorProjectMembersEditController' => 'applications/project/controller/PhabricatorProjectMembersEditController.php',
'PhabricatorProjectMembersRemoveController' => 'applications/project/controller/PhabricatorProjectMembersRemoveController.php',
'PhabricatorProjectMoveController' => 'applications/project/controller/PhabricatorProjectMoveController.php',
'PhabricatorProjectNoProjectsDatasource' => 'applications/project/typeahead/PhabricatorProjectNoProjectsDatasource.php',
'PhabricatorProjectObjectHasProjectEdgeType' => 'applications/project/edge/PhabricatorProjectObjectHasProjectEdgeType.php',
'PhabricatorProjectOrUserDatasource' => 'applications/project/typeahead/PhabricatorProjectOrUserDatasource.php',
'PhabricatorProjectOrUserFunctionDatasource' => 'applications/project/typeahead/PhabricatorProjectOrUserFunctionDatasource.php',
'PhabricatorProjectProfileController' => 'applications/project/controller/PhabricatorProjectProfileController.php',
'PhabricatorProjectProjectHasMemberEdgeType' => 'applications/project/edge/PhabricatorProjectProjectHasMemberEdgeType.php',
'PhabricatorProjectProjectHasObjectEdgeType' => 'applications/project/edge/PhabricatorProjectProjectHasObjectEdgeType.php',
'PhabricatorProjectProjectPHIDType' => 'applications/project/phid/PhabricatorProjectProjectPHIDType.php',
'PhabricatorProjectQuery' => 'applications/project/query/PhabricatorProjectQuery.php',
'PhabricatorProjectRemoveHeraldAction' => 'applications/project/herald/PhabricatorProjectRemoveHeraldAction.php',
'PhabricatorProjectSchemaSpec' => 'applications/project/storage/PhabricatorProjectSchemaSpec.php',
'PhabricatorProjectSearchEngine' => 'applications/project/query/PhabricatorProjectSearchEngine.php',
'PhabricatorProjectSearchField' => 'applications/project/searchfield/PhabricatorProjectSearchField.php',
'PhabricatorProjectSearchIndexer' => 'applications/project/search/PhabricatorProjectSearchIndexer.php',
'PhabricatorProjectSlug' => 'applications/project/storage/PhabricatorProjectSlug.php',
'PhabricatorProjectStandardCustomField' => 'applications/project/customfield/PhabricatorProjectStandardCustomField.php',
'PhabricatorProjectStatus' => 'applications/project/constants/PhabricatorProjectStatus.php',
'PhabricatorProjectTestDataGenerator' => 'applications/project/lipsum/PhabricatorProjectTestDataGenerator.php',
'PhabricatorProjectTransaction' => 'applications/project/storage/PhabricatorProjectTransaction.php',
'PhabricatorProjectTransactionEditor' => 'applications/project/editor/PhabricatorProjectTransactionEditor.php',
'PhabricatorProjectTransactionQuery' => 'applications/project/query/PhabricatorProjectTransactionQuery.php',
'PhabricatorProjectUIEventListener' => 'applications/project/events/PhabricatorProjectUIEventListener.php',
'PhabricatorProjectUpdateController' => 'applications/project/controller/PhabricatorProjectUpdateController.php',
'PhabricatorProjectUserFunctionDatasource' => 'applications/project/typeahead/PhabricatorProjectUserFunctionDatasource.php',
'PhabricatorProjectViewController' => 'applications/project/controller/PhabricatorProjectViewController.php',
'PhabricatorProjectWatchController' => 'applications/project/controller/PhabricatorProjectWatchController.php',
'PhabricatorProjectsPolicyRule' => 'applications/policy/rule/PhabricatorProjectsPolicyRule.php',
'PhabricatorProtocolAdapter' => 'infrastructure/daemon/bot/adapter/PhabricatorProtocolAdapter.php',
'PhabricatorPygmentSetupCheck' => 'applications/config/check/PhabricatorPygmentSetupCheck.php',
'PhabricatorQuery' => 'infrastructure/query/PhabricatorQuery.php',
'PhabricatorQueryConstraint' => 'infrastructure/query/constraint/PhabricatorQueryConstraint.php',
'PhabricatorQueryOrderItem' => 'infrastructure/query/order/PhabricatorQueryOrderItem.php',
'PhabricatorQueryOrderTestCase' => 'infrastructure/query/order/__tests__/PhabricatorQueryOrderTestCase.php',
'PhabricatorQueryOrderVector' => 'infrastructure/query/order/PhabricatorQueryOrderVector.php',
'PhabricatorRateLimitRequestExceptionHandler' => 'aphront/handler/PhabricatorRateLimitRequestExceptionHandler.php',
'PhabricatorRecaptchaConfigOptions' => 'applications/config/option/PhabricatorRecaptchaConfigOptions.php',
'PhabricatorRecipientHasBadgeEdgeType' => 'applications/badges/edge/PhabricatorRecipientHasBadgeEdgeType.php',
'PhabricatorRedirectController' => 'applications/base/controller/PhabricatorRedirectController.php',
'PhabricatorRefreshCSRFController' => 'applications/auth/controller/PhabricatorRefreshCSRFController.php',
'PhabricatorRegistrationProfile' => 'applications/people/storage/PhabricatorRegistrationProfile.php',
'PhabricatorReleephApplication' => 'applications/releeph/application/PhabricatorReleephApplication.php',
'PhabricatorReleephApplicationConfigOptions' => 'applications/releeph/config/PhabricatorReleephApplicationConfigOptions.php',
'PhabricatorRemarkupControl' => 'view/form/control/PhabricatorRemarkupControl.php',
'PhabricatorRemarkupCowsayBlockInterpreter' => 'infrastructure/markup/interpreter/PhabricatorRemarkupCowsayBlockInterpreter.php',
'PhabricatorRemarkupCustomBlockRule' => 'infrastructure/markup/rule/PhabricatorRemarkupCustomBlockRule.php',
'PhabricatorRemarkupCustomInlineRule' => 'infrastructure/markup/rule/PhabricatorRemarkupCustomInlineRule.php',
'PhabricatorRemarkupFigletBlockInterpreter' => 'infrastructure/markup/interpreter/PhabricatorRemarkupFigletBlockInterpreter.php',
- 'PhabricatorRemarkupGraphvizBlockInterpreter' => 'infrastructure/markup/interpreter/PhabricatorRemarkupGraphvizBlockInterpreter.php',
'PhabricatorRemarkupUIExample' => 'applications/uiexample/examples/PhabricatorRemarkupUIExample.php',
'PhabricatorRepositoriesSetupCheck' => 'applications/config/check/PhabricatorRepositoriesSetupCheck.php',
'PhabricatorRepository' => 'applications/repository/storage/PhabricatorRepository.php',
'PhabricatorRepositoryAuditRequest' => 'applications/repository/storage/PhabricatorRepositoryAuditRequest.php',
'PhabricatorRepositoryBranch' => 'applications/repository/storage/PhabricatorRepositoryBranch.php',
'PhabricatorRepositoryCommit' => 'applications/repository/storage/PhabricatorRepositoryCommit.php',
'PhabricatorRepositoryCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositoryCommitChangeParserWorker.php',
'PhabricatorRepositoryCommitData' => 'applications/repository/storage/PhabricatorRepositoryCommitData.php',
'PhabricatorRepositoryCommitHeraldWorker' => 'applications/repository/worker/PhabricatorRepositoryCommitHeraldWorker.php',
'PhabricatorRepositoryCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositoryCommitMessageParserWorker.php',
'PhabricatorRepositoryCommitOwnersWorker' => 'applications/repository/worker/PhabricatorRepositoryCommitOwnersWorker.php',
'PhabricatorRepositoryCommitPHIDType' => 'applications/repository/phid/PhabricatorRepositoryCommitPHIDType.php',
'PhabricatorRepositoryCommitParserWorker' => 'applications/repository/worker/PhabricatorRepositoryCommitParserWorker.php',
'PhabricatorRepositoryCommitRef' => 'applications/repository/engine/PhabricatorRepositoryCommitRef.php',
'PhabricatorRepositoryCommitSearchIndexer' => 'applications/repository/search/PhabricatorRepositoryCommitSearchIndexer.php',
'PhabricatorRepositoryConfigOptions' => 'applications/repository/config/PhabricatorRepositoryConfigOptions.php',
'PhabricatorRepositoryDAO' => 'applications/repository/storage/PhabricatorRepositoryDAO.php',
'PhabricatorRepositoryDiscoveryEngine' => 'applications/repository/engine/PhabricatorRepositoryDiscoveryEngine.php',
'PhabricatorRepositoryEditor' => 'applications/repository/editor/PhabricatorRepositoryEditor.php',
'PhabricatorRepositoryEngine' => 'applications/repository/engine/PhabricatorRepositoryEngine.php',
'PhabricatorRepositoryGitCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositoryGitCommitChangeParserWorker.php',
'PhabricatorRepositoryGitCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositoryGitCommitMessageParserWorker.php',
'PhabricatorRepositoryGraphCache' => 'applications/repository/graphcache/PhabricatorRepositoryGraphCache.php',
'PhabricatorRepositoryGraphStream' => 'applications/repository/daemon/PhabricatorRepositoryGraphStream.php',
'PhabricatorRepositoryManagementCacheWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementCacheWorkflow.php',
'PhabricatorRepositoryManagementDiscoverWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementDiscoverWorkflow.php',
'PhabricatorRepositoryManagementEditWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementEditWorkflow.php',
'PhabricatorRepositoryManagementImportingWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementImportingWorkflow.php',
'PhabricatorRepositoryManagementListPathsWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementListPathsWorkflow.php',
'PhabricatorRepositoryManagementListWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementListWorkflow.php',
'PhabricatorRepositoryManagementLookupUsersWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementLookupUsersWorkflow.php',
'PhabricatorRepositoryManagementMarkImportedWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementMarkImportedWorkflow.php',
'PhabricatorRepositoryManagementMirrorWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementMirrorWorkflow.php',
'PhabricatorRepositoryManagementMovePathsWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementMovePathsWorkflow.php',
'PhabricatorRepositoryManagementParentsWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementParentsWorkflow.php',
'PhabricatorRepositoryManagementPullWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementPullWorkflow.php',
'PhabricatorRepositoryManagementRefsWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementRefsWorkflow.php',
'PhabricatorRepositoryManagementReparseWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementReparseWorkflow.php',
'PhabricatorRepositoryManagementUpdateWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementUpdateWorkflow.php',
'PhabricatorRepositoryManagementWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementWorkflow.php',
'PhabricatorRepositoryMercurialCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositoryMercurialCommitChangeParserWorker.php',
'PhabricatorRepositoryMercurialCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositoryMercurialCommitMessageParserWorker.php',
'PhabricatorRepositoryMirror' => 'applications/repository/storage/PhabricatorRepositoryMirror.php',
'PhabricatorRepositoryMirrorEngine' => 'applications/repository/engine/PhabricatorRepositoryMirrorEngine.php',
'PhabricatorRepositoryMirrorPHIDType' => 'applications/repository/phid/PhabricatorRepositoryMirrorPHIDType.php',
'PhabricatorRepositoryMirrorQuery' => 'applications/repository/query/PhabricatorRepositoryMirrorQuery.php',
'PhabricatorRepositoryParsedChange' => 'applications/repository/data/PhabricatorRepositoryParsedChange.php',
'PhabricatorRepositoryPullEngine' => 'applications/repository/engine/PhabricatorRepositoryPullEngine.php',
'PhabricatorRepositoryPullLocalDaemon' => 'applications/repository/daemon/PhabricatorRepositoryPullLocalDaemon.php',
'PhabricatorRepositoryPushEvent' => 'applications/repository/storage/PhabricatorRepositoryPushEvent.php',
'PhabricatorRepositoryPushEventPHIDType' => 'applications/repository/phid/PhabricatorRepositoryPushEventPHIDType.php',
'PhabricatorRepositoryPushEventQuery' => 'applications/repository/query/PhabricatorRepositoryPushEventQuery.php',
'PhabricatorRepositoryPushLog' => 'applications/repository/storage/PhabricatorRepositoryPushLog.php',
'PhabricatorRepositoryPushLogPHIDType' => 'applications/repository/phid/PhabricatorRepositoryPushLogPHIDType.php',
'PhabricatorRepositoryPushLogQuery' => 'applications/repository/query/PhabricatorRepositoryPushLogQuery.php',
'PhabricatorRepositoryPushLogSearchEngine' => 'applications/repository/query/PhabricatorRepositoryPushLogSearchEngine.php',
'PhabricatorRepositoryPushMailWorker' => 'applications/repository/worker/PhabricatorRepositoryPushMailWorker.php',
'PhabricatorRepositoryPushReplyHandler' => 'applications/repository/mail/PhabricatorRepositoryPushReplyHandler.php',
'PhabricatorRepositoryQuery' => 'applications/repository/query/PhabricatorRepositoryQuery.php',
'PhabricatorRepositoryRefCursor' => 'applications/repository/storage/PhabricatorRepositoryRefCursor.php',
'PhabricatorRepositoryRefCursorQuery' => 'applications/repository/query/PhabricatorRepositoryRefCursorQuery.php',
'PhabricatorRepositoryRefEngine' => 'applications/repository/engine/PhabricatorRepositoryRefEngine.php',
'PhabricatorRepositoryRepositoryPHIDType' => 'applications/repository/phid/PhabricatorRepositoryRepositoryPHIDType.php',
'PhabricatorRepositorySchemaSpec' => 'applications/repository/storage/PhabricatorRepositorySchemaSpec.php',
'PhabricatorRepositorySearchEngine' => 'applications/repository/query/PhabricatorRepositorySearchEngine.php',
'PhabricatorRepositoryStatusMessage' => 'applications/repository/storage/PhabricatorRepositoryStatusMessage.php',
'PhabricatorRepositorySvnCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositorySvnCommitChangeParserWorker.php',
'PhabricatorRepositorySvnCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositorySvnCommitMessageParserWorker.php',
'PhabricatorRepositorySymbol' => 'applications/repository/storage/PhabricatorRepositorySymbol.php',
'PhabricatorRepositoryTestCase' => 'applications/repository/storage/__tests__/PhabricatorRepositoryTestCase.php',
'PhabricatorRepositoryTransaction' => 'applications/repository/storage/PhabricatorRepositoryTransaction.php',
'PhabricatorRepositoryTransactionQuery' => 'applications/repository/query/PhabricatorRepositoryTransactionQuery.php',
'PhabricatorRepositoryType' => 'applications/repository/constants/PhabricatorRepositoryType.php',
'PhabricatorRepositoryURINormalizer' => 'applications/repository/data/PhabricatorRepositoryURINormalizer.php',
'PhabricatorRepositoryURINormalizerTestCase' => 'applications/repository/data/__tests__/PhabricatorRepositoryURINormalizerTestCase.php',
'PhabricatorRepositoryURITestCase' => 'applications/repository/storage/__tests__/PhabricatorRepositoryURITestCase.php',
'PhabricatorRepositoryVCSPassword' => 'applications/repository/storage/PhabricatorRepositoryVCSPassword.php',
'PhabricatorRepositoryVersion' => 'applications/repository/constants/PhabricatorRepositoryVersion.php',
'PhabricatorRequestExceptionHandler' => 'aphront/handler/PhabricatorRequestExceptionHandler.php',
'PhabricatorResourceSite' => 'aphront/site/PhabricatorResourceSite.php',
'PhabricatorRobotsController' => 'applications/system/controller/PhabricatorRobotsController.php',
'PhabricatorS3FileStorageEngine' => 'applications/files/engine/PhabricatorS3FileStorageEngine.php',
'PhabricatorSMS' => 'infrastructure/sms/storage/PhabricatorSMS.php',
'PhabricatorSMSConfigOptions' => 'applications/config/option/PhabricatorSMSConfigOptions.php',
'PhabricatorSMSDAO' => 'infrastructure/sms/storage/PhabricatorSMSDAO.php',
'PhabricatorSMSDemultiplexWorker' => 'infrastructure/sms/worker/PhabricatorSMSDemultiplexWorker.php',
'PhabricatorSMSImplementationAdapter' => 'infrastructure/sms/adapter/PhabricatorSMSImplementationAdapter.php',
'PhabricatorSMSImplementationTestBlackholeAdapter' => 'infrastructure/sms/adapter/PhabricatorSMSImplementationTestBlackholeAdapter.php',
'PhabricatorSMSImplementationTwilioAdapter' => 'infrastructure/sms/adapter/PhabricatorSMSImplementationTwilioAdapter.php',
'PhabricatorSMSManagementListOutboundWorkflow' => 'infrastructure/sms/management/PhabricatorSMSManagementListOutboundWorkflow.php',
'PhabricatorSMSManagementSendTestWorkflow' => 'infrastructure/sms/management/PhabricatorSMSManagementSendTestWorkflow.php',
'PhabricatorSMSManagementShowOutboundWorkflow' => 'infrastructure/sms/management/PhabricatorSMSManagementShowOutboundWorkflow.php',
'PhabricatorSMSManagementWorkflow' => 'infrastructure/sms/management/PhabricatorSMSManagementWorkflow.php',
'PhabricatorSMSSendWorker' => 'infrastructure/sms/worker/PhabricatorSMSSendWorker.php',
'PhabricatorSMSWorker' => 'infrastructure/sms/worker/PhabricatorSMSWorker.php',
'PhabricatorSQLPatchList' => 'infrastructure/storage/patch/PhabricatorSQLPatchList.php',
'PhabricatorSSHKeyGenerator' => 'infrastructure/util/PhabricatorSSHKeyGenerator.php',
'PhabricatorSSHKeysSettingsPanel' => 'applications/settings/panel/PhabricatorSSHKeysSettingsPanel.php',
'PhabricatorSSHLog' => 'infrastructure/log/PhabricatorSSHLog.php',
'PhabricatorSSHPassthruCommand' => 'infrastructure/ssh/PhabricatorSSHPassthruCommand.php',
'PhabricatorSSHPublicKeyInterface' => 'applications/auth/sshkey/PhabricatorSSHPublicKeyInterface.php',
'PhabricatorSSHWorkflow' => 'infrastructure/ssh/PhabricatorSSHWorkflow.php',
'PhabricatorSavedQuery' => 'applications/search/storage/PhabricatorSavedQuery.php',
'PhabricatorSavedQueryQuery' => 'applications/search/query/PhabricatorSavedQueryQuery.php',
'PhabricatorScheduleTaskTriggerAction' => 'infrastructure/daemon/workers/action/PhabricatorScheduleTaskTriggerAction.php',
'PhabricatorScopedEnv' => 'infrastructure/env/PhabricatorScopedEnv.php',
'PhabricatorSearchAbstractDocument' => 'applications/search/index/PhabricatorSearchAbstractDocument.php',
'PhabricatorSearchApplication' => 'applications/search/application/PhabricatorSearchApplication.php',
'PhabricatorSearchApplicationSearchEngine' => 'applications/search/query/PhabricatorSearchApplicationSearchEngine.php',
'PhabricatorSearchApplicationStorageEnginePanel' => 'applications/search/applicationpanel/PhabricatorSearchApplicationStorageEnginePanel.php',
'PhabricatorSearchAttachController' => 'applications/search/controller/PhabricatorSearchAttachController.php',
'PhabricatorSearchBaseController' => 'applications/search/controller/PhabricatorSearchBaseController.php',
'PhabricatorSearchCheckboxesField' => 'applications/search/field/PhabricatorSearchCheckboxesField.php',
'PhabricatorSearchConfigOptions' => 'applications/search/config/PhabricatorSearchConfigOptions.php',
'PhabricatorSearchController' => 'applications/search/controller/PhabricatorSearchController.php',
'PhabricatorSearchCustomFieldProxyField' => 'applications/search/field/PhabricatorSearchCustomFieldProxyField.php',
'PhabricatorSearchDAO' => 'applications/search/storage/PhabricatorSearchDAO.php',
'PhabricatorSearchDatasource' => 'applications/search/typeahead/PhabricatorSearchDatasource.php',
'PhabricatorSearchDatasourceField' => 'applications/search/field/PhabricatorSearchDatasourceField.php',
'PhabricatorSearchDateControlField' => 'applications/search/field/PhabricatorSearchDateControlField.php',
'PhabricatorSearchDateField' => 'applications/search/field/PhabricatorSearchDateField.php',
'PhabricatorSearchDeleteController' => 'applications/search/controller/PhabricatorSearchDeleteController.php',
'PhabricatorSearchDocument' => 'applications/search/storage/document/PhabricatorSearchDocument.php',
'PhabricatorSearchDocumentField' => 'applications/search/storage/document/PhabricatorSearchDocumentField.php',
'PhabricatorSearchDocumentFieldType' => 'applications/search/constants/PhabricatorSearchDocumentFieldType.php',
'PhabricatorSearchDocumentIndexer' => 'applications/search/index/PhabricatorSearchDocumentIndexer.php',
'PhabricatorSearchDocumentQuery' => 'applications/search/query/PhabricatorSearchDocumentQuery.php',
'PhabricatorSearchDocumentRelationship' => 'applications/search/storage/document/PhabricatorSearchDocumentRelationship.php',
'PhabricatorSearchDocumentTypeDatasource' => 'applications/search/typeahead/PhabricatorSearchDocumentTypeDatasource.php',
'PhabricatorSearchEditController' => 'applications/search/controller/PhabricatorSearchEditController.php',
'PhabricatorSearchEngine' => 'applications/search/engine/PhabricatorSearchEngine.php',
'PhabricatorSearchEngineTestCase' => 'applications/search/engine/__tests__/PhabricatorSearchEngineTestCase.php',
'PhabricatorSearchField' => 'applications/search/field/PhabricatorSearchField.php',
'PhabricatorSearchHovercardController' => 'applications/search/controller/PhabricatorSearchHovercardController.php',
'PhabricatorSearchIndexer' => 'applications/search/index/PhabricatorSearchIndexer.php',
'PhabricatorSearchManagementIndexWorkflow' => 'applications/search/management/PhabricatorSearchManagementIndexWorkflow.php',
'PhabricatorSearchManagementInitWorkflow' => 'applications/search/management/PhabricatorSearchManagementInitWorkflow.php',
'PhabricatorSearchManagementWorkflow' => 'applications/search/management/PhabricatorSearchManagementWorkflow.php',
'PhabricatorSearchOrderController' => 'applications/search/controller/PhabricatorSearchOrderController.php',
'PhabricatorSearchOrderField' => 'applications/search/field/PhabricatorSearchOrderField.php',
'PhabricatorSearchPreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorSearchPreferencesSettingsPanel.php',
'PhabricatorSearchRelationship' => 'applications/search/constants/PhabricatorSearchRelationship.php',
'PhabricatorSearchResultView' => 'applications/search/view/PhabricatorSearchResultView.php',
'PhabricatorSearchSelectController' => 'applications/search/controller/PhabricatorSearchSelectController.php',
'PhabricatorSearchSelectField' => 'applications/search/field/PhabricatorSearchSelectField.php',
'PhabricatorSearchStringListField' => 'applications/search/field/PhabricatorSearchStringListField.php',
'PhabricatorSearchSubscribersField' => 'applications/search/field/PhabricatorSearchSubscribersField.php',
'PhabricatorSearchTextField' => 'applications/search/field/PhabricatorSearchTextField.php',
'PhabricatorSearchThreeStateField' => 'applications/search/field/PhabricatorSearchThreeStateField.php',
'PhabricatorSearchTokenizerField' => 'applications/search/field/PhabricatorSearchTokenizerField.php',
'PhabricatorSearchWorker' => 'applications/search/worker/PhabricatorSearchWorker.php',
'PhabricatorSecurityConfigOptions' => 'applications/config/option/PhabricatorSecurityConfigOptions.php',
'PhabricatorSecuritySetupCheck' => 'applications/config/check/PhabricatorSecuritySetupCheck.php',
'PhabricatorSendGridConfigOptions' => 'applications/config/option/PhabricatorSendGridConfigOptions.php',
'PhabricatorSessionsSettingsPanel' => 'applications/settings/panel/PhabricatorSessionsSettingsPanel.php',
'PhabricatorSettingsAddEmailAction' => 'applications/settings/action/PhabricatorSettingsAddEmailAction.php',
'PhabricatorSettingsAdjustController' => 'applications/settings/controller/PhabricatorSettingsAdjustController.php',
'PhabricatorSettingsApplication' => 'applications/settings/application/PhabricatorSettingsApplication.php',
'PhabricatorSettingsMainController' => 'applications/settings/controller/PhabricatorSettingsMainController.php',
'PhabricatorSettingsPanel' => 'applications/settings/panel/PhabricatorSettingsPanel.php',
'PhabricatorSetupCheck' => 'applications/config/check/PhabricatorSetupCheck.php',
'PhabricatorSetupCheckTestCase' => 'applications/config/check/__tests__/PhabricatorSetupCheckTestCase.php',
'PhabricatorSetupIssue' => 'applications/config/issue/PhabricatorSetupIssue.php',
'PhabricatorSetupIssueUIExample' => 'applications/uiexample/examples/PhabricatorSetupIssueUIExample.php',
'PhabricatorSetupIssueView' => 'applications/config/view/PhabricatorSetupIssueView.php',
'PhabricatorSite' => 'aphront/site/PhabricatorSite.php',
'PhabricatorSlowvoteApplication' => 'applications/slowvote/application/PhabricatorSlowvoteApplication.php',
'PhabricatorSlowvoteChoice' => 'applications/slowvote/storage/PhabricatorSlowvoteChoice.php',
'PhabricatorSlowvoteCloseController' => 'applications/slowvote/controller/PhabricatorSlowvoteCloseController.php',
'PhabricatorSlowvoteCommentController' => 'applications/slowvote/controller/PhabricatorSlowvoteCommentController.php',
'PhabricatorSlowvoteController' => 'applications/slowvote/controller/PhabricatorSlowvoteController.php',
'PhabricatorSlowvoteDAO' => 'applications/slowvote/storage/PhabricatorSlowvoteDAO.php',
'PhabricatorSlowvoteDefaultViewCapability' => 'applications/slowvote/capability/PhabricatorSlowvoteDefaultViewCapability.php',
'PhabricatorSlowvoteEditController' => 'applications/slowvote/controller/PhabricatorSlowvoteEditController.php',
'PhabricatorSlowvoteEditor' => 'applications/slowvote/editor/PhabricatorSlowvoteEditor.php',
'PhabricatorSlowvoteListController' => 'applications/slowvote/controller/PhabricatorSlowvoteListController.php',
'PhabricatorSlowvoteMailReceiver' => 'applications/slowvote/mail/PhabricatorSlowvoteMailReceiver.php',
'PhabricatorSlowvoteOption' => 'applications/slowvote/storage/PhabricatorSlowvoteOption.php',
'PhabricatorSlowvotePoll' => 'applications/slowvote/storage/PhabricatorSlowvotePoll.php',
'PhabricatorSlowvotePollController' => 'applications/slowvote/controller/PhabricatorSlowvotePollController.php',
'PhabricatorSlowvotePollPHIDType' => 'applications/slowvote/phid/PhabricatorSlowvotePollPHIDType.php',
'PhabricatorSlowvoteQuery' => 'applications/slowvote/query/PhabricatorSlowvoteQuery.php',
'PhabricatorSlowvoteReplyHandler' => 'applications/slowvote/mail/PhabricatorSlowvoteReplyHandler.php',
'PhabricatorSlowvoteSchemaSpec' => 'applications/slowvote/storage/PhabricatorSlowvoteSchemaSpec.php',
'PhabricatorSlowvoteSearchEngine' => 'applications/slowvote/query/PhabricatorSlowvoteSearchEngine.php',
'PhabricatorSlowvoteTransaction' => 'applications/slowvote/storage/PhabricatorSlowvoteTransaction.php',
'PhabricatorSlowvoteTransactionComment' => 'applications/slowvote/storage/PhabricatorSlowvoteTransactionComment.php',
'PhabricatorSlowvoteTransactionQuery' => 'applications/slowvote/query/PhabricatorSlowvoteTransactionQuery.php',
'PhabricatorSlowvoteVoteController' => 'applications/slowvote/controller/PhabricatorSlowvoteVoteController.php',
'PhabricatorSlug' => 'infrastructure/util/PhabricatorSlug.php',
'PhabricatorSlugTestCase' => 'infrastructure/util/__tests__/PhabricatorSlugTestCase.php',
'PhabricatorSortTableUIExample' => 'applications/uiexample/examples/PhabricatorSortTableUIExample.php',
'PhabricatorSourceCodeView' => 'view/layout/PhabricatorSourceCodeView.php',
'PhabricatorSpacesApplication' => 'applications/spaces/application/PhabricatorSpacesApplication.php',
'PhabricatorSpacesArchiveController' => 'applications/spaces/controller/PhabricatorSpacesArchiveController.php',
'PhabricatorSpacesCapabilityCreateSpaces' => 'applications/spaces/capability/PhabricatorSpacesCapabilityCreateSpaces.php',
'PhabricatorSpacesCapabilityDefaultEdit' => 'applications/spaces/capability/PhabricatorSpacesCapabilityDefaultEdit.php',
'PhabricatorSpacesCapabilityDefaultView' => 'applications/spaces/capability/PhabricatorSpacesCapabilityDefaultView.php',
'PhabricatorSpacesController' => 'applications/spaces/controller/PhabricatorSpacesController.php',
'PhabricatorSpacesDAO' => 'applications/spaces/storage/PhabricatorSpacesDAO.php',
'PhabricatorSpacesEditController' => 'applications/spaces/controller/PhabricatorSpacesEditController.php',
'PhabricatorSpacesInterface' => 'applications/spaces/interface/PhabricatorSpacesInterface.php',
'PhabricatorSpacesListController' => 'applications/spaces/controller/PhabricatorSpacesListController.php',
'PhabricatorSpacesNamespace' => 'applications/spaces/storage/PhabricatorSpacesNamespace.php',
'PhabricatorSpacesNamespaceDatasource' => 'applications/spaces/typeahead/PhabricatorSpacesNamespaceDatasource.php',
'PhabricatorSpacesNamespaceEditor' => 'applications/spaces/editor/PhabricatorSpacesNamespaceEditor.php',
'PhabricatorSpacesNamespacePHIDType' => 'applications/spaces/phid/PhabricatorSpacesNamespacePHIDType.php',
'PhabricatorSpacesNamespaceQuery' => 'applications/spaces/query/PhabricatorSpacesNamespaceQuery.php',
'PhabricatorSpacesNamespaceSearchEngine' => 'applications/spaces/query/PhabricatorSpacesNamespaceSearchEngine.php',
'PhabricatorSpacesNamespaceTransaction' => 'applications/spaces/storage/PhabricatorSpacesNamespaceTransaction.php',
'PhabricatorSpacesNamespaceTransactionQuery' => 'applications/spaces/query/PhabricatorSpacesNamespaceTransactionQuery.php',
'PhabricatorSpacesNoAccessController' => 'applications/spaces/controller/PhabricatorSpacesNoAccessController.php',
'PhabricatorSpacesRemarkupRule' => 'applications/spaces/remarkup/PhabricatorSpacesRemarkupRule.php',
'PhabricatorSpacesSchemaSpec' => 'applications/spaces/storage/PhabricatorSpacesSchemaSpec.php',
'PhabricatorSpacesSearchField' => 'applications/spaces/searchfield/PhabricatorSpacesSearchField.php',
'PhabricatorSpacesTestCase' => 'applications/spaces/__tests__/PhabricatorSpacesTestCase.php',
'PhabricatorSpacesViewController' => 'applications/spaces/controller/PhabricatorSpacesViewController.php',
'PhabricatorStandardCustomField' => 'infrastructure/customfield/standard/PhabricatorStandardCustomField.php',
'PhabricatorStandardCustomFieldBool' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldBool.php',
'PhabricatorStandardCustomFieldCredential' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldCredential.php',
'PhabricatorStandardCustomFieldDate' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldDate.php',
'PhabricatorStandardCustomFieldHeader' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldHeader.php',
'PhabricatorStandardCustomFieldInt' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldInt.php',
'PhabricatorStandardCustomFieldInterface' => 'infrastructure/customfield/interface/PhabricatorStandardCustomFieldInterface.php',
'PhabricatorStandardCustomFieldLink' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldLink.php',
'PhabricatorStandardCustomFieldPHIDs' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldPHIDs.php',
'PhabricatorStandardCustomFieldRemarkup' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldRemarkup.php',
'PhabricatorStandardCustomFieldSelect' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldSelect.php',
'PhabricatorStandardCustomFieldText' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldText.php',
'PhabricatorStandardCustomFieldUsers' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldUsers.php',
'PhabricatorStandardPageView' => 'view/page/PhabricatorStandardPageView.php',
'PhabricatorStandardSelectCustomFieldDatasource' => 'infrastructure/customfield/datasource/PhabricatorStandardSelectCustomFieldDatasource.php',
'PhabricatorStatusController' => 'applications/system/controller/PhabricatorStatusController.php',
'PhabricatorStatusUIExample' => 'applications/uiexample/examples/PhabricatorStatusUIExample.php',
'PhabricatorStorageFixtureScopeGuard' => 'infrastructure/testing/fixture/PhabricatorStorageFixtureScopeGuard.php',
'PhabricatorStorageManagementAPI' => 'infrastructure/storage/management/PhabricatorStorageManagementAPI.php',
'PhabricatorStorageManagementAdjustWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementAdjustWorkflow.php',
'PhabricatorStorageManagementDatabasesWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementDatabasesWorkflow.php',
'PhabricatorStorageManagementDestroyWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementDestroyWorkflow.php',
'PhabricatorStorageManagementDumpWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementDumpWorkflow.php',
'PhabricatorStorageManagementProbeWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementProbeWorkflow.php',
'PhabricatorStorageManagementQuickstartWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementQuickstartWorkflow.php',
'PhabricatorStorageManagementRenamespaceWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementRenamespaceWorkflow.php',
'PhabricatorStorageManagementShellWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementShellWorkflow.php',
'PhabricatorStorageManagementStatusWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementStatusWorkflow.php',
'PhabricatorStorageManagementUpgradeWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementUpgradeWorkflow.php',
'PhabricatorStorageManagementWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementWorkflow.php',
'PhabricatorStoragePatch' => 'infrastructure/storage/management/PhabricatorStoragePatch.php',
'PhabricatorStorageSchemaSpec' => 'infrastructure/storage/schema/PhabricatorStorageSchemaSpec.php',
'PhabricatorStorageSetupCheck' => 'applications/config/check/PhabricatorStorageSetupCheck.php',
'PhabricatorStreamingProtocolAdapter' => 'infrastructure/daemon/bot/adapter/PhabricatorStreamingProtocolAdapter.php',
'PhabricatorSubscribableInterface' => 'applications/subscriptions/interface/PhabricatorSubscribableInterface.php',
'PhabricatorSubscribedToObjectEdgeType' => 'applications/transactions/edges/PhabricatorSubscribedToObjectEdgeType.php',
'PhabricatorSubscribersQuery' => 'applications/subscriptions/query/PhabricatorSubscribersQuery.php',
'PhabricatorSubscriptionTriggerClock' => 'infrastructure/daemon/workers/clock/PhabricatorSubscriptionTriggerClock.php',
'PhabricatorSubscriptionsAddSelfHeraldAction' => 'applications/subscriptions/herald/PhabricatorSubscriptionsAddSelfHeraldAction.php',
'PhabricatorSubscriptionsAddSubscribersHeraldAction' => 'applications/subscriptions/herald/PhabricatorSubscriptionsAddSubscribersHeraldAction.php',
'PhabricatorSubscriptionsApplication' => 'applications/subscriptions/application/PhabricatorSubscriptionsApplication.php',
'PhabricatorSubscriptionsEditController' => 'applications/subscriptions/controller/PhabricatorSubscriptionsEditController.php',
'PhabricatorSubscriptionsEditor' => 'applications/subscriptions/editor/PhabricatorSubscriptionsEditor.php',
'PhabricatorSubscriptionsHeraldAction' => 'applications/subscriptions/herald/PhabricatorSubscriptionsHeraldAction.php',
'PhabricatorSubscriptionsListController' => 'applications/subscriptions/controller/PhabricatorSubscriptionsListController.php',
'PhabricatorSubscriptionsRemoveSelfHeraldAction' => 'applications/subscriptions/herald/PhabricatorSubscriptionsRemoveSelfHeraldAction.php',
'PhabricatorSubscriptionsRemoveSubscribersHeraldAction' => 'applications/subscriptions/herald/PhabricatorSubscriptionsRemoveSubscribersHeraldAction.php',
'PhabricatorSubscriptionsSubscribeEmailCommand' => 'applications/subscriptions/command/PhabricatorSubscriptionsSubscribeEmailCommand.php',
'PhabricatorSubscriptionsSubscribersPolicyRule' => 'applications/subscriptions/policyrule/PhabricatorSubscriptionsSubscribersPolicyRule.php',
'PhabricatorSubscriptionsTransactionController' => 'applications/subscriptions/controller/PhabricatorSubscriptionsTransactionController.php',
'PhabricatorSubscriptionsUIEventListener' => 'applications/subscriptions/events/PhabricatorSubscriptionsUIEventListener.php',
'PhabricatorSubscriptionsUnsubscribeEmailCommand' => 'applications/subscriptions/command/PhabricatorSubscriptionsUnsubscribeEmailCommand.php',
'PhabricatorSupportApplication' => 'applications/support/application/PhabricatorSupportApplication.php',
'PhabricatorSyntaxHighlighter' => 'infrastructure/markup/PhabricatorSyntaxHighlighter.php',
'PhabricatorSyntaxHighlightingConfigOptions' => 'applications/config/option/PhabricatorSyntaxHighlightingConfigOptions.php',
'PhabricatorSystemAction' => 'applications/system/action/PhabricatorSystemAction.php',
'PhabricatorSystemActionEngine' => 'applications/system/engine/PhabricatorSystemActionEngine.php',
'PhabricatorSystemActionGarbageCollector' => 'applications/system/garbagecollector/PhabricatorSystemActionGarbageCollector.php',
'PhabricatorSystemActionLog' => 'applications/system/storage/PhabricatorSystemActionLog.php',
'PhabricatorSystemActionRateLimitException' => 'applications/system/exception/PhabricatorSystemActionRateLimitException.php',
'PhabricatorSystemApplication' => 'applications/system/application/PhabricatorSystemApplication.php',
'PhabricatorSystemDAO' => 'applications/system/storage/PhabricatorSystemDAO.php',
'PhabricatorSystemDestructionGarbageCollector' => 'applications/system/garbagecollector/PhabricatorSystemDestructionGarbageCollector.php',
'PhabricatorSystemDestructionLog' => 'applications/system/storage/PhabricatorSystemDestructionLog.php',
'PhabricatorSystemRemoveDestroyWorkflow' => 'applications/system/management/PhabricatorSystemRemoveDestroyWorkflow.php',
'PhabricatorSystemRemoveLogWorkflow' => 'applications/system/management/PhabricatorSystemRemoveLogWorkflow.php',
'PhabricatorSystemRemoveWorkflow' => 'applications/system/management/PhabricatorSystemRemoveWorkflow.php',
'PhabricatorSystemSelectEncodingController' => 'applications/system/controller/PhabricatorSystemSelectEncodingController.php',
'PhabricatorSystemSelectHighlightController' => 'applications/system/controller/PhabricatorSystemSelectHighlightController.php',
'PhabricatorTOTPAuthFactor' => 'applications/auth/factor/PhabricatorTOTPAuthFactor.php',
'PhabricatorTOTPAuthFactorTestCase' => 'applications/auth/factor/__tests__/PhabricatorTOTPAuthFactorTestCase.php',
'PhabricatorTaskmasterDaemon' => 'infrastructure/daemon/workers/PhabricatorTaskmasterDaemon.php',
'PhabricatorTestApplication' => 'applications/base/controller/__tests__/PhabricatorTestApplication.php',
'PhabricatorTestCase' => 'infrastructure/testing/PhabricatorTestCase.php',
'PhabricatorTestController' => 'applications/base/controller/__tests__/PhabricatorTestController.php',
'PhabricatorTestDataGenerator' => 'applications/lipsum/generator/PhabricatorTestDataGenerator.php',
'PhabricatorTestNoCycleEdgeType' => 'applications/transactions/edges/PhabricatorTestNoCycleEdgeType.php',
'PhabricatorTestStorageEngine' => 'applications/files/engine/PhabricatorTestStorageEngine.php',
'PhabricatorTestWorker' => 'infrastructure/daemon/workers/__tests__/PhabricatorTestWorker.php',
'PhabricatorTime' => 'infrastructure/time/PhabricatorTime.php',
'PhabricatorTimeGuard' => 'infrastructure/time/PhabricatorTimeGuard.php',
'PhabricatorTimeTestCase' => 'infrastructure/time/__tests__/PhabricatorTimeTestCase.php',
'PhabricatorTimezoneSetupCheck' => 'applications/config/check/PhabricatorTimezoneSetupCheck.php',
'PhabricatorToken' => 'applications/tokens/storage/PhabricatorToken.php',
'PhabricatorTokenController' => 'applications/tokens/controller/PhabricatorTokenController.php',
'PhabricatorTokenCount' => 'applications/tokens/storage/PhabricatorTokenCount.php',
'PhabricatorTokenCountQuery' => 'applications/tokens/query/PhabricatorTokenCountQuery.php',
'PhabricatorTokenDAO' => 'applications/tokens/storage/PhabricatorTokenDAO.php',
'PhabricatorTokenGiveController' => 'applications/tokens/controller/PhabricatorTokenGiveController.php',
'PhabricatorTokenGiven' => 'applications/tokens/storage/PhabricatorTokenGiven.php',
'PhabricatorTokenGivenController' => 'applications/tokens/controller/PhabricatorTokenGivenController.php',
'PhabricatorTokenGivenEditor' => 'applications/tokens/editor/PhabricatorTokenGivenEditor.php',
'PhabricatorTokenGivenFeedStory' => 'applications/tokens/feed/PhabricatorTokenGivenFeedStory.php',
'PhabricatorTokenGivenQuery' => 'applications/tokens/query/PhabricatorTokenGivenQuery.php',
'PhabricatorTokenLeaderController' => 'applications/tokens/controller/PhabricatorTokenLeaderController.php',
'PhabricatorTokenQuery' => 'applications/tokens/query/PhabricatorTokenQuery.php',
'PhabricatorTokenReceiverInterface' => 'applications/tokens/interface/PhabricatorTokenReceiverInterface.php',
'PhabricatorTokenReceiverQuery' => 'applications/tokens/query/PhabricatorTokenReceiverQuery.php',
'PhabricatorTokenTokenPHIDType' => 'applications/tokens/phid/PhabricatorTokenTokenPHIDType.php',
'PhabricatorTokenUIEventListener' => 'applications/tokens/event/PhabricatorTokenUIEventListener.php',
'PhabricatorTokensApplication' => 'applications/tokens/application/PhabricatorTokensApplication.php',
'PhabricatorTokensSettingsPanel' => 'applications/settings/panel/PhabricatorTokensSettingsPanel.php',
'PhabricatorTooltipUIExample' => 'applications/uiexample/examples/PhabricatorTooltipUIExample.php',
'PhabricatorTransactions' => 'applications/transactions/constants/PhabricatorTransactions.php',
'PhabricatorTransactionsApplication' => 'applications/transactions/application/PhabricatorTransactionsApplication.php',
'PhabricatorTransformedFile' => 'applications/files/storage/PhabricatorTransformedFile.php',
'PhabricatorTranslationsConfigOptions' => 'applications/config/option/PhabricatorTranslationsConfigOptions.php',
'PhabricatorTriggerAction' => 'infrastructure/daemon/workers/action/PhabricatorTriggerAction.php',
'PhabricatorTriggerClock' => 'infrastructure/daemon/workers/clock/PhabricatorTriggerClock.php',
'PhabricatorTriggerClockTestCase' => 'infrastructure/daemon/workers/clock/__tests__/PhabricatorTriggerClockTestCase.php',
'PhabricatorTriggerDaemon' => 'infrastructure/daemon/workers/PhabricatorTriggerDaemon.php',
'PhabricatorTrivialTestCase' => 'infrastructure/testing/__tests__/PhabricatorTrivialTestCase.php',
'PhabricatorTwitchAuthProvider' => 'applications/auth/provider/PhabricatorTwitchAuthProvider.php',
'PhabricatorTwitterAuthProvider' => 'applications/auth/provider/PhabricatorTwitterAuthProvider.php',
'PhabricatorTypeaheadApplication' => 'applications/typeahead/application/PhabricatorTypeaheadApplication.php',
'PhabricatorTypeaheadCompositeDatasource' => 'applications/typeahead/datasource/PhabricatorTypeaheadCompositeDatasource.php',
'PhabricatorTypeaheadDatasource' => 'applications/typeahead/datasource/PhabricatorTypeaheadDatasource.php',
'PhabricatorTypeaheadDatasourceController' => 'applications/typeahead/controller/PhabricatorTypeaheadDatasourceController.php',
'PhabricatorTypeaheadFunctionHelpController' => 'applications/typeahead/controller/PhabricatorTypeaheadFunctionHelpController.php',
'PhabricatorTypeaheadInvalidTokenException' => 'applications/typeahead/exception/PhabricatorTypeaheadInvalidTokenException.php',
'PhabricatorTypeaheadModularDatasourceController' => 'applications/typeahead/controller/PhabricatorTypeaheadModularDatasourceController.php',
'PhabricatorTypeaheadMonogramDatasource' => 'applications/typeahead/datasource/PhabricatorTypeaheadMonogramDatasource.php',
'PhabricatorTypeaheadResult' => 'applications/typeahead/storage/PhabricatorTypeaheadResult.php',
'PhabricatorTypeaheadRuntimeCompositeDatasource' => 'applications/typeahead/datasource/PhabricatorTypeaheadRuntimeCompositeDatasource.php',
'PhabricatorTypeaheadTokenView' => 'applications/typeahead/view/PhabricatorTypeaheadTokenView.php',
'PhabricatorUIConfigOptions' => 'applications/config/option/PhabricatorUIConfigOptions.php',
'PhabricatorUIExample' => 'applications/uiexample/examples/PhabricatorUIExample.php',
'PhabricatorUIExampleRenderController' => 'applications/uiexample/controller/PhabricatorUIExampleRenderController.php',
'PhabricatorUIExamplesApplication' => 'applications/uiexample/application/PhabricatorUIExamplesApplication.php',
'PhabricatorUSEnglishTranslation' => 'infrastructure/internationalization/translation/PhabricatorUSEnglishTranslation.php',
'PhabricatorUnitsTestCase' => 'view/__tests__/PhabricatorUnitsTestCase.php',
'PhabricatorUnsubscribedFromObjectEdgeType' => 'applications/transactions/edges/PhabricatorUnsubscribedFromObjectEdgeType.php',
'PhabricatorUser' => 'applications/people/storage/PhabricatorUser.php',
'PhabricatorUserBlurbField' => 'applications/people/customfield/PhabricatorUserBlurbField.php',
'PhabricatorUserConfigOptions' => 'applications/people/config/PhabricatorUserConfigOptions.php',
'PhabricatorUserConfiguredCustomField' => 'applications/people/customfield/PhabricatorUserConfiguredCustomField.php',
'PhabricatorUserConfiguredCustomFieldStorage' => 'applications/people/storage/PhabricatorUserConfiguredCustomFieldStorage.php',
'PhabricatorUserCustomField' => 'applications/people/customfield/PhabricatorUserCustomField.php',
'PhabricatorUserCustomFieldNumericIndex' => 'applications/people/storage/PhabricatorUserCustomFieldNumericIndex.php',
'PhabricatorUserCustomFieldStringIndex' => 'applications/people/storage/PhabricatorUserCustomFieldStringIndex.php',
'PhabricatorUserDAO' => 'applications/people/storage/PhabricatorUserDAO.php',
'PhabricatorUserEditor' => 'applications/people/editor/PhabricatorUserEditor.php',
'PhabricatorUserEditorTestCase' => 'applications/people/editor/__tests__/PhabricatorUserEditorTestCase.php',
'PhabricatorUserEmail' => 'applications/people/storage/PhabricatorUserEmail.php',
'PhabricatorUserEmailTestCase' => 'applications/people/storage/__tests__/PhabricatorUserEmailTestCase.php',
'PhabricatorUserLog' => 'applications/people/storage/PhabricatorUserLog.php',
'PhabricatorUserLogView' => 'applications/people/view/PhabricatorUserLogView.php',
'PhabricatorUserPreferences' => 'applications/settings/storage/PhabricatorUserPreferences.php',
'PhabricatorUserProfile' => 'applications/people/storage/PhabricatorUserProfile.php',
'PhabricatorUserProfileEditor' => 'applications/people/editor/PhabricatorUserProfileEditor.php',
'PhabricatorUserRealNameField' => 'applications/people/customfield/PhabricatorUserRealNameField.php',
'PhabricatorUserRolesField' => 'applications/people/customfield/PhabricatorUserRolesField.php',
'PhabricatorUserSchemaSpec' => 'applications/people/storage/PhabricatorUserSchemaSpec.php',
'PhabricatorUserSearchIndexer' => 'applications/people/search/PhabricatorUserSearchIndexer.php',
'PhabricatorUserSinceField' => 'applications/people/customfield/PhabricatorUserSinceField.php',
'PhabricatorUserStatusField' => 'applications/people/customfield/PhabricatorUserStatusField.php',
'PhabricatorUserTestCase' => 'applications/people/storage/__tests__/PhabricatorUserTestCase.php',
'PhabricatorUserTitleField' => 'applications/people/customfield/PhabricatorUserTitleField.php',
'PhabricatorUserTransaction' => 'applications/people/storage/PhabricatorUserTransaction.php',
'PhabricatorUsersPolicyRule' => 'applications/policy/rule/PhabricatorUsersPolicyRule.php',
'PhabricatorUsersSearchField' => 'applications/people/searchfield/PhabricatorUsersSearchField.php',
'PhabricatorVCSResponse' => 'applications/repository/response/PhabricatorVCSResponse.php',
'PhabricatorVeryWowEnglishTranslation' => 'infrastructure/internationalization/translation/PhabricatorVeryWowEnglishTranslation.php',
'PhabricatorViewerDatasource' => 'applications/people/typeahead/PhabricatorViewerDatasource.php',
'PhabricatorWatcherHasObjectEdgeType' => 'applications/transactions/edges/PhabricatorWatcherHasObjectEdgeType.php',
'PhabricatorWordPressAuthProvider' => 'applications/auth/provider/PhabricatorWordPressAuthProvider.php',
'PhabricatorWorker' => 'infrastructure/daemon/workers/PhabricatorWorker.php',
'PhabricatorWorkerActiveTask' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerActiveTask.php',
'PhabricatorWorkerArchiveTask' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerArchiveTask.php',
'PhabricatorWorkerArchiveTaskQuery' => 'infrastructure/daemon/workers/query/PhabricatorWorkerArchiveTaskQuery.php',
'PhabricatorWorkerBulkJob' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerBulkJob.php',
'PhabricatorWorkerBulkJobCreateWorker' => 'infrastructure/daemon/workers/bulk/PhabricatorWorkerBulkJobCreateWorker.php',
'PhabricatorWorkerBulkJobEditor' => 'infrastructure/daemon/workers/editor/PhabricatorWorkerBulkJobEditor.php',
'PhabricatorWorkerBulkJobPHIDType' => 'infrastructure/daemon/workers/phid/PhabricatorWorkerBulkJobPHIDType.php',
'PhabricatorWorkerBulkJobQuery' => 'infrastructure/daemon/workers/query/PhabricatorWorkerBulkJobQuery.php',
'PhabricatorWorkerBulkJobSearchEngine' => 'infrastructure/daemon/workers/query/PhabricatorWorkerBulkJobSearchEngine.php',
'PhabricatorWorkerBulkJobTaskWorker' => 'infrastructure/daemon/workers/bulk/PhabricatorWorkerBulkJobTaskWorker.php',
'PhabricatorWorkerBulkJobTestCase' => 'infrastructure/daemon/workers/__tests__/PhabricatorWorkerBulkJobTestCase.php',
'PhabricatorWorkerBulkJobTransaction' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerBulkJobTransaction.php',
'PhabricatorWorkerBulkJobTransactionQuery' => 'infrastructure/daemon/workers/query/PhabricatorWorkerBulkJobTransactionQuery.php',
'PhabricatorWorkerBulkJobType' => 'infrastructure/daemon/workers/bulk/PhabricatorWorkerBulkJobType.php',
'PhabricatorWorkerBulkJobWorker' => 'infrastructure/daemon/workers/bulk/PhabricatorWorkerBulkJobWorker.php',
'PhabricatorWorkerBulkTask' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerBulkTask.php',
'PhabricatorWorkerDAO' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerDAO.php',
'PhabricatorWorkerLeaseQuery' => 'infrastructure/daemon/workers/query/PhabricatorWorkerLeaseQuery.php',
'PhabricatorWorkerManagementCancelWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerManagementCancelWorkflow.php',
'PhabricatorWorkerManagementExecuteWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerManagementExecuteWorkflow.php',
'PhabricatorWorkerManagementFloodWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerManagementFloodWorkflow.php',
'PhabricatorWorkerManagementFreeWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerManagementFreeWorkflow.php',
'PhabricatorWorkerManagementRetryWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerManagementRetryWorkflow.php',
'PhabricatorWorkerManagementWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerManagementWorkflow.php',
'PhabricatorWorkerPermanentFailureException' => 'infrastructure/daemon/workers/exception/PhabricatorWorkerPermanentFailureException.php',
'PhabricatorWorkerSchemaSpec' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerSchemaSpec.php',
'PhabricatorWorkerTask' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerTask.php',
'PhabricatorWorkerTaskData' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerTaskData.php',
'PhabricatorWorkerTaskDetailController' => 'applications/daemon/controller/PhabricatorWorkerTaskDetailController.php',
'PhabricatorWorkerTestCase' => 'infrastructure/daemon/workers/__tests__/PhabricatorWorkerTestCase.php',
'PhabricatorWorkerTrigger' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerTrigger.php',
'PhabricatorWorkerTriggerEvent' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerTriggerEvent.php',
'PhabricatorWorkerTriggerManagementFireWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerTriggerManagementFireWorkflow.php',
'PhabricatorWorkerTriggerManagementWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerTriggerManagementWorkflow.php',
'PhabricatorWorkerTriggerPHIDType' => 'infrastructure/daemon/workers/phid/PhabricatorWorkerTriggerPHIDType.php',
'PhabricatorWorkerTriggerQuery' => 'infrastructure/daemon/workers/query/PhabricatorWorkerTriggerQuery.php',
'PhabricatorWorkerYieldException' => 'infrastructure/daemon/workers/exception/PhabricatorWorkerYieldException.php',
'PhabricatorWorkingCopyDiscoveryTestCase' => 'applications/repository/engine/__tests__/PhabricatorWorkingCopyDiscoveryTestCase.php',
'PhabricatorWorkingCopyPullTestCase' => 'applications/repository/engine/__tests__/PhabricatorWorkingCopyPullTestCase.php',
'PhabricatorWorkingCopyTestCase' => 'applications/repository/engine/__tests__/PhabricatorWorkingCopyTestCase.php',
'PhabricatorXHPASTViewController' => 'applications/phpast/controller/PhabricatorXHPASTViewController.php',
'PhabricatorXHPASTViewDAO' => 'applications/phpast/storage/PhabricatorXHPASTViewDAO.php',
'PhabricatorXHPASTViewFrameController' => 'applications/phpast/controller/PhabricatorXHPASTViewFrameController.php',
'PhabricatorXHPASTViewFramesetController' => 'applications/phpast/controller/PhabricatorXHPASTViewFramesetController.php',
'PhabricatorXHPASTViewInputController' => 'applications/phpast/controller/PhabricatorXHPASTViewInputController.php',
'PhabricatorXHPASTViewPanelController' => 'applications/phpast/controller/PhabricatorXHPASTViewPanelController.php',
'PhabricatorXHPASTViewParseTree' => 'applications/phpast/storage/PhabricatorXHPASTViewParseTree.php',
'PhabricatorXHPASTViewRunController' => 'applications/phpast/controller/PhabricatorXHPASTViewRunController.php',
'PhabricatorXHPASTViewStreamController' => 'applications/phpast/controller/PhabricatorXHPASTViewStreamController.php',
'PhabricatorXHPASTViewTreeController' => 'applications/phpast/controller/PhabricatorXHPASTViewTreeController.php',
'PhabricatorXHProfApplication' => 'applications/xhprof/application/PhabricatorXHProfApplication.php',
'PhabricatorXHProfController' => 'applications/xhprof/controller/PhabricatorXHProfController.php',
'PhabricatorXHProfDAO' => 'applications/xhprof/storage/PhabricatorXHProfDAO.php',
'PhabricatorXHProfProfileController' => 'applications/xhprof/controller/PhabricatorXHProfProfileController.php',
'PhabricatorXHProfProfileSymbolView' => 'applications/xhprof/view/PhabricatorXHProfProfileSymbolView.php',
'PhabricatorXHProfProfileTopLevelView' => 'applications/xhprof/view/PhabricatorXHProfProfileTopLevelView.php',
'PhabricatorXHProfProfileView' => 'applications/xhprof/view/PhabricatorXHProfProfileView.php',
'PhabricatorXHProfSample' => 'applications/xhprof/storage/PhabricatorXHProfSample.php',
'PhabricatorXHProfSampleListController' => 'applications/xhprof/controller/PhabricatorXHProfSampleListController.php',
'PhabricatorYoutubeRemarkupRule' => 'infrastructure/markup/rule/PhabricatorYoutubeRemarkupRule.php',
'PhameBasicBlogSkin' => 'applications/phame/skins/PhameBasicBlogSkin.php',
'PhameBasicTemplateBlogSkin' => 'applications/phame/skins/PhameBasicTemplateBlogSkin.php',
'PhameBlog' => 'applications/phame/storage/PhameBlog.php',
'PhameBlogDeleteController' => 'applications/phame/controller/blog/PhameBlogDeleteController.php',
'PhameBlogEditController' => 'applications/phame/controller/blog/PhameBlogEditController.php',
'PhameBlogEditor' => 'applications/phame/editor/PhameBlogEditor.php',
'PhameBlogFeedController' => 'applications/phame/controller/blog/PhameBlogFeedController.php',
'PhameBlogListController' => 'applications/phame/controller/blog/PhameBlogListController.php',
'PhameBlogLiveController' => 'applications/phame/controller/blog/PhameBlogLiveController.php',
'PhameBlogQuery' => 'applications/phame/query/PhameBlogQuery.php',
'PhameBlogSearchEngine' => 'applications/phame/query/PhameBlogSearchEngine.php',
'PhameBlogSite' => 'applications/phame/site/PhameBlogSite.php',
'PhameBlogSkin' => 'applications/phame/skins/PhameBlogSkin.php',
'PhameBlogTransaction' => 'applications/phame/storage/PhameBlogTransaction.php',
'PhameBlogViewController' => 'applications/phame/controller/blog/PhameBlogViewController.php',
'PhameCelerityResources' => 'applications/phame/celerity/PhameCelerityResources.php',
'PhameConduitAPIMethod' => 'applications/phame/conduit/PhameConduitAPIMethod.php',
'PhameController' => 'applications/phame/controller/PhameController.php',
'PhameCreatePostConduitAPIMethod' => 'applications/phame/conduit/PhameCreatePostConduitAPIMethod.php',
'PhameDAO' => 'applications/phame/storage/PhameDAO.php',
'PhamePost' => 'applications/phame/storage/PhamePost.php',
'PhamePostDeleteController' => 'applications/phame/controller/post/PhamePostDeleteController.php',
'PhamePostEditController' => 'applications/phame/controller/post/PhamePostEditController.php',
'PhamePostEditor' => 'applications/phame/editor/PhamePostEditor.php',
'PhamePostFramedController' => 'applications/phame/controller/post/PhamePostFramedController.php',
'PhamePostListController' => 'applications/phame/controller/post/PhamePostListController.php',
'PhamePostNewController' => 'applications/phame/controller/post/PhamePostNewController.php',
'PhamePostNotLiveController' => 'applications/phame/controller/post/PhamePostNotLiveController.php',
'PhamePostPreviewController' => 'applications/phame/controller/post/PhamePostPreviewController.php',
'PhamePostPublishController' => 'applications/phame/controller/post/PhamePostPublishController.php',
'PhamePostQuery' => 'applications/phame/query/PhamePostQuery.php',
'PhamePostSearchEngine' => 'applications/phame/query/PhamePostSearchEngine.php',
'PhamePostTransaction' => 'applications/phame/storage/PhamePostTransaction.php',
'PhamePostTransactionQuery' => 'applications/phame/query/PhamePostTransactionQuery.php',
'PhamePostUnpublishController' => 'applications/phame/controller/post/PhamePostUnpublishController.php',
'PhamePostView' => 'applications/phame/view/PhamePostView.php',
'PhamePostViewController' => 'applications/phame/controller/post/PhamePostViewController.php',
'PhameQueryConduitAPIMethod' => 'applications/phame/conduit/PhameQueryConduitAPIMethod.php',
'PhameQueryPostsConduitAPIMethod' => 'applications/phame/conduit/PhameQueryPostsConduitAPIMethod.php',
'PhameResourceController' => 'applications/phame/controller/PhameResourceController.php',
'PhameSchemaSpec' => 'applications/phame/storage/PhameSchemaSpec.php',
'PhameSite' => 'applications/phame/site/PhameSite.php',
'PhameSkinSpecification' => 'applications/phame/skins/PhameSkinSpecification.php',
'PhluxController' => 'applications/phlux/controller/PhluxController.php',
'PhluxDAO' => 'applications/phlux/storage/PhluxDAO.php',
'PhluxEditController' => 'applications/phlux/controller/PhluxEditController.php',
'PhluxListController' => 'applications/phlux/controller/PhluxListController.php',
'PhluxTransaction' => 'applications/phlux/storage/PhluxTransaction.php',
'PhluxTransactionQuery' => 'applications/phlux/query/PhluxTransactionQuery.php',
'PhluxVariable' => 'applications/phlux/storage/PhluxVariable.php',
'PhluxVariableEditor' => 'applications/phlux/editor/PhluxVariableEditor.php',
'PhluxVariablePHIDType' => 'applications/phlux/phid/PhluxVariablePHIDType.php',
'PhluxVariableQuery' => 'applications/phlux/query/PhluxVariableQuery.php',
'PhluxViewController' => 'applications/phlux/controller/PhluxViewController.php',
'PholioActionMenuEventListener' => 'applications/pholio/event/PholioActionMenuEventListener.php',
'PholioController' => 'applications/pholio/controller/PholioController.php',
'PholioDAO' => 'applications/pholio/storage/PholioDAO.php',
'PholioDefaultEditCapability' => 'applications/pholio/capability/PholioDefaultEditCapability.php',
'PholioDefaultViewCapability' => 'applications/pholio/capability/PholioDefaultViewCapability.php',
'PholioImage' => 'applications/pholio/storage/PholioImage.php',
'PholioImagePHIDType' => 'applications/pholio/phid/PholioImagePHIDType.php',
'PholioImageQuery' => 'applications/pholio/query/PholioImageQuery.php',
'PholioImageUploadController' => 'applications/pholio/controller/PholioImageUploadController.php',
'PholioInlineController' => 'applications/pholio/controller/PholioInlineController.php',
'PholioInlineListController' => 'applications/pholio/controller/PholioInlineListController.php',
'PholioMock' => 'applications/pholio/storage/PholioMock.php',
'PholioMockAuthorHeraldField' => 'applications/pholio/herald/PholioMockAuthorHeraldField.php',
'PholioMockCommentController' => 'applications/pholio/controller/PholioMockCommentController.php',
'PholioMockDescriptionHeraldField' => 'applications/pholio/herald/PholioMockDescriptionHeraldField.php',
'PholioMockEditController' => 'applications/pholio/controller/PholioMockEditController.php',
'PholioMockEditor' => 'applications/pholio/editor/PholioMockEditor.php',
'PholioMockEmbedView' => 'applications/pholio/view/PholioMockEmbedView.php',
'PholioMockHasTaskEdgeType' => 'applications/pholio/edge/PholioMockHasTaskEdgeType.php',
'PholioMockHeraldField' => 'applications/pholio/herald/PholioMockHeraldField.php',
'PholioMockHeraldFieldGroup' => 'applications/pholio/herald/PholioMockHeraldFieldGroup.php',
'PholioMockImagesView' => 'applications/pholio/view/PholioMockImagesView.php',
'PholioMockListController' => 'applications/pholio/controller/PholioMockListController.php',
'PholioMockMailReceiver' => 'applications/pholio/mail/PholioMockMailReceiver.php',
'PholioMockNameHeraldField' => 'applications/pholio/herald/PholioMockNameHeraldField.php',
'PholioMockPHIDType' => 'applications/pholio/phid/PholioMockPHIDType.php',
'PholioMockQuery' => 'applications/pholio/query/PholioMockQuery.php',
'PholioMockSearchEngine' => 'applications/pholio/query/PholioMockSearchEngine.php',
'PholioMockThumbGridView' => 'applications/pholio/view/PholioMockThumbGridView.php',
'PholioMockViewController' => 'applications/pholio/controller/PholioMockViewController.php',
'PholioRemarkupRule' => 'applications/pholio/remarkup/PholioRemarkupRule.php',
'PholioReplyHandler' => 'applications/pholio/mail/PholioReplyHandler.php',
'PholioSchemaSpec' => 'applications/pholio/storage/PholioSchemaSpec.php',
'PholioSearchIndexer' => 'applications/pholio/search/PholioSearchIndexer.php',
'PholioTransaction' => 'applications/pholio/storage/PholioTransaction.php',
'PholioTransactionComment' => 'applications/pholio/storage/PholioTransactionComment.php',
'PholioTransactionQuery' => 'applications/pholio/query/PholioTransactionQuery.php',
'PholioTransactionView' => 'applications/pholio/view/PholioTransactionView.php',
'PholioUploadedImageView' => 'applications/pholio/view/PholioUploadedImageView.php',
'PhortuneAccount' => 'applications/phortune/storage/PhortuneAccount.php',
'PhortuneAccountEditController' => 'applications/phortune/controller/PhortuneAccountEditController.php',
'PhortuneAccountEditor' => 'applications/phortune/editor/PhortuneAccountEditor.php',
'PhortuneAccountHasMemberEdgeType' => 'applications/phortune/edge/PhortuneAccountHasMemberEdgeType.php',
'PhortuneAccountListController' => 'applications/phortune/controller/PhortuneAccountListController.php',
'PhortuneAccountPHIDType' => 'applications/phortune/phid/PhortuneAccountPHIDType.php',
'PhortuneAccountQuery' => 'applications/phortune/query/PhortuneAccountQuery.php',
'PhortuneAccountTransaction' => 'applications/phortune/storage/PhortuneAccountTransaction.php',
'PhortuneAccountTransactionQuery' => 'applications/phortune/query/PhortuneAccountTransactionQuery.php',
'PhortuneAccountViewController' => 'applications/phortune/controller/PhortuneAccountViewController.php',
'PhortuneAdHocCart' => 'applications/phortune/cart/PhortuneAdHocCart.php',
'PhortuneAdHocProduct' => 'applications/phortune/product/PhortuneAdHocProduct.php',
'PhortuneCart' => 'applications/phortune/storage/PhortuneCart.php',
'PhortuneCartAcceptController' => 'applications/phortune/controller/PhortuneCartAcceptController.php',
'PhortuneCartCancelController' => 'applications/phortune/controller/PhortuneCartCancelController.php',
'PhortuneCartCheckoutController' => 'applications/phortune/controller/PhortuneCartCheckoutController.php',
'PhortuneCartController' => 'applications/phortune/controller/PhortuneCartController.php',
'PhortuneCartEditor' => 'applications/phortune/editor/PhortuneCartEditor.php',
'PhortuneCartImplementation' => 'applications/phortune/cart/PhortuneCartImplementation.php',
'PhortuneCartListController' => 'applications/phortune/controller/PhortuneCartListController.php',
'PhortuneCartPHIDType' => 'applications/phortune/phid/PhortuneCartPHIDType.php',
'PhortuneCartQuery' => 'applications/phortune/query/PhortuneCartQuery.php',
'PhortuneCartReplyHandler' => 'applications/phortune/mail/PhortuneCartReplyHandler.php',
'PhortuneCartSearchEngine' => 'applications/phortune/query/PhortuneCartSearchEngine.php',
'PhortuneCartTransaction' => 'applications/phortune/storage/PhortuneCartTransaction.php',
'PhortuneCartTransactionQuery' => 'applications/phortune/query/PhortuneCartTransactionQuery.php',
'PhortuneCartUpdateController' => 'applications/phortune/controller/PhortuneCartUpdateController.php',
'PhortuneCartViewController' => 'applications/phortune/controller/PhortuneCartViewController.php',
'PhortuneCharge' => 'applications/phortune/storage/PhortuneCharge.php',
'PhortuneChargeListController' => 'applications/phortune/controller/PhortuneChargeListController.php',
'PhortuneChargePHIDType' => 'applications/phortune/phid/PhortuneChargePHIDType.php',
'PhortuneChargeQuery' => 'applications/phortune/query/PhortuneChargeQuery.php',
'PhortuneChargeSearchEngine' => 'applications/phortune/query/PhortuneChargeSearchEngine.php',
'PhortuneChargeTableView' => 'applications/phortune/view/PhortuneChargeTableView.php',
'PhortuneConstants' => 'applications/phortune/constants/PhortuneConstants.php',
'PhortuneController' => 'applications/phortune/controller/PhortuneController.php',
'PhortuneCreditCardForm' => 'applications/phortune/view/PhortuneCreditCardForm.php',
'PhortuneCurrency' => 'applications/phortune/currency/PhortuneCurrency.php',
'PhortuneCurrencySerializer' => 'applications/phortune/currency/PhortuneCurrencySerializer.php',
'PhortuneCurrencyTestCase' => 'applications/phortune/currency/__tests__/PhortuneCurrencyTestCase.php',
'PhortuneDAO' => 'applications/phortune/storage/PhortuneDAO.php',
'PhortuneErrCode' => 'applications/phortune/constants/PhortuneErrCode.php',
'PhortuneLandingController' => 'applications/phortune/controller/PhortuneLandingController.php',
'PhortuneMemberHasAccountEdgeType' => 'applications/phortune/edge/PhortuneMemberHasAccountEdgeType.php',
'PhortuneMemberHasMerchantEdgeType' => 'applications/phortune/edge/PhortuneMemberHasMerchantEdgeType.php',
'PhortuneMerchant' => 'applications/phortune/storage/PhortuneMerchant.php',
'PhortuneMerchantCapability' => 'applications/phortune/capability/PhortuneMerchantCapability.php',
'PhortuneMerchantController' => 'applications/phortune/controller/PhortuneMerchantController.php',
'PhortuneMerchantEditController' => 'applications/phortune/controller/PhortuneMerchantEditController.php',
'PhortuneMerchantEditor' => 'applications/phortune/editor/PhortuneMerchantEditor.php',
'PhortuneMerchantHasMemberEdgeType' => 'applications/phortune/edge/PhortuneMerchantHasMemberEdgeType.php',
'PhortuneMerchantInvoiceCreateController' => 'applications/phortune/controller/PhortuneMerchantInvoiceCreateController.php',
'PhortuneMerchantListController' => 'applications/phortune/controller/PhortuneMerchantListController.php',
'PhortuneMerchantPHIDType' => 'applications/phortune/phid/PhortuneMerchantPHIDType.php',
'PhortuneMerchantQuery' => 'applications/phortune/query/PhortuneMerchantQuery.php',
'PhortuneMerchantSearchEngine' => 'applications/phortune/query/PhortuneMerchantSearchEngine.php',
'PhortuneMerchantTransaction' => 'applications/phortune/storage/PhortuneMerchantTransaction.php',
'PhortuneMerchantTransactionQuery' => 'applications/phortune/query/PhortuneMerchantTransactionQuery.php',
'PhortuneMerchantViewController' => 'applications/phortune/controller/PhortuneMerchantViewController.php',
'PhortuneMonthYearExpiryControl' => 'applications/phortune/control/PhortuneMonthYearExpiryControl.php',
'PhortuneNotImplementedException' => 'applications/phortune/exception/PhortuneNotImplementedException.php',
'PhortuneOrderTableView' => 'applications/phortune/view/PhortuneOrderTableView.php',
'PhortunePayPalPaymentProvider' => 'applications/phortune/provider/PhortunePayPalPaymentProvider.php',
'PhortunePaymentMethod' => 'applications/phortune/storage/PhortunePaymentMethod.php',
'PhortunePaymentMethodCreateController' => 'applications/phortune/controller/PhortunePaymentMethodCreateController.php',
'PhortunePaymentMethodDisableController' => 'applications/phortune/controller/PhortunePaymentMethodDisableController.php',
'PhortunePaymentMethodEditController' => 'applications/phortune/controller/PhortunePaymentMethodEditController.php',
'PhortunePaymentMethodPHIDType' => 'applications/phortune/phid/PhortunePaymentMethodPHIDType.php',
'PhortunePaymentMethodQuery' => 'applications/phortune/query/PhortunePaymentMethodQuery.php',
'PhortunePaymentProvider' => 'applications/phortune/provider/PhortunePaymentProvider.php',
'PhortunePaymentProviderConfig' => 'applications/phortune/storage/PhortunePaymentProviderConfig.php',
'PhortunePaymentProviderConfigEditor' => 'applications/phortune/editor/PhortunePaymentProviderConfigEditor.php',
'PhortunePaymentProviderConfigQuery' => 'applications/phortune/query/PhortunePaymentProviderConfigQuery.php',
'PhortunePaymentProviderConfigTransaction' => 'applications/phortune/storage/PhortunePaymentProviderConfigTransaction.php',
'PhortunePaymentProviderConfigTransactionQuery' => 'applications/phortune/query/PhortunePaymentProviderConfigTransactionQuery.php',
'PhortunePaymentProviderPHIDType' => 'applications/phortune/phid/PhortunePaymentProviderPHIDType.php',
'PhortunePaymentProviderTestCase' => 'applications/phortune/provider/__tests__/PhortunePaymentProviderTestCase.php',
'PhortuneProduct' => 'applications/phortune/storage/PhortuneProduct.php',
'PhortuneProductImplementation' => 'applications/phortune/product/PhortuneProductImplementation.php',
'PhortuneProductListController' => 'applications/phortune/controller/PhortuneProductListController.php',
'PhortuneProductPHIDType' => 'applications/phortune/phid/PhortuneProductPHIDType.php',
'PhortuneProductQuery' => 'applications/phortune/query/PhortuneProductQuery.php',
'PhortuneProductViewController' => 'applications/phortune/controller/PhortuneProductViewController.php',
'PhortuneProviderActionController' => 'applications/phortune/controller/PhortuneProviderActionController.php',
'PhortuneProviderDisableController' => 'applications/phortune/controller/PhortuneProviderDisableController.php',
'PhortuneProviderEditController' => 'applications/phortune/controller/PhortuneProviderEditController.php',
'PhortunePurchase' => 'applications/phortune/storage/PhortunePurchase.php',
'PhortunePurchasePHIDType' => 'applications/phortune/phid/PhortunePurchasePHIDType.php',
'PhortunePurchaseQuery' => 'applications/phortune/query/PhortunePurchaseQuery.php',
'PhortuneSchemaSpec' => 'applications/phortune/storage/PhortuneSchemaSpec.php',
'PhortuneStripePaymentProvider' => 'applications/phortune/provider/PhortuneStripePaymentProvider.php',
'PhortuneSubscription' => 'applications/phortune/storage/PhortuneSubscription.php',
'PhortuneSubscriptionCart' => 'applications/phortune/cart/PhortuneSubscriptionCart.php',
'PhortuneSubscriptionEditController' => 'applications/phortune/controller/PhortuneSubscriptionEditController.php',
'PhortuneSubscriptionImplementation' => 'applications/phortune/subscription/PhortuneSubscriptionImplementation.php',
'PhortuneSubscriptionListController' => 'applications/phortune/controller/PhortuneSubscriptionListController.php',
'PhortuneSubscriptionPHIDType' => 'applications/phortune/phid/PhortuneSubscriptionPHIDType.php',
'PhortuneSubscriptionProduct' => 'applications/phortune/product/PhortuneSubscriptionProduct.php',
'PhortuneSubscriptionQuery' => 'applications/phortune/query/PhortuneSubscriptionQuery.php',
'PhortuneSubscriptionSearchEngine' => 'applications/phortune/query/PhortuneSubscriptionSearchEngine.php',
'PhortuneSubscriptionTableView' => 'applications/phortune/view/PhortuneSubscriptionTableView.php',
'PhortuneSubscriptionViewController' => 'applications/phortune/controller/PhortuneSubscriptionViewController.php',
'PhortuneSubscriptionWorker' => 'applications/phortune/worker/PhortuneSubscriptionWorker.php',
'PhortuneTestPaymentProvider' => 'applications/phortune/provider/PhortuneTestPaymentProvider.php',
'PhortuneWePayPaymentProvider' => 'applications/phortune/provider/PhortuneWePayPaymentProvider.php',
'PhragmentBrowseController' => 'applications/phragment/controller/PhragmentBrowseController.php',
'PhragmentCanCreateCapability' => 'applications/phragment/capability/PhragmentCanCreateCapability.php',
'PhragmentConduitAPIMethod' => 'applications/phragment/conduit/PhragmentConduitAPIMethod.php',
'PhragmentController' => 'applications/phragment/controller/PhragmentController.php',
'PhragmentCreateController' => 'applications/phragment/controller/PhragmentCreateController.php',
'PhragmentDAO' => 'applications/phragment/storage/PhragmentDAO.php',
'PhragmentFragment' => 'applications/phragment/storage/PhragmentFragment.php',
'PhragmentFragmentPHIDType' => 'applications/phragment/phid/PhragmentFragmentPHIDType.php',
'PhragmentFragmentQuery' => 'applications/phragment/query/PhragmentFragmentQuery.php',
'PhragmentFragmentVersion' => 'applications/phragment/storage/PhragmentFragmentVersion.php',
'PhragmentFragmentVersionPHIDType' => 'applications/phragment/phid/PhragmentFragmentVersionPHIDType.php',
'PhragmentFragmentVersionQuery' => 'applications/phragment/query/PhragmentFragmentVersionQuery.php',
'PhragmentGetPatchConduitAPIMethod' => 'applications/phragment/conduit/PhragmentGetPatchConduitAPIMethod.php',
'PhragmentHistoryController' => 'applications/phragment/controller/PhragmentHistoryController.php',
'PhragmentPatchController' => 'applications/phragment/controller/PhragmentPatchController.php',
'PhragmentPatchUtil' => 'applications/phragment/util/PhragmentPatchUtil.php',
'PhragmentPolicyController' => 'applications/phragment/controller/PhragmentPolicyController.php',
'PhragmentQueryFragmentsConduitAPIMethod' => 'applications/phragment/conduit/PhragmentQueryFragmentsConduitAPIMethod.php',
'PhragmentRevertController' => 'applications/phragment/controller/PhragmentRevertController.php',
'PhragmentSchemaSpec' => 'applications/phragment/storage/PhragmentSchemaSpec.php',
'PhragmentSnapshot' => 'applications/phragment/storage/PhragmentSnapshot.php',
'PhragmentSnapshotChild' => 'applications/phragment/storage/PhragmentSnapshotChild.php',
'PhragmentSnapshotChildQuery' => 'applications/phragment/query/PhragmentSnapshotChildQuery.php',
'PhragmentSnapshotCreateController' => 'applications/phragment/controller/PhragmentSnapshotCreateController.php',
'PhragmentSnapshotDeleteController' => 'applications/phragment/controller/PhragmentSnapshotDeleteController.php',
'PhragmentSnapshotPHIDType' => 'applications/phragment/phid/PhragmentSnapshotPHIDType.php',
'PhragmentSnapshotPromoteController' => 'applications/phragment/controller/PhragmentSnapshotPromoteController.php',
'PhragmentSnapshotQuery' => 'applications/phragment/query/PhragmentSnapshotQuery.php',
'PhragmentSnapshotViewController' => 'applications/phragment/controller/PhragmentSnapshotViewController.php',
'PhragmentUpdateController' => 'applications/phragment/controller/PhragmentUpdateController.php',
'PhragmentVersionController' => 'applications/phragment/controller/PhragmentVersionController.php',
'PhragmentZIPController' => 'applications/phragment/controller/PhragmentZIPController.php',
'PhrequentConduitAPIMethod' => 'applications/phrequent/conduit/PhrequentConduitAPIMethod.php',
'PhrequentController' => 'applications/phrequent/controller/PhrequentController.php',
'PhrequentDAO' => 'applications/phrequent/storage/PhrequentDAO.php',
'PhrequentListController' => 'applications/phrequent/controller/PhrequentListController.php',
'PhrequentPopConduitAPIMethod' => 'applications/phrequent/conduit/PhrequentPopConduitAPIMethod.php',
'PhrequentPushConduitAPIMethod' => 'applications/phrequent/conduit/PhrequentPushConduitAPIMethod.php',
'PhrequentSearchEngine' => 'applications/phrequent/query/PhrequentSearchEngine.php',
'PhrequentTimeBlock' => 'applications/phrequent/storage/PhrequentTimeBlock.php',
'PhrequentTimeBlockTestCase' => 'applications/phrequent/storage/__tests__/PhrequentTimeBlockTestCase.php',
'PhrequentTimeSlices' => 'applications/phrequent/storage/PhrequentTimeSlices.php',
'PhrequentTrackController' => 'applications/phrequent/controller/PhrequentTrackController.php',
'PhrequentTrackableInterface' => 'applications/phrequent/interface/PhrequentTrackableInterface.php',
'PhrequentTrackingConduitAPIMethod' => 'applications/phrequent/conduit/PhrequentTrackingConduitAPIMethod.php',
'PhrequentTrackingEditor' => 'applications/phrequent/editor/PhrequentTrackingEditor.php',
'PhrequentUIEventListener' => 'applications/phrequent/event/PhrequentUIEventListener.php',
'PhrequentUserTime' => 'applications/phrequent/storage/PhrequentUserTime.php',
'PhrequentUserTimeQuery' => 'applications/phrequent/query/PhrequentUserTimeQuery.php',
'PhrictionChangeType' => 'applications/phriction/constants/PhrictionChangeType.php',
'PhrictionConduitAPIMethod' => 'applications/phriction/conduit/PhrictionConduitAPIMethod.php',
'PhrictionConstants' => 'applications/phriction/constants/PhrictionConstants.php',
'PhrictionContent' => 'applications/phriction/storage/PhrictionContent.php',
'PhrictionController' => 'applications/phriction/controller/PhrictionController.php',
'PhrictionCreateConduitAPIMethod' => 'applications/phriction/conduit/PhrictionCreateConduitAPIMethod.php',
'PhrictionDAO' => 'applications/phriction/storage/PhrictionDAO.php',
'PhrictionDeleteController' => 'applications/phriction/controller/PhrictionDeleteController.php',
'PhrictionDiffController' => 'applications/phriction/controller/PhrictionDiffController.php',
'PhrictionDocument' => 'applications/phriction/storage/PhrictionDocument.php',
'PhrictionDocumentAuthorHeraldField' => 'applications/phriction/herald/PhrictionDocumentAuthorHeraldField.php',
'PhrictionDocumentContentHeraldField' => 'applications/phriction/herald/PhrictionDocumentContentHeraldField.php',
'PhrictionDocumentController' => 'applications/phriction/controller/PhrictionDocumentController.php',
'PhrictionDocumentHeraldAdapter' => 'applications/phriction/herald/PhrictionDocumentHeraldAdapter.php',
'PhrictionDocumentHeraldField' => 'applications/phriction/herald/PhrictionDocumentHeraldField.php',
'PhrictionDocumentHeraldFieldGroup' => 'applications/phriction/herald/PhrictionDocumentHeraldFieldGroup.php',
'PhrictionDocumentPHIDType' => 'applications/phriction/phid/PhrictionDocumentPHIDType.php',
'PhrictionDocumentPathHeraldField' => 'applications/phriction/herald/PhrictionDocumentPathHeraldField.php',
'PhrictionDocumentQuery' => 'applications/phriction/query/PhrictionDocumentQuery.php',
'PhrictionDocumentStatus' => 'applications/phriction/constants/PhrictionDocumentStatus.php',
'PhrictionDocumentTitleHeraldField' => 'applications/phriction/herald/PhrictionDocumentTitleHeraldField.php',
'PhrictionEditConduitAPIMethod' => 'applications/phriction/conduit/PhrictionEditConduitAPIMethod.php',
'PhrictionEditController' => 'applications/phriction/controller/PhrictionEditController.php',
'PhrictionHistoryConduitAPIMethod' => 'applications/phriction/conduit/PhrictionHistoryConduitAPIMethod.php',
'PhrictionHistoryController' => 'applications/phriction/controller/PhrictionHistoryController.php',
'PhrictionInfoConduitAPIMethod' => 'applications/phriction/conduit/PhrictionInfoConduitAPIMethod.php',
'PhrictionListController' => 'applications/phriction/controller/PhrictionListController.php',
'PhrictionMoveController' => 'applications/phriction/controller/PhrictionMoveController.php',
'PhrictionNewController' => 'applications/phriction/controller/PhrictionNewController.php',
'PhrictionRemarkupRule' => 'applications/phriction/markup/PhrictionRemarkupRule.php',
'PhrictionReplyHandler' => 'applications/phriction/mail/PhrictionReplyHandler.php',
'PhrictionSchemaSpec' => 'applications/phriction/storage/PhrictionSchemaSpec.php',
'PhrictionSearchEngine' => 'applications/phriction/query/PhrictionSearchEngine.php',
'PhrictionSearchIndexer' => 'applications/phriction/search/PhrictionSearchIndexer.php',
'PhrictionTransaction' => 'applications/phriction/storage/PhrictionTransaction.php',
'PhrictionTransactionComment' => 'applications/phriction/storage/PhrictionTransactionComment.php',
'PhrictionTransactionEditor' => 'applications/phriction/editor/PhrictionTransactionEditor.php',
'PhrictionTransactionQuery' => 'applications/phriction/query/PhrictionTransactionQuery.php',
'PolicyLockOptionType' => 'applications/policy/config/PolicyLockOptionType.php',
'PonderAddAnswerView' => 'applications/ponder/view/PonderAddAnswerView.php',
'PonderAnswer' => 'applications/ponder/storage/PonderAnswer.php',
'PonderAnswerCommentController' => 'applications/ponder/controller/PonderAnswerCommentController.php',
'PonderAnswerEditController' => 'applications/ponder/controller/PonderAnswerEditController.php',
'PonderAnswerEditor' => 'applications/ponder/editor/PonderAnswerEditor.php',
'PonderAnswerHasVotingUserEdgeType' => 'applications/ponder/edge/PonderAnswerHasVotingUserEdgeType.php',
'PonderAnswerHistoryController' => 'applications/ponder/controller/PonderAnswerHistoryController.php',
'PonderAnswerMailReceiver' => 'applications/ponder/mail/PonderAnswerMailReceiver.php',
'PonderAnswerPHIDType' => 'applications/ponder/phid/PonderAnswerPHIDType.php',
'PonderAnswerQuery' => 'applications/ponder/query/PonderAnswerQuery.php',
'PonderAnswerReplyHandler' => 'applications/ponder/mail/PonderAnswerReplyHandler.php',
'PonderAnswerSaveController' => 'applications/ponder/controller/PonderAnswerSaveController.php',
'PonderAnswerStatus' => 'applications/ponder/constants/PonderAnswerStatus.php',
'PonderAnswerTransaction' => 'applications/ponder/storage/PonderAnswerTransaction.php',
'PonderAnswerTransactionComment' => 'applications/ponder/storage/PonderAnswerTransactionComment.php',
'PonderAnswerTransactionQuery' => 'applications/ponder/query/PonderAnswerTransactionQuery.php',
'PonderAnswerView' => 'applications/ponder/view/PonderAnswerView.php',
'PonderConstants' => 'applications/ponder/constants/PonderConstants.php',
'PonderController' => 'applications/ponder/controller/PonderController.php',
'PonderDAO' => 'applications/ponder/storage/PonderDAO.php',
'PonderDefaultViewCapability' => 'applications/ponder/capability/PonderDefaultViewCapability.php',
'PonderEditor' => 'applications/ponder/editor/PonderEditor.php',
'PonderFooterView' => 'applications/ponder/view/PonderFooterView.php',
'PonderHelpfulSaveController' => 'applications/ponder/controller/PonderHelpfulSaveController.php',
'PonderModerateCapability' => 'applications/ponder/capability/PonderModerateCapability.php',
'PonderQuestion' => 'applications/ponder/storage/PonderQuestion.php',
'PonderQuestionCommentController' => 'applications/ponder/controller/PonderQuestionCommentController.php',
'PonderQuestionEditController' => 'applications/ponder/controller/PonderQuestionEditController.php',
'PonderQuestionEditor' => 'applications/ponder/editor/PonderQuestionEditor.php',
'PonderQuestionHistoryController' => 'applications/ponder/controller/PonderQuestionHistoryController.php',
'PonderQuestionListController' => 'applications/ponder/controller/PonderQuestionListController.php',
'PonderQuestionMailReceiver' => 'applications/ponder/mail/PonderQuestionMailReceiver.php',
'PonderQuestionPHIDType' => 'applications/ponder/phid/PonderQuestionPHIDType.php',
'PonderQuestionQuery' => 'applications/ponder/query/PonderQuestionQuery.php',
'PonderQuestionReplyHandler' => 'applications/ponder/mail/PonderQuestionReplyHandler.php',
'PonderQuestionSearchEngine' => 'applications/ponder/query/PonderQuestionSearchEngine.php',
'PonderQuestionStatus' => 'applications/ponder/constants/PonderQuestionStatus.php',
'PonderQuestionStatusController' => 'applications/ponder/controller/PonderQuestionStatusController.php',
'PonderQuestionTransaction' => 'applications/ponder/storage/PonderQuestionTransaction.php',
'PonderQuestionTransactionComment' => 'applications/ponder/storage/PonderQuestionTransactionComment.php',
'PonderQuestionTransactionQuery' => 'applications/ponder/query/PonderQuestionTransactionQuery.php',
'PonderQuestionViewController' => 'applications/ponder/controller/PonderQuestionViewController.php',
'PonderRemarkupRule' => 'applications/ponder/remarkup/PonderRemarkupRule.php',
'PonderSchemaSpec' => 'applications/ponder/storage/PonderSchemaSpec.php',
'PonderSearchIndexer' => 'applications/ponder/search/PonderSearchIndexer.php',
'PonderVotableInterface' => 'applications/ponder/storage/PonderVotableInterface.php',
'PonderVote' => 'applications/ponder/constants/PonderVote.php',
'PonderVoteEditor' => 'applications/ponder/editor/PonderVoteEditor.php',
'PonderVotingUserHasAnswerEdgeType' => 'applications/ponder/edge/PonderVotingUserHasAnswerEdgeType.php',
'ProjectAddProjectsEmailCommand' => 'applications/project/command/ProjectAddProjectsEmailCommand.php',
'ProjectBoardTaskCard' => 'applications/project/view/ProjectBoardTaskCard.php',
'ProjectCanLockProjectsCapability' => 'applications/project/capability/ProjectCanLockProjectsCapability.php',
'ProjectConduitAPIMethod' => 'applications/project/conduit/ProjectConduitAPIMethod.php',
'ProjectCreateConduitAPIMethod' => 'applications/project/conduit/ProjectCreateConduitAPIMethod.php',
'ProjectCreateProjectsCapability' => 'applications/project/capability/ProjectCreateProjectsCapability.php',
'ProjectDefaultEditCapability' => 'applications/project/capability/ProjectDefaultEditCapability.php',
'ProjectDefaultJoinCapability' => 'applications/project/capability/ProjectDefaultJoinCapability.php',
'ProjectDefaultViewCapability' => 'applications/project/capability/ProjectDefaultViewCapability.php',
'ProjectQueryConduitAPIMethod' => 'applications/project/conduit/ProjectQueryConduitAPIMethod.php',
'ProjectRemarkupRule' => 'applications/project/remarkup/ProjectRemarkupRule.php',
'ProjectRemarkupRuleTestCase' => 'applications/project/remarkup/__tests__/ProjectRemarkupRuleTestCase.php',
'ProjectReplyHandler' => 'applications/project/mail/ProjectReplyHandler.php',
'QueryFormattingTestCase' => 'infrastructure/storage/__tests__/QueryFormattingTestCase.php',
'ReleephAuthorFieldSpecification' => 'applications/releeph/field/specification/ReleephAuthorFieldSpecification.php',
'ReleephBranch' => 'applications/releeph/storage/ReleephBranch.php',
'ReleephBranchAccessController' => 'applications/releeph/controller/branch/ReleephBranchAccessController.php',
'ReleephBranchCommitFieldSpecification' => 'applications/releeph/field/specification/ReleephBranchCommitFieldSpecification.php',
'ReleephBranchController' => 'applications/releeph/controller/branch/ReleephBranchController.php',
'ReleephBranchCreateController' => 'applications/releeph/controller/branch/ReleephBranchCreateController.php',
'ReleephBranchEditController' => 'applications/releeph/controller/branch/ReleephBranchEditController.php',
'ReleephBranchEditor' => 'applications/releeph/editor/ReleephBranchEditor.php',
'ReleephBranchHistoryController' => 'applications/releeph/controller/branch/ReleephBranchHistoryController.php',
'ReleephBranchNamePreviewController' => 'applications/releeph/controller/branch/ReleephBranchNamePreviewController.php',
'ReleephBranchPHIDType' => 'applications/releeph/phid/ReleephBranchPHIDType.php',
'ReleephBranchPreviewView' => 'applications/releeph/view/branch/ReleephBranchPreviewView.php',
'ReleephBranchQuery' => 'applications/releeph/query/ReleephBranchQuery.php',
'ReleephBranchSearchEngine' => 'applications/releeph/query/ReleephBranchSearchEngine.php',
'ReleephBranchTemplate' => 'applications/releeph/view/branch/ReleephBranchTemplate.php',
'ReleephBranchTransaction' => 'applications/releeph/storage/ReleephBranchTransaction.php',
'ReleephBranchTransactionQuery' => 'applications/releeph/query/ReleephBranchTransactionQuery.php',
'ReleephBranchViewController' => 'applications/releeph/controller/branch/ReleephBranchViewController.php',
'ReleephCommitFinder' => 'applications/releeph/commitfinder/ReleephCommitFinder.php',
'ReleephCommitFinderException' => 'applications/releeph/commitfinder/ReleephCommitFinderException.php',
'ReleephCommitMessageFieldSpecification' => 'applications/releeph/field/specification/ReleephCommitMessageFieldSpecification.php',
'ReleephConduitAPIMethod' => 'applications/releeph/conduit/ReleephConduitAPIMethod.php',
'ReleephController' => 'applications/releeph/controller/ReleephController.php',
'ReleephDAO' => 'applications/releeph/storage/ReleephDAO.php',
'ReleephDefaultFieldSelector' => 'applications/releeph/field/selector/ReleephDefaultFieldSelector.php',
'ReleephDependsOnFieldSpecification' => 'applications/releeph/field/specification/ReleephDependsOnFieldSpecification.php',
'ReleephDiffChurnFieldSpecification' => 'applications/releeph/field/specification/ReleephDiffChurnFieldSpecification.php',
'ReleephDiffMessageFieldSpecification' => 'applications/releeph/field/specification/ReleephDiffMessageFieldSpecification.php',
'ReleephDiffSizeFieldSpecification' => 'applications/releeph/field/specification/ReleephDiffSizeFieldSpecification.php',
'ReleephFieldParseException' => 'applications/releeph/field/exception/ReleephFieldParseException.php',
'ReleephFieldSelector' => 'applications/releeph/field/selector/ReleephFieldSelector.php',
'ReleephFieldSpecification' => 'applications/releeph/field/specification/ReleephFieldSpecification.php',
'ReleephGetBranchesConduitAPIMethod' => 'applications/releeph/conduit/ReleephGetBranchesConduitAPIMethod.php',
'ReleephIntentFieldSpecification' => 'applications/releeph/field/specification/ReleephIntentFieldSpecification.php',
'ReleephLevelFieldSpecification' => 'applications/releeph/field/specification/ReleephLevelFieldSpecification.php',
'ReleephOriginalCommitFieldSpecification' => 'applications/releeph/field/specification/ReleephOriginalCommitFieldSpecification.php',
'ReleephProductActionController' => 'applications/releeph/controller/product/ReleephProductActionController.php',
'ReleephProductController' => 'applications/releeph/controller/product/ReleephProductController.php',
'ReleephProductCreateController' => 'applications/releeph/controller/product/ReleephProductCreateController.php',
'ReleephProductEditController' => 'applications/releeph/controller/product/ReleephProductEditController.php',
'ReleephProductEditor' => 'applications/releeph/editor/ReleephProductEditor.php',
'ReleephProductHistoryController' => 'applications/releeph/controller/product/ReleephProductHistoryController.php',
'ReleephProductListController' => 'applications/releeph/controller/product/ReleephProductListController.php',
'ReleephProductPHIDType' => 'applications/releeph/phid/ReleephProductPHIDType.php',
'ReleephProductQuery' => 'applications/releeph/query/ReleephProductQuery.php',
'ReleephProductSearchEngine' => 'applications/releeph/query/ReleephProductSearchEngine.php',
'ReleephProductTransaction' => 'applications/releeph/storage/ReleephProductTransaction.php',
'ReleephProductTransactionQuery' => 'applications/releeph/query/ReleephProductTransactionQuery.php',
'ReleephProductViewController' => 'applications/releeph/controller/product/ReleephProductViewController.php',
'ReleephProject' => 'applications/releeph/storage/ReleephProject.php',
'ReleephQueryBranchesConduitAPIMethod' => 'applications/releeph/conduit/ReleephQueryBranchesConduitAPIMethod.php',
'ReleephQueryProductsConduitAPIMethod' => 'applications/releeph/conduit/ReleephQueryProductsConduitAPIMethod.php',
'ReleephQueryRequestsConduitAPIMethod' => 'applications/releeph/conduit/ReleephQueryRequestsConduitAPIMethod.php',
'ReleephReasonFieldSpecification' => 'applications/releeph/field/specification/ReleephReasonFieldSpecification.php',
'ReleephRequest' => 'applications/releeph/storage/ReleephRequest.php',
'ReleephRequestActionController' => 'applications/releeph/controller/request/ReleephRequestActionController.php',
'ReleephRequestCommentController' => 'applications/releeph/controller/request/ReleephRequestCommentController.php',
'ReleephRequestConduitAPIMethod' => 'applications/releeph/conduit/ReleephRequestConduitAPIMethod.php',
'ReleephRequestController' => 'applications/releeph/controller/request/ReleephRequestController.php',
'ReleephRequestDifferentialCreateController' => 'applications/releeph/controller/request/ReleephRequestDifferentialCreateController.php',
'ReleephRequestEditController' => 'applications/releeph/controller/request/ReleephRequestEditController.php',
'ReleephRequestMailReceiver' => 'applications/releeph/mail/ReleephRequestMailReceiver.php',
'ReleephRequestPHIDType' => 'applications/releeph/phid/ReleephRequestPHIDType.php',
'ReleephRequestQuery' => 'applications/releeph/query/ReleephRequestQuery.php',
'ReleephRequestReplyHandler' => 'applications/releeph/mail/ReleephRequestReplyHandler.php',
'ReleephRequestSearchEngine' => 'applications/releeph/query/ReleephRequestSearchEngine.php',
'ReleephRequestStatus' => 'applications/releeph/constants/ReleephRequestStatus.php',
'ReleephRequestTransaction' => 'applications/releeph/storage/ReleephRequestTransaction.php',
'ReleephRequestTransactionComment' => 'applications/releeph/storage/ReleephRequestTransactionComment.php',
'ReleephRequestTransactionQuery' => 'applications/releeph/query/ReleephRequestTransactionQuery.php',
'ReleephRequestTransactionalEditor' => 'applications/releeph/editor/ReleephRequestTransactionalEditor.php',
'ReleephRequestTypeaheadControl' => 'applications/releeph/view/request/ReleephRequestTypeaheadControl.php',
'ReleephRequestTypeaheadController' => 'applications/releeph/controller/request/ReleephRequestTypeaheadController.php',
'ReleephRequestView' => 'applications/releeph/view/ReleephRequestView.php',
'ReleephRequestViewController' => 'applications/releeph/controller/request/ReleephRequestViewController.php',
'ReleephRequestorFieldSpecification' => 'applications/releeph/field/specification/ReleephRequestorFieldSpecification.php',
'ReleephRevisionFieldSpecification' => 'applications/releeph/field/specification/ReleephRevisionFieldSpecification.php',
'ReleephSeverityFieldSpecification' => 'applications/releeph/field/specification/ReleephSeverityFieldSpecification.php',
'ReleephSummaryFieldSpecification' => 'applications/releeph/field/specification/ReleephSummaryFieldSpecification.php',
'ReleephWorkCanPushConduitAPIMethod' => 'applications/releeph/conduit/work/ReleephWorkCanPushConduitAPIMethod.php',
'ReleephWorkGetAuthorInfoConduitAPIMethod' => 'applications/releeph/conduit/work/ReleephWorkGetAuthorInfoConduitAPIMethod.php',
'ReleephWorkGetBranchCommitMessageConduitAPIMethod' => 'applications/releeph/conduit/work/ReleephWorkGetBranchCommitMessageConduitAPIMethod.php',
'ReleephWorkGetBranchConduitAPIMethod' => 'applications/releeph/conduit/work/ReleephWorkGetBranchConduitAPIMethod.php',
'ReleephWorkGetCommitMessageConduitAPIMethod' => 'applications/releeph/conduit/work/ReleephWorkGetCommitMessageConduitAPIMethod.php',
'ReleephWorkNextRequestConduitAPIMethod' => 'applications/releeph/conduit/work/ReleephWorkNextRequestConduitAPIMethod.php',
'ReleephWorkRecordConduitAPIMethod' => 'applications/releeph/conduit/work/ReleephWorkRecordConduitAPIMethod.php',
'ReleephWorkRecordPickStatusConduitAPIMethod' => 'applications/releeph/conduit/work/ReleephWorkRecordPickStatusConduitAPIMethod.php',
'RemarkupProcessConduitAPIMethod' => 'applications/remarkup/conduit/RemarkupProcessConduitAPIMethod.php',
'RepositoryConduitAPIMethod' => 'applications/repository/conduit/RepositoryConduitAPIMethod.php',
'RepositoryCreateConduitAPIMethod' => 'applications/repository/conduit/RepositoryCreateConduitAPIMethod.php',
'RepositoryQueryConduitAPIMethod' => 'applications/repository/conduit/RepositoryQueryConduitAPIMethod.php',
'ShellLogView' => 'applications/harbormaster/view/ShellLogView.php',
'SlowvoteConduitAPIMethod' => 'applications/slowvote/conduit/SlowvoteConduitAPIMethod.php',
'SlowvoteEmbedView' => 'applications/slowvote/view/SlowvoteEmbedView.php',
'SlowvoteInfoConduitAPIMethod' => 'applications/slowvote/conduit/SlowvoteInfoConduitAPIMethod.php',
'SlowvoteRemarkupRule' => 'applications/slowvote/remarkup/SlowvoteRemarkupRule.php',
'SubscriptionListDialogBuilder' => 'applications/subscriptions/view/SubscriptionListDialogBuilder.php',
'SubscriptionListStringBuilder' => 'applications/subscriptions/view/SubscriptionListStringBuilder.php',
'TokenConduitAPIMethod' => 'applications/tokens/conduit/TokenConduitAPIMethod.php',
'TokenGiveConduitAPIMethod' => 'applications/tokens/conduit/TokenGiveConduitAPIMethod.php',
'TokenGivenConduitAPIMethod' => 'applications/tokens/conduit/TokenGivenConduitAPIMethod.php',
'TokenQueryConduitAPIMethod' => 'applications/tokens/conduit/TokenQueryConduitAPIMethod.php',
'UserConduitAPIMethod' => 'applications/people/conduit/UserConduitAPIMethod.php',
'UserDisableConduitAPIMethod' => 'applications/people/conduit/UserDisableConduitAPIMethod.php',
'UserEnableConduitAPIMethod' => 'applications/people/conduit/UserEnableConduitAPIMethod.php',
'UserFindConduitAPIMethod' => 'applications/people/conduit/UserFindConduitAPIMethod.php',
'UserQueryConduitAPIMethod' => 'applications/people/conduit/UserQueryConduitAPIMethod.php',
'UserWhoAmIConduitAPIMethod' => 'applications/people/conduit/UserWhoAmIConduitAPIMethod.php',
),
'function' => array(
'celerity_generate_unique_node_id' => 'applications/celerity/api.php',
'celerity_get_resource_uri' => 'applications/celerity/api.php',
'javelin_tag' => 'infrastructure/javelin/markup.php',
'phabricator_date' => 'view/viewutils.php',
'phabricator_datetime' => 'view/viewutils.php',
'phabricator_form' => 'infrastructure/javelin/markup.php',
'phabricator_format_local_time' => 'view/viewutils.php',
'phabricator_relative_date' => 'view/viewutils.php',
'phabricator_time' => 'view/viewutils.php',
'phid_get_subtype' => 'applications/phid/utils.php',
'phid_get_type' => 'applications/phid/utils.php',
'phid_group_by_type' => 'applications/phid/utils.php',
'require_celerity_resource' => 'applications/celerity/api.php',
),
'xmap' => array(
'AlmanacAddress' => 'Phobject',
'AlmanacBinding' => array(
'AlmanacDAO',
'PhabricatorPolicyInterface',
'PhabricatorCustomFieldInterface',
'PhabricatorApplicationTransactionInterface',
'AlmanacPropertyInterface',
),
'AlmanacBindingEditController' => 'AlmanacServiceController',
'AlmanacBindingEditor' => 'PhabricatorApplicationTransactionEditor',
'AlmanacBindingPHIDType' => 'PhabricatorPHIDType',
'AlmanacBindingQuery' => 'AlmanacQuery',
'AlmanacBindingTableView' => 'AphrontView',
'AlmanacBindingTransaction' => 'PhabricatorApplicationTransaction',
'AlmanacBindingTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'AlmanacBindingViewController' => 'AlmanacServiceController',
'AlmanacClusterDatabaseServiceType' => 'AlmanacClusterServiceType',
'AlmanacClusterRepositoryServiceType' => 'AlmanacClusterServiceType',
'AlmanacClusterServiceType' => 'AlmanacServiceType',
'AlmanacConduitAPIMethod' => 'ConduitAPIMethod',
'AlmanacConsoleController' => 'AlmanacController',
'AlmanacController' => 'PhabricatorController',
'AlmanacCoreCustomField' => array(
'AlmanacCustomField',
'PhabricatorStandardCustomFieldInterface',
),
'AlmanacCreateClusterServicesCapability' => 'PhabricatorPolicyCapability',
'AlmanacCreateDevicesCapability' => 'PhabricatorPolicyCapability',
'AlmanacCreateNetworksCapability' => 'PhabricatorPolicyCapability',
'AlmanacCreateServicesCapability' => 'PhabricatorPolicyCapability',
'AlmanacCustomField' => 'PhabricatorCustomField',
'AlmanacCustomServiceType' => 'AlmanacServiceType',
'AlmanacDAO' => 'PhabricatorLiskDAO',
'AlmanacDevice' => array(
'AlmanacDAO',
'PhabricatorPolicyInterface',
'PhabricatorCustomFieldInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorProjectInterface',
'PhabricatorSSHPublicKeyInterface',
'AlmanacPropertyInterface',
'PhabricatorDestructibleInterface',
),
'AlmanacDeviceController' => 'AlmanacController',
'AlmanacDeviceEditController' => 'AlmanacDeviceController',
'AlmanacDeviceEditor' => 'PhabricatorApplicationTransactionEditor',
'AlmanacDeviceListController' => 'AlmanacDeviceController',
'AlmanacDevicePHIDType' => 'PhabricatorPHIDType',
'AlmanacDeviceQuery' => 'AlmanacQuery',
'AlmanacDeviceSearchEngine' => 'PhabricatorApplicationSearchEngine',
'AlmanacDeviceTransaction' => 'PhabricatorApplicationTransaction',
'AlmanacDeviceTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'AlmanacDeviceViewController' => 'AlmanacDeviceController',
'AlmanacInterface' => array(
'AlmanacDAO',
'PhabricatorPolicyInterface',
'PhabricatorDestructibleInterface',
),
'AlmanacInterfaceDatasource' => 'PhabricatorTypeaheadDatasource',
'AlmanacInterfaceEditController' => 'AlmanacDeviceController',
'AlmanacInterfacePHIDType' => 'PhabricatorPHIDType',
'AlmanacInterfaceQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'AlmanacInterfaceTableView' => 'AphrontView',
'AlmanacKeys' => 'Phobject',
'AlmanacManagementLockWorkflow' => 'AlmanacManagementWorkflow',
'AlmanacManagementRegisterWorkflow' => 'AlmanacManagementWorkflow',
'AlmanacManagementTrustKeyWorkflow' => 'AlmanacManagementWorkflow',
'AlmanacManagementUnlockWorkflow' => 'AlmanacManagementWorkflow',
'AlmanacManagementUntrustKeyWorkflow' => 'AlmanacManagementWorkflow',
'AlmanacManagementWorkflow' => 'PhabricatorManagementWorkflow',
'AlmanacNames' => 'Phobject',
'AlmanacNamesTestCase' => 'PhabricatorTestCase',
'AlmanacNetwork' => array(
'AlmanacDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'PhabricatorDestructibleInterface',
),
'AlmanacNetworkController' => 'AlmanacController',
'AlmanacNetworkEditController' => 'AlmanacNetworkController',
'AlmanacNetworkEditor' => 'PhabricatorApplicationTransactionEditor',
'AlmanacNetworkListController' => 'AlmanacNetworkController',
'AlmanacNetworkPHIDType' => 'PhabricatorPHIDType',
'AlmanacNetworkQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'AlmanacNetworkSearchEngine' => 'PhabricatorApplicationSearchEngine',
'AlmanacNetworkTransaction' => 'PhabricatorApplicationTransaction',
'AlmanacNetworkTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'AlmanacNetworkViewController' => 'AlmanacNetworkController',
'AlmanacProperty' => array(
'PhabricatorCustomFieldStorage',
'PhabricatorPolicyInterface',
),
'AlmanacPropertyController' => 'AlmanacController',
'AlmanacPropertyDeleteController' => 'AlmanacDeviceController',
'AlmanacPropertyEditController' => 'AlmanacDeviceController',
'AlmanacPropertyQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'AlmanacQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'AlmanacQueryDevicesConduitAPIMethod' => 'AlmanacConduitAPIMethod',
'AlmanacQueryServicesConduitAPIMethod' => 'AlmanacConduitAPIMethod',
'AlmanacSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'AlmanacService' => array(
'AlmanacDAO',
'PhabricatorPolicyInterface',
'PhabricatorCustomFieldInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorProjectInterface',
'AlmanacPropertyInterface',
'PhabricatorDestructibleInterface',
),
'AlmanacServiceController' => 'AlmanacController',
'AlmanacServiceDatasource' => 'PhabricatorTypeaheadDatasource',
'AlmanacServiceEditController' => 'AlmanacServiceController',
'AlmanacServiceEditor' => 'PhabricatorApplicationTransactionEditor',
'AlmanacServiceListController' => 'AlmanacServiceController',
'AlmanacServicePHIDType' => 'PhabricatorPHIDType',
'AlmanacServiceQuery' => 'AlmanacQuery',
'AlmanacServiceSearchEngine' => 'PhabricatorApplicationSearchEngine',
'AlmanacServiceTransaction' => 'PhabricatorApplicationTransaction',
'AlmanacServiceTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'AlmanacServiceType' => 'Phobject',
'AlmanacServiceTypeTestCase' => 'PhabricatorTestCase',
'AlmanacServiceViewController' => 'AlmanacServiceController',
'AphlictDropdownDataQuery' => 'Phobject',
'Aphront304Response' => 'AphrontResponse',
'Aphront400Response' => 'AphrontResponse',
'Aphront403Response' => 'AphrontHTMLResponse',
'Aphront404Response' => 'AphrontHTMLResponse',
'AphrontAjaxResponse' => 'AphrontResponse',
'AphrontApplicationConfiguration' => 'Phobject',
'AphrontBarView' => 'AphrontView',
'AphrontCSRFException' => 'AphrontException',
'AphrontCalendarEventView' => 'AphrontView',
'AphrontController' => 'Phobject',
'AphrontCursorPagerView' => 'AphrontView',
'AphrontDefaultApplicationConfiguration' => 'AphrontApplicationConfiguration',
'AphrontDialogResponse' => 'AphrontResponse',
'AphrontDialogView' => array(
'AphrontView',
'AphrontResponseProducerInterface',
),
'AphrontException' => 'Exception',
'AphrontFileResponse' => 'AphrontResponse',
'AphrontFormCheckboxControl' => 'AphrontFormControl',
'AphrontFormChooseButtonControl' => 'AphrontFormControl',
'AphrontFormControl' => 'AphrontView',
'AphrontFormDateControl' => 'AphrontFormControl',
'AphrontFormDateControlValue' => 'Phobject',
'AphrontFormDividerControl' => 'AphrontFormControl',
'AphrontFormFileControl' => 'AphrontFormControl',
'AphrontFormMarkupControl' => 'AphrontFormControl',
'AphrontFormPasswordControl' => 'AphrontFormControl',
'AphrontFormPolicyControl' => 'AphrontFormControl',
'AphrontFormRadioButtonControl' => 'AphrontFormControl',
'AphrontFormRecaptchaControl' => 'AphrontFormControl',
'AphrontFormSelectControl' => 'AphrontFormControl',
'AphrontFormStaticControl' => 'AphrontFormControl',
'AphrontFormSubmitControl' => 'AphrontFormControl',
'AphrontFormTextAreaControl' => 'AphrontFormControl',
'AphrontFormTextControl' => 'AphrontFormControl',
'AphrontFormTextWithSubmitControl' => 'AphrontFormControl',
'AphrontFormTokenizerControl' => 'AphrontFormControl',
'AphrontFormTypeaheadControl' => 'AphrontFormControl',
'AphrontFormView' => 'AphrontView',
'AphrontGlyphBarView' => 'AphrontBarView',
'AphrontHTMLResponse' => 'AphrontResponse',
'AphrontHTTPProxyResponse' => 'AphrontResponse',
'AphrontHTTPSink' => 'Phobject',
'AphrontHTTPSinkTestCase' => 'PhabricatorTestCase',
'AphrontIsolatedDatabaseConnectionTestCase' => 'PhabricatorTestCase',
'AphrontIsolatedHTTPSink' => 'AphrontHTTPSink',
'AphrontJSONResponse' => 'AphrontResponse',
'AphrontJavelinView' => 'AphrontView',
'AphrontKeyboardShortcutsAvailableView' => 'AphrontView',
'AphrontListFilterView' => 'AphrontView',
'AphrontMalformedRequestException' => 'AphrontException',
'AphrontMoreView' => 'AphrontView',
'AphrontMultiColumnView' => 'AphrontView',
'AphrontMySQLDatabaseConnectionTestCase' => 'PhabricatorTestCase',
'AphrontNullView' => 'AphrontView',
'AphrontPHPHTTPSink' => 'AphrontHTTPSink',
'AphrontPageView' => 'AphrontView',
'AphrontPlainTextResponse' => 'AphrontResponse',
'AphrontProgressBarView' => 'AphrontBarView',
'AphrontProxyResponse' => array(
'AphrontResponse',
'AphrontResponseProducerInterface',
),
'AphrontRedirectResponse' => 'AphrontResponse',
'AphrontRedirectResponseTestCase' => 'PhabricatorTestCase',
'AphrontReloadResponse' => 'AphrontRedirectResponse',
'AphrontRequest' => 'Phobject',
'AphrontRequestExceptionHandler' => 'Phobject',
'AphrontRequestTestCase' => 'PhabricatorTestCase',
'AphrontResponse' => 'Phobject',
'AphrontRoutingMap' => 'Phobject',
'AphrontRoutingResult' => 'Phobject',
'AphrontSideNavFilterView' => 'AphrontView',
'AphrontSite' => 'Phobject',
'AphrontStackTraceView' => 'AphrontView',
'AphrontStandaloneHTMLResponse' => 'AphrontHTMLResponse',
'AphrontTableView' => 'AphrontView',
'AphrontTagView' => 'AphrontView',
'AphrontTokenizerTemplateView' => 'AphrontView',
'AphrontTypeaheadTemplateView' => 'AphrontView',
'AphrontUnhandledExceptionResponse' => 'AphrontStandaloneHTMLResponse',
'AphrontView' => array(
'Phobject',
'PhutilSafeHTMLProducerInterface',
),
'AphrontWebpageResponse' => 'AphrontHTMLResponse',
'ArcanistConduitAPIMethod' => 'ConduitAPIMethod',
'AuditConduitAPIMethod' => 'ConduitAPIMethod',
'AuditQueryConduitAPIMethod' => 'AuditConduitAPIMethod',
'AuthManageProvidersCapability' => 'PhabricatorPolicyCapability',
'CalendarTimeUtil' => 'Phobject',
'CalendarTimeUtilTestCase' => 'PhabricatorTestCase',
'CelerityAPI' => 'Phobject',
'CelerityDefaultPostprocessor' => 'CelerityPostprocessor',
'CelerityHighContrastPostprocessor' => 'CelerityPostprocessor',
'CelerityLargeFontPostprocessor' => 'CelerityPostprocessor',
'CelerityManagementMapWorkflow' => 'CelerityManagementWorkflow',
'CelerityManagementWorkflow' => 'PhabricatorManagementWorkflow',
'CelerityPhabricatorResourceController' => 'CelerityResourceController',
'CelerityPhabricatorResources' => 'CelerityResourcesOnDisk',
'CelerityPhysicalResources' => 'CelerityResources',
'CelerityPhysicalResourcesTestCase' => 'PhabricatorTestCase',
'CelerityPostprocessor' => 'Phobject',
'CelerityPostprocessorTestCase' => 'PhabricatorTestCase',
'CelerityResourceController' => 'PhabricatorController',
'CelerityResourceGraph' => 'AbstractDirectedGraph',
'CelerityResourceMap' => 'Phobject',
'CelerityResourceMapGenerator' => 'Phobject',
'CelerityResourceTransformer' => 'Phobject',
'CelerityResourceTransformerTestCase' => 'PhabricatorTestCase',
'CelerityResources' => 'Phobject',
'CelerityResourcesOnDisk' => 'CelerityPhysicalResources',
'CeleritySpriteGenerator' => 'Phobject',
'CelerityStaticResourceResponse' => 'Phobject',
'ChatLogConduitAPIMethod' => 'ConduitAPIMethod',
'ChatLogQueryConduitAPIMethod' => 'ChatLogConduitAPIMethod',
'ChatLogRecordConduitAPIMethod' => 'ChatLogConduitAPIMethod',
'ConduitAPIMethod' => array(
'Phobject',
'PhabricatorPolicyInterface',
),
'ConduitAPIMethodTestCase' => 'PhabricatorTestCase',
'ConduitAPIRequest' => 'Phobject',
'ConduitAPIResponse' => 'Phobject',
'ConduitApplicationNotInstalledException' => 'ConduitMethodNotFoundException',
'ConduitCall' => 'Phobject',
'ConduitCallTestCase' => 'PhabricatorTestCase',
'ConduitConnectConduitAPIMethod' => 'ConduitAPIMethod',
'ConduitConnectionGarbageCollector' => 'PhabricatorGarbageCollector',
'ConduitDeprecatedCallSetupCheck' => 'PhabricatorSetupCheck',
'ConduitException' => 'Exception',
'ConduitGetCapabilitiesConduitAPIMethod' => 'ConduitAPIMethod',
'ConduitGetCertificateConduitAPIMethod' => 'ConduitAPIMethod',
'ConduitLogGarbageCollector' => 'PhabricatorGarbageCollector',
'ConduitMethodDoesNotExistException' => 'ConduitMethodNotFoundException',
'ConduitMethodNotFoundException' => 'ConduitException',
'ConduitPingConduitAPIMethod' => 'ConduitAPIMethod',
'ConduitQueryConduitAPIMethod' => 'ConduitAPIMethod',
'ConduitSSHWorkflow' => 'PhabricatorSSHWorkflow',
'ConduitTokenGarbageCollector' => 'PhabricatorGarbageCollector',
'ConpherenceColumnViewController' => 'ConpherenceController',
'ConpherenceConduitAPIMethod' => 'ConduitAPIMethod',
'ConpherenceConfigOptions' => 'PhabricatorApplicationConfigOptions',
'ConpherenceConstants' => 'Phobject',
'ConpherenceController' => 'PhabricatorController',
'ConpherenceCreateThreadConduitAPIMethod' => 'ConpherenceConduitAPIMethod',
'ConpherenceCreateThreadMailReceiver' => 'PhabricatorMailReceiver',
'ConpherenceDAO' => 'PhabricatorLiskDAO',
'ConpherenceDurableColumnView' => 'AphrontTagView',
'ConpherenceEditor' => 'PhabricatorApplicationTransactionEditor',
'ConpherenceFormDragAndDropUploadControl' => 'AphrontFormControl',
'ConpherenceFulltextQuery' => 'PhabricatorOffsetPagedQuery',
'ConpherenceHovercardEventListener' => 'PhabricatorEventListener',
'ConpherenceImageData' => 'ConpherenceConstants',
'ConpherenceIndex' => 'ConpherenceDAO',
'ConpherenceLayoutView' => 'AphrontView',
'ConpherenceListController' => 'ConpherenceController',
'ConpherenceMenuItemView' => 'AphrontTagView',
'ConpherenceNewRoomController' => 'ConpherenceController',
'ConpherenceNotificationPanelController' => 'ConpherenceController',
'ConpherenceParticipant' => 'ConpherenceDAO',
'ConpherenceParticipantCountQuery' => 'PhabricatorOffsetPagedQuery',
'ConpherenceParticipantQuery' => 'PhabricatorOffsetPagedQuery',
'ConpherenceParticipationStatus' => 'ConpherenceConstants',
'ConpherencePeopleWidgetView' => 'ConpherenceWidgetView',
'ConpherencePicCropControl' => 'AphrontFormControl',
'ConpherenceQueryThreadConduitAPIMethod' => 'ConpherenceConduitAPIMethod',
'ConpherenceQueryTransactionConduitAPIMethod' => 'ConpherenceConduitAPIMethod',
'ConpherenceReplyHandler' => 'PhabricatorMailReplyHandler',
'ConpherenceRoomListController' => 'ConpherenceController',
'ConpherenceRoomTestCase' => 'ConpherenceTestCase',
'ConpherenceSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'ConpherenceSettings' => 'ConpherenceConstants',
'ConpherenceTestCase' => 'PhabricatorTestCase',
'ConpherenceThread' => array(
'ConpherenceDAO',
'PhabricatorPolicyInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorMentionableInterface',
'PhabricatorDestructibleInterface',
),
'ConpherenceThreadIndexer' => 'PhabricatorSearchDocumentIndexer',
'ConpherenceThreadListView' => 'AphrontView',
'ConpherenceThreadMailReceiver' => 'PhabricatorObjectMailReceiver',
'ConpherenceThreadMembersPolicyRule' => 'PhabricatorPolicyRule',
'ConpherenceThreadQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'ConpherenceThreadRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'ConpherenceThreadSearchEngine' => 'PhabricatorApplicationSearchEngine',
'ConpherenceTransaction' => 'PhabricatorApplicationTransaction',
'ConpherenceTransactionComment' => 'PhabricatorApplicationTransactionComment',
'ConpherenceTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'ConpherenceTransactionRenderer' => 'Phobject',
'ConpherenceTransactionView' => 'AphrontView',
'ConpherenceUpdateActions' => 'ConpherenceConstants',
'ConpherenceUpdateController' => 'ConpherenceController',
'ConpherenceUpdateThreadConduitAPIMethod' => 'ConpherenceConduitAPIMethod',
'ConpherenceViewController' => 'ConpherenceController',
'ConpherenceWidgetConfigConstants' => 'ConpherenceConstants',
'ConpherenceWidgetController' => 'ConpherenceController',
'ConpherenceWidgetView' => 'AphrontView',
'DarkConsoleController' => 'PhabricatorController',
'DarkConsoleCore' => 'Phobject',
'DarkConsoleDataController' => 'PhabricatorController',
'DarkConsoleErrorLogPlugin' => 'DarkConsolePlugin',
'DarkConsoleErrorLogPluginAPI' => 'Phobject',
'DarkConsoleEventPlugin' => 'DarkConsolePlugin',
'DarkConsoleEventPluginAPI' => 'PhabricatorEventListener',
'DarkConsolePlugin' => 'Phobject',
'DarkConsoleRequestPlugin' => 'DarkConsolePlugin',
'DarkConsoleServicesPlugin' => 'DarkConsolePlugin',
'DarkConsoleStartupPlugin' => 'DarkConsolePlugin',
'DarkConsoleXHProfPlugin' => 'DarkConsolePlugin',
'DarkConsoleXHProfPluginAPI' => 'Phobject',
'DefaultDatabaseConfigurationProvider' => array(
'Phobject',
'DatabaseConfigurationProvider',
),
'DifferentialAction' => 'Phobject',
'DifferentialActionEmailCommand' => 'MetaMTAEmailTransactionCommand',
'DifferentialActionMenuEventListener' => 'PhabricatorEventListener',
'DifferentialAddCommentView' => 'AphrontView',
'DifferentialAdjustmentMapTestCase' => 'PhutilTestCase',
'DifferentialAffectedPath' => 'DifferentialDAO',
'DifferentialApplyPatchField' => 'DifferentialCustomField',
'DifferentialAsanaRepresentationField' => 'DifferentialCustomField',
'DifferentialAuditorsField' => 'DifferentialStoredCustomField',
'DifferentialAuthorField' => 'DifferentialCustomField',
'DifferentialBlameRevisionField' => 'DifferentialStoredCustomField',
'DifferentialBlockHeraldAction' => 'HeraldAction',
'DifferentialBranchField' => 'DifferentialCustomField',
'DifferentialChangeHeraldFieldGroup' => 'HeraldFieldGroup',
'DifferentialChangeType' => 'Phobject',
'DifferentialChangesSinceLastUpdateField' => 'DifferentialCustomField',
'DifferentialChangeset' => array(
'DifferentialDAO',
'PhabricatorPolicyInterface',
),
'DifferentialChangesetDetailView' => 'AphrontView',
'DifferentialChangesetFileTreeSideNavBuilder' => 'Phobject',
'DifferentialChangesetHTMLRenderer' => 'DifferentialChangesetRenderer',
'DifferentialChangesetListView' => 'AphrontView',
'DifferentialChangesetOneUpRenderer' => 'DifferentialChangesetHTMLRenderer',
'DifferentialChangesetOneUpTestRenderer' => 'DifferentialChangesetTestRenderer',
'DifferentialChangesetParser' => 'Phobject',
'DifferentialChangesetParserTestCase' => 'PhabricatorTestCase',
'DifferentialChangesetQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'DifferentialChangesetRenderer' => 'Phobject',
'DifferentialChangesetTestRenderer' => 'DifferentialChangesetRenderer',
'DifferentialChangesetTwoUpRenderer' => 'DifferentialChangesetHTMLRenderer',
'DifferentialChangesetTwoUpTestRenderer' => 'DifferentialChangesetTestRenderer',
'DifferentialChangesetViewController' => 'DifferentialController',
'DifferentialCloseConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialCommentPreviewController' => 'DifferentialController',
'DifferentialCommentSaveController' => 'DifferentialController',
'DifferentialCommitMessageParser' => 'Phobject',
'DifferentialCommitMessageParserTestCase' => 'PhabricatorTestCase',
'DifferentialCommitsField' => 'DifferentialCustomField',
'DifferentialConduitAPIMethod' => 'ConduitAPIMethod',
'DifferentialConflictsField' => 'DifferentialCustomField',
'DifferentialController' => 'PhabricatorController',
'DifferentialCoreCustomField' => 'DifferentialCustomField',
'DifferentialCreateCommentConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialCreateDiffConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialCreateInlineConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialCreateMailReceiver' => 'PhabricatorMailReceiver',
'DifferentialCreateRawDiffConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialCreateRevisionConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialCustomField' => 'PhabricatorCustomField',
'DifferentialCustomFieldDependsOnParser' => 'PhabricatorCustomFieldMonogramParser',
'DifferentialCustomFieldDependsOnParserTestCase' => 'PhabricatorTestCase',
'DifferentialCustomFieldNumericIndex' => 'PhabricatorCustomFieldNumericIndexStorage',
'DifferentialCustomFieldRevertsParser' => 'PhabricatorCustomFieldMonogramParser',
'DifferentialCustomFieldRevertsParserTestCase' => 'PhabricatorTestCase',
'DifferentialCustomFieldStorage' => 'PhabricatorCustomFieldStorage',
'DifferentialCustomFieldStringIndex' => 'PhabricatorCustomFieldStringIndexStorage',
'DifferentialDAO' => 'PhabricatorLiskDAO',
'DifferentialDefaultViewCapability' => 'PhabricatorPolicyCapability',
'DifferentialDependenciesField' => 'DifferentialCustomField',
'DifferentialDependsOnField' => 'DifferentialCustomField',
'DifferentialDiff' => array(
'DifferentialDAO',
'PhabricatorPolicyInterface',
'HarbormasterBuildableInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorDestructibleInterface',
),
'DifferentialDiffAffectedFilesHeraldField' => 'DifferentialDiffHeraldField',
'DifferentialDiffAuthorHeraldField' => 'DifferentialDiffHeraldField',
'DifferentialDiffAuthorProjectsHeraldField' => 'DifferentialDiffHeraldField',
'DifferentialDiffContentAddedHeraldField' => 'DifferentialDiffHeraldField',
'DifferentialDiffContentHeraldField' => 'DifferentialDiffHeraldField',
'DifferentialDiffContentRemovedHeraldField' => 'DifferentialDiffHeraldField',
'DifferentialDiffCreateController' => 'DifferentialController',
'DifferentialDiffEditor' => 'PhabricatorApplicationTransactionEditor',
'DifferentialDiffHeraldField' => 'HeraldField',
'DifferentialDiffHeraldFieldGroup' => 'HeraldFieldGroup',
'DifferentialDiffInlineCommentQuery' => 'PhabricatorDiffInlineCommentQuery',
'DifferentialDiffPHIDType' => 'PhabricatorPHIDType',
'DifferentialDiffProperty' => 'DifferentialDAO',
'DifferentialDiffQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'DifferentialDiffRepositoryHeraldField' => 'DifferentialDiffHeraldField',
'DifferentialDiffRepositoryProjectsHeraldField' => 'DifferentialDiffHeraldField',
'DifferentialDiffTestCase' => 'PhutilTestCase',
'DifferentialDiffTransaction' => 'PhabricatorApplicationTransaction',
'DifferentialDiffTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'DifferentialDiffViewController' => 'DifferentialController',
'DifferentialDoorkeeperRevisionFeedStoryPublisher' => 'DoorkeeperFeedStoryPublisher',
'DifferentialDraft' => 'DifferentialDAO',
'DifferentialEditPolicyField' => 'DifferentialCoreCustomField',
'DifferentialFieldParseException' => 'Exception',
'DifferentialFieldValidationException' => 'Exception',
'DifferentialFindConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialGetAllDiffsConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialGetCommitMessageConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialGetCommitPathsConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialGetDiffConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialGetRawDiffConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialGetRevisionCommentsConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialGetRevisionConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialGetWorkingCopy' => 'Phobject',
'DifferentialGitHubLandingStrategy' => 'DifferentialLandingStrategy',
'DifferentialGitSVNIDField' => 'DifferentialCustomField',
'DifferentialHarbormasterField' => 'DifferentialCustomField',
'DifferentialHiddenComment' => 'DifferentialDAO',
'DifferentialHostField' => 'DifferentialCustomField',
'DifferentialHostedGitLandingStrategy' => 'DifferentialLandingStrategy',
'DifferentialHostedMercurialLandingStrategy' => 'DifferentialLandingStrategy',
'DifferentialHovercardEventListener' => 'PhabricatorEventListener',
'DifferentialHunk' => array(
'DifferentialDAO',
'PhabricatorPolicyInterface',
),
'DifferentialHunkParser' => 'Phobject',
'DifferentialHunkParserTestCase' => 'PhabricatorTestCase',
'DifferentialHunkQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'DifferentialHunkTestCase' => 'PhutilTestCase',
'DifferentialInlineComment' => array(
'Phobject',
'PhabricatorInlineCommentInterface',
),
'DifferentialInlineCommentEditController' => 'PhabricatorInlineCommentController',
'DifferentialInlineCommentPreviewController' => 'PhabricatorInlineCommentPreviewController',
'DifferentialInlineCommentQuery' => 'PhabricatorOffsetPagedQuery',
'DifferentialJIRAIssuesField' => 'DifferentialStoredCustomField',
'DifferentialLandingActionMenuEventListener' => 'PhabricatorEventListener',
'DifferentialLandingStrategy' => 'Phobject',
'DifferentialLegacyHunk' => 'DifferentialHunk',
'DifferentialLineAdjustmentMap' => 'Phobject',
'DifferentialLintField' => 'DifferentialHarbormasterField',
'DifferentialLintStatus' => 'Phobject',
'DifferentialLocalCommitsView' => 'AphrontView',
'DifferentialManiphestTasksField' => 'DifferentialCoreCustomField',
'DifferentialModernHunk' => 'DifferentialHunk',
'DifferentialParseCacheGarbageCollector' => 'PhabricatorGarbageCollector',
'DifferentialParseCommitMessageConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialParseRenderTestCase' => 'PhabricatorTestCase',
'DifferentialPathField' => 'DifferentialCustomField',
'DifferentialPrimaryPaneView' => 'AphrontView',
'DifferentialProjectReviewersField' => 'DifferentialCustomField',
'DifferentialProjectsField' => 'DifferentialCoreCustomField',
'DifferentialQueryConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialQueryDiffsConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialRawDiffRenderer' => 'Phobject',
'DifferentialReleephRequestFieldSpecification' => 'Phobject',
'DifferentialRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'DifferentialReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'DifferentialRepositoryField' => 'DifferentialCoreCustomField',
'DifferentialRepositoryLookup' => 'Phobject',
'DifferentialRequiredSignaturesField' => 'DifferentialCoreCustomField',
'DifferentialRevertPlanField' => 'DifferentialStoredCustomField',
'DifferentialReviewedByField' => 'DifferentialCoreCustomField',
'DifferentialReviewer' => 'Phobject',
'DifferentialReviewerForRevisionEdgeType' => 'PhabricatorEdgeType',
'DifferentialReviewerStatus' => 'Phobject',
'DifferentialReviewersAddBlockingReviewersHeraldAction' => 'DifferentialReviewersHeraldAction',
'DifferentialReviewersAddBlockingSelfHeraldAction' => 'DifferentialReviewersHeraldAction',
'DifferentialReviewersAddReviewersHeraldAction' => 'DifferentialReviewersHeraldAction',
'DifferentialReviewersAddSelfHeraldAction' => 'DifferentialReviewersHeraldAction',
'DifferentialReviewersField' => 'DifferentialCoreCustomField',
'DifferentialReviewersHeraldAction' => 'HeraldAction',
'DifferentialReviewersView' => 'AphrontView',
'DifferentialRevision' => array(
'DifferentialDAO',
'PhabricatorTokenReceiverInterface',
'PhabricatorPolicyInterface',
'PhabricatorExtendedPolicyInterface',
'PhabricatorFlaggableInterface',
'PhrequentTrackableInterface',
'HarbormasterBuildableInterface',
'PhabricatorSubscribableInterface',
'PhabricatorCustomFieldInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorMentionableInterface',
'PhabricatorDestructibleInterface',
'PhabricatorProjectInterface',
),
'DifferentialRevisionAffectedFilesHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionAuthorHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionAuthorProjectsHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionCloseDetailsController' => 'DifferentialController',
'DifferentialRevisionContentAddedHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionContentHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionContentRemovedHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionControlSystem' => 'Phobject',
'DifferentialRevisionDependedOnByRevisionEdgeType' => 'PhabricatorEdgeType',
'DifferentialRevisionDependsOnRevisionEdgeType' => 'PhabricatorEdgeType',
'DifferentialRevisionDetailView' => 'AphrontView',
'DifferentialRevisionEditController' => 'DifferentialController',
'DifferentialRevisionHasCommitEdgeType' => 'PhabricatorEdgeType',
'DifferentialRevisionHasReviewerEdgeType' => 'PhabricatorEdgeType',
'DifferentialRevisionHasTaskEdgeType' => 'PhabricatorEdgeType',
'DifferentialRevisionHeraldField' => 'HeraldField',
'DifferentialRevisionHeraldFieldGroup' => 'HeraldFieldGroup',
'DifferentialRevisionIDField' => 'DifferentialCustomField',
'DifferentialRevisionLandController' => 'DifferentialController',
'DifferentialRevisionListController' => 'DifferentialController',
'DifferentialRevisionListView' => 'AphrontView',
'DifferentialRevisionMailReceiver' => 'PhabricatorObjectMailReceiver',
'DifferentialRevisionPHIDType' => 'PhabricatorPHIDType',
'DifferentialRevisionPackageHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionPackageOwnerHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'DifferentialRevisionRepositoryHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionRepositoryProjectsHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionReviewersHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionSearchEngine' => 'PhabricatorApplicationSearchEngine',
'DifferentialRevisionStatus' => 'Phobject',
'DifferentialRevisionSummaryHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionTitleHeraldField' => 'DifferentialRevisionHeraldField',
'DifferentialRevisionUpdateHistoryView' => 'AphrontView',
'DifferentialRevisionViewController' => 'DifferentialController',
'DifferentialSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'DifferentialSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'DifferentialSetDiffPropertyConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialStoredCustomField' => 'DifferentialCustomField',
'DifferentialSubscribersField' => 'DifferentialCoreCustomField',
'DifferentialSummaryField' => 'DifferentialCoreCustomField',
'DifferentialTestPlanField' => 'DifferentialCoreCustomField',
'DifferentialTitleField' => 'DifferentialCoreCustomField',
'DifferentialTransaction' => 'PhabricatorApplicationTransaction',
'DifferentialTransactionComment' => 'PhabricatorApplicationTransactionComment',
'DifferentialTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
'DifferentialTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'DifferentialTransactionView' => 'PhabricatorApplicationTransactionView',
'DifferentialUnitField' => 'DifferentialHarbormasterField',
'DifferentialUnitStatus' => 'Phobject',
'DifferentialUnitTestResult' => 'Phobject',
'DifferentialUpdateRevisionConduitAPIMethod' => 'DifferentialConduitAPIMethod',
'DifferentialViewPolicyField' => 'DifferentialCoreCustomField',
'DiffusionAuditorDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'DiffusionAuditorFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'DiffusionAuditorsAddAuditorsHeraldAction' => 'DiffusionAuditorsHeraldAction',
'DiffusionAuditorsAddSelfHeraldAction' => 'DiffusionAuditorsHeraldAction',
'DiffusionAuditorsHeraldAction' => 'HeraldAction',
'DiffusionBlockHeraldAction' => 'HeraldAction',
'DiffusionBranchQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionBranchTableController' => 'DiffusionController',
'DiffusionBranchTableView' => 'DiffusionView',
'DiffusionBrowseController' => 'DiffusionController',
'DiffusionBrowseDirectoryController' => 'DiffusionBrowseController',
'DiffusionBrowseFileController' => 'DiffusionBrowseController',
'DiffusionBrowseMainController' => 'DiffusionBrowseController',
'DiffusionBrowseQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionBrowseResultSet' => 'Phobject',
'DiffusionBrowseSearchController' => 'DiffusionBrowseController',
'DiffusionBrowseTableView' => 'DiffusionView',
'DiffusionCachedResolveRefsQuery' => 'DiffusionLowLevelQuery',
'DiffusionChangeController' => 'DiffusionController',
'DiffusionChangeHeraldFieldGroup' => 'HeraldFieldGroup',
'DiffusionCommitAffectedFilesHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitAuthorHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitAutocloseHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitBranchesController' => 'DiffusionController',
'DiffusionCommitBranchesHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitCommitterHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitController' => 'DiffusionController',
'DiffusionCommitDiffContentAddedHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitDiffContentHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitDiffContentRemovedHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitDiffEnormousHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitEditController' => 'DiffusionController',
'DiffusionCommitHasRevisionEdgeType' => 'PhabricatorEdgeType',
'DiffusionCommitHasTaskEdgeType' => 'PhabricatorEdgeType',
'DiffusionCommitHash' => 'Phobject',
'DiffusionCommitHeraldField' => 'HeraldField',
'DiffusionCommitHeraldFieldGroup' => 'HeraldFieldGroup',
'DiffusionCommitHookEngine' => 'Phobject',
'DiffusionCommitHookRejectException' => 'Exception',
'DiffusionCommitMessageHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitPackageAuditHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitPackageHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitPackageOwnerHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitParentsQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionCommitQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'DiffusionCommitRef' => 'Phobject',
'DiffusionCommitRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'DiffusionCommitRemarkupRuleTestCase' => 'PhabricatorTestCase',
'DiffusionCommitRepositoryHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitRepositoryProjectsHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitRevertedByCommitEdgeType' => 'PhabricatorEdgeType',
'DiffusionCommitRevertsCommitEdgeType' => 'PhabricatorEdgeType',
'DiffusionCommitReviewerHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitRevisionAcceptedHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitRevisionHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitRevisionReviewersHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitRevisionSubscribersHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitTagsController' => 'DiffusionController',
'DiffusionConduitAPIMethod' => 'ConduitAPIMethod',
'DiffusionController' => 'PhabricatorController',
'DiffusionCreateCommentConduitAPIMethod' => 'DiffusionConduitAPIMethod',
'DiffusionCreateRepositoriesCapability' => 'PhabricatorPolicyCapability',
'DiffusionDefaultEditCapability' => 'PhabricatorPolicyCapability',
'DiffusionDefaultPushCapability' => 'PhabricatorPolicyCapability',
'DiffusionDefaultViewCapability' => 'PhabricatorPolicyCapability',
'DiffusionDiffController' => 'DiffusionController',
'DiffusionDiffInlineCommentQuery' => 'PhabricatorDiffInlineCommentQuery',
'DiffusionDiffQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionDoorkeeperCommitFeedStoryPublisher' => 'DoorkeeperFeedStoryPublisher',
'DiffusionEmptyResultView' => 'DiffusionView',
'DiffusionExistsQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionExternalController' => 'DiffusionController',
'DiffusionExternalSymbolQuery' => 'Phobject',
'DiffusionExternalSymbolsSource' => 'Phobject',
'DiffusionFileContent' => 'Phobject',
'DiffusionFileContentQuery' => 'DiffusionQuery',
'DiffusionFileContentQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionFindSymbolsConduitAPIMethod' => 'DiffusionConduitAPIMethod',
'DiffusionGetCommitsConduitAPIMethod' => 'DiffusionConduitAPIMethod',
'DiffusionGetLintMessagesConduitAPIMethod' => 'DiffusionConduitAPIMethod',
'DiffusionGetRecentCommitsByPathConduitAPIMethod' => 'DiffusionConduitAPIMethod',
'DiffusionGitBranch' => 'Phobject',
'DiffusionGitBranchTestCase' => 'PhabricatorTestCase',
'DiffusionGitFileContentQuery' => 'DiffusionFileContentQuery',
'DiffusionGitFileContentQueryTestCase' => 'PhabricatorTestCase',
'DiffusionGitRawDiffQuery' => 'DiffusionRawDiffQuery',
'DiffusionGitReceivePackSSHWorkflow' => 'DiffusionGitSSHWorkflow',
'DiffusionGitRequest' => 'DiffusionRequest',
'DiffusionGitResponse' => 'AphrontResponse',
'DiffusionGitSSHWorkflow' => 'DiffusionSSHWorkflow',
'DiffusionGitUploadPackSSHWorkflow' => 'DiffusionGitSSHWorkflow',
'DiffusionHistoryController' => 'DiffusionController',
'DiffusionHistoryQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionHistoryTableView' => 'DiffusionView',
'DiffusionHovercardEventListener' => 'PhabricatorEventListener',
'DiffusionInlineCommentController' => 'PhabricatorInlineCommentController',
'DiffusionInlineCommentPreviewController' => 'PhabricatorInlineCommentPreviewController',
'DiffusionLastModifiedController' => 'DiffusionController',
'DiffusionLastModifiedQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionLintController' => 'DiffusionController',
'DiffusionLintCountQuery' => 'PhabricatorQuery',
'DiffusionLintDetailsController' => 'DiffusionController',
'DiffusionLintSaveRunner' => 'Phobject',
'DiffusionLookSoonConduitAPIMethod' => 'DiffusionConduitAPIMethod',
'DiffusionLowLevelCommitFieldsQuery' => 'DiffusionLowLevelQuery',
'DiffusionLowLevelCommitQuery' => 'DiffusionLowLevelQuery',
'DiffusionLowLevelGitRefQuery' => 'DiffusionLowLevelQuery',
'DiffusionLowLevelMercurialBranchesQuery' => 'DiffusionLowLevelQuery',
'DiffusionLowLevelMercurialPathsQuery' => 'DiffusionLowLevelQuery',
'DiffusionLowLevelParentsQuery' => 'DiffusionLowLevelQuery',
'DiffusionLowLevelQuery' => 'Phobject',
'DiffusionLowLevelResolveRefsQuery' => 'DiffusionLowLevelQuery',
'DiffusionMercurialFileContentQuery' => 'DiffusionFileContentQuery',
'DiffusionMercurialRawDiffQuery' => 'DiffusionRawDiffQuery',
'DiffusionMercurialRequest' => 'DiffusionRequest',
'DiffusionMercurialResponse' => 'AphrontResponse',
'DiffusionMercurialSSHWorkflow' => 'DiffusionSSHWorkflow',
'DiffusionMercurialServeSSHWorkflow' => 'DiffusionMercurialSSHWorkflow',
'DiffusionMercurialWireClientSSHProtocolChannel' => 'PhutilProtocolChannel',
'DiffusionMercurialWireProtocol' => 'Phobject',
'DiffusionMercurialWireSSHTestCase' => 'PhabricatorTestCase',
'DiffusionMergedCommitsQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionMirrorDeleteController' => 'DiffusionController',
'DiffusionMirrorEditController' => 'DiffusionController',
'DiffusionPathChange' => 'Phobject',
'DiffusionPathChangeQuery' => 'Phobject',
'DiffusionPathCompleteController' => 'DiffusionController',
'DiffusionPathIDQuery' => 'Phobject',
'DiffusionPathQuery' => 'Phobject',
'DiffusionPathQueryTestCase' => 'PhabricatorTestCase',
'DiffusionPathTreeController' => 'DiffusionController',
'DiffusionPathValidateController' => 'DiffusionController',
'DiffusionPhpExternalSymbolsSource' => 'DiffusionExternalSymbolsSource',
'DiffusionPreCommitContentAffectedFilesHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentAuthorHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentAuthorRawHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentBranchesHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentCommitterHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentCommitterRawHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentDiffContentAddedHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentDiffContentHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentDiffContentRemovedHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentDiffEnormousHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentHeraldField' => 'HeraldField',
'DiffusionPreCommitContentMergeHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentMessageHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentPusherHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentPusherIsCommitterHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentPusherProjectsHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentRepositoryHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentRepositoryProjectsHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentRevisionAcceptedHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentRevisionHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentRevisionReviewersHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentRevisionSubscribersHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitRefChangeHeraldField' => 'DiffusionPreCommitRefHeraldField',
'DiffusionPreCommitRefHeraldField' => 'HeraldField',
'DiffusionPreCommitRefHeraldFieldGroup' => 'HeraldFieldGroup',
'DiffusionPreCommitRefNameHeraldField' => 'DiffusionPreCommitRefHeraldField',
'DiffusionPreCommitRefPusherHeraldField' => 'DiffusionPreCommitRefHeraldField',
'DiffusionPreCommitRefPusherProjectsHeraldField' => 'DiffusionPreCommitRefHeraldField',
'DiffusionPreCommitRefRepositoryHeraldField' => 'DiffusionPreCommitRefHeraldField',
'DiffusionPreCommitRefRepositoryProjectsHeraldField' => 'DiffusionPreCommitRefHeraldField',
'DiffusionPreCommitRefTypeHeraldField' => 'DiffusionPreCommitRefHeraldField',
'DiffusionPushCapability' => 'PhabricatorPolicyCapability',
'DiffusionPushEventViewController' => 'DiffusionPushLogController',
'DiffusionPushLogController' => 'DiffusionController',
'DiffusionPushLogListController' => 'DiffusionPushLogController',
'DiffusionPushLogListView' => 'AphrontView',
'DiffusionPythonExternalSymbolsSource' => 'DiffusionExternalSymbolsSource',
'DiffusionQuery' => 'PhabricatorQuery',
'DiffusionQueryCommitsConduitAPIMethod' => 'DiffusionConduitAPIMethod',
'DiffusionQueryConduitAPIMethod' => 'DiffusionConduitAPIMethod',
'DiffusionQueryPathsConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionRawDiffQuery' => 'DiffusionQuery',
'DiffusionRawDiffQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionReadmeView' => 'DiffusionView',
'DiffusionRefNotFoundException' => 'Exception',
'DiffusionRefTableController' => 'DiffusionController',
'DiffusionRefsQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionRenameHistoryQuery' => 'Phobject',
'DiffusionRepositoryByIDRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'DiffusionRepositoryController' => 'DiffusionController',
'DiffusionRepositoryCreateController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryDatasource' => 'PhabricatorTypeaheadDatasource',
'DiffusionRepositoryDefaultController' => 'DiffusionController',
'DiffusionRepositoryEditActionsController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditActivateController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditBasicController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditBranchesController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditController' => 'DiffusionController',
'DiffusionRepositoryEditDangerousController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditDeleteController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditEncodingController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditHostingController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditMainController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditStagingController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditStorageController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditSubversionController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditUpdateController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryListController' => 'DiffusionController',
'DiffusionRepositoryNewController' => 'DiffusionController',
'DiffusionRepositoryPath' => 'Phobject',
'DiffusionRepositoryRef' => 'Phobject',
'DiffusionRepositoryRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'DiffusionRepositorySymbolsController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryTag' => 'Phobject',
'DiffusionRequest' => 'Phobject',
'DiffusionResolveRefsConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionResolveUserQuery' => 'Phobject',
'DiffusionSSHWorkflow' => 'PhabricatorSSHWorkflow',
'DiffusionSearchQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionServeController' => 'DiffusionController',
'DiffusionSetPasswordSettingsPanel' => 'PhabricatorSettingsPanel',
'DiffusionSetupException' => 'Exception',
'DiffusionSubversionSSHWorkflow' => 'DiffusionSSHWorkflow',
'DiffusionSubversionServeSSHWorkflow' => 'DiffusionSubversionSSHWorkflow',
'DiffusionSubversionWireProtocol' => 'Phobject',
'DiffusionSubversionWireProtocolTestCase' => 'PhabricatorTestCase',
'DiffusionSvnFileContentQuery' => 'DiffusionFileContentQuery',
'DiffusionSvnRawDiffQuery' => 'DiffusionRawDiffQuery',
'DiffusionSvnRequest' => 'DiffusionRequest',
'DiffusionSymbolController' => 'DiffusionController',
'DiffusionSymbolDatasource' => 'PhabricatorTypeaheadDatasource',
'DiffusionSymbolQuery' => 'PhabricatorOffsetPagedQuery',
'DiffusionTagListController' => 'DiffusionController',
'DiffusionTagListView' => 'DiffusionView',
'DiffusionTagsQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionURITestCase' => 'PhutilTestCase',
'DiffusionUpdateCoverageConduitAPIMethod' => 'DiffusionConduitAPIMethod',
'DiffusionView' => 'AphrontView',
'DivinerArticleAtomizer' => 'DivinerAtomizer',
'DivinerAtom' => 'Phobject',
'DivinerAtomCache' => 'DivinerDiskCache',
'DivinerAtomController' => 'DivinerController',
'DivinerAtomListController' => 'DivinerController',
'DivinerAtomPHIDType' => 'PhabricatorPHIDType',
'DivinerAtomQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'DivinerAtomRef' => 'Phobject',
'DivinerAtomSearchEngine' => 'PhabricatorApplicationSearchEngine',
'DivinerAtomSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'DivinerAtomizeWorkflow' => 'DivinerWorkflow',
'DivinerAtomizer' => 'Phobject',
'DivinerBookController' => 'DivinerController',
'DivinerBookDatasource' => 'PhabricatorTypeaheadDatasource',
'DivinerBookEditController' => 'DivinerController',
'DivinerBookItemView' => 'AphrontTagView',
'DivinerBookPHIDType' => 'PhabricatorPHIDType',
'DivinerBookQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'DivinerBookSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'DivinerController' => 'PhabricatorController',
'DivinerDAO' => 'PhabricatorLiskDAO',
'DivinerDefaultEditCapability' => 'PhabricatorPolicyCapability',
'DivinerDefaultRenderer' => 'DivinerRenderer',
'DivinerDefaultViewCapability' => 'PhabricatorPolicyCapability',
'DivinerDiskCache' => 'Phobject',
'DivinerFileAtomizer' => 'DivinerAtomizer',
'DivinerFindController' => 'DivinerController',
'DivinerGenerateWorkflow' => 'DivinerWorkflow',
'DivinerLiveAtom' => 'DivinerDAO',
'DivinerLiveBook' => array(
'DivinerDAO',
'PhabricatorPolicyInterface',
'PhabricatorProjectInterface',
'PhabricatorDestructibleInterface',
'PhabricatorApplicationTransactionInterface',
),
'DivinerLiveBookEditor' => 'PhabricatorApplicationTransactionEditor',
'DivinerLiveBookTransaction' => 'PhabricatorApplicationTransaction',
'DivinerLiveBookTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'DivinerLivePublisher' => 'DivinerPublisher',
'DivinerLiveSymbol' => array(
'DivinerDAO',
'PhabricatorPolicyInterface',
'PhabricatorMarkupInterface',
'PhabricatorDestructibleInterface',
),
'DivinerMainController' => 'DivinerController',
'DivinerPHPAtomizer' => 'DivinerAtomizer',
'DivinerParameterTableView' => 'AphrontTagView',
'DivinerPublishCache' => 'DivinerDiskCache',
'DivinerPublisher' => 'Phobject',
'DivinerRenderer' => 'Phobject',
'DivinerReturnTableView' => 'AphrontTagView',
'DivinerSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'DivinerSectionView' => 'AphrontTagView',
'DivinerStaticPublisher' => 'DivinerPublisher',
'DivinerSymbolRemarkupRule' => 'PhutilRemarkupRule',
'DivinerWorkflow' => 'PhabricatorManagementWorkflow',
'DoorkeeperAsanaFeedWorker' => 'DoorkeeperFeedWorker',
'DoorkeeperAsanaRemarkupRule' => 'DoorkeeperRemarkupRule',
'DoorkeeperBridge' => 'Phobject',
'DoorkeeperBridgeAsana' => 'DoorkeeperBridge',
'DoorkeeperBridgeJIRA' => 'DoorkeeperBridge',
'DoorkeeperBridgeJIRATestCase' => 'PhabricatorTestCase',
'DoorkeeperDAO' => 'PhabricatorLiskDAO',
'DoorkeeperExternalObject' => array(
'DoorkeeperDAO',
'PhabricatorPolicyInterface',
),
'DoorkeeperExternalObjectQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'DoorkeeperFeedStoryPublisher' => 'Phobject',
'DoorkeeperFeedWorker' => 'FeedPushWorker',
'DoorkeeperImportEngine' => 'Phobject',
'DoorkeeperJIRAFeedWorker' => 'DoorkeeperFeedWorker',
'DoorkeeperJIRARemarkupRule' => 'DoorkeeperRemarkupRule',
'DoorkeeperMissingLinkException' => 'Exception',
'DoorkeeperObjectRef' => 'Phobject',
'DoorkeeperRemarkupRule' => 'PhutilRemarkupRule',
'DoorkeeperSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'DoorkeeperTagView' => 'AphrontView',
'DoorkeeperTagsController' => 'PhabricatorController',
'DrydockAllocatorWorker' => 'PhabricatorWorker',
'DrydockApacheWebrootInterface' => 'DrydockWebrootInterface',
'DrydockBlueprint' => array(
'DrydockDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'PhabricatorCustomFieldInterface',
),
'DrydockBlueprintController' => 'DrydockController',
'DrydockBlueprintCoreCustomField' => array(
'DrydockBlueprintCustomField',
'PhabricatorStandardCustomFieldInterface',
),
'DrydockBlueprintCreateController' => 'DrydockBlueprintController',
'DrydockBlueprintCustomField' => 'PhabricatorCustomField',
'DrydockBlueprintDatasource' => 'PhabricatorTypeaheadDatasource',
'DrydockBlueprintEditController' => 'DrydockBlueprintController',
'DrydockBlueprintEditor' => 'PhabricatorApplicationTransactionEditor',
'DrydockBlueprintImplementation' => 'Phobject',
'DrydockBlueprintImplementationTestCase' => 'PhabricatorTestCase',
'DrydockBlueprintListController' => 'DrydockBlueprintController',
'DrydockBlueprintPHIDType' => 'PhabricatorPHIDType',
'DrydockBlueprintQuery' => 'DrydockQuery',
'DrydockBlueprintScopeGuard' => 'Phobject',
'DrydockBlueprintSearchEngine' => 'PhabricatorApplicationSearchEngine',
'DrydockBlueprintTransaction' => 'PhabricatorApplicationTransaction',
'DrydockBlueprintTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'DrydockBlueprintViewController' => 'DrydockBlueprintController',
'DrydockCommandInterface' => 'DrydockInterface',
'DrydockConsoleController' => 'DrydockController',
'DrydockConstants' => 'Phobject',
'DrydockController' => 'PhabricatorController',
'DrydockCreateBlueprintsCapability' => 'PhabricatorPolicyCapability',
'DrydockDAO' => 'PhabricatorLiskDAO',
'DrydockDefaultEditCapability' => 'PhabricatorPolicyCapability',
'DrydockDefaultViewCapability' => 'PhabricatorPolicyCapability',
'DrydockFilesystemInterface' => 'DrydockInterface',
'DrydockInterface' => 'Phobject',
'DrydockLease' => array(
'DrydockDAO',
'PhabricatorPolicyInterface',
),
'DrydockLeaseController' => 'DrydockController',
'DrydockLeaseDatasource' => 'PhabricatorTypeaheadDatasource',
'DrydockLeaseListController' => 'DrydockLeaseController',
'DrydockLeaseListView' => 'AphrontView',
'DrydockLeasePHIDType' => 'PhabricatorPHIDType',
'DrydockLeaseQuery' => 'DrydockQuery',
'DrydockLeaseReleaseController' => 'DrydockLeaseController',
'DrydockLeaseSearchEngine' => 'PhabricatorApplicationSearchEngine',
'DrydockLeaseStatus' => 'DrydockConstants',
'DrydockLeaseViewController' => 'DrydockLeaseController',
'DrydockLocalCommandInterface' => 'DrydockCommandInterface',
'DrydockLog' => array(
'DrydockDAO',
'PhabricatorPolicyInterface',
),
'DrydockLogController' => 'DrydockController',
'DrydockLogListController' => 'DrydockLogController',
'DrydockLogListView' => 'AphrontView',
'DrydockLogQuery' => 'DrydockQuery',
'DrydockLogSearchEngine' => 'PhabricatorApplicationSearchEngine',
'DrydockManagementCloseWorkflow' => 'DrydockManagementWorkflow',
'DrydockManagementCreateResourceWorkflow' => 'DrydockManagementWorkflow',
'DrydockManagementLeaseWorkflow' => 'DrydockManagementWorkflow',
'DrydockManagementReleaseWorkflow' => 'DrydockManagementWorkflow',
'DrydockManagementWorkflow' => 'PhabricatorManagementWorkflow',
'DrydockPreallocatedHostBlueprintImplementation' => 'DrydockBlueprintImplementation',
'DrydockQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'DrydockResource' => array(
'DrydockDAO',
'PhabricatorPolicyInterface',
),
'DrydockResourceCloseController' => 'DrydockResourceController',
'DrydockResourceController' => 'DrydockController',
'DrydockResourceDatasource' => 'PhabricatorTypeaheadDatasource',
'DrydockResourceListController' => 'DrydockResourceController',
'DrydockResourceListView' => 'AphrontView',
'DrydockResourcePHIDType' => 'PhabricatorPHIDType',
'DrydockResourceQuery' => 'DrydockQuery',
'DrydockResourceSearchEngine' => 'PhabricatorApplicationSearchEngine',
'DrydockResourceStatus' => 'DrydockConstants',
'DrydockResourceViewController' => 'DrydockResourceController',
'DrydockSFTPFilesystemInterface' => 'DrydockFilesystemInterface',
'DrydockSSHCommandInterface' => 'DrydockCommandInterface',
'DrydockWebrootInterface' => 'DrydockInterface',
'DrydockWorkingCopyBlueprintImplementation' => 'DrydockBlueprintImplementation',
'FeedConduitAPIMethod' => 'ConduitAPIMethod',
'FeedPublishConduitAPIMethod' => 'FeedConduitAPIMethod',
'FeedPublisherHTTPWorker' => 'FeedPushWorker',
'FeedPublisherWorker' => 'FeedPushWorker',
'FeedPushWorker' => 'PhabricatorWorker',
'FeedQueryConduitAPIMethod' => 'FeedConduitAPIMethod',
'FeedStoryNotificationGarbageCollector' => 'PhabricatorGarbageCollector',
'FileAllocateConduitAPIMethod' => 'FileConduitAPIMethod',
'FileConduitAPIMethod' => 'ConduitAPIMethod',
'FileCreateMailReceiver' => 'PhabricatorMailReceiver',
'FileDownloadConduitAPIMethod' => 'FileConduitAPIMethod',
'FileInfoConduitAPIMethod' => 'FileConduitAPIMethod',
'FileMailReceiver' => 'PhabricatorObjectMailReceiver',
'FileQueryChunksConduitAPIMethod' => 'FileConduitAPIMethod',
'FileReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'FileUploadChunkConduitAPIMethod' => 'FileConduitAPIMethod',
'FileUploadConduitAPIMethod' => 'FileConduitAPIMethod',
'FileUploadHashConduitAPIMethod' => 'FileConduitAPIMethod',
'FilesDefaultViewCapability' => 'PhabricatorPolicyCapability',
'FlagConduitAPIMethod' => 'ConduitAPIMethod',
'FlagDeleteConduitAPIMethod' => 'FlagConduitAPIMethod',
'FlagEditConduitAPIMethod' => 'FlagConduitAPIMethod',
'FlagQueryConduitAPIMethod' => 'FlagConduitAPIMethod',
'FundBacker' => array(
'FundDAO',
'PhabricatorPolicyInterface',
'PhabricatorApplicationTransactionInterface',
),
'FundBackerCart' => 'PhortuneCartImplementation',
'FundBackerEditor' => 'PhabricatorApplicationTransactionEditor',
'FundBackerListController' => 'FundController',
'FundBackerPHIDType' => 'PhabricatorPHIDType',
'FundBackerProduct' => 'PhortuneProductImplementation',
'FundBackerQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'FundBackerSearchEngine' => 'PhabricatorApplicationSearchEngine',
'FundBackerTransaction' => 'PhabricatorApplicationTransaction',
'FundBackerTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'FundController' => 'PhabricatorController',
'FundCreateInitiativesCapability' => 'PhabricatorPolicyCapability',
'FundDAO' => 'PhabricatorLiskDAO',
'FundDefaultViewCapability' => 'PhabricatorPolicyCapability',
'FundInitiative' => array(
'FundDAO',
'PhabricatorPolicyInterface',
'PhabricatorProjectInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorSubscribableInterface',
'PhabricatorMentionableInterface',
'PhabricatorFlaggableInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorDestructibleInterface',
),
'FundInitiativeBackController' => 'FundController',
'FundInitiativeCloseController' => 'FundController',
'FundInitiativeEditController' => 'FundController',
'FundInitiativeEditor' => 'PhabricatorApplicationTransactionEditor',
'FundInitiativeIndexer' => 'PhabricatorSearchDocumentIndexer',
'FundInitiativeListController' => 'FundController',
'FundInitiativePHIDType' => 'PhabricatorPHIDType',
'FundInitiativeQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'FundInitiativeRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'FundInitiativeReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'FundInitiativeSearchEngine' => 'PhabricatorApplicationSearchEngine',
'FundInitiativeTransaction' => 'PhabricatorApplicationTransaction',
'FundInitiativeTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'FundInitiativeViewController' => 'FundController',
'FundSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'HarbormasterArcLintBuildStepImplementation' => 'HarbormasterBuildStepImplementation',
'HarbormasterArcUnitBuildStepImplementation' => 'HarbormasterBuildStepImplementation',
'HarbormasterArtifact' => 'Phobject',
'HarbormasterAutotargetsTestCase' => 'PhabricatorTestCase',
'HarbormasterBuild' => array(
'HarbormasterDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
),
'HarbormasterBuildAbortedException' => 'Exception',
'HarbormasterBuildActionController' => 'HarbormasterController',
'HarbormasterBuildArcanistAutoplan' => 'HarbormasterBuildAutoplan',
'HarbormasterBuildArtifact' => array(
'HarbormasterDAO',
'PhabricatorPolicyInterface',
),
'HarbormasterBuildArtifactPHIDType' => 'PhabricatorPHIDType',
'HarbormasterBuildArtifactQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'HarbormasterBuildAutoplan' => 'Phobject',
'HarbormasterBuildCommand' => 'HarbormasterDAO',
'HarbormasterBuildDependencyDatasource' => 'PhabricatorTypeaheadDatasource',
'HarbormasterBuildEngine' => 'Phobject',
'HarbormasterBuildFailureException' => 'Exception',
'HarbormasterBuildGraph' => 'AbstractDirectedGraph',
'HarbormasterBuildLintMessage' => 'HarbormasterDAO',
'HarbormasterBuildLog' => array(
'HarbormasterDAO',
'PhabricatorPolicyInterface',
),
'HarbormasterBuildLogPHIDType' => 'PhabricatorPHIDType',
'HarbormasterBuildLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'HarbormasterBuildMessage' => array(
'HarbormasterDAO',
'PhabricatorPolicyInterface',
),
'HarbormasterBuildMessageQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'HarbormasterBuildPHIDType' => 'PhabricatorPHIDType',
'HarbormasterBuildPlan' => array(
'HarbormasterDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'PhabricatorSubscribableInterface',
),
'HarbormasterBuildPlanDatasource' => 'PhabricatorTypeaheadDatasource',
'HarbormasterBuildPlanEditor' => 'PhabricatorApplicationTransactionEditor',
'HarbormasterBuildPlanPHIDType' => 'PhabricatorPHIDType',
'HarbormasterBuildPlanQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'HarbormasterBuildPlanSearchEngine' => 'PhabricatorApplicationSearchEngine',
'HarbormasterBuildPlanTransaction' => 'PhabricatorApplicationTransaction',
'HarbormasterBuildPlanTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'HarbormasterBuildQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'HarbormasterBuildStep' => array(
'HarbormasterDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'PhabricatorCustomFieldInterface',
),
'HarbormasterBuildStepCoreCustomField' => array(
'HarbormasterBuildStepCustomField',
'PhabricatorStandardCustomFieldInterface',
),
'HarbormasterBuildStepCustomField' => 'PhabricatorCustomField',
'HarbormasterBuildStepEditor' => 'PhabricatorApplicationTransactionEditor',
'HarbormasterBuildStepGroup' => 'Phobject',
'HarbormasterBuildStepImplementation' => 'Phobject',
'HarbormasterBuildStepImplementationTestCase' => 'PhabricatorTestCase',
'HarbormasterBuildStepPHIDType' => 'PhabricatorPHIDType',
'HarbormasterBuildStepQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'HarbormasterBuildStepTransaction' => 'PhabricatorApplicationTransaction',
'HarbormasterBuildStepTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'HarbormasterBuildTarget' => array(
'HarbormasterDAO',
'PhabricatorPolicyInterface',
),
'HarbormasterBuildTargetPHIDType' => 'PhabricatorPHIDType',
'HarbormasterBuildTargetQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'HarbormasterBuildTransaction' => 'PhabricatorApplicationTransaction',
'HarbormasterBuildTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
'HarbormasterBuildTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'HarbormasterBuildUnitMessage' => 'HarbormasterDAO',
'HarbormasterBuildViewController' => 'HarbormasterController',
'HarbormasterBuildWorker' => 'HarbormasterWorker',
'HarbormasterBuildable' => array(
'HarbormasterDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'HarbormasterBuildableInterface',
),
'HarbormasterBuildableActionController' => 'HarbormasterController',
'HarbormasterBuildableListController' => 'HarbormasterController',
'HarbormasterBuildablePHIDType' => 'PhabricatorPHIDType',
'HarbormasterBuildableQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'HarbormasterBuildableSearchEngine' => 'PhabricatorApplicationSearchEngine',
'HarbormasterBuildableTransaction' => 'PhabricatorApplicationTransaction',
'HarbormasterBuildableTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
'HarbormasterBuildableTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'HarbormasterBuildableViewController' => 'HarbormasterController',
'HarbormasterBuiltinBuildStepGroup' => 'HarbormasterBuildStepGroup',
'HarbormasterCommandBuildStepImplementation' => 'HarbormasterBuildStepImplementation',
'HarbormasterConduitAPIMethod' => 'ConduitAPIMethod',
'HarbormasterController' => 'PhabricatorController',
'HarbormasterCreateArtifactConduitAPIMethod' => 'HarbormasterConduitAPIMethod',
'HarbormasterDAO' => 'PhabricatorLiskDAO',
'HarbormasterExternalBuildStepGroup' => 'HarbormasterBuildStepGroup',
'HarbormasterFileArtifact' => 'HarbormasterArtifact',
'HarbormasterHTTPRequestBuildStepImplementation' => 'HarbormasterBuildStepImplementation',
'HarbormasterHostArtifact' => 'HarbormasterArtifact',
'HarbormasterLeaseHostBuildStepImplementation' => 'HarbormasterBuildStepImplementation',
'HarbormasterLintMessagesController' => 'HarbormasterController',
'HarbormasterLintPropertyView' => 'AphrontView',
'HarbormasterManagePlansCapability' => 'PhabricatorPolicyCapability',
'HarbormasterManagementBuildWorkflow' => 'HarbormasterManagementWorkflow',
'HarbormasterManagementUpdateWorkflow' => 'HarbormasterManagementWorkflow',
'HarbormasterManagementWorkflow' => 'PhabricatorManagementWorkflow',
'HarbormasterMessageType' => 'Phobject',
'HarbormasterObject' => 'HarbormasterDAO',
'HarbormasterOtherBuildStepGroup' => 'HarbormasterBuildStepGroup',
'HarbormasterPlanController' => 'HarbormasterController',
'HarbormasterPlanDisableController' => 'HarbormasterPlanController',
'HarbormasterPlanEditController' => 'HarbormasterPlanController',
'HarbormasterPlanListController' => 'HarbormasterPlanController',
'HarbormasterPlanRunController' => 'HarbormasterController',
'HarbormasterPlanViewController' => 'HarbormasterPlanController',
'HarbormasterPrototypeBuildStepGroup' => 'HarbormasterBuildStepGroup',
'HarbormasterPublishFragmentBuildStepImplementation' => 'HarbormasterBuildStepImplementation',
'HarbormasterQueryAutotargetsConduitAPIMethod' => 'HarbormasterConduitAPIMethod',
'HarbormasterQueryBuildablesConduitAPIMethod' => 'HarbormasterConduitAPIMethod',
'HarbormasterQueryBuildsConduitAPIMethod' => 'HarbormasterConduitAPIMethod',
'HarbormasterRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'HarbormasterRunBuildPlansHeraldAction' => 'HeraldAction',
'HarbormasterSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'HarbormasterScratchTable' => 'HarbormasterDAO',
'HarbormasterSendMessageConduitAPIMethod' => 'HarbormasterConduitAPIMethod',
'HarbormasterSleepBuildStepImplementation' => 'HarbormasterBuildStepImplementation',
'HarbormasterStepAddController' => 'HarbormasterController',
'HarbormasterStepDeleteController' => 'HarbormasterController',
'HarbormasterStepEditController' => 'HarbormasterController',
'HarbormasterTargetEngine' => 'Phobject',
'HarbormasterTargetWorker' => 'HarbormasterWorker',
'HarbormasterTestBuildStepGroup' => 'HarbormasterBuildStepGroup',
'HarbormasterThrowExceptionBuildStep' => 'HarbormasterBuildStepImplementation',
'HarbormasterUIEventListener' => 'PhabricatorEventListener',
'HarbormasterURIArtifact' => 'HarbormasterArtifact',
'HarbormasterUnitMessagesController' => 'HarbormasterController',
'HarbormasterUnitPropertyView' => 'AphrontView',
'HarbormasterUploadArtifactBuildStepImplementation' => 'HarbormasterBuildStepImplementation',
'HarbormasterWaitForPreviousBuildStepImplementation' => 'HarbormasterBuildStepImplementation',
'HarbormasterWorker' => 'PhabricatorWorker',
'HeraldAction' => 'Phobject',
'HeraldActionGroup' => 'HeraldGroup',
'HeraldActionRecord' => 'HeraldDAO',
'HeraldAdapter' => 'Phobject',
'HeraldAlwaysField' => 'HeraldField',
'HeraldAnotherRuleField' => 'HeraldField',
'HeraldApplicationActionGroup' => 'HeraldActionGroup',
'HeraldApplyTranscript' => 'Phobject',
'HeraldBasicFieldGroup' => 'HeraldFieldGroup',
'HeraldCommitAdapter' => array(
'HeraldAdapter',
'HarbormasterBuildableAdapterInterface',
),
'HeraldCondition' => 'HeraldDAO',
'HeraldConditionTranscript' => 'Phobject',
'HeraldContentSourceField' => 'HeraldField',
'HeraldController' => 'PhabricatorController',
'HeraldDAO' => 'PhabricatorLiskDAO',
'HeraldDifferentialAdapter' => 'HeraldAdapter',
'HeraldDifferentialDiffAdapter' => 'HeraldDifferentialAdapter',
'HeraldDifferentialRevisionAdapter' => array(
'HeraldDifferentialAdapter',
'HarbormasterBuildableAdapterInterface',
),
'HeraldDisableController' => 'HeraldController',
'HeraldDoNothingAction' => 'HeraldAction',
'HeraldEditFieldGroup' => 'HeraldFieldGroup',
'HeraldEffect' => 'Phobject',
'HeraldEmptyFieldValue' => 'HeraldFieldValue',
'HeraldEngine' => 'Phobject',
'HeraldField' => 'Phobject',
'HeraldFieldGroup' => 'HeraldGroup',
'HeraldFieldTestCase' => 'PhutilTestCase',
'HeraldFieldValue' => 'Phobject',
'HeraldGroup' => 'Phobject',
'HeraldInvalidActionException' => 'Exception',
'HeraldInvalidConditionException' => 'Exception',
'HeraldManageGlobalRulesCapability' => 'PhabricatorPolicyCapability',
'HeraldManiphestTaskAdapter' => 'HeraldAdapter',
'HeraldNewController' => 'HeraldController',
'HeraldNewObjectField' => 'HeraldField',
'HeraldNotifyActionGroup' => 'HeraldActionGroup',
'HeraldObjectTranscript' => 'Phobject',
'HeraldPholioMockAdapter' => 'HeraldAdapter',
'HeraldPonderQuestionAdapter' => 'HeraldAdapter',
'HeraldPreCommitAdapter' => 'HeraldAdapter',
'HeraldPreCommitContentAdapter' => 'HeraldPreCommitAdapter',
'HeraldPreCommitRefAdapter' => 'HeraldPreCommitAdapter',
'HeraldPreventActionGroup' => 'HeraldActionGroup',
'HeraldProjectsField' => 'HeraldField',
'HeraldRecursiveConditionsException' => 'Exception',
'HeraldRelatedFieldGroup' => 'HeraldFieldGroup',
'HeraldRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'HeraldRepetitionPolicyConfig' => 'Phobject',
'HeraldRule' => array(
'HeraldDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorFlaggableInterface',
'PhabricatorPolicyInterface',
'PhabricatorDestructibleInterface',
),
'HeraldRuleController' => 'HeraldController',
'HeraldRuleEditor' => 'PhabricatorApplicationTransactionEditor',
'HeraldRuleListController' => 'HeraldController',
'HeraldRulePHIDType' => 'PhabricatorPHIDType',
'HeraldRuleQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'HeraldRuleSearchEngine' => 'PhabricatorApplicationSearchEngine',
'HeraldRuleTestCase' => 'PhabricatorTestCase',
'HeraldRuleTransaction' => 'PhabricatorApplicationTransaction',
'HeraldRuleTransactionComment' => 'PhabricatorApplicationTransactionComment',
'HeraldRuleTranscript' => 'Phobject',
'HeraldRuleTypeConfig' => 'Phobject',
'HeraldRuleViewController' => 'HeraldController',
'HeraldSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'HeraldSelectFieldValue' => 'HeraldFieldValue',
'HeraldSpaceField' => 'HeraldField',
'HeraldSubscribersField' => 'HeraldField',
'HeraldSupportActionGroup' => 'HeraldActionGroup',
'HeraldSupportFieldGroup' => 'HeraldFieldGroup',
'HeraldTestConsoleController' => 'HeraldController',
'HeraldTextFieldValue' => 'HeraldFieldValue',
'HeraldTokenizerFieldValue' => 'HeraldFieldValue',
'HeraldTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'HeraldTranscript' => array(
'HeraldDAO',
'PhabricatorPolicyInterface',
'PhabricatorDestructibleInterface',
),
'HeraldTranscriptController' => 'HeraldController',
'HeraldTranscriptGarbageCollector' => 'PhabricatorGarbageCollector',
'HeraldTranscriptListController' => 'HeraldController',
'HeraldTranscriptQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'HeraldTranscriptSearchEngine' => 'PhabricatorApplicationSearchEngine',
'HeraldTranscriptTestCase' => 'PhabricatorTestCase',
'HeraldUtilityActionGroup' => 'HeraldActionGroup',
'Javelin' => 'Phobject',
'JavelinReactorUIExample' => 'PhabricatorUIExample',
'JavelinUIExample' => 'PhabricatorUIExample',
'JavelinViewExampleServerView' => 'AphrontView',
'JavelinViewUIExample' => 'PhabricatorUIExample',
'LegalpadController' => 'PhabricatorController',
'LegalpadCreateDocumentsCapability' => 'PhabricatorPolicyCapability',
'LegalpadDAO' => 'PhabricatorLiskDAO',
'LegalpadDefaultEditCapability' => 'PhabricatorPolicyCapability',
'LegalpadDefaultViewCapability' => 'PhabricatorPolicyCapability',
'LegalpadDocument' => array(
'LegalpadDAO',
'PhabricatorPolicyInterface',
'PhabricatorSubscribableInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorDestructibleInterface',
),
'LegalpadDocumentBody' => array(
'LegalpadDAO',
'PhabricatorMarkupInterface',
),
'LegalpadDocumentCommentController' => 'LegalpadController',
'LegalpadDocumentDatasource' => 'PhabricatorTypeaheadDatasource',
'LegalpadDocumentDoneController' => 'LegalpadController',
'LegalpadDocumentEditController' => 'LegalpadController',
'LegalpadDocumentEditor' => 'PhabricatorApplicationTransactionEditor',
'LegalpadDocumentListController' => 'LegalpadController',
'LegalpadDocumentManageController' => 'LegalpadController',
'LegalpadDocumentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'LegalpadDocumentRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'LegalpadDocumentSearchEngine' => 'PhabricatorApplicationSearchEngine',
'LegalpadDocumentSignController' => 'LegalpadController',
'LegalpadDocumentSignature' => array(
'LegalpadDAO',
'PhabricatorPolicyInterface',
),
'LegalpadDocumentSignatureAddController' => 'LegalpadController',
'LegalpadDocumentSignatureListController' => 'LegalpadController',
'LegalpadDocumentSignatureQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'LegalpadDocumentSignatureSearchEngine' => 'PhabricatorApplicationSearchEngine',
'LegalpadDocumentSignatureVerificationController' => 'LegalpadController',
'LegalpadDocumentSignatureViewController' => 'LegalpadController',
'LegalpadMailReceiver' => 'PhabricatorObjectMailReceiver',
'LegalpadObjectNeedsSignatureEdgeType' => 'PhabricatorEdgeType',
'LegalpadReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'LegalpadRequireSignatureHeraldAction' => 'HeraldAction',
'LegalpadSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'LegalpadSignatureNeededByObjectEdgeType' => 'PhabricatorEdgeType',
'LegalpadTransaction' => 'PhabricatorApplicationTransaction',
'LegalpadTransactionComment' => 'PhabricatorApplicationTransactionComment',
'LegalpadTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'LegalpadTransactionView' => 'PhabricatorApplicationTransactionView',
'LiskChunkTestCase' => 'PhabricatorTestCase',
'LiskDAO' => 'Phobject',
'LiskDAOSet' => 'Phobject',
'LiskDAOTestCase' => 'PhabricatorTestCase',
'LiskEphemeralObjectException' => 'Exception',
'LiskFixtureTestCase' => 'PhabricatorTestCase',
'LiskIsolationTestCase' => 'PhabricatorTestCase',
'LiskIsolationTestDAO' => 'LiskDAO',
'LiskIsolationTestDAOException' => 'Exception',
'LiskMigrationIterator' => 'PhutilBufferedIterator',
'LiskRawMigrationIterator' => 'PhutilBufferedIterator',
'MacroConduitAPIMethod' => 'ConduitAPIMethod',
'MacroCreateMemeConduitAPIMethod' => 'MacroConduitAPIMethod',
'MacroQueryConduitAPIMethod' => 'MacroConduitAPIMethod',
'ManiphestAssignEmailCommand' => 'ManiphestEmailCommand',
'ManiphestAssigneeDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'ManiphestBatchEditController' => 'ManiphestController',
'ManiphestBulkEditCapability' => 'PhabricatorPolicyCapability',
'ManiphestClaimEmailCommand' => 'ManiphestEmailCommand',
'ManiphestCloseEmailCommand' => 'ManiphestEmailCommand',
'ManiphestConduitAPIMethod' => 'ConduitAPIMethod',
'ManiphestConfiguredCustomField' => array(
'ManiphestCustomField',
'PhabricatorStandardCustomFieldInterface',
),
'ManiphestConstants' => 'Phobject',
'ManiphestController' => 'PhabricatorController',
'ManiphestCreateMailReceiver' => 'PhabricatorMailReceiver',
'ManiphestCreateTaskConduitAPIMethod' => 'ManiphestConduitAPIMethod',
'ManiphestCustomField' => 'PhabricatorCustomField',
'ManiphestCustomFieldNumericIndex' => 'PhabricatorCustomFieldNumericIndexStorage',
'ManiphestCustomFieldStatusParser' => 'PhabricatorCustomFieldMonogramParser',
'ManiphestCustomFieldStatusParserTestCase' => 'PhabricatorTestCase',
'ManiphestCustomFieldStorage' => 'PhabricatorCustomFieldStorage',
'ManiphestCustomFieldStringIndex' => 'PhabricatorCustomFieldStringIndexStorage',
'ManiphestDAO' => 'PhabricatorLiskDAO',
'ManiphestDefaultEditCapability' => 'PhabricatorPolicyCapability',
'ManiphestDefaultViewCapability' => 'PhabricatorPolicyCapability',
'ManiphestEditAssignCapability' => 'PhabricatorPolicyCapability',
'ManiphestEditPoliciesCapability' => 'PhabricatorPolicyCapability',
'ManiphestEditPriorityCapability' => 'PhabricatorPolicyCapability',
'ManiphestEditProjectsCapability' => 'PhabricatorPolicyCapability',
'ManiphestEditStatusCapability' => 'PhabricatorPolicyCapability',
'ManiphestEmailCommand' => 'MetaMTAEmailTransactionCommand',
'ManiphestExcelDefaultFormat' => 'ManiphestExcelFormat',
'ManiphestExcelFormat' => 'Phobject',
'ManiphestExcelFormatTestCase' => 'PhabricatorTestCase',
'ManiphestExportController' => 'ManiphestController',
'ManiphestGetTaskTransactionsConduitAPIMethod' => 'ManiphestConduitAPIMethod',
'ManiphestHovercardEventListener' => 'PhabricatorEventListener',
'ManiphestInfoConduitAPIMethod' => 'ManiphestConduitAPIMethod',
'ManiphestNameIndex' => 'ManiphestDAO',
'ManiphestNameIndexEventListener' => 'PhabricatorEventListener',
'ManiphestPriorityEmailCommand' => 'ManiphestEmailCommand',
'ManiphestQueryConduitAPIMethod' => 'ManiphestConduitAPIMethod',
'ManiphestQueryStatusesConduitAPIMethod' => 'ManiphestConduitAPIMethod',
'ManiphestRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'ManiphestReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'ManiphestReportController' => 'ManiphestController',
'ManiphestSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'ManiphestSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'ManiphestStatusConfigOptionType' => 'PhabricatorConfigJSONOptionType',
'ManiphestStatusEmailCommand' => 'ManiphestEmailCommand',
'ManiphestSubpriorityController' => 'ManiphestController',
'ManiphestTask' => array(
'ManiphestDAO',
'PhabricatorSubscribableInterface',
'PhabricatorMarkupInterface',
'PhabricatorPolicyInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorFlaggableInterface',
'PhabricatorMentionableInterface',
'PhrequentTrackableInterface',
'PhabricatorCustomFieldInterface',
'PhabricatorDestructibleInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorProjectInterface',
'PhabricatorSpacesInterface',
),
'ManiphestTaskAssignHeraldAction' => 'HeraldAction',
'ManiphestTaskAssignOtherHeraldAction' => 'ManiphestTaskAssignHeraldAction',
'ManiphestTaskAssignSelfHeraldAction' => 'ManiphestTaskAssignHeraldAction',
'ManiphestTaskAssigneeHeraldField' => 'ManiphestTaskHeraldField',
'ManiphestTaskAuthorHeraldField' => 'ManiphestTaskHeraldField',
'ManiphestTaskAuthorPolicyRule' => 'PhabricatorPolicyRule',
'ManiphestTaskClosedStatusDatasource' => 'PhabricatorTypeaheadDatasource',
'ManiphestTaskDependedOnByTaskEdgeType' => 'PhabricatorEdgeType',
'ManiphestTaskDependsOnTaskEdgeType' => 'PhabricatorEdgeType',
'ManiphestTaskDescriptionHeraldField' => 'ManiphestTaskHeraldField',
'ManiphestTaskDetailController' => 'ManiphestController',
'ManiphestTaskEditBulkJobType' => 'PhabricatorWorkerBulkJobType',
'ManiphestTaskEditController' => 'ManiphestController',
'ManiphestTaskHasCommitEdgeType' => 'PhabricatorEdgeType',
'ManiphestTaskHasMockEdgeType' => 'PhabricatorEdgeType',
'ManiphestTaskHasRevisionEdgeType' => 'PhabricatorEdgeType',
'ManiphestTaskHeraldField' => 'HeraldField',
'ManiphestTaskHeraldFieldGroup' => 'HeraldFieldGroup',
'ManiphestTaskListController' => 'ManiphestController',
'ManiphestTaskListView' => 'ManiphestView',
'ManiphestTaskMailReceiver' => 'PhabricatorObjectMailReceiver',
'ManiphestTaskOpenStatusDatasource' => 'PhabricatorTypeaheadDatasource',
'ManiphestTaskPHIDType' => 'PhabricatorPHIDType',
'ManiphestTaskPriority' => 'ManiphestConstants',
'ManiphestTaskPriorityDatasource' => 'PhabricatorTypeaheadDatasource',
'ManiphestTaskPriorityHeraldField' => 'ManiphestTaskHeraldField',
'ManiphestTaskQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'ManiphestTaskResultListView' => 'ManiphestView',
'ManiphestTaskSearchEngine' => 'PhabricatorApplicationSearchEngine',
'ManiphestTaskStatus' => 'ManiphestConstants',
'ManiphestTaskStatusDatasource' => 'PhabricatorTypeaheadDatasource',
'ManiphestTaskStatusFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'ManiphestTaskStatusHeraldField' => 'ManiphestTaskHeraldField',
'ManiphestTaskStatusTestCase' => 'PhabricatorTestCase',
'ManiphestTaskTestCase' => 'PhabricatorTestCase',
'ManiphestTaskTitleHeraldField' => 'ManiphestTaskHeraldField',
'ManiphestTransaction' => 'PhabricatorApplicationTransaction',
'ManiphestTransactionComment' => 'PhabricatorApplicationTransactionComment',
'ManiphestTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
'ManiphestTransactionPreviewController' => 'ManiphestController',
'ManiphestTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'ManiphestTransactionSaveController' => 'ManiphestController',
'ManiphestUpdateConduitAPIMethod' => 'ManiphestConduitAPIMethod',
'ManiphestView' => 'AphrontView',
'MetaMTAEmailTransactionCommand' => 'Phobject',
'MetaMTAEmailTransactionCommandTestCase' => 'PhabricatorTestCase',
'MetaMTAMailReceivedGarbageCollector' => 'PhabricatorGarbageCollector',
'MetaMTAMailSentGarbageCollector' => 'PhabricatorGarbageCollector',
'MetaMTAReceivedMailStatus' => 'Phobject',
'MultimeterContext' => 'MultimeterDimension',
'MultimeterControl' => 'Phobject',
'MultimeterController' => 'PhabricatorController',
'MultimeterDAO' => 'PhabricatorLiskDAO',
'MultimeterDimension' => 'MultimeterDAO',
'MultimeterEvent' => 'MultimeterDAO',
'MultimeterEventGarbageCollector' => 'PhabricatorGarbageCollector',
'MultimeterHost' => 'MultimeterDimension',
'MultimeterLabel' => 'MultimeterDimension',
'MultimeterSampleController' => 'MultimeterController',
'MultimeterViewer' => 'MultimeterDimension',
'NuanceConduitAPIMethod' => 'ConduitAPIMethod',
'NuanceConsoleController' => 'NuanceController',
'NuanceController' => 'PhabricatorController',
'NuanceCreateItemConduitAPIMethod' => 'NuanceConduitAPIMethod',
'NuanceDAO' => 'PhabricatorLiskDAO',
'NuanceItem' => array(
'NuanceDAO',
'PhabricatorPolicyInterface',
'PhabricatorApplicationTransactionInterface',
),
'NuanceItemEditController' => 'NuanceController',
'NuanceItemEditor' => 'PhabricatorApplicationTransactionEditor',
'NuanceItemPHIDType' => 'PhabricatorPHIDType',
'NuanceItemQuery' => 'NuanceQuery',
'NuanceItemTransaction' => 'NuanceTransaction',
'NuanceItemTransactionComment' => 'PhabricatorApplicationTransactionComment',
'NuanceItemTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'NuanceItemViewController' => 'NuanceController',
'NuancePhabricatorFormSourceDefinition' => 'NuanceSourceDefinition',
'NuanceQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'NuanceQueue' => array(
'NuanceDAO',
'PhabricatorPolicyInterface',
'PhabricatorApplicationTransactionInterface',
),
'NuanceQueueDatasource' => 'PhabricatorTypeaheadDatasource',
'NuanceQueueEditController' => 'NuanceController',
'NuanceQueueEditor' => 'PhabricatorApplicationTransactionEditor',
'NuanceQueueListController' => 'NuanceController',
'NuanceQueuePHIDType' => 'PhabricatorPHIDType',
'NuanceQueueQuery' => 'NuanceQuery',
'NuanceQueueSearchEngine' => 'PhabricatorApplicationSearchEngine',
'NuanceQueueTransaction' => 'NuanceTransaction',
'NuanceQueueTransactionComment' => 'PhabricatorApplicationTransactionComment',
'NuanceQueueTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'NuanceQueueViewController' => 'NuanceController',
'NuanceRequestor' => array(
'NuanceDAO',
'PhabricatorPolicyInterface',
'PhabricatorApplicationTransactionInterface',
),
'NuanceRequestorEditController' => 'NuanceController',
'NuanceRequestorEditor' => 'PhabricatorApplicationTransactionEditor',
'NuanceRequestorPHIDType' => 'PhabricatorPHIDType',
'NuanceRequestorQuery' => 'NuanceQuery',
'NuanceRequestorSource' => 'NuanceDAO',
'NuanceRequestorTransaction' => 'NuanceTransaction',
'NuanceRequestorTransactionComment' => 'PhabricatorApplicationTransactionComment',
'NuanceRequestorTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'NuanceRequestorViewController' => 'NuanceController',
'NuanceSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'NuanceSource' => array(
'NuanceDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
),
'NuanceSourceActionController' => 'NuanceController',
'NuanceSourceCreateController' => 'NuanceController',
'NuanceSourceDefaultEditCapability' => 'PhabricatorPolicyCapability',
'NuanceSourceDefaultViewCapability' => 'PhabricatorPolicyCapability',
'NuanceSourceDefinition' => 'Phobject',
'NuanceSourceDefinitionTestCase' => 'PhabricatorTestCase',
'NuanceSourceEditController' => 'NuanceController',
'NuanceSourceEditor' => 'PhabricatorApplicationTransactionEditor',
'NuanceSourceListController' => 'NuanceController',
'NuanceSourceManageCapability' => 'PhabricatorPolicyCapability',
'NuanceSourcePHIDType' => 'PhabricatorPHIDType',
'NuanceSourceQuery' => 'NuanceQuery',
'NuanceSourceSearchEngine' => 'PhabricatorApplicationSearchEngine',
'NuanceSourceTransaction' => 'NuanceTransaction',
'NuanceSourceTransactionComment' => 'PhabricatorApplicationTransactionComment',
'NuanceSourceTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'NuanceSourceViewController' => 'NuanceController',
'NuanceTransaction' => 'PhabricatorApplicationTransaction',
'OwnersConduitAPIMethod' => 'ConduitAPIMethod',
'OwnersPackageReplyHandler' => 'PhabricatorMailReplyHandler',
'OwnersQueryConduitAPIMethod' => 'OwnersConduitAPIMethod',
'PHIDConduitAPIMethod' => 'ConduitAPIMethod',
'PHIDInfoConduitAPIMethod' => 'PHIDConduitAPIMethod',
'PHIDLookupConduitAPIMethod' => 'PHIDConduitAPIMethod',
'PHIDQueryConduitAPIMethod' => 'PHIDConduitAPIMethod',
'PHUI' => 'Phobject',
'PHUIActionPanelExample' => 'PhabricatorUIExample',
'PHUIActionPanelView' => 'AphrontTagView',
'PHUIBadgeBoxView' => 'AphrontTagView',
'PHUIBadgeExample' => 'PhabricatorUIExample',
'PHUIBadgeMiniView' => 'AphrontTagView',
'PHUIBadgeView' => 'AphrontTagView',
'PHUIBoxExample' => 'PhabricatorUIExample',
'PHUIBoxView' => 'AphrontTagView',
'PHUIButtonBarExample' => 'PhabricatorUIExample',
'PHUIButtonBarView' => 'AphrontTagView',
'PHUIButtonExample' => 'PhabricatorUIExample',
'PHUIButtonView' => 'AphrontTagView',
'PHUICalendarDayView' => 'AphrontView',
'PHUICalendarListView' => 'AphrontTagView',
'PHUICalendarMonthView' => 'AphrontView',
'PHUICalendarWidgetView' => 'AphrontTagView',
'PHUIColorPalletteExample' => 'PhabricatorUIExample',
'PHUICrumbView' => 'AphrontView',
'PHUICrumbsView' => 'AphrontView',
'PHUIDiffInlineCommentDetailView' => 'PHUIDiffInlineCommentView',
'PHUIDiffInlineCommentEditView' => 'PHUIDiffInlineCommentView',
'PHUIDiffInlineCommentRowScaffold' => 'AphrontView',
'PHUIDiffInlineCommentTableScaffold' => 'AphrontView',
'PHUIDiffInlineCommentUndoView' => 'PHUIDiffInlineCommentView',
'PHUIDiffInlineCommentView' => 'AphrontView',
'PHUIDiffOneUpInlineCommentRowScaffold' => 'PHUIDiffInlineCommentRowScaffold',
'PHUIDiffRevealIconView' => 'AphrontView',
'PHUIDiffTableOfContentsItemView' => 'AphrontView',
'PHUIDiffTableOfContentsListView' => 'AphrontView',
'PHUIDiffTwoUpInlineCommentRowScaffold' => 'PHUIDiffInlineCommentRowScaffold',
'PHUIDocumentExample' => 'PhabricatorUIExample',
'PHUIDocumentView' => 'AphrontTagView',
'PHUIFeedStoryExample' => 'PhabricatorUIExample',
'PHUIFeedStoryView' => 'AphrontView',
'PHUIFormDividerControl' => 'AphrontFormControl',
'PHUIFormFreeformDateControl' => 'AphrontFormControl',
'PHUIFormInsetView' => 'AphrontView',
'PHUIFormLayoutView' => 'AphrontView',
'PHUIFormMultiSubmitControl' => 'AphrontFormControl',
'PHUIFormPageView' => 'AphrontView',
'PHUIHandleListView' => 'AphrontTagView',
'PHUIHandleTagListView' => 'AphrontTagView',
'PHUIHandleView' => 'AphrontView',
'PHUIHeaderView' => 'AphrontTagView',
'PHUIIconExample' => 'PhabricatorUIExample',
'PHUIIconView' => 'AphrontTagView',
'PHUIImageMaskExample' => 'PhabricatorUIExample',
'PHUIImageMaskView' => 'AphrontTagView',
'PHUIInfoExample' => 'PhabricatorUIExample',
'PHUIInfoPanelExample' => 'PhabricatorUIExample',
'PHUIInfoPanelView' => 'AphrontView',
'PHUIInfoView' => 'AphrontView',
'PHUIListExample' => 'PhabricatorUIExample',
'PHUIListItemView' => 'AphrontTagView',
'PHUIListView' => 'AphrontTagView',
'PHUIListViewTestCase' => 'PhabricatorTestCase',
'PHUIObjectBoxView' => 'AphrontView',
'PHUIObjectItemListExample' => 'PhabricatorUIExample',
'PHUIObjectItemListView' => 'AphrontTagView',
'PHUIObjectItemView' => 'AphrontTagView',
'PHUIPagedFormView' => 'AphrontView',
'PHUIPagerView' => 'AphrontView',
'PHUIPinboardItemView' => 'AphrontView',
'PHUIPinboardView' => 'AphrontView',
'PHUIPropertyGroupView' => 'AphrontTagView',
'PHUIPropertyListExample' => 'PhabricatorUIExample',
'PHUIPropertyListView' => 'AphrontView',
'PHUIRemarkupPreviewPanel' => 'AphrontTagView',
'PHUISpacesNamespaceContextView' => 'AphrontView',
'PHUIStatusItemView' => 'AphrontTagView',
'PHUIStatusListView' => 'AphrontTagView',
'PHUITagExample' => 'PhabricatorUIExample',
'PHUITagView' => 'AphrontTagView',
'PHUITextExample' => 'PhabricatorUIExample',
'PHUITextView' => 'AphrontTagView',
'PHUITimelineEventView' => 'AphrontView',
'PHUITimelineExample' => 'PhabricatorUIExample',
'PHUITimelineView' => 'AphrontView',
'PHUITwoColumnView' => 'AphrontTagView',
'PHUITypeaheadExample' => 'PhabricatorUIExample',
'PHUIWorkboardView' => 'AphrontTagView',
'PHUIWorkpanelView' => 'AphrontTagView',
'PassphraseAbstractKey' => 'Phobject',
'PassphraseConduitAPIMethod' => 'ConduitAPIMethod',
'PassphraseController' => 'PhabricatorController',
'PassphraseCredential' => array(
'PassphraseDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'PhabricatorFlaggableInterface',
'PhabricatorSubscribableInterface',
'PhabricatorDestructibleInterface',
'PhabricatorSpacesInterface',
),
'PassphraseCredentialAuthorPolicyRule' => 'PhabricatorPolicyRule',
'PassphraseCredentialConduitController' => 'PassphraseController',
'PassphraseCredentialControl' => 'AphrontFormControl',
'PassphraseCredentialCreateController' => 'PassphraseController',
'PassphraseCredentialDestroyController' => 'PassphraseController',
'PassphraseCredentialEditController' => 'PassphraseController',
'PassphraseCredentialListController' => 'PassphraseController',
'PassphraseCredentialLockController' => 'PassphraseController',
'PassphraseCredentialPHIDType' => 'PhabricatorPHIDType',
'PassphraseCredentialPublicController' => 'PassphraseController',
'PassphraseCredentialQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PassphraseCredentialRevealController' => 'PassphraseController',
'PassphraseCredentialSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PassphraseCredentialTransaction' => 'PhabricatorApplicationTransaction',
'PassphraseCredentialTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
'PassphraseCredentialTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PassphraseCredentialType' => 'Phobject',
'PassphraseCredentialTypeTestCase' => 'PhabricatorTestCase',
'PassphraseCredentialViewController' => 'PassphraseController',
'PassphraseDAO' => 'PhabricatorLiskDAO',
'PassphraseDefaultEditCapability' => 'PhabricatorPolicyCapability',
'PassphraseDefaultViewCapability' => 'PhabricatorPolicyCapability',
'PassphraseNoteCredentialType' => 'PassphraseCredentialType',
'PassphrasePasswordCredentialType' => 'PassphraseCredentialType',
'PassphrasePasswordKey' => 'PassphraseAbstractKey',
'PassphraseQueryConduitAPIMethod' => 'PassphraseConduitAPIMethod',
'PassphraseRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'PassphraseSSHGeneratedKeyCredentialType' => 'PassphraseSSHPrivateKeyCredentialType',
'PassphraseSSHKey' => 'PassphraseAbstractKey',
'PassphraseSSHPrivateKeyCredentialType' => 'PassphraseCredentialType',
'PassphraseSSHPrivateKeyFileCredentialType' => 'PassphraseSSHPrivateKeyCredentialType',
'PassphraseSSHPrivateKeyTextCredentialType' => 'PassphraseSSHPrivateKeyCredentialType',
'PassphraseSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PassphraseSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'PassphraseSecret' => 'PassphraseDAO',
'PasteConduitAPIMethod' => 'ConduitAPIMethod',
'PasteCreateConduitAPIMethod' => 'PasteConduitAPIMethod',
'PasteCreateMailReceiver' => 'PhabricatorMailReceiver',
'PasteDefaultEditCapability' => 'PhabricatorPolicyCapability',
'PasteDefaultViewCapability' => 'PhabricatorPolicyCapability',
'PasteEmbedView' => 'AphrontView',
'PasteInfoConduitAPIMethod' => 'PasteConduitAPIMethod',
'PasteMailReceiver' => 'PhabricatorObjectMailReceiver',
'PasteQueryConduitAPIMethod' => 'PasteConduitAPIMethod',
'PasteReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PeopleBrowseUserDirectoryCapability' => 'PhabricatorPolicyCapability',
'PeopleCreateUsersCapability' => 'PhabricatorPolicyCapability',
'PeopleUserLogGarbageCollector' => 'PhabricatorGarbageCollector',
'Phabricator404Controller' => 'PhabricatorController',
'PhabricatorAWSConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorAccessControlTestCase' => 'PhabricatorTestCase',
'PhabricatorAccessLog' => 'Phobject',
'PhabricatorAccessLogConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorAccountSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorActionListView' => 'AphrontView',
'PhabricatorActionView' => 'AphrontView',
'PhabricatorActivitySettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorAdministratorsPolicyRule' => 'PhabricatorPolicyRule',
'PhabricatorAjaxRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler',
'PhabricatorAlmanacApplication' => 'PhabricatorApplication',
'PhabricatorAmazonAuthProvider' => 'PhabricatorOAuth2AuthProvider',
'PhabricatorAnchorView' => 'AphrontView',
'PhabricatorAphlictManagementDebugWorkflow' => 'PhabricatorAphlictManagementWorkflow',
'PhabricatorAphlictManagementRestartWorkflow' => 'PhabricatorAphlictManagementWorkflow',
'PhabricatorAphlictManagementStartWorkflow' => 'PhabricatorAphlictManagementWorkflow',
'PhabricatorAphlictManagementStatusWorkflow' => 'PhabricatorAphlictManagementWorkflow',
'PhabricatorAphlictManagementStopWorkflow' => 'PhabricatorAphlictManagementWorkflow',
'PhabricatorAphlictManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorAphlictSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorAphrontBarUIExample' => 'PhabricatorUIExample',
'PhabricatorAphrontViewTestCase' => 'PhabricatorTestCase',
'PhabricatorAppSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorApplication' => array(
'Phobject',
'PhabricatorPolicyInterface',
),
'PhabricatorApplicationApplicationPHIDType' => 'PhabricatorPHIDType',
'PhabricatorApplicationConfigOptions' => 'Phobject',
'PhabricatorApplicationConfigurationPanel' => 'Phobject',
'PhabricatorApplicationConfigurationPanelTestCase' => 'PhabricatorTestCase',
'PhabricatorApplicationDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorApplicationDetailViewController' => 'PhabricatorApplicationsController',
'PhabricatorApplicationEditController' => 'PhabricatorApplicationsController',
'PhabricatorApplicationEmailCommandsController' => 'PhabricatorApplicationsController',
'PhabricatorApplicationLaunchView' => 'AphrontTagView',
'PhabricatorApplicationPanelController' => 'PhabricatorApplicationsController',
'PhabricatorApplicationQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorApplicationSearchController' => 'PhabricatorSearchBaseController',
'PhabricatorApplicationSearchEngine' => 'Phobject',
'PhabricatorApplicationSearchEngineTestCase' => 'PhabricatorTestCase',
'PhabricatorApplicationSearchResultView' => 'Phobject',
'PhabricatorApplicationStatusView' => 'AphrontView',
'PhabricatorApplicationTestCase' => 'PhabricatorTestCase',
'PhabricatorApplicationTransaction' => array(
'PhabricatorLiskDAO',
'PhabricatorPolicyInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorApplicationTransactionComment' => array(
'PhabricatorLiskDAO',
'PhabricatorMarkupInterface',
'PhabricatorPolicyInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorApplicationTransactionCommentEditController' => 'PhabricatorApplicationTransactionController',
'PhabricatorApplicationTransactionCommentEditor' => 'PhabricatorEditor',
'PhabricatorApplicationTransactionCommentHistoryController' => 'PhabricatorApplicationTransactionController',
'PhabricatorApplicationTransactionCommentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorApplicationTransactionCommentQuoteController' => 'PhabricatorApplicationTransactionController',
'PhabricatorApplicationTransactionCommentRawController' => 'PhabricatorApplicationTransactionController',
'PhabricatorApplicationTransactionCommentRemoveController' => 'PhabricatorApplicationTransactionController',
'PhabricatorApplicationTransactionCommentView' => 'AphrontView',
'PhabricatorApplicationTransactionController' => 'PhabricatorController',
'PhabricatorApplicationTransactionDetailController' => 'PhabricatorApplicationTransactionController',
'PhabricatorApplicationTransactionEditor' => 'PhabricatorEditor',
'PhabricatorApplicationTransactionFeedStory' => 'PhabricatorFeedStory',
'PhabricatorApplicationTransactionNoEffectException' => 'Exception',
'PhabricatorApplicationTransactionNoEffectResponse' => 'AphrontProxyResponse',
'PhabricatorApplicationTransactionPublishWorker' => 'PhabricatorWorker',
'PhabricatorApplicationTransactionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorApplicationTransactionReplyHandler' => 'PhabricatorMailReplyHandler',
'PhabricatorApplicationTransactionResponse' => 'AphrontProxyResponse',
'PhabricatorApplicationTransactionShowOlderController' => 'PhabricatorApplicationTransactionController',
'PhabricatorApplicationTransactionStructureException' => 'Exception',
'PhabricatorApplicationTransactionTemplatedCommentQuery' => 'PhabricatorApplicationTransactionCommentQuery',
'PhabricatorApplicationTransactionTextDiffDetailView' => 'AphrontView',
'PhabricatorApplicationTransactionTransactionPHIDType' => 'PhabricatorPHIDType',
'PhabricatorApplicationTransactionValidationError' => 'Phobject',
'PhabricatorApplicationTransactionValidationException' => 'Exception',
'PhabricatorApplicationTransactionValidationResponse' => 'AphrontProxyResponse',
'PhabricatorApplicationTransactionValueController' => 'PhabricatorApplicationTransactionController',
'PhabricatorApplicationTransactionView' => 'AphrontView',
'PhabricatorApplicationUninstallController' => 'PhabricatorApplicationsController',
'PhabricatorApplicationsApplication' => 'PhabricatorApplication',
'PhabricatorApplicationsController' => 'PhabricatorController',
'PhabricatorApplicationsListController' => 'PhabricatorApplicationsController',
'PhabricatorAsanaAuthProvider' => 'PhabricatorOAuth2AuthProvider',
'PhabricatorAsanaConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorAsanaSubtaskHasObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorAsanaTaskHasObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorAuditActionConstants' => 'Phobject',
'PhabricatorAuditAddCommentController' => 'PhabricatorAuditController',
'PhabricatorAuditApplication' => 'PhabricatorApplication',
'PhabricatorAuditCommentEditor' => 'PhabricatorEditor',
'PhabricatorAuditCommitStatusConstants' => 'Phobject',
'PhabricatorAuditController' => 'PhabricatorController',
'PhabricatorAuditEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorAuditInlineComment' => array(
'Phobject',
'PhabricatorInlineCommentInterface',
),
'PhabricatorAuditListController' => 'PhabricatorAuditController',
'PhabricatorAuditListView' => 'AphrontView',
'PhabricatorAuditMailReceiver' => 'PhabricatorObjectMailReceiver',
'PhabricatorAuditManagementDeleteWorkflow' => 'PhabricatorAuditManagementWorkflow',
'PhabricatorAuditManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorAuditPreviewController' => 'PhabricatorAuditController',
'PhabricatorAuditReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PhabricatorAuditStatusConstants' => 'Phobject',
'PhabricatorAuditTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorAuditTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PhabricatorAuditTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorAuditTransactionView' => 'PhabricatorApplicationTransactionView',
'PhabricatorAuthAccountView' => 'AphrontView',
'PhabricatorAuthApplication' => 'PhabricatorApplication',
'PhabricatorAuthAuthFactorPHIDType' => 'PhabricatorPHIDType',
'PhabricatorAuthAuthProviderPHIDType' => 'PhabricatorPHIDType',
'PhabricatorAuthConduitAPIMethod' => 'ConduitAPIMethod',
'PhabricatorAuthConfirmLinkController' => 'PhabricatorAuthController',
'PhabricatorAuthController' => 'PhabricatorController',
'PhabricatorAuthDAO' => 'PhabricatorLiskDAO',
'PhabricatorAuthDisableController' => 'PhabricatorAuthProviderConfigController',
'PhabricatorAuthDowngradeSessionController' => 'PhabricatorAuthController',
'PhabricatorAuthEditController' => 'PhabricatorAuthProviderConfigController',
'PhabricatorAuthFactor' => 'Phobject',
'PhabricatorAuthFactorConfig' => 'PhabricatorAuthDAO',
'PhabricatorAuthFactorTestCase' => 'PhabricatorTestCase',
'PhabricatorAuthFinishController' => 'PhabricatorAuthController',
'PhabricatorAuthHighSecurityRequiredException' => 'Exception',
'PhabricatorAuthHighSecurityToken' => 'Phobject',
'PhabricatorAuthInvite' => array(
'PhabricatorUserDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorAuthInviteAccountException' => 'PhabricatorAuthInviteDialogException',
'PhabricatorAuthInviteAction' => 'Phobject',
'PhabricatorAuthInviteActionTableView' => 'AphrontView',
'PhabricatorAuthInviteController' => 'PhabricatorAuthController',
'PhabricatorAuthInviteDialogException' => 'PhabricatorAuthInviteException',
'PhabricatorAuthInviteEngine' => 'Phobject',
'PhabricatorAuthInviteException' => 'Exception',
'PhabricatorAuthInviteInvalidException' => 'PhabricatorAuthInviteDialogException',
'PhabricatorAuthInviteLoginException' => 'PhabricatorAuthInviteDialogException',
'PhabricatorAuthInvitePHIDType' => 'PhabricatorPHIDType',
'PhabricatorAuthInviteQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorAuthInviteRegisteredException' => 'PhabricatorAuthInviteException',
'PhabricatorAuthInviteSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorAuthInviteTestCase' => 'PhabricatorTestCase',
'PhabricatorAuthInviteVerifyException' => 'PhabricatorAuthInviteDialogException',
'PhabricatorAuthInviteWorker' => 'PhabricatorWorker',
'PhabricatorAuthLinkController' => 'PhabricatorAuthController',
'PhabricatorAuthListController' => 'PhabricatorAuthProviderConfigController',
'PhabricatorAuthLoginController' => 'PhabricatorAuthController',
'PhabricatorAuthLoginHandler' => 'Phobject',
'PhabricatorAuthManagementCachePKCS8Workflow' => 'PhabricatorAuthManagementWorkflow',
'PhabricatorAuthManagementLDAPWorkflow' => 'PhabricatorAuthManagementWorkflow',
'PhabricatorAuthManagementListFactorsWorkflow' => 'PhabricatorAuthManagementWorkflow',
'PhabricatorAuthManagementRecoverWorkflow' => 'PhabricatorAuthManagementWorkflow',
'PhabricatorAuthManagementRefreshWorkflow' => 'PhabricatorAuthManagementWorkflow',
'PhabricatorAuthManagementStripWorkflow' => 'PhabricatorAuthManagementWorkflow',
'PhabricatorAuthManagementTrustOAuthClientWorkflow' => 'PhabricatorAuthManagementWorkflow',
+ 'PhabricatorAuthManagementUnlimitWorkflow' => 'PhabricatorAuthManagementWorkflow',
'PhabricatorAuthManagementUntrustOAuthClientWorkflow' => 'PhabricatorAuthManagementWorkflow',
'PhabricatorAuthManagementVerifyWorkflow' => 'PhabricatorAuthManagementWorkflow',
'PhabricatorAuthManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorAuthNeedsApprovalController' => 'PhabricatorAuthController',
'PhabricatorAuthNeedsMultiFactorController' => 'PhabricatorAuthController',
'PhabricatorAuthNewController' => 'PhabricatorAuthProviderConfigController',
'PhabricatorAuthOldOAuthRedirectController' => 'PhabricatorAuthController',
'PhabricatorAuthOneTimeLoginController' => 'PhabricatorAuthController',
'PhabricatorAuthProvider' => 'Phobject',
'PhabricatorAuthProviderConfig' => array(
'PhabricatorAuthDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
),
'PhabricatorAuthProviderConfigController' => 'PhabricatorAuthController',
'PhabricatorAuthProviderConfigEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorAuthProviderConfigQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorAuthProviderConfigTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorAuthProviderConfigTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorAuthQueryPublicKeysConduitAPIMethod' => 'PhabricatorAuthConduitAPIMethod',
'PhabricatorAuthRegisterController' => 'PhabricatorAuthController',
'PhabricatorAuthRevokeTokenController' => 'PhabricatorAuthController',
'PhabricatorAuthSSHKey' => array(
'PhabricatorAuthDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorAuthSSHKeyController' => 'PhabricatorAuthController',
'PhabricatorAuthSSHKeyDeleteController' => 'PhabricatorAuthSSHKeyController',
'PhabricatorAuthSSHKeyEditController' => 'PhabricatorAuthSSHKeyController',
'PhabricatorAuthSSHKeyGenerateController' => 'PhabricatorAuthSSHKeyController',
'PhabricatorAuthSSHKeyQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorAuthSSHKeyTableView' => 'AphrontView',
'PhabricatorAuthSSHPublicKey' => 'Phobject',
'PhabricatorAuthSession' => array(
'PhabricatorAuthDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorAuthSessionEngine' => 'Phobject',
'PhabricatorAuthSessionGarbageCollector' => 'PhabricatorGarbageCollector',
'PhabricatorAuthSessionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorAuthSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorAuthStartController' => 'PhabricatorAuthController',
'PhabricatorAuthTemporaryToken' => array(
'PhabricatorAuthDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorAuthTemporaryTokenGarbageCollector' => 'PhabricatorGarbageCollector',
'PhabricatorAuthTemporaryTokenQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorAuthTerminateSessionController' => 'PhabricatorAuthController',
'PhabricatorAuthTryFactorAction' => 'PhabricatorSystemAction',
'PhabricatorAuthUnlinkController' => 'PhabricatorAuthController',
'PhabricatorAuthValidateController' => 'PhabricatorAuthController',
'PhabricatorAuthenticationConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorAutoEventListener' => 'PhabricatorEventListener',
'PhabricatorBadgeHasRecipientEdgeType' => 'PhabricatorEdgeType',
'PhabricatorBadgesApplication' => 'PhabricatorApplication',
'PhabricatorBadgesBadge' => array(
'PhabricatorBadgesDAO',
'PhabricatorPolicyInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorSubscribableInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorFlaggableInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorBadgesCommentController' => 'PhabricatorBadgesController',
'PhabricatorBadgesController' => 'PhabricatorController',
'PhabricatorBadgesCreateCapability' => 'PhabricatorPolicyCapability',
'PhabricatorBadgesDAO' => 'PhabricatorLiskDAO',
'PhabricatorBadgesDefaultEditCapability' => 'PhabricatorPolicyCapability',
'PhabricatorBadgesEditController' => 'PhabricatorBadgesController',
'PhabricatorBadgesEditIconController' => 'PhabricatorBadgesController',
'PhabricatorBadgesEditRecipientsController' => 'PhabricatorBadgesController',
'PhabricatorBadgesEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorBadgesIcon' => 'Phobject',
'PhabricatorBadgesListController' => 'PhabricatorBadgesController',
'PhabricatorBadgesMailReceiver' => 'PhabricatorObjectMailReceiver',
'PhabricatorBadgesPHIDType' => 'PhabricatorPHIDType',
'PhabricatorBadgesQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorBadgesRecipientsListView' => 'AphrontTagView',
'PhabricatorBadgesRemoveRecipientsController' => 'PhabricatorBadgesController',
'PhabricatorBadgesReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PhabricatorBadgesSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorBadgesSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorBadgesTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorBadgesTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PhabricatorBadgesTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorBadgesViewController' => 'PhabricatorBadgesController',
'PhabricatorBarePageUIExample' => 'PhabricatorUIExample',
'PhabricatorBarePageView' => 'AphrontPageView',
'PhabricatorBaseURISetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorBcryptPasswordHasher' => 'PhabricatorPasswordHasher',
'PhabricatorBinariesSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorBitbucketAuthProvider' => 'PhabricatorOAuth1AuthProvider',
'PhabricatorBot' => 'PhabricatorDaemon',
'PhabricatorBotChannel' => 'PhabricatorBotTarget',
'PhabricatorBotDebugLogHandler' => 'PhabricatorBotHandler',
'PhabricatorBotFeedNotificationHandler' => 'PhabricatorBotHandler',
'PhabricatorBotFlowdockProtocolAdapter' => 'PhabricatorStreamingProtocolAdapter',
'PhabricatorBotHandler' => 'Phobject',
'PhabricatorBotLogHandler' => 'PhabricatorBotHandler',
'PhabricatorBotMacroHandler' => 'PhabricatorBotHandler',
'PhabricatorBotMessage' => 'Phobject',
'PhabricatorBotObjectNameHandler' => 'PhabricatorBotHandler',
'PhabricatorBotSymbolHandler' => 'PhabricatorBotHandler',
'PhabricatorBotTarget' => 'Phobject',
'PhabricatorBotUser' => 'PhabricatorBotTarget',
'PhabricatorBotWhatsNewHandler' => 'PhabricatorBotHandler',
'PhabricatorBritishEnglishTranslation' => 'PhutilTranslation',
'PhabricatorBuiltinPatchList' => 'PhabricatorSQLPatchList',
'PhabricatorBusyUIExample' => 'PhabricatorUIExample',
'PhabricatorCacheDAO' => 'PhabricatorLiskDAO',
'PhabricatorCacheGeneralGarbageCollector' => 'PhabricatorGarbageCollector',
'PhabricatorCacheManagementPurgeWorkflow' => 'PhabricatorCacheManagementWorkflow',
'PhabricatorCacheManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorCacheMarkupGarbageCollector' => 'PhabricatorGarbageCollector',
'PhabricatorCacheSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorCacheSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorCacheSpec' => 'Phobject',
'PhabricatorCacheTTLGarbageCollector' => 'PhabricatorGarbageCollector',
'PhabricatorCaches' => 'Phobject',
'PhabricatorCachesTestCase' => 'PhabricatorTestCase',
'PhabricatorCalendarApplication' => 'PhabricatorApplication',
'PhabricatorCalendarController' => 'PhabricatorController',
'PhabricatorCalendarDAO' => 'PhabricatorLiskDAO',
'PhabricatorCalendarEvent' => array(
'PhabricatorCalendarDAO',
'PhabricatorPolicyInterface',
'PhabricatorProjectInterface',
'PhabricatorMarkupInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorSubscribableInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorDestructibleInterface',
'PhabricatorMentionableInterface',
'PhabricatorFlaggableInterface',
'PhabricatorSpacesInterface',
),
'PhabricatorCalendarEventCancelController' => 'PhabricatorCalendarController',
'PhabricatorCalendarEventCommentController' => 'PhabricatorCalendarController',
'PhabricatorCalendarEventDragController' => 'PhabricatorCalendarController',
'PhabricatorCalendarEventEditController' => 'PhabricatorCalendarController',
'PhabricatorCalendarEventEditIconController' => 'PhabricatorCalendarController',
'PhabricatorCalendarEventEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorCalendarEventEmailCommand' => 'MetaMTAEmailTransactionCommand',
'PhabricatorCalendarEventInvitee' => array(
'PhabricatorCalendarDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorCalendarEventInviteeQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorCalendarEventJoinController' => 'PhabricatorCalendarController',
'PhabricatorCalendarEventListController' => 'PhabricatorCalendarController',
'PhabricatorCalendarEventMailReceiver' => 'PhabricatorObjectMailReceiver',
'PhabricatorCalendarEventPHIDType' => 'PhabricatorPHIDType',
'PhabricatorCalendarEventQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorCalendarEventRSVPEmailCommand' => 'PhabricatorCalendarEventEmailCommand',
'PhabricatorCalendarEventSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorCalendarEventSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'PhabricatorCalendarEventTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorCalendarEventTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PhabricatorCalendarEventTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorCalendarEventViewController' => 'PhabricatorCalendarController',
'PhabricatorCalendarHoliday' => 'PhabricatorCalendarDAO',
'PhabricatorCalendarHolidayTestCase' => 'PhabricatorTestCase',
'PhabricatorCalendarIcon' => 'Phobject',
'PhabricatorCalendarRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'PhabricatorCalendarReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PhabricatorCalendarSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorCampfireProtocolAdapter' => 'PhabricatorStreamingProtocolAdapter',
'PhabricatorCelerityApplication' => 'PhabricatorApplication',
'PhabricatorCelerityTestCase' => 'PhabricatorTestCase',
'PhabricatorChangeParserTestCase' => 'PhabricatorWorkingCopyTestCase',
'PhabricatorChangesetResponse' => 'AphrontProxyResponse',
'PhabricatorChatLogApplication' => 'PhabricatorApplication',
'PhabricatorChatLogChannel' => array(
'PhabricatorChatLogDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorChatLogChannelListController' => 'PhabricatorChatLogController',
'PhabricatorChatLogChannelLogController' => 'PhabricatorChatLogController',
'PhabricatorChatLogChannelQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorChatLogController' => 'PhabricatorController',
'PhabricatorChatLogDAO' => 'PhabricatorLiskDAO',
'PhabricatorChatLogEvent' => array(
'PhabricatorChatLogDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorChatLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorChunkedFileStorageEngine' => 'PhabricatorFileStorageEngine',
'PhabricatorClusterConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorCommitBranchesField' => 'PhabricatorCommitCustomField',
'PhabricatorCommitCustomField' => 'PhabricatorCustomField',
'PhabricatorCommitMergedCommitsField' => 'PhabricatorCommitCustomField',
'PhabricatorCommitRepositoryField' => 'PhabricatorCommitCustomField',
'PhabricatorCommitSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorCommitTagsField' => 'PhabricatorCommitCustomField',
'PhabricatorCommonPasswords' => 'Phobject',
'PhabricatorConduitAPIController' => 'PhabricatorConduitController',
'PhabricatorConduitApplication' => 'PhabricatorApplication',
'PhabricatorConduitCertificateSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorConduitCertificateToken' => 'PhabricatorConduitDAO',
'PhabricatorConduitConnectionLog' => 'PhabricatorConduitDAO',
'PhabricatorConduitConsoleController' => 'PhabricatorConduitController',
'PhabricatorConduitController' => 'PhabricatorController',
'PhabricatorConduitDAO' => 'PhabricatorLiskDAO',
'PhabricatorConduitListController' => 'PhabricatorConduitController',
'PhabricatorConduitLogController' => 'PhabricatorConduitController',
'PhabricatorConduitLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorConduitMethodCallLog' => array(
'PhabricatorConduitDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorConduitMethodQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorConduitRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler',
'PhabricatorConduitSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorConduitTestCase' => 'PhabricatorTestCase',
'PhabricatorConduitToken' => array(
'PhabricatorConduitDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorConduitTokenController' => 'PhabricatorConduitController',
'PhabricatorConduitTokenEditController' => 'PhabricatorConduitController',
'PhabricatorConduitTokenHandshakeController' => 'PhabricatorConduitController',
'PhabricatorConduitTokenQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorConduitTokenTerminateController' => 'PhabricatorConduitController',
'PhabricatorConduitTokensSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorConfigAllController' => 'PhabricatorConfigController',
'PhabricatorConfigApplication' => 'PhabricatorApplication',
'PhabricatorConfigCacheController' => 'PhabricatorConfigController',
'PhabricatorConfigColumnSchema' => 'PhabricatorConfigStorageSchema',
'PhabricatorConfigConfigPHIDType' => 'PhabricatorPHIDType',
'PhabricatorConfigController' => 'PhabricatorController',
'PhabricatorConfigCoreSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorConfigDatabaseController' => 'PhabricatorConfigController',
'PhabricatorConfigDatabaseIssueController' => 'PhabricatorConfigDatabaseController',
'PhabricatorConfigDatabaseSchema' => 'PhabricatorConfigStorageSchema',
'PhabricatorConfigDatabaseSource' => 'PhabricatorConfigProxySource',
'PhabricatorConfigDatabaseStatusController' => 'PhabricatorConfigDatabaseController',
'PhabricatorConfigDefaultSource' => 'PhabricatorConfigProxySource',
'PhabricatorConfigDictionarySource' => 'PhabricatorConfigSource',
'PhabricatorConfigEdgeModule' => 'PhabricatorConfigModule',
'PhabricatorConfigEditController' => 'PhabricatorConfigController',
'PhabricatorConfigEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorConfigEntry' => array(
'PhabricatorConfigEntryDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
),
'PhabricatorConfigEntryDAO' => 'PhabricatorLiskDAO',
'PhabricatorConfigEntryQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorConfigFileSource' => 'PhabricatorConfigProxySource',
'PhabricatorConfigGroupController' => 'PhabricatorConfigController',
'PhabricatorConfigHistoryController' => 'PhabricatorConfigController',
'PhabricatorConfigIgnoreController' => 'PhabricatorConfigController',
'PhabricatorConfigIssueListController' => 'PhabricatorConfigController',
'PhabricatorConfigIssueViewController' => 'PhabricatorConfigController',
'PhabricatorConfigJSON' => 'Phobject',
'PhabricatorConfigJSONOptionType' => 'PhabricatorConfigOptionType',
'PhabricatorConfigKeySchema' => 'PhabricatorConfigStorageSchema',
'PhabricatorConfigListController' => 'PhabricatorConfigController',
'PhabricatorConfigLocalSource' => 'PhabricatorConfigProxySource',
'PhabricatorConfigManagementDeleteWorkflow' => 'PhabricatorConfigManagementWorkflow',
'PhabricatorConfigManagementGetWorkflow' => 'PhabricatorConfigManagementWorkflow',
'PhabricatorConfigManagementListWorkflow' => 'PhabricatorConfigManagementWorkflow',
'PhabricatorConfigManagementMigrateWorkflow' => 'PhabricatorConfigManagementWorkflow',
'PhabricatorConfigManagementSetWorkflow' => 'PhabricatorConfigManagementWorkflow',
'PhabricatorConfigManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorConfigModule' => 'Phobject',
'PhabricatorConfigModuleController' => 'PhabricatorConfigController',
'PhabricatorConfigOption' => array(
'Phobject',
'PhabricatorMarkupInterface',
),
'PhabricatorConfigOptionType' => 'Phobject',
'PhabricatorConfigPHIDModule' => 'PhabricatorConfigModule',
'PhabricatorConfigProxySource' => 'PhabricatorConfigSource',
'PhabricatorConfigPurgeCacheController' => 'PhabricatorConfigController',
'PhabricatorConfigRequestExceptionHandlerModule' => 'PhabricatorConfigModule',
'PhabricatorConfigResponse' => 'AphrontStandaloneHTMLResponse',
'PhabricatorConfigSchemaQuery' => 'Phobject',
'PhabricatorConfigSchemaSpec' => 'Phobject',
'PhabricatorConfigServerSchema' => 'PhabricatorConfigStorageSchema',
'PhabricatorConfigSiteModule' => 'PhabricatorConfigModule',
'PhabricatorConfigSiteSource' => 'PhabricatorConfigProxySource',
'PhabricatorConfigSource' => 'Phobject',
'PhabricatorConfigStackSource' => 'PhabricatorConfigSource',
'PhabricatorConfigStorageSchema' => 'Phobject',
'PhabricatorConfigTableSchema' => 'PhabricatorConfigStorageSchema',
'PhabricatorConfigTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorConfigTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorConfigValidationException' => 'Exception',
'PhabricatorConfigWelcomeController' => 'PhabricatorConfigController',
'PhabricatorConpherenceApplication' => 'PhabricatorApplication',
'PhabricatorConpherencePreferencesSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorConpherenceThreadPHIDType' => 'PhabricatorPHIDType',
'PhabricatorConsoleApplication' => 'PhabricatorApplication',
'PhabricatorContentSource' => 'Phobject',
'PhabricatorContentSourceView' => 'AphrontView',
'PhabricatorContributedToObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorController' => 'AphrontController',
'PhabricatorCookies' => 'Phobject',
'PhabricatorCoreConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorCountdown' => array(
'PhabricatorCountdownDAO',
'PhabricatorPolicyInterface',
'PhabricatorFlaggableInterface',
'PhabricatorSubscribableInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorSpacesInterface',
'PhabricatorProjectInterface',
),
'PhabricatorCountdownApplication' => 'PhabricatorApplication',
'PhabricatorCountdownCommentController' => 'PhabricatorCountdownController',
'PhabricatorCountdownController' => 'PhabricatorController',
'PhabricatorCountdownCountdownPHIDType' => 'PhabricatorPHIDType',
'PhabricatorCountdownDAO' => 'PhabricatorLiskDAO',
'PhabricatorCountdownDefaultEditCapability' => 'PhabricatorPolicyCapability',
'PhabricatorCountdownDefaultViewCapability' => 'PhabricatorPolicyCapability',
'PhabricatorCountdownDeleteController' => 'PhabricatorCountdownController',
'PhabricatorCountdownEditController' => 'PhabricatorCountdownController',
'PhabricatorCountdownEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorCountdownListController' => 'PhabricatorCountdownController',
'PhabricatorCountdownMailReceiver' => 'PhabricatorObjectMailReceiver',
'PhabricatorCountdownQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorCountdownRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'PhabricatorCountdownReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PhabricatorCountdownSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorCountdownSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorCountdownTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorCountdownTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PhabricatorCountdownTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorCountdownView' => 'AphrontTagView',
'PhabricatorCountdownViewController' => 'PhabricatorCountdownController',
'PhabricatorCredentialsUsedByObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorCursorPagedPolicyAwareQuery' => 'PhabricatorPolicyAwareQuery',
'PhabricatorCustomField' => 'Phobject',
'PhabricatorCustomFieldAttachment' => 'Phobject',
'PhabricatorCustomFieldConfigOptionType' => 'PhabricatorConfigOptionType',
'PhabricatorCustomFieldDataNotAvailableException' => 'Exception',
'PhabricatorCustomFieldHeraldField' => 'HeraldField',
'PhabricatorCustomFieldHeraldFieldGroup' => 'HeraldFieldGroup',
'PhabricatorCustomFieldImplementationIncompleteException' => 'Exception',
'PhabricatorCustomFieldIndexStorage' => 'PhabricatorLiskDAO',
'PhabricatorCustomFieldList' => 'Phobject',
'PhabricatorCustomFieldMonogramParser' => 'Phobject',
'PhabricatorCustomFieldNotAttachedException' => 'Exception',
'PhabricatorCustomFieldNotProxyException' => 'Exception',
'PhabricatorCustomFieldNumericIndexStorage' => 'PhabricatorCustomFieldIndexStorage',
'PhabricatorCustomFieldStorage' => 'PhabricatorLiskDAO',
'PhabricatorCustomFieldStringIndexStorage' => 'PhabricatorCustomFieldIndexStorage',
'PhabricatorCustomHeaderConfigType' => 'PhabricatorConfigOptionType',
'PhabricatorDaemon' => 'PhutilDaemon',
'PhabricatorDaemonBulkJobListController' => 'PhabricatorDaemonController',
'PhabricatorDaemonBulkJobMonitorController' => 'PhabricatorDaemonController',
'PhabricatorDaemonBulkJobViewController' => 'PhabricatorDaemonController',
'PhabricatorDaemonConsoleController' => 'PhabricatorDaemonController',
'PhabricatorDaemonController' => 'PhabricatorController',
'PhabricatorDaemonDAO' => 'PhabricatorLiskDAO',
'PhabricatorDaemonEventListener' => 'PhabricatorEventListener',
'PhabricatorDaemonLog' => array(
'PhabricatorDaemonDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorDaemonLogEvent' => 'PhabricatorDaemonDAO',
'PhabricatorDaemonLogEventGarbageCollector' => 'PhabricatorGarbageCollector',
'PhabricatorDaemonLogEventViewController' => 'PhabricatorDaemonController',
'PhabricatorDaemonLogEventsView' => 'AphrontView',
'PhabricatorDaemonLogGarbageCollector' => 'PhabricatorGarbageCollector',
'PhabricatorDaemonLogListController' => 'PhabricatorDaemonController',
'PhabricatorDaemonLogListView' => 'AphrontView',
'PhabricatorDaemonLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorDaemonLogViewController' => 'PhabricatorDaemonController',
'PhabricatorDaemonManagementDebugWorkflow' => 'PhabricatorDaemonManagementWorkflow',
'PhabricatorDaemonManagementLaunchWorkflow' => 'PhabricatorDaemonManagementWorkflow',
'PhabricatorDaemonManagementListWorkflow' => 'PhabricatorDaemonManagementWorkflow',
'PhabricatorDaemonManagementLogWorkflow' => 'PhabricatorDaemonManagementWorkflow',
'PhabricatorDaemonManagementReloadWorkflow' => 'PhabricatorDaemonManagementWorkflow',
'PhabricatorDaemonManagementRestartWorkflow' => 'PhabricatorDaemonManagementWorkflow',
'PhabricatorDaemonManagementStartWorkflow' => 'PhabricatorDaemonManagementWorkflow',
'PhabricatorDaemonManagementStatusWorkflow' => 'PhabricatorDaemonManagementWorkflow',
'PhabricatorDaemonManagementStopWorkflow' => 'PhabricatorDaemonManagementWorkflow',
'PhabricatorDaemonManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorDaemonReference' => 'Phobject',
'PhabricatorDaemonTaskGarbageCollector' => 'PhabricatorGarbageCollector',
'PhabricatorDaemonTasksTableView' => 'AphrontView',
'PhabricatorDaemonsApplication' => 'PhabricatorApplication',
'PhabricatorDaemonsSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorDailyRoutineTriggerClock' => 'PhabricatorTriggerClock',
'PhabricatorDashboard' => array(
'PhabricatorDashboardDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'PhabricatorFlaggableInterface',
'PhabricatorDestructibleInterface',
'PhabricatorProjectInterface',
),
'PhabricatorDashboardAddPanelController' => 'PhabricatorDashboardController',
'PhabricatorDashboardApplication' => 'PhabricatorApplication',
'PhabricatorDashboardController' => 'PhabricatorController',
'PhabricatorDashboardCopyController' => 'PhabricatorDashboardController',
'PhabricatorDashboardDAO' => 'PhabricatorLiskDAO',
'PhabricatorDashboardDashboardHasPanelEdgeType' => 'PhabricatorEdgeType',
'PhabricatorDashboardDashboardPHIDType' => 'PhabricatorPHIDType',
'PhabricatorDashboardEditController' => 'PhabricatorDashboardController',
'PhabricatorDashboardHistoryController' => 'PhabricatorDashboardController',
'PhabricatorDashboardInstall' => 'PhabricatorDashboardDAO',
'PhabricatorDashboardInstallController' => 'PhabricatorDashboardController',
'PhabricatorDashboardLayoutConfig' => 'Phobject',
'PhabricatorDashboardListController' => 'PhabricatorDashboardController',
'PhabricatorDashboardManageController' => 'PhabricatorDashboardController',
'PhabricatorDashboardMovePanelController' => 'PhabricatorDashboardController',
'PhabricatorDashboardPanel' => array(
'PhabricatorDashboardDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'PhabricatorCustomFieldInterface',
'PhabricatorFlaggableInterface',
'PhabricatorProjectInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorDashboardPanelArchiveController' => 'PhabricatorDashboardController',
'PhabricatorDashboardPanelCoreCustomField' => array(
'PhabricatorDashboardPanelCustomField',
'PhabricatorStandardCustomFieldInterface',
),
'PhabricatorDashboardPanelCustomField' => 'PhabricatorCustomField',
'PhabricatorDashboardPanelEditController' => 'PhabricatorDashboardController',
'PhabricatorDashboardPanelHasDashboardEdgeType' => 'PhabricatorEdgeType',
'PhabricatorDashboardPanelListController' => 'PhabricatorDashboardController',
'PhabricatorDashboardPanelPHIDType' => 'PhabricatorPHIDType',
'PhabricatorDashboardPanelQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorDashboardPanelRenderController' => 'PhabricatorDashboardController',
'PhabricatorDashboardPanelRenderingEngine' => 'Phobject',
'PhabricatorDashboardPanelSearchApplicationCustomField' => 'PhabricatorStandardCustomField',
'PhabricatorDashboardPanelSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorDashboardPanelSearchQueryCustomField' => 'PhabricatorStandardCustomField',
'PhabricatorDashboardPanelTabsCustomField' => 'PhabricatorStandardCustomField',
'PhabricatorDashboardPanelTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorDashboardPanelTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorDashboardPanelTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorDashboardPanelType' => 'Phobject',
'PhabricatorDashboardPanelViewController' => 'PhabricatorDashboardController',
'PhabricatorDashboardQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorDashboardQueryPanelType' => 'PhabricatorDashboardPanelType',
'PhabricatorDashboardRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'PhabricatorDashboardRemovePanelController' => 'PhabricatorDashboardController',
'PhabricatorDashboardRenderingEngine' => 'Phobject',
'PhabricatorDashboardSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorDashboardSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorDashboardTabsPanelType' => 'PhabricatorDashboardPanelType',
'PhabricatorDashboardTextPanelType' => 'PhabricatorDashboardPanelType',
'PhabricatorDashboardTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorDashboardTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorDashboardTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorDashboardUninstallController' => 'PhabricatorDashboardController',
'PhabricatorDashboardViewController' => 'PhabricatorDashboardController',
'PhabricatorDataCacheSpec' => 'PhabricatorCacheSpec',
'PhabricatorDataNotAttachedException' => 'Exception',
'PhabricatorDatabaseSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorDateTimeSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorDebugController' => 'PhabricatorController',
'PhabricatorDefaultRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler',
'PhabricatorDesktopNotificationsSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorDestructionEngine' => 'Phobject',
'PhabricatorDeveloperConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorDeveloperPreferencesSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorDiffInlineCommentQuery' => 'PhabricatorApplicationTransactionCommentQuery',
'PhabricatorDiffPreferencesSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorDifferenceEngine' => 'Phobject',
'PhabricatorDifferentialApplication' => 'PhabricatorApplication',
'PhabricatorDifferentialConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorDifferentialRevisionTestDataGenerator' => 'PhabricatorTestDataGenerator',
'PhabricatorDiffusionApplication' => 'PhabricatorApplication',
'PhabricatorDiffusionConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorDisabledUserController' => 'PhabricatorAuthController',
'PhabricatorDisplayPreferencesSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorDisqusAuthProvider' => 'PhabricatorOAuth2AuthProvider',
'PhabricatorDisqusConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorDivinerApplication' => 'PhabricatorApplication',
'PhabricatorDoorkeeperApplication' => 'PhabricatorApplication',
'PhabricatorDraft' => 'PhabricatorDraftDAO',
'PhabricatorDraftDAO' => 'PhabricatorLiskDAO',
'PhabricatorDrydockApplication' => 'PhabricatorApplication',
'PhabricatorEdgeConfig' => 'PhabricatorEdgeConstants',
'PhabricatorEdgeConstants' => 'Phobject',
'PhabricatorEdgeCycleException' => 'Exception',
'PhabricatorEdgeEditor' => 'Phobject',
'PhabricatorEdgeGraph' => 'AbstractDirectedGraph',
'PhabricatorEdgeQuery' => 'PhabricatorQuery',
'PhabricatorEdgeTestCase' => 'PhabricatorTestCase',
'PhabricatorEdgeType' => 'Phobject',
'PhabricatorEdgeTypeTestCase' => 'PhabricatorTestCase',
'PhabricatorEditor' => 'Phobject',
'PhabricatorElasticSearchEngine' => 'PhabricatorSearchEngine',
'PhabricatorElasticSearchSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorEmailAddressesSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorEmailFormatSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorEmailLoginController' => 'PhabricatorAuthController',
'PhabricatorEmailPreferencesSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorEmailVerificationController' => 'PhabricatorAuthController',
'PhabricatorEmbedFileRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'PhabricatorEmojiRemarkupRule' => 'PhutilRemarkupRule',
'PhabricatorEmptyQueryException' => 'Exception',
'PhabricatorEnv' => 'Phobject',
'PhabricatorEnvTestCase' => 'PhabricatorTestCase',
'PhabricatorEvent' => 'PhutilEvent',
'PhabricatorEventEngine' => 'Phobject',
'PhabricatorEventListener' => 'PhutilEventListener',
'PhabricatorEventType' => 'PhutilEventType',
'PhabricatorExampleEventListener' => 'PhabricatorEventListener',
'PhabricatorExtendingPhabricatorConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorExtensionsSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorExternalAccount' => array(
'PhabricatorUserDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorExternalAccountQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorExternalAccountsSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorExtraConfigSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorFacebookAuthProvider' => 'PhabricatorOAuth2AuthProvider',
'PhabricatorFactAggregate' => 'PhabricatorFactDAO',
'PhabricatorFactApplication' => 'PhabricatorApplication',
'PhabricatorFactChartController' => 'PhabricatorFactController',
'PhabricatorFactController' => 'PhabricatorController',
'PhabricatorFactCountEngine' => 'PhabricatorFactEngine',
'PhabricatorFactCursor' => 'PhabricatorFactDAO',
'PhabricatorFactDAO' => 'PhabricatorLiskDAO',
'PhabricatorFactDaemon' => 'PhabricatorDaemon',
'PhabricatorFactEngine' => 'Phobject',
'PhabricatorFactEngineTestCase' => 'PhabricatorTestCase',
'PhabricatorFactHomeController' => 'PhabricatorFactController',
'PhabricatorFactLastUpdatedEngine' => 'PhabricatorFactEngine',
'PhabricatorFactManagementAnalyzeWorkflow' => 'PhabricatorFactManagementWorkflow',
'PhabricatorFactManagementCursorsWorkflow' => 'PhabricatorFactManagementWorkflow',
'PhabricatorFactManagementDestroyWorkflow' => 'PhabricatorFactManagementWorkflow',
'PhabricatorFactManagementListWorkflow' => 'PhabricatorFactManagementWorkflow',
'PhabricatorFactManagementStatusWorkflow' => 'PhabricatorFactManagementWorkflow',
'PhabricatorFactManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorFactRaw' => 'PhabricatorFactDAO',
'PhabricatorFactSimpleSpec' => 'PhabricatorFactSpec',
'PhabricatorFactSpec' => 'Phobject',
'PhabricatorFactUpdateIterator' => 'PhutilBufferedIterator',
'PhabricatorFeedApplication' => 'PhabricatorApplication',
'PhabricatorFeedBuilder' => 'Phobject',
'PhabricatorFeedConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorFeedController' => 'PhabricatorController',
'PhabricatorFeedDAO' => 'PhabricatorLiskDAO',
'PhabricatorFeedDetailController' => 'PhabricatorFeedController',
'PhabricatorFeedListController' => 'PhabricatorFeedController',
'PhabricatorFeedManagementRepublishWorkflow' => 'PhabricatorFeedManagementWorkflow',
'PhabricatorFeedManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorFeedQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorFeedSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorFeedStory' => array(
'Phobject',
'PhabricatorPolicyInterface',
'PhabricatorMarkupInterface',
),
'PhabricatorFeedStoryData' => 'PhabricatorFeedDAO',
'PhabricatorFeedStoryNotification' => 'PhabricatorFeedDAO',
'PhabricatorFeedStoryPublisher' => 'Phobject',
'PhabricatorFeedStoryReference' => 'PhabricatorFeedDAO',
'PhabricatorFile' => array(
'PhabricatorFileDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorSubscribableInterface',
'PhabricatorFlaggableInterface',
'PhabricatorPolicyInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorFileBundleLoader' => 'Phobject',
'PhabricatorFileChunk' => array(
'PhabricatorFileDAO',
'PhabricatorPolicyInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorFileChunkIterator' => array(
'Phobject',
'Iterator',
),
'PhabricatorFileChunkQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorFileCommentController' => 'PhabricatorFileController',
'PhabricatorFileComposeController' => 'PhabricatorFileController',
'PhabricatorFileController' => 'PhabricatorController',
'PhabricatorFileDAO' => 'PhabricatorLiskDAO',
'PhabricatorFileDataController' => 'PhabricatorFileController',
'PhabricatorFileDeleteController' => 'PhabricatorFileController',
'PhabricatorFileDropUploadController' => 'PhabricatorFileController',
'PhabricatorFileEditController' => 'PhabricatorFileController',
'PhabricatorFileEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorFileFilePHIDType' => 'PhabricatorPHIDType',
'PhabricatorFileHasObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorFileImageMacro' => array(
'PhabricatorFileDAO',
'PhabricatorSubscribableInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorFlaggableInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorPolicyInterface',
),
'PhabricatorFileImageTransform' => 'PhabricatorFileTransform',
'PhabricatorFileInfoController' => 'PhabricatorFileController',
'PhabricatorFileLinkListView' => 'AphrontView',
'PhabricatorFileLinkView' => 'AphrontView',
'PhabricatorFileListController' => 'PhabricatorFileController',
'PhabricatorFileQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorFileSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorFileSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorFileStorageBlob' => 'PhabricatorFileDAO',
'PhabricatorFileStorageConfigurationException' => 'Exception',
'PhabricatorFileStorageEngine' => 'Phobject',
'PhabricatorFileStorageEngineTestCase' => 'PhabricatorTestCase',
'PhabricatorFileTemporaryGarbageCollector' => 'PhabricatorGarbageCollector',
'PhabricatorFileTestCase' => 'PhabricatorTestCase',
'PhabricatorFileTestDataGenerator' => 'PhabricatorTestDataGenerator',
'PhabricatorFileThumbnailTransform' => 'PhabricatorFileImageTransform',
'PhabricatorFileTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorFileTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PhabricatorFileTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorFileTransform' => 'Phobject',
'PhabricatorFileTransformController' => 'PhabricatorFileController',
'PhabricatorFileTransformListController' => 'PhabricatorFileController',
'PhabricatorFileTransformTestCase' => 'PhabricatorTestCase',
'PhabricatorFileUploadController' => 'PhabricatorFileController',
'PhabricatorFileUploadDialogController' => 'PhabricatorFileController',
'PhabricatorFileUploadException' => 'Exception',
'PhabricatorFileinfoSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorFilesApplication' => 'PhabricatorApplication',
'PhabricatorFilesApplicationStorageEnginePanel' => 'PhabricatorApplicationConfigurationPanel',
'PhabricatorFilesConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorFilesManagementCatWorkflow' => 'PhabricatorFilesManagementWorkflow',
'PhabricatorFilesManagementCompactWorkflow' => 'PhabricatorFilesManagementWorkflow',
'PhabricatorFilesManagementEnginesWorkflow' => 'PhabricatorFilesManagementWorkflow',
'PhabricatorFilesManagementMigrateWorkflow' => 'PhabricatorFilesManagementWorkflow',
'PhabricatorFilesManagementPurgeWorkflow' => 'PhabricatorFilesManagementWorkflow',
'PhabricatorFilesManagementRebuildWorkflow' => 'PhabricatorFilesManagementWorkflow',
'PhabricatorFilesManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorFilesOutboundRequestAction' => 'PhabricatorSystemAction',
'PhabricatorFlag' => array(
'PhabricatorFlagDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorFlagAddFlagHeraldAction' => 'HeraldAction',
'PhabricatorFlagColor' => 'PhabricatorFlagConstants',
'PhabricatorFlagConstants' => 'Phobject',
'PhabricatorFlagController' => 'PhabricatorController',
'PhabricatorFlagDAO' => 'PhabricatorLiskDAO',
'PhabricatorFlagDeleteController' => 'PhabricatorFlagController',
'PhabricatorFlagEditController' => 'PhabricatorFlagController',
'PhabricatorFlagListController' => 'PhabricatorFlagController',
'PhabricatorFlagQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorFlagSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorFlagSelectControl' => 'AphrontFormControl',
'PhabricatorFlaggableInterface' => 'PhabricatorPHIDInterface',
'PhabricatorFlagsApplication' => 'PhabricatorApplication',
'PhabricatorFlagsUIEventListener' => 'PhabricatorEventListener',
'PhabricatorFundApplication' => 'PhabricatorApplication',
'PhabricatorGDSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorGarbageCollector' => 'Phobject',
'PhabricatorGarbageCollectorConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorGestureUIExample' => 'PhabricatorUIExample',
'PhabricatorGitGraphStream' => 'PhabricatorRepositoryGraphStream',
'PhabricatorGitHubAuthProvider' => 'PhabricatorOAuth2AuthProvider',
'PhabricatorGlobalLock' => 'PhutilLock',
'PhabricatorGlobalUploadTargetView' => 'AphrontView',
'PhabricatorGoogleAuthProvider' => 'PhabricatorOAuth2AuthProvider',
'PhabricatorHandleList' => array(
'Phobject',
'Iterator',
'ArrayAccess',
'Countable',
),
'PhabricatorHandleObjectSelectorDataView' => 'Phobject',
'PhabricatorHandlePool' => 'Phobject',
'PhabricatorHandlePoolTestCase' => 'PhabricatorTestCase',
'PhabricatorHandleQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorHarbormasterApplication' => 'PhabricatorApplication',
'PhabricatorHarbormasterConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorHash' => 'Phobject',
'PhabricatorHashTestCase' => 'PhabricatorTestCase',
'PhabricatorHelpApplication' => 'PhabricatorApplication',
'PhabricatorHelpController' => 'PhabricatorController',
'PhabricatorHelpDocumentationController' => 'PhabricatorHelpController',
'PhabricatorHelpEditorProtocolController' => 'PhabricatorHelpController',
'PhabricatorHelpKeyboardShortcutController' => 'PhabricatorHelpController',
'PhabricatorHeraldApplication' => 'PhabricatorApplication',
'PhabricatorHighSecurityRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler',
'PhabricatorHomeApplication' => 'PhabricatorApplication',
'PhabricatorHomeController' => 'PhabricatorController',
'PhabricatorHomeMainController' => 'PhabricatorHomeController',
'PhabricatorHomePreferencesSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorHomeQuickCreateController' => 'PhabricatorHomeController',
'PhabricatorHovercardUIExample' => 'PhabricatorUIExample',
'PhabricatorHovercardView' => 'AphrontView',
'PhabricatorHunksManagementMigrateWorkflow' => 'PhabricatorHunksManagementWorkflow',
'PhabricatorHunksManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorIRCProtocolAdapter' => 'PhabricatorProtocolAdapter',
'PhabricatorIconRemarkupRule' => 'PhutilRemarkupRule',
'PhabricatorImageMacroRemarkupRule' => 'PhutilRemarkupRule',
'PhabricatorImageTransformer' => 'Phobject',
'PhabricatorImagemagickSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorInfrastructureTestCase' => 'PhabricatorTestCase',
'PhabricatorInlineCommentController' => 'PhabricatorController',
'PhabricatorInlineCommentInterface' => 'PhabricatorMarkupInterface',
'PhabricatorInlineCommentPreviewController' => 'PhabricatorController',
'PhabricatorInlineSummaryView' => 'AphrontView',
'PhabricatorInternationalizationManagementExtractWorkflow' => 'PhabricatorInternationalizationManagementWorkflow',
'PhabricatorInternationalizationManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorInvalidConfigSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorIteratedMD5PasswordHasher' => 'PhabricatorPasswordHasher',
'PhabricatorIteratedMD5PasswordHasherTestCase' => 'PhabricatorTestCase',
'PhabricatorJIRAAuthProvider' => 'PhabricatorOAuth1AuthProvider',
'PhabricatorJavelinLinter' => 'ArcanistLinter',
'PhabricatorJiraIssueHasObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorJumpNavHandler' => 'Phobject',
'PhabricatorKeyValueDatabaseCache' => 'PhutilKeyValueCache',
'PhabricatorLDAPAuthProvider' => 'PhabricatorAuthProvider',
'PhabricatorLegalpadApplication' => 'PhabricatorApplication',
'PhabricatorLegalpadConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorLegalpadDocumentPHIDType' => 'PhabricatorPHIDType',
'PhabricatorLegalpadSignaturePolicyRule' => 'PhabricatorPolicyRule',
'PhabricatorLibraryTestCase' => 'PhutilLibraryTestCase',
'PhabricatorLipsumArtist' => 'Phobject',
'PhabricatorLipsumGenerateWorkflow' => 'PhabricatorLipsumManagementWorkflow',
'PhabricatorLipsumManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorLipsumMondrianArtist' => 'PhabricatorLipsumArtist',
'PhabricatorLiskDAO' => 'LiskDAO',
'PhabricatorLiskSerializer' => 'Phobject',
'PhabricatorListFilterUIExample' => 'PhabricatorUIExample',
'PhabricatorLocalDiskFileStorageEngine' => 'PhabricatorFileStorageEngine',
'PhabricatorLocalTimeTestCase' => 'PhabricatorTestCase',
'PhabricatorLocaleScopeGuard' => 'Phobject',
'PhabricatorLocaleScopeGuardTestCase' => 'PhabricatorTestCase',
'PhabricatorLogTriggerAction' => 'PhabricatorTriggerAction',
'PhabricatorLogoutController' => 'PhabricatorAuthController',
'PhabricatorLunarPhasePolicyRule' => 'PhabricatorPolicyRule',
'PhabricatorMacroApplication' => 'PhabricatorApplication',
'PhabricatorMacroAudioController' => 'PhabricatorMacroController',
'PhabricatorMacroCommentController' => 'PhabricatorMacroController',
'PhabricatorMacroConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorMacroController' => 'PhabricatorController',
'PhabricatorMacroDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorMacroDisableController' => 'PhabricatorMacroController',
'PhabricatorMacroEditController' => 'PhabricatorMacroController',
'PhabricatorMacroEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorMacroListController' => 'PhabricatorMacroController',
'PhabricatorMacroMacroPHIDType' => 'PhabricatorPHIDType',
'PhabricatorMacroMailReceiver' => 'PhabricatorObjectMailReceiver',
'PhabricatorMacroManageCapability' => 'PhabricatorPolicyCapability',
'PhabricatorMacroMemeController' => 'PhabricatorMacroController',
'PhabricatorMacroMemeDialogController' => 'PhabricatorMacroController',
'PhabricatorMacroQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorMacroReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PhabricatorMacroSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorMacroTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorMacroTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PhabricatorMacroTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorMacroViewController' => 'PhabricatorMacroController',
'PhabricatorMailEmailHeraldField' => 'HeraldField',
'PhabricatorMailEmailHeraldFieldGroup' => 'HeraldFieldGroup',
'PhabricatorMailEmailSubjectHeraldField' => 'PhabricatorMailEmailHeraldField',
'PhabricatorMailImplementationAdapter' => 'Phobject',
'PhabricatorMailImplementationAmazonSESAdapter' => 'PhabricatorMailImplementationPHPMailerLiteAdapter',
'PhabricatorMailImplementationMailgunAdapter' => 'PhabricatorMailImplementationAdapter',
'PhabricatorMailImplementationPHPMailerAdapter' => 'PhabricatorMailImplementationAdapter',
'PhabricatorMailImplementationPHPMailerLiteAdapter' => 'PhabricatorMailImplementationAdapter',
'PhabricatorMailImplementationSendGridAdapter' => 'PhabricatorMailImplementationAdapter',
'PhabricatorMailImplementationTestAdapter' => 'PhabricatorMailImplementationAdapter',
'PhabricatorMailManagementListInboundWorkflow' => 'PhabricatorMailManagementWorkflow',
'PhabricatorMailManagementListOutboundWorkflow' => 'PhabricatorMailManagementWorkflow',
'PhabricatorMailManagementReceiveTestWorkflow' => 'PhabricatorMailManagementWorkflow',
'PhabricatorMailManagementResendWorkflow' => 'PhabricatorMailManagementWorkflow',
'PhabricatorMailManagementSendTestWorkflow' => 'PhabricatorMailManagementWorkflow',
'PhabricatorMailManagementShowInboundWorkflow' => 'PhabricatorMailManagementWorkflow',
'PhabricatorMailManagementShowOutboundWorkflow' => 'PhabricatorMailManagementWorkflow',
'PhabricatorMailManagementVolumeWorkflow' => 'PhabricatorMailManagementWorkflow',
'PhabricatorMailManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorMailOutboundMailHeraldAdapter' => 'HeraldAdapter',
'PhabricatorMailOutboundRoutingHeraldAction' => 'HeraldAction',
'PhabricatorMailOutboundRoutingSelfEmailHeraldAction' => 'PhabricatorMailOutboundRoutingHeraldAction',
'PhabricatorMailOutboundRoutingSelfNotificationHeraldAction' => 'PhabricatorMailOutboundRoutingHeraldAction',
'PhabricatorMailOutboundStatus' => 'Phobject',
'PhabricatorMailReceiver' => 'Phobject',
'PhabricatorMailReceiverTestCase' => 'PhabricatorTestCase',
'PhabricatorMailReplyHandler' => 'Phobject',
'PhabricatorMailRoutingRule' => 'Phobject',
'PhabricatorMailSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorMailTarget' => 'Phobject',
'PhabricatorMailgunConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorMainMenuSearchView' => 'AphrontView',
'PhabricatorMainMenuView' => 'AphrontView',
'PhabricatorManagementWorkflow' => 'PhutilArgumentWorkflow',
'PhabricatorManiphestApplication' => 'PhabricatorApplication',
'PhabricatorManiphestConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorManiphestTaskTestDataGenerator' => 'PhabricatorTestDataGenerator',
'PhabricatorMarkupCache' => 'PhabricatorCacheDAO',
'PhabricatorMarkupEngine' => 'Phobject',
'PhabricatorMarkupOneOff' => array(
'Phobject',
'PhabricatorMarkupInterface',
),
'PhabricatorMarkupPreviewController' => 'PhabricatorController',
'PhabricatorMemeRemarkupRule' => 'PhutilRemarkupRule',
'PhabricatorMentionRemarkupRule' => 'PhutilRemarkupRule',
'PhabricatorMercurialGraphStream' => 'PhabricatorRepositoryGraphStream',
'PhabricatorMetaMTAActor' => 'Phobject',
'PhabricatorMetaMTAActorQuery' => 'PhabricatorQuery',
'PhabricatorMetaMTAApplication' => 'PhabricatorApplication',
'PhabricatorMetaMTAApplicationEmail' => array(
'PhabricatorMetaMTADAO',
'PhabricatorPolicyInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorDestructibleInterface',
'PhabricatorSpacesInterface',
),
'PhabricatorMetaMTAApplicationEmailDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorMetaMTAApplicationEmailEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorMetaMTAApplicationEmailHeraldField' => 'HeraldField',
'PhabricatorMetaMTAApplicationEmailPHIDType' => 'PhabricatorPHIDType',
'PhabricatorMetaMTAApplicationEmailPanel' => 'PhabricatorApplicationConfigurationPanel',
'PhabricatorMetaMTAApplicationEmailQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorMetaMTAApplicationEmailTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorMetaMTAApplicationEmailTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorMetaMTAAttachment' => 'Phobject',
'PhabricatorMetaMTAConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorMetaMTAController' => 'PhabricatorController',
'PhabricatorMetaMTADAO' => 'PhabricatorLiskDAO',
'PhabricatorMetaMTAEmailBodyParser' => 'Phobject',
'PhabricatorMetaMTAEmailBodyParserTestCase' => 'PhabricatorTestCase',
'PhabricatorMetaMTAEmailHeraldAction' => 'HeraldAction',
'PhabricatorMetaMTAEmailOthersHeraldAction' => 'PhabricatorMetaMTAEmailHeraldAction',
'PhabricatorMetaMTAEmailSelfHeraldAction' => 'PhabricatorMetaMTAEmailHeraldAction',
'PhabricatorMetaMTAErrorMailAction' => 'PhabricatorSystemAction',
'PhabricatorMetaMTAMail' => array(
'PhabricatorMetaMTADAO',
'PhabricatorPolicyInterface',
),
'PhabricatorMetaMTAMailBody' => 'Phobject',
'PhabricatorMetaMTAMailBodyTestCase' => 'PhabricatorTestCase',
'PhabricatorMetaMTAMailHasRecipientEdgeType' => 'PhabricatorEdgeType',
'PhabricatorMetaMTAMailListController' => 'PhabricatorMetaMTAController',
'PhabricatorMetaMTAMailPHIDType' => 'PhabricatorPHIDType',
'PhabricatorMetaMTAMailQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorMetaMTAMailSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorMetaMTAMailSection' => 'Phobject',
'PhabricatorMetaMTAMailTestCase' => 'PhabricatorTestCase',
'PhabricatorMetaMTAMailViewController' => 'PhabricatorMetaMTAController',
'PhabricatorMetaMTAMailableDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorMetaMTAMailableFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorMetaMTAMailgunReceiveController' => 'PhabricatorMetaMTAController',
'PhabricatorMetaMTAMailingList' => 'PhabricatorMetaMTADAO',
'PhabricatorMetaMTAMemberQuery' => 'PhabricatorQuery',
'PhabricatorMetaMTAPermanentFailureException' => 'Exception',
'PhabricatorMetaMTAReceivedMail' => 'PhabricatorMetaMTADAO',
'PhabricatorMetaMTAReceivedMailProcessingException' => 'Exception',
'PhabricatorMetaMTAReceivedMailTestCase' => 'PhabricatorTestCase',
'PhabricatorMetaMTASchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorMetaMTASendGridReceiveController' => 'PhabricatorMetaMTAController',
'PhabricatorMetaMTAWorker' => 'PhabricatorWorker',
'PhabricatorMetronomicTriggerClock' => 'PhabricatorTriggerClock',
'PhabricatorMultiColumnUIExample' => 'PhabricatorUIExample',
'PhabricatorMultiFactorSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorMultimeterApplication' => 'PhabricatorApplication',
'PhabricatorMustVerifyEmailController' => 'PhabricatorAuthController',
'PhabricatorMySQLConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorMySQLFileStorageEngine' => 'PhabricatorFileStorageEngine',
'PhabricatorMySQLSearchEngine' => 'PhabricatorSearchEngine',
'PhabricatorMySQLSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorNamedQuery' => array(
'PhabricatorSearchDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorNamedQueryQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorNavigationRemarkupRule' => 'PhutilRemarkupRule',
'PhabricatorNeverTriggerClock' => 'PhabricatorTriggerClock',
'PhabricatorNotificationBuilder' => 'Phobject',
'PhabricatorNotificationClearController' => 'PhabricatorNotificationController',
'PhabricatorNotificationClient' => 'Phobject',
'PhabricatorNotificationConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorNotificationController' => 'PhabricatorController',
'PhabricatorNotificationIndividualController' => 'PhabricatorNotificationController',
'PhabricatorNotificationListController' => 'PhabricatorNotificationController',
'PhabricatorNotificationPanelController' => 'PhabricatorNotificationController',
'PhabricatorNotificationQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorNotificationSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorNotificationStatusController' => 'PhabricatorNotificationController',
'PhabricatorNotificationStatusView' => 'AphrontTagView',
'PhabricatorNotificationTestController' => 'PhabricatorNotificationController',
'PhabricatorNotificationTestFeedStory' => 'PhabricatorFeedStory',
'PhabricatorNotificationUIExample' => 'PhabricatorUIExample',
'PhabricatorNotificationsApplication' => 'PhabricatorApplication',
'PhabricatorNuanceApplication' => 'PhabricatorApplication',
'PhabricatorOAuth1AuthProvider' => 'PhabricatorOAuthAuthProvider',
'PhabricatorOAuth2AuthProvider' => 'PhabricatorOAuthAuthProvider',
'PhabricatorOAuthAuthProvider' => 'PhabricatorAuthProvider',
'PhabricatorOAuthClientAuthorization' => array(
'PhabricatorOAuthServerDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorOAuthClientAuthorizationQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorOAuthClientController' => 'PhabricatorOAuthServerController',
'PhabricatorOAuthClientDeleteController' => 'PhabricatorOAuthClientController',
'PhabricatorOAuthClientEditController' => 'PhabricatorOAuthClientController',
'PhabricatorOAuthClientListController' => 'PhabricatorOAuthClientController',
'PhabricatorOAuthClientSecretController' => 'PhabricatorOAuthClientController',
'PhabricatorOAuthClientViewController' => 'PhabricatorOAuthClientController',
'PhabricatorOAuthResponse' => 'AphrontResponse',
'PhabricatorOAuthServer' => 'Phobject',
'PhabricatorOAuthServerAccessToken' => 'PhabricatorOAuthServerDAO',
'PhabricatorOAuthServerApplication' => 'PhabricatorApplication',
'PhabricatorOAuthServerAuthController' => 'PhabricatorOAuthServerController',
'PhabricatorOAuthServerAuthorizationCode' => 'PhabricatorOAuthServerDAO',
'PhabricatorOAuthServerAuthorizationsSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorOAuthServerClient' => array(
'PhabricatorOAuthServerDAO',
'PhabricatorPolicyInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorOAuthServerClientAuthorizationPHIDType' => 'PhabricatorPHIDType',
'PhabricatorOAuthServerClientPHIDType' => 'PhabricatorPHIDType',
'PhabricatorOAuthServerClientQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorOAuthServerClientSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorOAuthServerController' => 'PhabricatorController',
'PhabricatorOAuthServerCreateClientsCapability' => 'PhabricatorPolicyCapability',
'PhabricatorOAuthServerDAO' => 'PhabricatorLiskDAO',
'PhabricatorOAuthServerScope' => 'Phobject',
'PhabricatorOAuthServerTestCase' => 'PhabricatorTestCase',
'PhabricatorOAuthServerTestController' => 'PhabricatorOAuthServerController',
'PhabricatorOAuthServerTokenController' => 'PhabricatorOAuthServerController',
'PhabricatorObjectHandle' => array(
'Phobject',
'PhabricatorPolicyInterface',
),
'PhabricatorObjectHasAsanaSubtaskEdgeType' => 'PhabricatorEdgeType',
'PhabricatorObjectHasAsanaTaskEdgeType' => 'PhabricatorEdgeType',
'PhabricatorObjectHasContributorEdgeType' => 'PhabricatorEdgeType',
'PhabricatorObjectHasFileEdgeType' => 'PhabricatorEdgeType',
'PhabricatorObjectHasJiraIssueEdgeType' => 'PhabricatorEdgeType',
'PhabricatorObjectHasSubscriberEdgeType' => 'PhabricatorEdgeType',
'PhabricatorObjectHasUnsubscriberEdgeType' => 'PhabricatorEdgeType',
'PhabricatorObjectHasWatcherEdgeType' => 'PhabricatorEdgeType',
'PhabricatorObjectListQuery' => 'Phobject',
'PhabricatorObjectListQueryTestCase' => 'PhabricatorTestCase',
'PhabricatorObjectMailReceiver' => 'PhabricatorMailReceiver',
'PhabricatorObjectMailReceiverTestCase' => 'PhabricatorTestCase',
'PhabricatorObjectMentionedByObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorObjectMentionsObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorObjectQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorObjectRemarkupRule' => 'PhutilRemarkupRule',
'PhabricatorObjectSelectorDialog' => 'Phobject',
'PhabricatorObjectUsesCredentialsEdgeType' => 'PhabricatorEdgeType',
'PhabricatorOffsetPagedQuery' => 'PhabricatorQuery',
'PhabricatorOneTimeTriggerClock' => 'PhabricatorTriggerClock',
'PhabricatorOpcodeCacheSpec' => 'PhabricatorCacheSpec',
'PhabricatorOwnerPathQuery' => 'Phobject',
'PhabricatorOwnersApplication' => 'PhabricatorApplication',
'PhabricatorOwnersConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorOwnersConfiguredCustomField' => array(
'PhabricatorOwnersCustomField',
'PhabricatorStandardCustomFieldInterface',
),
'PhabricatorOwnersController' => 'PhabricatorController',
'PhabricatorOwnersCustomField' => 'PhabricatorCustomField',
'PhabricatorOwnersCustomFieldNumericIndex' => 'PhabricatorCustomFieldNumericIndexStorage',
'PhabricatorOwnersCustomFieldStorage' => 'PhabricatorCustomFieldStorage',
'PhabricatorOwnersCustomFieldStringIndex' => 'PhabricatorCustomFieldStringIndexStorage',
'PhabricatorOwnersDAO' => 'PhabricatorLiskDAO',
'PhabricatorOwnersDetailController' => 'PhabricatorOwnersController',
'PhabricatorOwnersEditController' => 'PhabricatorOwnersController',
'PhabricatorOwnersListController' => 'PhabricatorOwnersController',
'PhabricatorOwnersOwner' => 'PhabricatorOwnersDAO',
'PhabricatorOwnersPackage' => array(
'PhabricatorOwnersDAO',
'PhabricatorPolicyInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorCustomFieldInterface',
),
'PhabricatorOwnersPackageDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorOwnersPackageFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorOwnersPackageOwnerDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorOwnersPackagePHIDType' => 'PhabricatorPHIDType',
'PhabricatorOwnersPackageQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorOwnersPackageSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorOwnersPackageTestCase' => 'PhabricatorTestCase',
'PhabricatorOwnersPackageTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorOwnersPackageTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorOwnersPackageTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorOwnersPath' => 'PhabricatorOwnersDAO',
'PhabricatorOwnersPathsController' => 'PhabricatorOwnersController',
'PhabricatorOwnersSearchField' => 'PhabricatorSearchTokenizerField',
'PhabricatorPHDConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorPHID' => 'Phobject',
'PhabricatorPHIDConstants' => 'Phobject',
'PhabricatorPHIDType' => 'Phobject',
'PhabricatorPHIDTypeTestCase' => 'PhutilTestCase',
'PhabricatorPHPASTApplication' => 'PhabricatorApplication',
'PhabricatorPHPConfigSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorPHPMailerConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorPagedFormUIExample' => 'PhabricatorUIExample',
'PhabricatorPagerUIExample' => 'PhabricatorUIExample',
'PhabricatorPassphraseApplication' => 'PhabricatorApplication',
'PhabricatorPasswordAuthProvider' => 'PhabricatorAuthProvider',
'PhabricatorPasswordHasher' => 'Phobject',
'PhabricatorPasswordHasherTestCase' => 'PhabricatorTestCase',
'PhabricatorPasswordHasherUnavailableException' => 'Exception',
'PhabricatorPasswordSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorPaste' => array(
'PhabricatorPasteDAO',
'PhabricatorSubscribableInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorFlaggableInterface',
'PhabricatorMentionableInterface',
'PhabricatorPolicyInterface',
'PhabricatorProjectInterface',
'PhabricatorDestructibleInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorSpacesInterface',
),
'PhabricatorPasteApplication' => 'PhabricatorApplication',
'PhabricatorPasteCommentController' => 'PhabricatorPasteController',
'PhabricatorPasteConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorPasteController' => 'PhabricatorController',
'PhabricatorPasteDAO' => 'PhabricatorLiskDAO',
'PhabricatorPasteEditController' => 'PhabricatorPasteController',
'PhabricatorPasteEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorPasteListController' => 'PhabricatorPasteController',
'PhabricatorPastePastePHIDType' => 'PhabricatorPHIDType',
'PhabricatorPasteQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorPasteRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'PhabricatorPasteSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorPasteSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorPasteTestDataGenerator' => 'PhabricatorTestDataGenerator',
'PhabricatorPasteTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorPasteTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PhabricatorPasteTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorPasteViewController' => 'PhabricatorPasteController',
'PhabricatorPathSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorPeopleAnyOwnerDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorPeopleApplication' => 'PhabricatorApplication',
'PhabricatorPeopleApproveController' => 'PhabricatorPeopleController',
'PhabricatorPeopleCalendarController' => 'PhabricatorPeopleController',
'PhabricatorPeopleController' => 'PhabricatorController',
'PhabricatorPeopleCreateController' => 'PhabricatorPeopleController',
'PhabricatorPeopleDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorPeopleDeleteController' => 'PhabricatorPeopleController',
'PhabricatorPeopleDisableController' => 'PhabricatorPeopleController',
'PhabricatorPeopleEmpowerController' => 'PhabricatorPeopleController',
'PhabricatorPeopleExternalPHIDType' => 'PhabricatorPHIDType',
'PhabricatorPeopleHovercardEventListener' => 'PhabricatorEventListener',
'PhabricatorPeopleInviteController' => 'PhabricatorPeopleController',
'PhabricatorPeopleInviteListController' => 'PhabricatorPeopleInviteController',
'PhabricatorPeopleInviteSendController' => 'PhabricatorPeopleInviteController',
'PhabricatorPeopleLdapController' => 'PhabricatorPeopleController',
'PhabricatorPeopleListController' => 'PhabricatorPeopleController',
'PhabricatorPeopleLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorPeopleLogSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorPeopleLogsController' => 'PhabricatorPeopleController',
'PhabricatorPeopleNewController' => 'PhabricatorPeopleController',
'PhabricatorPeopleNoOwnerDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorPeopleOwnerDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorPeopleProfileController' => 'PhabricatorPeopleController',
'PhabricatorPeopleProfileEditController' => 'PhabricatorPeopleController',
'PhabricatorPeopleProfilePictureController' => 'PhabricatorPeopleController',
'PhabricatorPeopleQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorPeopleRenameController' => 'PhabricatorPeopleController',
'PhabricatorPeopleSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorPeopleTestDataGenerator' => 'PhabricatorTestDataGenerator',
'PhabricatorPeopleTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorPeopleUserFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorPeopleUserPHIDType' => 'PhabricatorPHIDType',
'PhabricatorPeopleWelcomeController' => 'PhabricatorPeopleController',
'PhabricatorPersonaAuthProvider' => 'PhabricatorAuthProvider',
'PhabricatorPhabricatorAuthProvider' => 'PhabricatorOAuth2AuthProvider',
'PhabricatorPhameApplication' => 'PhabricatorApplication',
'PhabricatorPhameBlogPHIDType' => 'PhabricatorPHIDType',
'PhabricatorPhameConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorPhamePostPHIDType' => 'PhabricatorPHIDType',
'PhabricatorPhluxApplication' => 'PhabricatorApplication',
'PhabricatorPholioApplication' => 'PhabricatorApplication',
'PhabricatorPholioConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorPholioMockTestDataGenerator' => 'PhabricatorTestDataGenerator',
'PhabricatorPhortuneApplication' => 'PhabricatorApplication',
'PhabricatorPhortuneManagementInvoiceWorkflow' => 'PhabricatorPhortuneManagementWorkflow',
'PhabricatorPhortuneManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorPhragmentApplication' => 'PhabricatorApplication',
'PhabricatorPhrequentApplication' => 'PhabricatorApplication',
'PhabricatorPhrequentConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorPhrictionApplication' => 'PhabricatorApplication',
'PhabricatorPhrictionConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorPhurlApplication' => 'PhabricatorApplication',
'PhabricatorPhurlController' => 'PhabricatorController',
'PhabricatorPhurlDAO' => 'PhabricatorLiskDAO',
'PhabricatorPhurlSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorPhurlURL' => array(
'PhabricatorPhurlDAO',
'PhabricatorPolicyInterface',
'PhabricatorProjectInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorSubscribableInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorDestructibleInterface',
'PhabricatorMentionableInterface',
'PhabricatorFlaggableInterface',
'PhabricatorSpacesInterface',
),
'PhabricatorPhurlURLEditController' => 'PhabricatorPhurlController',
'PhabricatorPhurlURLEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorPhurlURLListController' => 'PhabricatorPhurlController',
'PhabricatorPhurlURLPHIDType' => 'PhabricatorPHIDType',
'PhabricatorPhurlURLQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorPhurlURLSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorPhurlURLTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorPhurlURLTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PhabricatorPhurlURLTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorPhurlURLViewController' => 'PhabricatorPhurlController',
'PhabricatorPlatformSite' => 'PhabricatorSite',
'PhabricatorPolicies' => 'PhabricatorPolicyConstants',
'PhabricatorPolicy' => array(
'PhabricatorPolicyDAO',
'PhabricatorPolicyInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorPolicyApplication' => 'PhabricatorApplication',
'PhabricatorPolicyAwareQuery' => 'PhabricatorOffsetPagedQuery',
'PhabricatorPolicyAwareTestQuery' => 'PhabricatorPolicyAwareQuery',
'PhabricatorPolicyCanEditCapability' => 'PhabricatorPolicyCapability',
'PhabricatorPolicyCanJoinCapability' => 'PhabricatorPolicyCapability',
'PhabricatorPolicyCanViewCapability' => 'PhabricatorPolicyCapability',
'PhabricatorPolicyCapability' => 'Phobject',
'PhabricatorPolicyCapabilityTestCase' => 'PhabricatorTestCase',
'PhabricatorPolicyConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorPolicyConstants' => 'Phobject',
'PhabricatorPolicyController' => 'PhabricatorController',
'PhabricatorPolicyDAO' => 'PhabricatorLiskDAO',
'PhabricatorPolicyDataTestCase' => 'PhabricatorTestCase',
'PhabricatorPolicyEditController' => 'PhabricatorPolicyController',
'PhabricatorPolicyException' => 'Exception',
'PhabricatorPolicyExplainController' => 'PhabricatorPolicyController',
'PhabricatorPolicyFilter' => 'Phobject',
'PhabricatorPolicyInterface' => 'PhabricatorPHIDInterface',
'PhabricatorPolicyManagementShowWorkflow' => 'PhabricatorPolicyManagementWorkflow',
'PhabricatorPolicyManagementUnlockWorkflow' => 'PhabricatorPolicyManagementWorkflow',
'PhabricatorPolicyManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorPolicyPHIDTypePolicy' => 'PhabricatorPHIDType',
'PhabricatorPolicyQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorPolicyRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler',
'PhabricatorPolicyRule' => 'Phobject',
'PhabricatorPolicyTestCase' => 'PhabricatorTestCase',
'PhabricatorPolicyTestObject' => array(
'Phobject',
'PhabricatorPolicyInterface',
'PhabricatorExtendedPolicyInterface',
),
'PhabricatorPolicyType' => 'PhabricatorPolicyConstants',
'PhabricatorPonderApplication' => 'PhabricatorApplication',
'PhabricatorProject' => array(
'PhabricatorProjectDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorFlaggableInterface',
'PhabricatorPolicyInterface',
'PhabricatorSubscribableInterface',
'PhabricatorCustomFieldInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorProjectAddHeraldAction' => 'PhabricatorProjectHeraldAction',
'PhabricatorProjectApplication' => 'PhabricatorApplication',
'PhabricatorProjectArchiveController' => 'PhabricatorProjectController',
'PhabricatorProjectBoardController' => 'PhabricatorProjectController',
'PhabricatorProjectBoardImportController' => 'PhabricatorProjectBoardController',
'PhabricatorProjectBoardReorderController' => 'PhabricatorProjectBoardController',
'PhabricatorProjectBoardViewController' => 'PhabricatorProjectBoardController',
'PhabricatorProjectColumn' => array(
'PhabricatorProjectDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorProjectColumnDetailController' => 'PhabricatorProjectBoardController',
'PhabricatorProjectColumnEditController' => 'PhabricatorProjectBoardController',
'PhabricatorProjectColumnHideController' => 'PhabricatorProjectBoardController',
'PhabricatorProjectColumnPHIDType' => 'PhabricatorPHIDType',
'PhabricatorProjectColumnPosition' => array(
'PhabricatorProjectDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorProjectColumnPositionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorProjectColumnQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorProjectColumnTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorProjectColumnTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorProjectColumnTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorProjectConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorProjectConfiguredCustomField' => array(
'PhabricatorProjectStandardCustomField',
'PhabricatorStandardCustomFieldInterface',
),
'PhabricatorProjectController' => 'PhabricatorController',
'PhabricatorProjectCustomField' => 'PhabricatorCustomField',
'PhabricatorProjectCustomFieldNumericIndex' => 'PhabricatorCustomFieldNumericIndexStorage',
'PhabricatorProjectCustomFieldStorage' => 'PhabricatorCustomFieldStorage',
'PhabricatorProjectCustomFieldStringIndex' => 'PhabricatorCustomFieldStringIndexStorage',
'PhabricatorProjectDAO' => 'PhabricatorLiskDAO',
'PhabricatorProjectDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorProjectDescriptionField' => 'PhabricatorProjectStandardCustomField',
'PhabricatorProjectEditDetailsController' => 'PhabricatorProjectController',
'PhabricatorProjectEditIconController' => 'PhabricatorProjectController',
'PhabricatorProjectEditPictureController' => 'PhabricatorProjectController',
'PhabricatorProjectEditorTestCase' => 'PhabricatorTestCase',
'PhabricatorProjectFeedController' => 'PhabricatorProjectController',
'PhabricatorProjectHeraldAction' => 'HeraldAction',
'PhabricatorProjectIcon' => 'Phobject',
'PhabricatorProjectListController' => 'PhabricatorProjectController',
'PhabricatorProjectLogicalAndDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorProjectLogicalDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorProjectLogicalOrNotDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorProjectLogicalUserDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorProjectLogicalViewerDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorProjectMemberOfProjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorProjectMembersDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorProjectMembersEditController' => 'PhabricatorProjectController',
'PhabricatorProjectMembersRemoveController' => 'PhabricatorProjectController',
'PhabricatorProjectMoveController' => 'PhabricatorProjectController',
'PhabricatorProjectNoProjectsDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorProjectObjectHasProjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorProjectOrUserDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorProjectOrUserFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorProjectProfileController' => 'PhabricatorProjectController',
'PhabricatorProjectProjectHasMemberEdgeType' => 'PhabricatorEdgeType',
'PhabricatorProjectProjectHasObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorProjectProjectPHIDType' => 'PhabricatorPHIDType',
'PhabricatorProjectQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorProjectRemoveHeraldAction' => 'PhabricatorProjectHeraldAction',
'PhabricatorProjectSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorProjectSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorProjectSearchField' => 'PhabricatorSearchTokenizerField',
'PhabricatorProjectSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'PhabricatorProjectSlug' => 'PhabricatorProjectDAO',
'PhabricatorProjectStandardCustomField' => array(
'PhabricatorProjectCustomField',
'PhabricatorStandardCustomFieldInterface',
),
'PhabricatorProjectStatus' => 'Phobject',
'PhabricatorProjectTestDataGenerator' => 'PhabricatorTestDataGenerator',
'PhabricatorProjectTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorProjectTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorProjectTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorProjectUIEventListener' => 'PhabricatorEventListener',
'PhabricatorProjectUpdateController' => 'PhabricatorProjectController',
'PhabricatorProjectUserFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorProjectViewController' => 'PhabricatorProjectController',
'PhabricatorProjectWatchController' => 'PhabricatorProjectController',
'PhabricatorProjectsPolicyRule' => 'PhabricatorPolicyRule',
'PhabricatorProtocolAdapter' => 'Phobject',
'PhabricatorPygmentSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorQuery' => 'Phobject',
'PhabricatorQueryConstraint' => 'Phobject',
'PhabricatorQueryOrderItem' => 'Phobject',
'PhabricatorQueryOrderTestCase' => 'PhabricatorTestCase',
'PhabricatorQueryOrderVector' => array(
'Phobject',
'Iterator',
),
'PhabricatorRateLimitRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler',
'PhabricatorRecaptchaConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorRecipientHasBadgeEdgeType' => 'PhabricatorEdgeType',
'PhabricatorRedirectController' => 'PhabricatorController',
'PhabricatorRefreshCSRFController' => 'PhabricatorAuthController',
'PhabricatorRegistrationProfile' => 'Phobject',
'PhabricatorReleephApplication' => 'PhabricatorApplication',
'PhabricatorReleephApplicationConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorRemarkupControl' => 'AphrontFormTextAreaControl',
'PhabricatorRemarkupCowsayBlockInterpreter' => 'PhutilRemarkupBlockInterpreter',
'PhabricatorRemarkupCustomBlockRule' => 'PhutilRemarkupBlockRule',
'PhabricatorRemarkupCustomInlineRule' => 'PhutilRemarkupRule',
'PhabricatorRemarkupFigletBlockInterpreter' => 'PhutilRemarkupBlockInterpreter',
- 'PhabricatorRemarkupGraphvizBlockInterpreter' => 'PhutilRemarkupBlockInterpreter',
'PhabricatorRemarkupUIExample' => 'PhabricatorUIExample',
'PhabricatorRepositoriesSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorRepository' => array(
'PhabricatorRepositoryDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'PhabricatorFlaggableInterface',
'PhabricatorMarkupInterface',
'PhabricatorDestructibleInterface',
'PhabricatorProjectInterface',
'PhabricatorSpacesInterface',
),
'PhabricatorRepositoryAuditRequest' => array(
'PhabricatorRepositoryDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorRepositoryBranch' => 'PhabricatorRepositoryDAO',
'PhabricatorRepositoryCommit' => array(
'PhabricatorRepositoryDAO',
'PhabricatorPolicyInterface',
'PhabricatorFlaggableInterface',
'PhabricatorProjectInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorSubscribableInterface',
'PhabricatorMentionableInterface',
'HarbormasterBuildableInterface',
'PhabricatorCustomFieldInterface',
'PhabricatorApplicationTransactionInterface',
),
'PhabricatorRepositoryCommitChangeParserWorker' => 'PhabricatorRepositoryCommitParserWorker',
'PhabricatorRepositoryCommitData' => 'PhabricatorRepositoryDAO',
'PhabricatorRepositoryCommitHeraldWorker' => 'PhabricatorRepositoryCommitParserWorker',
'PhabricatorRepositoryCommitMessageParserWorker' => 'PhabricatorRepositoryCommitParserWorker',
'PhabricatorRepositoryCommitOwnersWorker' => 'PhabricatorRepositoryCommitParserWorker',
'PhabricatorRepositoryCommitPHIDType' => 'PhabricatorPHIDType',
'PhabricatorRepositoryCommitParserWorker' => 'PhabricatorWorker',
'PhabricatorRepositoryCommitRef' => 'Phobject',
'PhabricatorRepositoryCommitSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'PhabricatorRepositoryConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorRepositoryDAO' => 'PhabricatorLiskDAO',
'PhabricatorRepositoryDiscoveryEngine' => 'PhabricatorRepositoryEngine',
'PhabricatorRepositoryEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorRepositoryEngine' => 'Phobject',
'PhabricatorRepositoryGitCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker',
'PhabricatorRepositoryGitCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker',
'PhabricatorRepositoryGraphCache' => 'Phobject',
'PhabricatorRepositoryGraphStream' => 'Phobject',
'PhabricatorRepositoryManagementCacheWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementDiscoverWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementEditWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementImportingWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementListPathsWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementListWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementLookupUsersWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementMarkImportedWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementMirrorWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementMovePathsWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementParentsWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementPullWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementRefsWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementReparseWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementUpdateWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorRepositoryMercurialCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker',
'PhabricatorRepositoryMercurialCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker',
'PhabricatorRepositoryMirror' => array(
'PhabricatorRepositoryDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorRepositoryMirrorEngine' => 'PhabricatorRepositoryEngine',
'PhabricatorRepositoryMirrorPHIDType' => 'PhabricatorPHIDType',
'PhabricatorRepositoryMirrorQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorRepositoryParsedChange' => 'Phobject',
'PhabricatorRepositoryPullEngine' => 'PhabricatorRepositoryEngine',
'PhabricatorRepositoryPullLocalDaemon' => 'PhabricatorDaemon',
'PhabricatorRepositoryPushEvent' => array(
'PhabricatorRepositoryDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorRepositoryPushEventPHIDType' => 'PhabricatorPHIDType',
'PhabricatorRepositoryPushEventQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorRepositoryPushLog' => array(
'PhabricatorRepositoryDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorRepositoryPushLogPHIDType' => 'PhabricatorPHIDType',
'PhabricatorRepositoryPushLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorRepositoryPushLogSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorRepositoryPushMailWorker' => 'PhabricatorWorker',
'PhabricatorRepositoryPushReplyHandler' => 'PhabricatorMailReplyHandler',
'PhabricatorRepositoryQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorRepositoryRefCursor' => array(
'PhabricatorRepositoryDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorRepositoryRefCursorQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorRepositoryRefEngine' => 'PhabricatorRepositoryEngine',
'PhabricatorRepositoryRepositoryPHIDType' => 'PhabricatorPHIDType',
'PhabricatorRepositorySchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorRepositorySearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorRepositoryStatusMessage' => 'PhabricatorRepositoryDAO',
'PhabricatorRepositorySvnCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker',
'PhabricatorRepositorySvnCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker',
'PhabricatorRepositorySymbol' => 'PhabricatorRepositoryDAO',
'PhabricatorRepositoryTestCase' => 'PhabricatorTestCase',
'PhabricatorRepositoryTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorRepositoryTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorRepositoryType' => 'Phobject',
'PhabricatorRepositoryURINormalizer' => 'Phobject',
'PhabricatorRepositoryURINormalizerTestCase' => 'PhabricatorTestCase',
'PhabricatorRepositoryURITestCase' => 'PhabricatorTestCase',
'PhabricatorRepositoryVCSPassword' => 'PhabricatorRepositoryDAO',
'PhabricatorRepositoryVersion' => 'Phobject',
'PhabricatorRequestExceptionHandler' => 'AphrontRequestExceptionHandler',
'PhabricatorResourceSite' => 'PhabricatorSite',
'PhabricatorRobotsController' => 'PhabricatorController',
'PhabricatorS3FileStorageEngine' => 'PhabricatorFileStorageEngine',
'PhabricatorSMS' => 'PhabricatorSMSDAO',
'PhabricatorSMSConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorSMSDAO' => 'PhabricatorLiskDAO',
'PhabricatorSMSDemultiplexWorker' => 'PhabricatorSMSWorker',
'PhabricatorSMSImplementationAdapter' => 'Phobject',
'PhabricatorSMSImplementationTestBlackholeAdapter' => 'PhabricatorSMSImplementationAdapter',
'PhabricatorSMSImplementationTwilioAdapter' => 'PhabricatorSMSImplementationAdapter',
'PhabricatorSMSManagementListOutboundWorkflow' => 'PhabricatorSMSManagementWorkflow',
'PhabricatorSMSManagementSendTestWorkflow' => 'PhabricatorSMSManagementWorkflow',
'PhabricatorSMSManagementShowOutboundWorkflow' => 'PhabricatorSMSManagementWorkflow',
'PhabricatorSMSManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorSMSSendWorker' => 'PhabricatorSMSWorker',
'PhabricatorSMSWorker' => 'PhabricatorWorker',
'PhabricatorSQLPatchList' => 'Phobject',
'PhabricatorSSHKeyGenerator' => 'Phobject',
'PhabricatorSSHKeysSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorSSHLog' => 'Phobject',
'PhabricatorSSHPassthruCommand' => 'Phobject',
'PhabricatorSSHWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorSavedQuery' => array(
'PhabricatorSearchDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorSavedQueryQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorScheduleTaskTriggerAction' => 'PhabricatorTriggerAction',
'PhabricatorScopedEnv' => 'Phobject',
'PhabricatorSearchAbstractDocument' => 'Phobject',
'PhabricatorSearchApplication' => 'PhabricatorApplication',
'PhabricatorSearchApplicationSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorSearchApplicationStorageEnginePanel' => 'PhabricatorApplicationConfigurationPanel',
'PhabricatorSearchAttachController' => 'PhabricatorSearchBaseController',
'PhabricatorSearchBaseController' => 'PhabricatorController',
'PhabricatorSearchCheckboxesField' => 'PhabricatorSearchField',
'PhabricatorSearchConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorSearchController' => 'PhabricatorSearchBaseController',
'PhabricatorSearchCustomFieldProxyField' => 'PhabricatorSearchField',
'PhabricatorSearchDAO' => 'PhabricatorLiskDAO',
'PhabricatorSearchDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorSearchDatasourceField' => 'PhabricatorSearchTokenizerField',
'PhabricatorSearchDateControlField' => 'PhabricatorSearchField',
'PhabricatorSearchDateField' => 'PhabricatorSearchField',
'PhabricatorSearchDeleteController' => 'PhabricatorSearchBaseController',
'PhabricatorSearchDocument' => 'PhabricatorSearchDAO',
'PhabricatorSearchDocumentField' => 'PhabricatorSearchDAO',
'PhabricatorSearchDocumentFieldType' => 'Phobject',
'PhabricatorSearchDocumentIndexer' => 'Phobject',
'PhabricatorSearchDocumentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorSearchDocumentRelationship' => 'PhabricatorSearchDAO',
'PhabricatorSearchDocumentTypeDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorSearchEditController' => 'PhabricatorSearchBaseController',
'PhabricatorSearchEngine' => 'Phobject',
'PhabricatorSearchEngineTestCase' => 'PhabricatorTestCase',
'PhabricatorSearchField' => 'Phobject',
'PhabricatorSearchHovercardController' => 'PhabricatorSearchBaseController',
'PhabricatorSearchIndexer' => 'Phobject',
'PhabricatorSearchManagementIndexWorkflow' => 'PhabricatorSearchManagementWorkflow',
'PhabricatorSearchManagementInitWorkflow' => 'PhabricatorSearchManagementWorkflow',
'PhabricatorSearchManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorSearchOrderController' => 'PhabricatorSearchBaseController',
'PhabricatorSearchOrderField' => 'PhabricatorSearchField',
'PhabricatorSearchPreferencesSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorSearchRelationship' => 'Phobject',
'PhabricatorSearchResultView' => 'AphrontView',
'PhabricatorSearchSelectController' => 'PhabricatorSearchBaseController',
'PhabricatorSearchSelectField' => 'PhabricatorSearchField',
'PhabricatorSearchStringListField' => 'PhabricatorSearchField',
'PhabricatorSearchSubscribersField' => 'PhabricatorSearchTokenizerField',
'PhabricatorSearchTextField' => 'PhabricatorSearchField',
'PhabricatorSearchThreeStateField' => 'PhabricatorSearchField',
'PhabricatorSearchTokenizerField' => 'PhabricatorSearchField',
'PhabricatorSearchWorker' => 'PhabricatorWorker',
'PhabricatorSecurityConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorSecuritySetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorSendGridConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorSessionsSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorSettingsAddEmailAction' => 'PhabricatorSystemAction',
'PhabricatorSettingsAdjustController' => 'PhabricatorController',
'PhabricatorSettingsApplication' => 'PhabricatorApplication',
'PhabricatorSettingsMainController' => 'PhabricatorController',
'PhabricatorSettingsPanel' => 'Phobject',
'PhabricatorSetupCheck' => 'Phobject',
'PhabricatorSetupCheckTestCase' => 'PhabricatorTestCase',
'PhabricatorSetupIssue' => 'Phobject',
'PhabricatorSetupIssueUIExample' => 'PhabricatorUIExample',
'PhabricatorSetupIssueView' => 'AphrontView',
'PhabricatorSite' => 'AphrontSite',
'PhabricatorSlowvoteApplication' => 'PhabricatorApplication',
'PhabricatorSlowvoteChoice' => 'PhabricatorSlowvoteDAO',
'PhabricatorSlowvoteCloseController' => 'PhabricatorSlowvoteController',
'PhabricatorSlowvoteCommentController' => 'PhabricatorSlowvoteController',
'PhabricatorSlowvoteController' => 'PhabricatorController',
'PhabricatorSlowvoteDAO' => 'PhabricatorLiskDAO',
'PhabricatorSlowvoteDefaultViewCapability' => 'PhabricatorPolicyCapability',
'PhabricatorSlowvoteEditController' => 'PhabricatorSlowvoteController',
'PhabricatorSlowvoteEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorSlowvoteListController' => 'PhabricatorSlowvoteController',
'PhabricatorSlowvoteMailReceiver' => 'PhabricatorObjectMailReceiver',
'PhabricatorSlowvoteOption' => 'PhabricatorSlowvoteDAO',
'PhabricatorSlowvotePoll' => array(
'PhabricatorSlowvoteDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'PhabricatorSubscribableInterface',
'PhabricatorFlaggableInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorProjectInterface',
'PhabricatorDestructibleInterface',
'PhabricatorSpacesInterface',
),
'PhabricatorSlowvotePollController' => 'PhabricatorSlowvoteController',
'PhabricatorSlowvotePollPHIDType' => 'PhabricatorPHIDType',
'PhabricatorSlowvoteQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorSlowvoteReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PhabricatorSlowvoteSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorSlowvoteSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorSlowvoteTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorSlowvoteTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PhabricatorSlowvoteTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorSlowvoteVoteController' => 'PhabricatorSlowvoteController',
'PhabricatorSlug' => 'Phobject',
'PhabricatorSlugTestCase' => 'PhabricatorTestCase',
'PhabricatorSortTableUIExample' => 'PhabricatorUIExample',
'PhabricatorSourceCodeView' => 'AphrontView',
'PhabricatorSpacesApplication' => 'PhabricatorApplication',
'PhabricatorSpacesArchiveController' => 'PhabricatorSpacesController',
'PhabricatorSpacesCapabilityCreateSpaces' => 'PhabricatorPolicyCapability',
'PhabricatorSpacesCapabilityDefaultEdit' => 'PhabricatorPolicyCapability',
'PhabricatorSpacesCapabilityDefaultView' => 'PhabricatorPolicyCapability',
'PhabricatorSpacesController' => 'PhabricatorController',
'PhabricatorSpacesDAO' => 'PhabricatorLiskDAO',
'PhabricatorSpacesEditController' => 'PhabricatorSpacesController',
'PhabricatorSpacesInterface' => 'PhabricatorPHIDInterface',
'PhabricatorSpacesListController' => 'PhabricatorSpacesController',
'PhabricatorSpacesNamespace' => array(
'PhabricatorSpacesDAO',
'PhabricatorPolicyInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorSpacesNamespaceDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorSpacesNamespaceEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorSpacesNamespacePHIDType' => 'PhabricatorPHIDType',
'PhabricatorSpacesNamespaceQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorSpacesNamespaceSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorSpacesNamespaceTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorSpacesNamespaceTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorSpacesNoAccessController' => 'PhabricatorSpacesController',
'PhabricatorSpacesRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'PhabricatorSpacesSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorSpacesSearchField' => 'PhabricatorSearchTokenizerField',
'PhabricatorSpacesTestCase' => 'PhabricatorTestCase',
'PhabricatorSpacesViewController' => 'PhabricatorSpacesController',
'PhabricatorStandardCustomField' => 'PhabricatorCustomField',
'PhabricatorStandardCustomFieldBool' => 'PhabricatorStandardCustomField',
'PhabricatorStandardCustomFieldCredential' => 'PhabricatorStandardCustomField',
'PhabricatorStandardCustomFieldDate' => 'PhabricatorStandardCustomField',
'PhabricatorStandardCustomFieldHeader' => 'PhabricatorStandardCustomField',
'PhabricatorStandardCustomFieldInt' => 'PhabricatorStandardCustomField',
'PhabricatorStandardCustomFieldLink' => 'PhabricatorStandardCustomField',
'PhabricatorStandardCustomFieldPHIDs' => 'PhabricatorStandardCustomField',
'PhabricatorStandardCustomFieldRemarkup' => 'PhabricatorStandardCustomField',
'PhabricatorStandardCustomFieldSelect' => 'PhabricatorStandardCustomField',
'PhabricatorStandardCustomFieldText' => 'PhabricatorStandardCustomField',
'PhabricatorStandardCustomFieldUsers' => 'PhabricatorStandardCustomFieldPHIDs',
'PhabricatorStandardPageView' => 'PhabricatorBarePageView',
'PhabricatorStandardSelectCustomFieldDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorStatusController' => 'PhabricatorController',
'PhabricatorStatusUIExample' => 'PhabricatorUIExample',
'PhabricatorStorageFixtureScopeGuard' => 'Phobject',
'PhabricatorStorageManagementAPI' => 'Phobject',
'PhabricatorStorageManagementAdjustWorkflow' => 'PhabricatorStorageManagementWorkflow',
'PhabricatorStorageManagementDatabasesWorkflow' => 'PhabricatorStorageManagementWorkflow',
'PhabricatorStorageManagementDestroyWorkflow' => 'PhabricatorStorageManagementWorkflow',
'PhabricatorStorageManagementDumpWorkflow' => 'PhabricatorStorageManagementWorkflow',
'PhabricatorStorageManagementProbeWorkflow' => 'PhabricatorStorageManagementWorkflow',
'PhabricatorStorageManagementQuickstartWorkflow' => 'PhabricatorStorageManagementWorkflow',
'PhabricatorStorageManagementRenamespaceWorkflow' => 'PhabricatorStorageManagementWorkflow',
'PhabricatorStorageManagementShellWorkflow' => 'PhabricatorStorageManagementWorkflow',
'PhabricatorStorageManagementStatusWorkflow' => 'PhabricatorStorageManagementWorkflow',
'PhabricatorStorageManagementUpgradeWorkflow' => 'PhabricatorStorageManagementWorkflow',
'PhabricatorStorageManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorStoragePatch' => 'Phobject',
'PhabricatorStorageSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorStorageSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorStreamingProtocolAdapter' => 'PhabricatorProtocolAdapter',
'PhabricatorSubscribedToObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorSubscribersQuery' => 'PhabricatorQuery',
'PhabricatorSubscriptionTriggerClock' => 'PhabricatorTriggerClock',
'PhabricatorSubscriptionsAddSelfHeraldAction' => 'PhabricatorSubscriptionsHeraldAction',
'PhabricatorSubscriptionsAddSubscribersHeraldAction' => 'PhabricatorSubscriptionsHeraldAction',
'PhabricatorSubscriptionsApplication' => 'PhabricatorApplication',
'PhabricatorSubscriptionsEditController' => 'PhabricatorController',
'PhabricatorSubscriptionsEditor' => 'PhabricatorEditor',
'PhabricatorSubscriptionsHeraldAction' => 'HeraldAction',
'PhabricatorSubscriptionsListController' => 'PhabricatorController',
'PhabricatorSubscriptionsRemoveSelfHeraldAction' => 'PhabricatorSubscriptionsHeraldAction',
'PhabricatorSubscriptionsRemoveSubscribersHeraldAction' => 'PhabricatorSubscriptionsHeraldAction',
'PhabricatorSubscriptionsSubscribeEmailCommand' => 'MetaMTAEmailTransactionCommand',
'PhabricatorSubscriptionsSubscribersPolicyRule' => 'PhabricatorPolicyRule',
'PhabricatorSubscriptionsTransactionController' => 'PhabricatorController',
'PhabricatorSubscriptionsUIEventListener' => 'PhabricatorEventListener',
'PhabricatorSubscriptionsUnsubscribeEmailCommand' => 'MetaMTAEmailTransactionCommand',
'PhabricatorSupportApplication' => 'PhabricatorApplication',
'PhabricatorSyntaxHighlighter' => 'Phobject',
'PhabricatorSyntaxHighlightingConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorSystemAction' => 'Phobject',
'PhabricatorSystemActionEngine' => 'Phobject',
'PhabricatorSystemActionGarbageCollector' => 'PhabricatorGarbageCollector',
'PhabricatorSystemActionLog' => 'PhabricatorSystemDAO',
'PhabricatorSystemActionRateLimitException' => 'Exception',
'PhabricatorSystemApplication' => 'PhabricatorApplication',
'PhabricatorSystemDAO' => 'PhabricatorLiskDAO',
'PhabricatorSystemDestructionGarbageCollector' => 'PhabricatorGarbageCollector',
'PhabricatorSystemDestructionLog' => 'PhabricatorSystemDAO',
'PhabricatorSystemRemoveDestroyWorkflow' => 'PhabricatorSystemRemoveWorkflow',
'PhabricatorSystemRemoveLogWorkflow' => 'PhabricatorSystemRemoveWorkflow',
'PhabricatorSystemRemoveWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorSystemSelectEncodingController' => 'PhabricatorController',
'PhabricatorSystemSelectHighlightController' => 'PhabricatorController',
'PhabricatorTOTPAuthFactor' => 'PhabricatorAuthFactor',
'PhabricatorTOTPAuthFactorTestCase' => 'PhabricatorTestCase',
'PhabricatorTaskmasterDaemon' => 'PhabricatorDaemon',
'PhabricatorTestApplication' => 'PhabricatorApplication',
'PhabricatorTestCase' => 'PhutilTestCase',
'PhabricatorTestController' => 'PhabricatorController',
'PhabricatorTestDataGenerator' => 'Phobject',
'PhabricatorTestNoCycleEdgeType' => 'PhabricatorEdgeType',
'PhabricatorTestStorageEngine' => 'PhabricatorFileStorageEngine',
'PhabricatorTestWorker' => 'PhabricatorWorker',
'PhabricatorTime' => 'Phobject',
'PhabricatorTimeGuard' => 'Phobject',
'PhabricatorTimeTestCase' => 'PhabricatorTestCase',
'PhabricatorTimezoneSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorToken' => array(
'PhabricatorTokenDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorTokenController' => 'PhabricatorController',
'PhabricatorTokenCount' => 'PhabricatorTokenDAO',
'PhabricatorTokenCountQuery' => 'PhabricatorOffsetPagedQuery',
'PhabricatorTokenDAO' => 'PhabricatorLiskDAO',
'PhabricatorTokenGiveController' => 'PhabricatorTokenController',
'PhabricatorTokenGiven' => array(
'PhabricatorTokenDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorTokenGivenController' => 'PhabricatorTokenController',
'PhabricatorTokenGivenEditor' => 'PhabricatorEditor',
'PhabricatorTokenGivenFeedStory' => 'PhabricatorFeedStory',
'PhabricatorTokenGivenQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorTokenLeaderController' => 'PhabricatorTokenController',
'PhabricatorTokenQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorTokenReceiverQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorTokenTokenPHIDType' => 'PhabricatorPHIDType',
'PhabricatorTokenUIEventListener' => 'PhabricatorEventListener',
'PhabricatorTokensApplication' => 'PhabricatorApplication',
'PhabricatorTokensSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorTooltipUIExample' => 'PhabricatorUIExample',
'PhabricatorTransactions' => 'Phobject',
'PhabricatorTransactionsApplication' => 'PhabricatorApplication',
'PhabricatorTransformedFile' => 'PhabricatorFileDAO',
'PhabricatorTranslationsConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorTriggerAction' => 'Phobject',
'PhabricatorTriggerClock' => 'Phobject',
'PhabricatorTriggerClockTestCase' => 'PhabricatorTestCase',
'PhabricatorTriggerDaemon' => 'PhabricatorDaemon',
'PhabricatorTrivialTestCase' => 'PhabricatorTestCase',
'PhabricatorTwitchAuthProvider' => 'PhabricatorOAuth2AuthProvider',
'PhabricatorTwitterAuthProvider' => 'PhabricatorOAuth1AuthProvider',
'PhabricatorTypeaheadApplication' => 'PhabricatorApplication',
'PhabricatorTypeaheadCompositeDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorTypeaheadDatasource' => 'Phobject',
'PhabricatorTypeaheadDatasourceController' => 'PhabricatorController',
'PhabricatorTypeaheadFunctionHelpController' => 'PhabricatorTypeaheadDatasourceController',
'PhabricatorTypeaheadInvalidTokenException' => 'Exception',
'PhabricatorTypeaheadModularDatasourceController' => 'PhabricatorTypeaheadDatasourceController',
'PhabricatorTypeaheadMonogramDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorTypeaheadResult' => 'Phobject',
'PhabricatorTypeaheadRuntimeCompositeDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorTypeaheadTokenView' => 'AphrontTagView',
'PhabricatorUIConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorUIExample' => 'Phobject',
'PhabricatorUIExampleRenderController' => 'PhabricatorController',
'PhabricatorUIExamplesApplication' => 'PhabricatorApplication',
'PhabricatorUSEnglishTranslation' => 'PhutilTranslation',
'PhabricatorUnitsTestCase' => 'PhabricatorTestCase',
'PhabricatorUnsubscribedFromObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorUser' => array(
'PhabricatorUserDAO',
'PhutilPerson',
'PhabricatorPolicyInterface',
'PhabricatorCustomFieldInterface',
'PhabricatorDestructibleInterface',
'PhabricatorSSHPublicKeyInterface',
'PhabricatorFlaggableInterface',
'PhabricatorApplicationTransactionInterface',
),
'PhabricatorUserBlurbField' => 'PhabricatorUserCustomField',
'PhabricatorUserConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorUserConfiguredCustomField' => array(
'PhabricatorUserCustomField',
'PhabricatorStandardCustomFieldInterface',
),
'PhabricatorUserConfiguredCustomFieldStorage' => 'PhabricatorCustomFieldStorage',
'PhabricatorUserCustomField' => 'PhabricatorCustomField',
'PhabricatorUserCustomFieldNumericIndex' => 'PhabricatorCustomFieldNumericIndexStorage',
'PhabricatorUserCustomFieldStringIndex' => 'PhabricatorCustomFieldStringIndexStorage',
'PhabricatorUserDAO' => 'PhabricatorLiskDAO',
'PhabricatorUserEditor' => 'PhabricatorEditor',
'PhabricatorUserEditorTestCase' => 'PhabricatorTestCase',
'PhabricatorUserEmail' => 'PhabricatorUserDAO',
'PhabricatorUserEmailTestCase' => 'PhabricatorTestCase',
'PhabricatorUserLog' => array(
'PhabricatorUserDAO',
'PhabricatorPolicyInterface',
),
'PhabricatorUserLogView' => 'AphrontView',
'PhabricatorUserPreferences' => 'PhabricatorUserDAO',
'PhabricatorUserProfile' => 'PhabricatorUserDAO',
'PhabricatorUserProfileEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorUserRealNameField' => 'PhabricatorUserCustomField',
'PhabricatorUserRolesField' => 'PhabricatorUserCustomField',
'PhabricatorUserSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorUserSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'PhabricatorUserSinceField' => 'PhabricatorUserCustomField',
'PhabricatorUserStatusField' => 'PhabricatorUserCustomField',
'PhabricatorUserTestCase' => 'PhabricatorTestCase',
'PhabricatorUserTitleField' => 'PhabricatorUserCustomField',
'PhabricatorUserTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorUsersPolicyRule' => 'PhabricatorPolicyRule',
'PhabricatorUsersSearchField' => 'PhabricatorSearchTokenizerField',
'PhabricatorVCSResponse' => 'AphrontResponse',
'PhabricatorVeryWowEnglishTranslation' => 'PhutilTranslation',
'PhabricatorViewerDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorWatcherHasObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorWordPressAuthProvider' => 'PhabricatorOAuth2AuthProvider',
'PhabricatorWorker' => 'Phobject',
'PhabricatorWorkerActiveTask' => 'PhabricatorWorkerTask',
'PhabricatorWorkerArchiveTask' => 'PhabricatorWorkerTask',
'PhabricatorWorkerArchiveTaskQuery' => 'PhabricatorQuery',
'PhabricatorWorkerBulkJob' => array(
'PhabricatorWorkerDAO',
'PhabricatorPolicyInterface',
'PhabricatorSubscribableInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorDestructibleInterface',
),
'PhabricatorWorkerBulkJobCreateWorker' => 'PhabricatorWorkerBulkJobWorker',
'PhabricatorWorkerBulkJobEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorWorkerBulkJobPHIDType' => 'PhabricatorPHIDType',
'PhabricatorWorkerBulkJobQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorWorkerBulkJobSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorWorkerBulkJobTaskWorker' => 'PhabricatorWorkerBulkJobWorker',
'PhabricatorWorkerBulkJobTestCase' => 'PhabricatorTestCase',
'PhabricatorWorkerBulkJobTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorWorkerBulkJobTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorWorkerBulkJobType' => 'Phobject',
'PhabricatorWorkerBulkJobWorker' => 'PhabricatorWorker',
'PhabricatorWorkerBulkTask' => 'PhabricatorWorkerDAO',
'PhabricatorWorkerDAO' => 'PhabricatorLiskDAO',
'PhabricatorWorkerLeaseQuery' => 'PhabricatorQuery',
'PhabricatorWorkerManagementCancelWorkflow' => 'PhabricatorWorkerManagementWorkflow',
'PhabricatorWorkerManagementExecuteWorkflow' => 'PhabricatorWorkerManagementWorkflow',
'PhabricatorWorkerManagementFloodWorkflow' => 'PhabricatorWorkerManagementWorkflow',
'PhabricatorWorkerManagementFreeWorkflow' => 'PhabricatorWorkerManagementWorkflow',
'PhabricatorWorkerManagementRetryWorkflow' => 'PhabricatorWorkerManagementWorkflow',
'PhabricatorWorkerManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorWorkerPermanentFailureException' => 'Exception',
'PhabricatorWorkerSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhabricatorWorkerTask' => 'PhabricatorWorkerDAO',
'PhabricatorWorkerTaskData' => 'PhabricatorWorkerDAO',
'PhabricatorWorkerTaskDetailController' => 'PhabricatorDaemonController',
'PhabricatorWorkerTestCase' => 'PhabricatorTestCase',
'PhabricatorWorkerTrigger' => array(
'PhabricatorWorkerDAO',
'PhabricatorDestructibleInterface',
'PhabricatorPolicyInterface',
),
'PhabricatorWorkerTriggerEvent' => 'PhabricatorWorkerDAO',
'PhabricatorWorkerTriggerManagementFireWorkflow' => 'PhabricatorWorkerTriggerManagementWorkflow',
'PhabricatorWorkerTriggerManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorWorkerTriggerPHIDType' => 'PhabricatorPHIDType',
'PhabricatorWorkerTriggerQuery' => 'PhabricatorPolicyAwareQuery',
'PhabricatorWorkerYieldException' => 'Exception',
'PhabricatorWorkingCopyDiscoveryTestCase' => 'PhabricatorWorkingCopyTestCase',
'PhabricatorWorkingCopyPullTestCase' => 'PhabricatorWorkingCopyTestCase',
'PhabricatorWorkingCopyTestCase' => 'PhabricatorTestCase',
'PhabricatorXHPASTViewController' => 'PhabricatorController',
'PhabricatorXHPASTViewDAO' => 'PhabricatorLiskDAO',
'PhabricatorXHPASTViewFrameController' => 'PhabricatorXHPASTViewController',
'PhabricatorXHPASTViewFramesetController' => 'PhabricatorXHPASTViewController',
'PhabricatorXHPASTViewInputController' => 'PhabricatorXHPASTViewPanelController',
'PhabricatorXHPASTViewPanelController' => 'PhabricatorXHPASTViewController',
'PhabricatorXHPASTViewParseTree' => 'PhabricatorXHPASTViewDAO',
'PhabricatorXHPASTViewRunController' => 'PhabricatorXHPASTViewController',
'PhabricatorXHPASTViewStreamController' => 'PhabricatorXHPASTViewPanelController',
'PhabricatorXHPASTViewTreeController' => 'PhabricatorXHPASTViewPanelController',
'PhabricatorXHProfApplication' => 'PhabricatorApplication',
'PhabricatorXHProfController' => 'PhabricatorController',
'PhabricatorXHProfDAO' => 'PhabricatorLiskDAO',
'PhabricatorXHProfProfileController' => 'PhabricatorXHProfController',
'PhabricatorXHProfProfileSymbolView' => 'PhabricatorXHProfProfileView',
'PhabricatorXHProfProfileTopLevelView' => 'PhabricatorXHProfProfileView',
'PhabricatorXHProfProfileView' => 'AphrontView',
'PhabricatorXHProfSample' => 'PhabricatorXHProfDAO',
'PhabricatorXHProfSampleListController' => 'PhabricatorXHProfController',
'PhabricatorYoutubeRemarkupRule' => 'PhutilRemarkupRule',
'PhameBasicBlogSkin' => 'PhameBlogSkin',
'PhameBasicTemplateBlogSkin' => 'PhameBasicBlogSkin',
'PhameBlog' => array(
'PhameDAO',
'PhabricatorPolicyInterface',
'PhabricatorMarkupInterface',
'PhabricatorSubscribableInterface',
'PhabricatorFlaggableInterface',
'PhabricatorProjectInterface',
'PhabricatorApplicationTransactionInterface',
),
'PhameBlogDeleteController' => 'PhameController',
'PhameBlogEditController' => 'PhameController',
'PhameBlogEditor' => 'PhabricatorApplicationTransactionEditor',
'PhameBlogFeedController' => 'PhameController',
'PhameBlogListController' => 'PhameController',
'PhameBlogLiveController' => 'PhameController',
'PhameBlogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhameBlogSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhameBlogSite' => 'PhameSite',
'PhameBlogSkin' => 'PhabricatorController',
'PhameBlogTransaction' => 'PhabricatorApplicationTransaction',
'PhameBlogViewController' => 'PhameController',
'PhameCelerityResources' => 'CelerityResources',
'PhameConduitAPIMethod' => 'ConduitAPIMethod',
'PhameController' => 'PhabricatorController',
'PhameCreatePostConduitAPIMethod' => 'PhameConduitAPIMethod',
'PhameDAO' => 'PhabricatorLiskDAO',
'PhamePost' => array(
'PhameDAO',
'PhabricatorPolicyInterface',
'PhabricatorMarkupInterface',
'PhabricatorFlaggableInterface',
'PhabricatorProjectInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorSubscribableInterface',
'PhabricatorTokenReceiverInterface',
),
'PhamePostDeleteController' => 'PhameController',
'PhamePostEditController' => 'PhameController',
'PhamePostEditor' => 'PhabricatorApplicationTransactionEditor',
'PhamePostFramedController' => 'PhameController',
'PhamePostListController' => 'PhameController',
'PhamePostNewController' => 'PhameController',
'PhamePostNotLiveController' => 'PhameController',
'PhamePostPreviewController' => 'PhameController',
'PhamePostPublishController' => 'PhameController',
'PhamePostQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhamePostSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhamePostTransaction' => 'PhabricatorApplicationTransaction',
'PhamePostTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhamePostUnpublishController' => 'PhameController',
'PhamePostView' => 'AphrontView',
'PhamePostViewController' => 'PhameController',
'PhameQueryConduitAPIMethod' => 'PhameConduitAPIMethod',
'PhameQueryPostsConduitAPIMethod' => 'PhameConduitAPIMethod',
'PhameResourceController' => 'CelerityResourceController',
'PhameSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhameSite' => 'PhabricatorSite',
'PhameSkinSpecification' => 'Phobject',
'PhluxController' => 'PhabricatorController',
'PhluxDAO' => 'PhabricatorLiskDAO',
'PhluxEditController' => 'PhluxController',
'PhluxListController' => 'PhluxController',
'PhluxTransaction' => 'PhabricatorApplicationTransaction',
'PhluxTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhluxVariable' => array(
'PhluxDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorFlaggableInterface',
'PhabricatorPolicyInterface',
),
'PhluxVariableEditor' => 'PhabricatorApplicationTransactionEditor',
'PhluxVariablePHIDType' => 'PhabricatorPHIDType',
'PhluxVariableQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhluxViewController' => 'PhluxController',
'PholioActionMenuEventListener' => 'PhabricatorEventListener',
'PholioController' => 'PhabricatorController',
'PholioDAO' => 'PhabricatorLiskDAO',
'PholioDefaultEditCapability' => 'PhabricatorPolicyCapability',
'PholioDefaultViewCapability' => 'PhabricatorPolicyCapability',
'PholioImage' => array(
'PholioDAO',
'PhabricatorMarkupInterface',
'PhabricatorPolicyInterface',
),
'PholioImagePHIDType' => 'PhabricatorPHIDType',
'PholioImageQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PholioImageUploadController' => 'PholioController',
'PholioInlineController' => 'PholioController',
'PholioInlineListController' => 'PholioController',
'PholioMock' => array(
'PholioDAO',
'PhabricatorMarkupInterface',
'PhabricatorPolicyInterface',
'PhabricatorSubscribableInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorFlaggableInterface',
'PhabricatorApplicationTransactionInterface',
'PhabricatorProjectInterface',
'PhabricatorDestructibleInterface',
'PhabricatorSpacesInterface',
'PhabricatorMentionableInterface',
),
'PholioMockAuthorHeraldField' => 'PholioMockHeraldField',
'PholioMockCommentController' => 'PholioController',
'PholioMockDescriptionHeraldField' => 'PholioMockHeraldField',
'PholioMockEditController' => 'PholioController',
'PholioMockEditor' => 'PhabricatorApplicationTransactionEditor',
'PholioMockEmbedView' => 'AphrontView',
'PholioMockHasTaskEdgeType' => 'PhabricatorEdgeType',
'PholioMockHeraldField' => 'HeraldField',
'PholioMockHeraldFieldGroup' => 'HeraldFieldGroup',
'PholioMockImagesView' => 'AphrontView',
'PholioMockListController' => 'PholioController',
'PholioMockMailReceiver' => 'PhabricatorObjectMailReceiver',
'PholioMockNameHeraldField' => 'PholioMockHeraldField',
'PholioMockPHIDType' => 'PhabricatorPHIDType',
'PholioMockQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PholioMockSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PholioMockThumbGridView' => 'AphrontView',
'PholioMockViewController' => 'PholioController',
'PholioRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'PholioReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PholioSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PholioSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'PholioTransaction' => 'PhabricatorApplicationTransaction',
'PholioTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PholioTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PholioTransactionView' => 'PhabricatorApplicationTransactionView',
'PholioUploadedImageView' => 'AphrontView',
'PhortuneAccount' => array(
'PhortuneDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
),
'PhortuneAccountEditController' => 'PhortuneController',
'PhortuneAccountEditor' => 'PhabricatorApplicationTransactionEditor',
'PhortuneAccountHasMemberEdgeType' => 'PhabricatorEdgeType',
'PhortuneAccountListController' => 'PhortuneController',
'PhortuneAccountPHIDType' => 'PhabricatorPHIDType',
'PhortuneAccountQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhortuneAccountTransaction' => 'PhabricatorApplicationTransaction',
'PhortuneAccountTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhortuneAccountViewController' => 'PhortuneController',
'PhortuneAdHocCart' => 'PhortuneCartImplementation',
'PhortuneAdHocProduct' => 'PhortuneProductImplementation',
'PhortuneCart' => array(
'PhortuneDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
),
'PhortuneCartAcceptController' => 'PhortuneCartController',
'PhortuneCartCancelController' => 'PhortuneCartController',
'PhortuneCartCheckoutController' => 'PhortuneCartController',
'PhortuneCartController' => 'PhortuneController',
'PhortuneCartEditor' => 'PhabricatorApplicationTransactionEditor',
'PhortuneCartImplementation' => 'Phobject',
'PhortuneCartListController' => 'PhortuneController',
'PhortuneCartPHIDType' => 'PhabricatorPHIDType',
'PhortuneCartQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhortuneCartReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PhortuneCartSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhortuneCartTransaction' => 'PhabricatorApplicationTransaction',
'PhortuneCartTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhortuneCartUpdateController' => 'PhortuneCartController',
'PhortuneCartViewController' => 'PhortuneCartController',
'PhortuneCharge' => array(
'PhortuneDAO',
'PhabricatorPolicyInterface',
),
'PhortuneChargeListController' => 'PhortuneController',
'PhortuneChargePHIDType' => 'PhabricatorPHIDType',
'PhortuneChargeQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhortuneChargeSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhortuneChargeTableView' => 'AphrontView',
'PhortuneConstants' => 'Phobject',
'PhortuneController' => 'PhabricatorController',
'PhortuneCreditCardForm' => 'Phobject',
'PhortuneCurrency' => 'Phobject',
'PhortuneCurrencySerializer' => 'PhabricatorLiskSerializer',
'PhortuneCurrencyTestCase' => 'PhabricatorTestCase',
'PhortuneDAO' => 'PhabricatorLiskDAO',
'PhortuneErrCode' => 'PhortuneConstants',
'PhortuneLandingController' => 'PhortuneController',
'PhortuneMemberHasAccountEdgeType' => 'PhabricatorEdgeType',
'PhortuneMemberHasMerchantEdgeType' => 'PhabricatorEdgeType',
'PhortuneMerchant' => array(
'PhortuneDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
),
'PhortuneMerchantCapability' => 'PhabricatorPolicyCapability',
'PhortuneMerchantController' => 'PhortuneController',
'PhortuneMerchantEditController' => 'PhortuneMerchantController',
'PhortuneMerchantEditor' => 'PhabricatorApplicationTransactionEditor',
'PhortuneMerchantHasMemberEdgeType' => 'PhabricatorEdgeType',
'PhortuneMerchantInvoiceCreateController' => 'PhortuneMerchantController',
'PhortuneMerchantListController' => 'PhortuneMerchantController',
'PhortuneMerchantPHIDType' => 'PhabricatorPHIDType',
'PhortuneMerchantQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhortuneMerchantSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhortuneMerchantTransaction' => 'PhabricatorApplicationTransaction',
'PhortuneMerchantTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhortuneMerchantViewController' => 'PhortuneMerchantController',
'PhortuneMonthYearExpiryControl' => 'AphrontFormControl',
'PhortuneNotImplementedException' => 'Exception',
'PhortuneOrderTableView' => 'AphrontView',
'PhortunePayPalPaymentProvider' => 'PhortunePaymentProvider',
'PhortunePaymentMethod' => array(
'PhortuneDAO',
'PhabricatorPolicyInterface',
),
'PhortunePaymentMethodCreateController' => 'PhortuneController',
'PhortunePaymentMethodDisableController' => 'PhortuneController',
'PhortunePaymentMethodEditController' => 'PhortuneController',
'PhortunePaymentMethodPHIDType' => 'PhabricatorPHIDType',
'PhortunePaymentMethodQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhortunePaymentProvider' => 'Phobject',
'PhortunePaymentProviderConfig' => array(
'PhortuneDAO',
'PhabricatorPolicyInterface',
),
'PhortunePaymentProviderConfigEditor' => 'PhabricatorApplicationTransactionEditor',
'PhortunePaymentProviderConfigQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhortunePaymentProviderConfigTransaction' => 'PhabricatorApplicationTransaction',
'PhortunePaymentProviderConfigTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhortunePaymentProviderPHIDType' => 'PhabricatorPHIDType',
'PhortunePaymentProviderTestCase' => 'PhabricatorTestCase',
'PhortuneProduct' => array(
'PhortuneDAO',
'PhabricatorPolicyInterface',
),
'PhortuneProductImplementation' => 'Phobject',
'PhortuneProductListController' => 'PhabricatorController',
'PhortuneProductPHIDType' => 'PhabricatorPHIDType',
'PhortuneProductQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhortuneProductViewController' => 'PhortuneController',
'PhortuneProviderActionController' => 'PhortuneController',
'PhortuneProviderDisableController' => 'PhortuneMerchantController',
'PhortuneProviderEditController' => 'PhortuneMerchantController',
'PhortunePurchase' => array(
'PhortuneDAO',
'PhabricatorPolicyInterface',
),
'PhortunePurchasePHIDType' => 'PhabricatorPHIDType',
'PhortunePurchaseQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhortuneSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhortuneStripePaymentProvider' => 'PhortunePaymentProvider',
'PhortuneSubscription' => array(
'PhortuneDAO',
'PhabricatorPolicyInterface',
),
'PhortuneSubscriptionCart' => 'PhortuneCartImplementation',
'PhortuneSubscriptionEditController' => 'PhortuneController',
'PhortuneSubscriptionImplementation' => 'Phobject',
'PhortuneSubscriptionListController' => 'PhortuneController',
'PhortuneSubscriptionPHIDType' => 'PhabricatorPHIDType',
'PhortuneSubscriptionProduct' => 'PhortuneProductImplementation',
'PhortuneSubscriptionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhortuneSubscriptionSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhortuneSubscriptionTableView' => 'AphrontView',
'PhortuneSubscriptionViewController' => 'PhortuneController',
'PhortuneSubscriptionWorker' => 'PhabricatorWorker',
'PhortuneTestPaymentProvider' => 'PhortunePaymentProvider',
'PhortuneWePayPaymentProvider' => 'PhortunePaymentProvider',
'PhragmentBrowseController' => 'PhragmentController',
'PhragmentCanCreateCapability' => 'PhabricatorPolicyCapability',
'PhragmentConduitAPIMethod' => 'ConduitAPIMethod',
'PhragmentController' => 'PhabricatorController',
'PhragmentCreateController' => 'PhragmentController',
'PhragmentDAO' => 'PhabricatorLiskDAO',
'PhragmentFragment' => array(
'PhragmentDAO',
'PhabricatorPolicyInterface',
),
'PhragmentFragmentPHIDType' => 'PhabricatorPHIDType',
'PhragmentFragmentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhragmentFragmentVersion' => array(
'PhragmentDAO',
'PhabricatorPolicyInterface',
),
'PhragmentFragmentVersionPHIDType' => 'PhabricatorPHIDType',
'PhragmentFragmentVersionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhragmentGetPatchConduitAPIMethod' => 'PhragmentConduitAPIMethod',
'PhragmentHistoryController' => 'PhragmentController',
'PhragmentPatchController' => 'PhragmentController',
'PhragmentPatchUtil' => 'Phobject',
'PhragmentPolicyController' => 'PhragmentController',
'PhragmentQueryFragmentsConduitAPIMethod' => 'PhragmentConduitAPIMethod',
'PhragmentRevertController' => 'PhragmentController',
'PhragmentSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhragmentSnapshot' => array(
'PhragmentDAO',
'PhabricatorPolicyInterface',
),
'PhragmentSnapshotChild' => array(
'PhragmentDAO',
'PhabricatorPolicyInterface',
),
'PhragmentSnapshotChildQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhragmentSnapshotCreateController' => 'PhragmentController',
'PhragmentSnapshotDeleteController' => 'PhragmentController',
'PhragmentSnapshotPHIDType' => 'PhabricatorPHIDType',
'PhragmentSnapshotPromoteController' => 'PhragmentController',
'PhragmentSnapshotQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhragmentSnapshotViewController' => 'PhragmentController',
'PhragmentUpdateController' => 'PhragmentController',
'PhragmentVersionController' => 'PhragmentController',
'PhragmentZIPController' => 'PhragmentController',
'PhrequentConduitAPIMethod' => 'ConduitAPIMethod',
'PhrequentController' => 'PhabricatorController',
'PhrequentDAO' => 'PhabricatorLiskDAO',
'PhrequentListController' => 'PhrequentController',
'PhrequentPopConduitAPIMethod' => 'PhrequentConduitAPIMethod',
'PhrequentPushConduitAPIMethod' => 'PhrequentConduitAPIMethod',
'PhrequentSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhrequentTimeBlock' => 'Phobject',
'PhrequentTimeBlockTestCase' => 'PhabricatorTestCase',
'PhrequentTimeSlices' => 'Phobject',
'PhrequentTrackController' => 'PhrequentController',
'PhrequentTrackingConduitAPIMethod' => 'PhrequentConduitAPIMethod',
'PhrequentTrackingEditor' => 'PhabricatorEditor',
'PhrequentUIEventListener' => 'PhabricatorEventListener',
'PhrequentUserTime' => array(
'PhrequentDAO',
'PhabricatorPolicyInterface',
),
'PhrequentUserTimeQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhrictionChangeType' => 'PhrictionConstants',
'PhrictionConduitAPIMethod' => 'ConduitAPIMethod',
'PhrictionConstants' => 'Phobject',
'PhrictionContent' => array(
'PhrictionDAO',
'PhabricatorMarkupInterface',
),
'PhrictionController' => 'PhabricatorController',
'PhrictionCreateConduitAPIMethod' => 'PhrictionConduitAPIMethod',
'PhrictionDAO' => 'PhabricatorLiskDAO',
'PhrictionDeleteController' => 'PhrictionController',
'PhrictionDiffController' => 'PhrictionController',
'PhrictionDocument' => array(
'PhrictionDAO',
'PhabricatorPolicyInterface',
'PhabricatorSubscribableInterface',
'PhabricatorFlaggableInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorDestructibleInterface',
'PhabricatorApplicationTransactionInterface',
),
'PhrictionDocumentAuthorHeraldField' => 'PhrictionDocumentHeraldField',
'PhrictionDocumentContentHeraldField' => 'PhrictionDocumentHeraldField',
'PhrictionDocumentController' => 'PhrictionController',
'PhrictionDocumentHeraldAdapter' => 'HeraldAdapter',
'PhrictionDocumentHeraldField' => 'HeraldField',
'PhrictionDocumentHeraldFieldGroup' => 'HeraldFieldGroup',
'PhrictionDocumentPHIDType' => 'PhabricatorPHIDType',
'PhrictionDocumentPathHeraldField' => 'PhrictionDocumentHeraldField',
'PhrictionDocumentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhrictionDocumentStatus' => 'PhrictionConstants',
'PhrictionDocumentTitleHeraldField' => 'PhrictionDocumentHeraldField',
'PhrictionEditConduitAPIMethod' => 'PhrictionConduitAPIMethod',
'PhrictionEditController' => 'PhrictionController',
'PhrictionHistoryConduitAPIMethod' => 'PhrictionConduitAPIMethod',
'PhrictionHistoryController' => 'PhrictionController',
'PhrictionInfoConduitAPIMethod' => 'PhrictionConduitAPIMethod',
'PhrictionListController' => 'PhrictionController',
'PhrictionMoveController' => 'PhrictionController',
'PhrictionNewController' => 'PhrictionController',
'PhrictionRemarkupRule' => 'PhutilRemarkupRule',
'PhrictionReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PhrictionSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PhrictionSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhrictionSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'PhrictionTransaction' => 'PhabricatorApplicationTransaction',
'PhrictionTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PhrictionTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
'PhrictionTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PolicyLockOptionType' => 'PhabricatorConfigJSONOptionType',
'PonderAddAnswerView' => 'AphrontView',
'PonderAnswer' => array(
'PonderDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorMarkupInterface',
'PonderVotableInterface',
'PhabricatorPolicyInterface',
'PhabricatorFlaggableInterface',
'PhabricatorSubscribableInterface',
'PhabricatorDestructibleInterface',
),
'PonderAnswerCommentController' => 'PonderController',
'PonderAnswerEditController' => 'PonderController',
'PonderAnswerEditor' => 'PonderEditor',
'PonderAnswerHasVotingUserEdgeType' => 'PhabricatorEdgeType',
'PonderAnswerHistoryController' => 'PonderController',
'PonderAnswerMailReceiver' => 'PhabricatorObjectMailReceiver',
'PonderAnswerPHIDType' => 'PhabricatorPHIDType',
'PonderAnswerQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PonderAnswerReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PonderAnswerSaveController' => 'PonderController',
'PonderAnswerStatus' => 'PonderConstants',
'PonderAnswerTransaction' => 'PhabricatorApplicationTransaction',
'PonderAnswerTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PonderAnswerTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PonderAnswerView' => 'AphrontTagView',
'PonderConstants' => 'Phobject',
'PonderController' => 'PhabricatorController',
'PonderDAO' => 'PhabricatorLiskDAO',
'PonderDefaultViewCapability' => 'PhabricatorPolicyCapability',
'PonderEditor' => 'PhabricatorApplicationTransactionEditor',
'PonderFooterView' => 'AphrontTagView',
'PonderHelpfulSaveController' => 'PonderController',
'PonderModerateCapability' => 'PhabricatorPolicyCapability',
'PonderQuestion' => array(
'PonderDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorMarkupInterface',
'PhabricatorSubscribableInterface',
'PhabricatorFlaggableInterface',
'PhabricatorPolicyInterface',
'PhabricatorTokenReceiverInterface',
'PhabricatorProjectInterface',
'PhabricatorDestructibleInterface',
'PhabricatorSpacesInterface',
),
'PonderQuestionCommentController' => 'PonderController',
'PonderQuestionEditController' => 'PonderController',
'PonderQuestionEditor' => 'PonderEditor',
'PonderQuestionHistoryController' => 'PonderController',
'PonderQuestionListController' => 'PonderController',
'PonderQuestionMailReceiver' => 'PhabricatorObjectMailReceiver',
'PonderQuestionPHIDType' => 'PhabricatorPHIDType',
'PonderQuestionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PonderQuestionReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PonderQuestionSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PonderQuestionStatus' => 'PonderConstants',
'PonderQuestionStatusController' => 'PonderController',
'PonderQuestionTransaction' => 'PhabricatorApplicationTransaction',
'PonderQuestionTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PonderQuestionTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PonderQuestionViewController' => 'PonderController',
'PonderRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'PonderSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PonderSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'PonderVote' => 'PonderConstants',
'PonderVoteEditor' => 'PhabricatorEditor',
'PonderVotingUserHasAnswerEdgeType' => 'PhabricatorEdgeType',
'ProjectAddProjectsEmailCommand' => 'MetaMTAEmailTransactionCommand',
'ProjectBoardTaskCard' => 'Phobject',
'ProjectCanLockProjectsCapability' => 'PhabricatorPolicyCapability',
'ProjectConduitAPIMethod' => 'ConduitAPIMethod',
'ProjectCreateConduitAPIMethod' => 'ProjectConduitAPIMethod',
'ProjectCreateProjectsCapability' => 'PhabricatorPolicyCapability',
'ProjectDefaultEditCapability' => 'PhabricatorPolicyCapability',
'ProjectDefaultJoinCapability' => 'PhabricatorPolicyCapability',
'ProjectDefaultViewCapability' => 'PhabricatorPolicyCapability',
'ProjectQueryConduitAPIMethod' => 'ProjectConduitAPIMethod',
'ProjectRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'ProjectRemarkupRuleTestCase' => 'PhabricatorTestCase',
'ProjectReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'QueryFormattingTestCase' => 'PhabricatorTestCase',
'ReleephAuthorFieldSpecification' => 'ReleephFieldSpecification',
'ReleephBranch' => array(
'ReleephDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
),
'ReleephBranchAccessController' => 'ReleephBranchController',
'ReleephBranchCommitFieldSpecification' => 'ReleephFieldSpecification',
'ReleephBranchController' => 'ReleephController',
'ReleephBranchCreateController' => 'ReleephProductController',
'ReleephBranchEditController' => 'ReleephBranchController',
'ReleephBranchEditor' => 'PhabricatorEditor',
'ReleephBranchHistoryController' => 'ReleephBranchController',
'ReleephBranchNamePreviewController' => 'ReleephController',
'ReleephBranchPHIDType' => 'PhabricatorPHIDType',
'ReleephBranchPreviewView' => 'AphrontFormControl',
'ReleephBranchQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'ReleephBranchSearchEngine' => 'PhabricatorApplicationSearchEngine',
'ReleephBranchTemplate' => 'Phobject',
'ReleephBranchTransaction' => 'PhabricatorApplicationTransaction',
'ReleephBranchTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'ReleephBranchViewController' => 'ReleephBranchController',
'ReleephCommitFinder' => 'Phobject',
'ReleephCommitFinderException' => 'Exception',
'ReleephCommitMessageFieldSpecification' => 'ReleephFieldSpecification',
'ReleephConduitAPIMethod' => 'ConduitAPIMethod',
'ReleephController' => 'PhabricatorController',
'ReleephDAO' => 'PhabricatorLiskDAO',
'ReleephDefaultFieldSelector' => 'ReleephFieldSelector',
'ReleephDependsOnFieldSpecification' => 'ReleephFieldSpecification',
'ReleephDiffChurnFieldSpecification' => 'ReleephFieldSpecification',
'ReleephDiffMessageFieldSpecification' => 'ReleephFieldSpecification',
'ReleephDiffSizeFieldSpecification' => 'ReleephFieldSpecification',
'ReleephFieldParseException' => 'Exception',
'ReleephFieldSelector' => 'Phobject',
'ReleephFieldSpecification' => array(
'PhabricatorCustomField',
'PhabricatorMarkupInterface',
),
'ReleephGetBranchesConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephIntentFieldSpecification' => 'ReleephFieldSpecification',
'ReleephLevelFieldSpecification' => 'ReleephFieldSpecification',
'ReleephOriginalCommitFieldSpecification' => 'ReleephFieldSpecification',
'ReleephProductActionController' => 'ReleephProductController',
'ReleephProductController' => 'ReleephController',
'ReleephProductCreateController' => 'ReleephProductController',
'ReleephProductEditController' => 'ReleephProductController',
'ReleephProductEditor' => 'PhabricatorApplicationTransactionEditor',
'ReleephProductHistoryController' => 'ReleephProductController',
'ReleephProductListController' => 'ReleephController',
'ReleephProductPHIDType' => 'PhabricatorPHIDType',
'ReleephProductQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'ReleephProductSearchEngine' => 'PhabricatorApplicationSearchEngine',
'ReleephProductTransaction' => 'PhabricatorApplicationTransaction',
'ReleephProductTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'ReleephProductViewController' => 'ReleephProductController',
'ReleephProject' => array(
'ReleephDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
),
'ReleephQueryBranchesConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephQueryProductsConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephQueryRequestsConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephReasonFieldSpecification' => 'ReleephFieldSpecification',
'ReleephRequest' => array(
'ReleephDAO',
'PhabricatorApplicationTransactionInterface',
'PhabricatorPolicyInterface',
'PhabricatorCustomFieldInterface',
),
'ReleephRequestActionController' => 'ReleephRequestController',
'ReleephRequestCommentController' => 'ReleephRequestController',
'ReleephRequestConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephRequestController' => 'ReleephController',
'ReleephRequestDifferentialCreateController' => 'ReleephController',
'ReleephRequestEditController' => 'ReleephBranchController',
'ReleephRequestMailReceiver' => 'PhabricatorObjectMailReceiver',
'ReleephRequestPHIDType' => 'PhabricatorPHIDType',
'ReleephRequestQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'ReleephRequestReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'ReleephRequestSearchEngine' => 'PhabricatorApplicationSearchEngine',
'ReleephRequestStatus' => 'Phobject',
'ReleephRequestTransaction' => 'PhabricatorApplicationTransaction',
'ReleephRequestTransactionComment' => 'PhabricatorApplicationTransactionComment',
'ReleephRequestTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'ReleephRequestTransactionalEditor' => 'PhabricatorApplicationTransactionEditor',
'ReleephRequestTypeaheadControl' => 'AphrontFormControl',
'ReleephRequestTypeaheadController' => 'PhabricatorTypeaheadDatasourceController',
'ReleephRequestView' => 'AphrontView',
'ReleephRequestViewController' => 'ReleephBranchController',
'ReleephRequestorFieldSpecification' => 'ReleephFieldSpecification',
'ReleephRevisionFieldSpecification' => 'ReleephFieldSpecification',
'ReleephSeverityFieldSpecification' => 'ReleephLevelFieldSpecification',
'ReleephSummaryFieldSpecification' => 'ReleephFieldSpecification',
'ReleephWorkCanPushConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephWorkGetAuthorInfoConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephWorkGetBranchCommitMessageConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephWorkGetBranchConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephWorkGetCommitMessageConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephWorkNextRequestConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephWorkRecordConduitAPIMethod' => 'ReleephConduitAPIMethod',
'ReleephWorkRecordPickStatusConduitAPIMethod' => 'ReleephConduitAPIMethod',
'RemarkupProcessConduitAPIMethod' => 'ConduitAPIMethod',
'RepositoryConduitAPIMethod' => 'ConduitAPIMethod',
'RepositoryCreateConduitAPIMethod' => 'RepositoryConduitAPIMethod',
'RepositoryQueryConduitAPIMethod' => 'RepositoryConduitAPIMethod',
'ShellLogView' => 'AphrontView',
'SlowvoteConduitAPIMethod' => 'ConduitAPIMethod',
'SlowvoteEmbedView' => 'AphrontView',
'SlowvoteInfoConduitAPIMethod' => 'SlowvoteConduitAPIMethod',
'SlowvoteRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'SubscriptionListDialogBuilder' => 'Phobject',
'SubscriptionListStringBuilder' => 'Phobject',
'TokenConduitAPIMethod' => 'ConduitAPIMethod',
'TokenGiveConduitAPIMethod' => 'TokenConduitAPIMethod',
'TokenGivenConduitAPIMethod' => 'TokenConduitAPIMethod',
'TokenQueryConduitAPIMethod' => 'TokenConduitAPIMethod',
'UserConduitAPIMethod' => 'ConduitAPIMethod',
'UserDisableConduitAPIMethod' => 'UserConduitAPIMethod',
'UserEnableConduitAPIMethod' => 'UserConduitAPIMethod',
'UserFindConduitAPIMethod' => 'UserConduitAPIMethod',
'UserQueryConduitAPIMethod' => 'UserConduitAPIMethod',
'UserWhoAmIConduitAPIMethod' => 'UserConduitAPIMethod',
),
));
diff --git a/src/applications/auth/factor/PhabricatorTOTPAuthFactor.php b/src/applications/auth/factor/PhabricatorTOTPAuthFactor.php
index f99a5f4a3..8c29eb7d1 100644
--- a/src/applications/auth/factor/PhabricatorTOTPAuthFactor.php
+++ b/src/applications/auth/factor/PhabricatorTOTPAuthFactor.php
@@ -1,308 +1,305 @@
<?php
final class PhabricatorTOTPAuthFactor extends PhabricatorAuthFactor {
const TEMPORARY_TOKEN_TYPE = 'mfa:totp:key';
public function getFactorKey() {
return 'totp';
}
public function getFactorName() {
return pht('Mobile Phone App (TOTP)');
}
public function getFactorDescription() {
return pht(
'Attach a mobile authenticator application (like Authy '.
'or Google Authenticator) to your account. When you need to '.
'authenticate, you will enter a code shown on your phone.');
}
public function processAddFactorForm(
AphrontFormView $form,
AphrontRequest $request,
PhabricatorUser $user) {
$key = $request->getStr('totpkey');
if (strlen($key)) {
// If the user is providing a key, make sure it's a key we generated.
// This raises the barrier to theoretical attacks where an attacker might
// provide a known key (such attacks are already prevented by CSRF, but
// this is a second barrier to overcome).
// (We store and verify the hash of the key, not the key itself, to limit
// how useful the data in the table is to an attacker.)
$temporary_token = id(new PhabricatorAuthTemporaryTokenQuery())
->setViewer($user)
->withObjectPHIDs(array($user->getPHID()))
->withTokenTypes(array(self::TEMPORARY_TOKEN_TYPE))
->withExpired(false)
->withTokenCodes(array(PhabricatorHash::digest($key)))
->executeOne();
if (!$temporary_token) {
// If we don't have a matching token, regenerate the key below.
$key = null;
}
}
if (!strlen($key)) {
$key = self::generateNewTOTPKey();
// Mark this key as one we generated, so the user is allowed to submit
// a response for it.
$unguarded = AphrontWriteGuard::beginScopedUnguardedWrites();
id(new PhabricatorAuthTemporaryToken())
->setObjectPHID($user->getPHID())
->setTokenType(self::TEMPORARY_TOKEN_TYPE)
->setTokenExpires(time() + phutil_units('1 hour in seconds'))
->setTokenCode(PhabricatorHash::digest($key))
->save();
unset($unguarded);
}
$code = $request->getStr('totpcode');
$e_code = true;
if ($request->getExists('totp')) {
$okay = self::verifyTOTPCode(
$user,
new PhutilOpaqueEnvelope($key),
$code);
if ($okay) {
$config = $this->newConfigForUser($user)
->setFactorName(pht('Mobile App (TOTP)'))
->setFactorSecret($key);
return $config;
} else {
if (!strlen($code)) {
$e_code = pht('Required');
} else {
$e_code = pht('Invalid');
}
}
}
$form->addHiddenInput('totp', true);
$form->addHiddenInput('totpkey', $key);
$form->appendRemarkupInstructions(
pht(
'First, download an authenticator application on your phone. Two '.
'applications which work well are **Authy** and **Google '.
'Authenticator**, but any other TOTP application should also work.'));
$form->appendInstructions(
pht(
'Launch the application on your phone, and add a new entry for '.
'this Phabricator install. When prompted, scan the QR code or '.
'manually enter the key shown below into the application.'));
$prod_uri = new PhutilURI(PhabricatorEnv::getProductionURI('/'));
$issuer = $prod_uri->getDomain();
$uri = urisprintf(
'otpauth://totp/%s:%s?secret=%s&issuer=%s',
$issuer,
$user->getUsername(),
$key,
$issuer);
$qrcode = $this->renderQRCode($uri);
$form->appendChild($qrcode);
$form->appendChild(
id(new AphrontFormStaticControl())
->setLabel(pht('Key'))
->setValue(phutil_tag('strong', array(), $key)));
$form->appendInstructions(
pht(
'(If given an option, select that this key is "Time Based", not '.
'"Counter Based".)'));
$form->appendInstructions(
pht(
'After entering the key, the application should display a numeric '.
'code. Enter that code below to confirm that you have configured '.
'the authenticator correctly:'));
$form->appendChild(
id(new AphrontFormTextControl())
->setLabel(pht('TOTP Code'))
->setName('totpcode')
->setValue($code)
->setError($e_code));
}
public function renderValidateFactorForm(
PhabricatorAuthFactorConfig $config,
AphrontFormView $form,
PhabricatorUser $viewer,
$validation_result) {
if (!$validation_result) {
$validation_result = array();
}
$form->appendChild(
id(new AphrontFormTextControl())
->setName($this->getParameterName($config, 'totpcode'))
->setLabel(pht('App Code'))
->setCaption(pht('Factor Name: %s', $config->getFactorName()))
->setValue(idx($validation_result, 'value'))
->setError(idx($validation_result, 'error', true)));
}
public function processValidateFactorForm(
PhabricatorAuthFactorConfig $config,
PhabricatorUser $viewer,
AphrontRequest $request) {
$code = $request->getStr($this->getParameterName($config, 'totpcode'));
$key = new PhutilOpaqueEnvelope($config->getFactorSecret());
if (self::verifyTOTPCode($viewer, $key, $code)) {
return array(
'error' => null,
'value' => $code,
'valid' => true,
);
} else {
return array(
'error' => strlen($code) ? pht('Invalid') : pht('Required'),
'value' => $code,
'valid' => false,
);
}
}
public static function generateNewTOTPKey() {
return strtoupper(Filesystem::readRandomCharacters(16));
}
public static function verifyTOTPCode(
PhabricatorUser $user,
PhutilOpaqueEnvelope $key,
$code) {
- // TODO: This should use rate limiting to prevent multiple attempts in a
- // short period of time.
-
$now = (int)(time() / 30);
// Allow the user to enter a code a few minutes away on either side, in
// case the server or client has some clock skew.
for ($offset = -2; $offset <= 2; $offset++) {
$real = self::getTOTPCode($key, $now + $offset);
if (phutil_hashes_are_identical($real, $code)) {
return true;
}
}
// TODO: After validating a code, this should mark it as used and prevent
// it from being reused.
return false;
}
public static function base32Decode($buf) {
$buf = strtoupper($buf);
$map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
$map = str_split($map);
$map = array_flip($map);
$out = '';
$len = strlen($buf);
$acc = 0;
$bits = 0;
for ($ii = 0; $ii < $len; $ii++) {
$chr = $buf[$ii];
$val = $map[$chr];
$acc = $acc << 5;
$acc = $acc + $val;
$bits += 5;
if ($bits >= 8) {
$bits = $bits - 8;
$out .= chr(($acc & (0xFF << $bits)) >> $bits);
}
}
return $out;
}
public static function getTOTPCode(PhutilOpaqueEnvelope $key, $timestamp) {
$binary_timestamp = pack('N*', 0).pack('N*', $timestamp);
$binary_key = self::base32Decode($key->openEnvelope());
$hash = hash_hmac('sha1', $binary_timestamp, $binary_key, true);
// See RFC 4226.
$offset = ord($hash[19]) & 0x0F;
$code = ((ord($hash[$offset + 0]) & 0x7F) << 24) |
((ord($hash[$offset + 1]) & 0xFF) << 16) |
((ord($hash[$offset + 2]) & 0xFF) << 8) |
((ord($hash[$offset + 3]) ) );
$code = ($code % 1000000);
$code = str_pad($code, 6, '0', STR_PAD_LEFT);
return $code;
}
/**
* @phutil-external-symbol class QRcode
*/
private function renderQRCode($uri) {
$root = dirname(phutil_get_library_root('phabricator'));
require_once $root.'/externals/phpqrcode/phpqrcode.php';
$lines = QRcode::text($uri);
$total_width = 240;
$cell_size = floor($total_width / count($lines));
$rows = array();
foreach ($lines as $line) {
$cells = array();
for ($ii = 0; $ii < strlen($line); $ii++) {
if ($line[$ii] == '1') {
$color = '#000';
} else {
$color = '#fff';
}
$cells[] = phutil_tag(
'td',
array(
'width' => $cell_size,
'height' => $cell_size,
'style' => 'background: '.$color,
),
'');
}
$rows[] = phutil_tag('tr', array(), $cells);
}
return phutil_tag(
'table',
array(
'style' => 'margin: 24px auto;',
),
$rows);
}
}
diff --git a/src/applications/auth/management/PhabricatorAuthManagementUnlimitWorkflow.php b/src/applications/auth/management/PhabricatorAuthManagementUnlimitWorkflow.php
new file mode 100644
index 000000000..843a5f70c
--- /dev/null
+++ b/src/applications/auth/management/PhabricatorAuthManagementUnlimitWorkflow.php
@@ -0,0 +1,67 @@
+<?php
+
+final class PhabricatorAuthManagementUnlimitWorkflow
+ extends PhabricatorAuthManagementWorkflow {
+
+ protected function didConstruct() {
+ $this
+ ->setName('unlimit')
+ ->setExamples('**unlimit** --user __username__ --all')
+ ->setSynopsis(
+ pht(
+ 'Reset action counters so a user can continue taking '.
+ 'rate-limited actions.'))
+ ->setArguments(
+ array(
+ array(
+ 'name' => 'user',
+ 'param' => 'username',
+ 'help' => pht('Reset action counters for this user.'),
+ ),
+ array(
+ 'name' => 'all',
+ 'help' => pht('Reset all counters.'),
+ ),
+ ));
+ }
+
+ public function execute(PhutilArgumentParser $args) {
+ $username = $args->getArg('user');
+ if (!strlen($username)) {
+ throw new PhutilArgumentUsageException(
+ pht(
+ 'Use %s to choose a user to reset actions for.', '--user'));
+ }
+
+ $user = id(new PhabricatorPeopleQuery())
+ ->setViewer($this->getViewer())
+ ->withUsernames(array($username))
+ ->executeOne();
+ if (!$user) {
+ throw new PhutilArgumentUsageException(
+ pht(
+ 'No user exists with username "%s".',
+ $username));
+ }
+
+ $all = $args->getArg('all');
+ if (!$all) {
+ // TODO: Eventually, let users reset specific actions. For now, we
+ // require `--all` so that usage won't change when you can reset in a
+ // more tailored way.
+ throw new PhutilArgumentUsageException(
+ pht(
+ 'Specify %s to reset all action counters.', '--all'));
+ }
+
+ $count = PhabricatorSystemActionEngine::resetActions(
+ array(
+ $user->getPHID(),
+ ));
+
+ echo pht('Reset %s action(s).', new PhutilNumber($count))."\n";
+
+ return 0;
+ }
+
+}
diff --git a/src/applications/macro/controller/PhabricatorMacroViewController.php b/src/applications/macro/controller/PhabricatorMacroViewController.php
index 8915954fc..02a6f0d34 100644
--- a/src/applications/macro/controller/PhabricatorMacroViewController.php
+++ b/src/applications/macro/controller/PhabricatorMacroViewController.php
@@ -1,175 +1,176 @@
<?php
final class PhabricatorMacroViewController
extends PhabricatorMacroController {
public function shouldAllowPublic() {
return true;
}
public function handleRequest(AphrontRequest $request) {
$viewer = $request->getViewer();
$id = $request->getURIData('id');
$macro = id(new PhabricatorMacroQuery())
->setViewer($viewer)
->withIDs(array($id))
->needFiles(true)
->executeOne();
if (!$macro) {
return new Aphront404Response();
}
$file = $macro->getFile();
$title_short = pht('Macro "%s"', $macro->getName());
$title_long = pht('Image Macro "%s"', $macro->getName());
$actions = $this->buildActionView($macro);
$crumbs = $this->buildApplicationCrumbs();
$crumbs->addTextCrumb(
$title_short,
$this->getApplicationURI('/view/'.$macro->getID().'/'));
$properties = $this->buildPropertyView($macro, $actions);
if ($file) {
$file_view = new PHUIPropertyListView();
$file_view->addImageContent(
phutil_tag(
'img',
array(
'src' => $file->getViewURI(),
'class' => 'phabricator-image-macro-hero',
)));
}
$timeline = $this->buildTransactionTimeline(
$macro,
new PhabricatorMacroTransactionQuery());
$header = id(new PHUIHeaderView())
->setUser($viewer)
->setPolicyObject($macro)
->setHeader($title_long);
if (!$macro->getIsDisabled()) {
$header->setStatus('fa-check', 'bluegrey', pht('Active'));
} else {
$header->setStatus('fa-ban', 'red', pht('Archived'));
}
$is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business');
$comment_header = $is_serious
? pht('Add Comment')
: pht('Grovel in Awe');
$draft = PhabricatorDraft::newFromUserAndKey($viewer, $macro->getPHID());
$add_comment_form = id(new PhabricatorApplicationTransactionCommentView())
->setUser($viewer)
->setObjectPHID($macro->getPHID())
->setDraft($draft)
->setHeaderText($comment_header)
->setAction($this->getApplicationURI('/comment/'.$macro->getID().'/'))
->setSubmitButtonName(pht('Add Comment'));
$object_box = id(new PHUIObjectBoxView())
->setHeader($header)
->addPropertyList($properties);
if ($file_view) {
$object_box->addPropertyList($file_view);
}
return $this->buildApplicationPage(
array(
$crumbs,
$object_box,
$timeline,
$add_comment_form,
),
array(
'title' => $title_short,
+ 'pageObjects' => array($macro->getPHID()),
));
}
private function buildActionView(PhabricatorFileImageMacro $macro) {
$can_manage = $this->hasApplicationCapability(
PhabricatorMacroManageCapability::CAPABILITY);
$request = $this->getRequest();
$view = id(new PhabricatorActionListView())
->setUser($request->getUser())
->setObject($macro)
->setObjectURI($request->getRequestURI())
->addAction(
id(new PhabricatorActionView())
->setName(pht('Edit Macro'))
->setHref($this->getApplicationURI('/edit/'.$macro->getID().'/'))
->setDisabled(!$can_manage)
->setWorkflow(!$can_manage)
->setIcon('fa-pencil'));
$view->addAction(
id(new PhabricatorActionView())
->setName(pht('Edit Audio'))
->setHref($this->getApplicationURI('/audio/'.$macro->getID().'/'))
->setDisabled(!$can_manage)
->setWorkflow(!$can_manage)
->setIcon('fa-music'));
if ($macro->getIsDisabled()) {
$view->addAction(
id(new PhabricatorActionView())
->setName(pht('Activate Macro'))
->setHref($this->getApplicationURI('/disable/'.$macro->getID().'/'))
->setWorkflow(true)
->setDisabled(!$can_manage)
->setIcon('fa-check'));
} else {
$view->addAction(
id(new PhabricatorActionView())
->setName(pht('Archive Macro'))
->setHref($this->getApplicationURI('/disable/'.$macro->getID().'/'))
->setWorkflow(true)
->setDisabled(!$can_manage)
->setIcon('fa-ban'));
}
return $view;
}
private function buildPropertyView(
PhabricatorFileImageMacro $macro,
PhabricatorActionListView $actions) {
$viewer = $this->getViewer();
$view = id(new PHUIPropertyListView())
->setUser($this->getRequest()->getUser())
->setObject($macro)
->setActionList($actions);
switch ($macro->getAudioBehavior()) {
case PhabricatorFileImageMacro::AUDIO_BEHAVIOR_ONCE:
$view->addProperty(pht('Audio Behavior'), pht('Play Once'));
break;
case PhabricatorFileImageMacro::AUDIO_BEHAVIOR_LOOP:
$view->addProperty(pht('Audio Behavior'), pht('Loop'));
break;
}
$audio_phid = $macro->getAudioPHID();
if ($audio_phid) {
$view->addProperty(
pht('Audio'),
$viewer->renderHandle($audio_phid));
}
$view->invokeWillRenderEvent();
return $view;
}
}
diff --git a/src/applications/paste/controller/PhabricatorPasteViewController.php b/src/applications/paste/controller/PhabricatorPasteViewController.php
index 0273636d0..382d683f3 100644
--- a/src/applications/paste/controller/PhabricatorPasteViewController.php
+++ b/src/applications/paste/controller/PhabricatorPasteViewController.php
@@ -1,214 +1,216 @@
<?php
/**
* group paste
*/
final class PhabricatorPasteViewController extends PhabricatorPasteController {
private $highlightMap;
public function shouldAllowPublic() {
return true;
}
public function willProcessRequest(array $data) {
$raw_lines = idx($data, 'lines');
$map = array();
if ($raw_lines) {
$lines = explode('-', $raw_lines);
$first = idx($lines, 0, 0);
$last = idx($lines, 1);
if ($last) {
$min = min($first, $last);
$max = max($first, $last);
$map = array_fuse(range($min, $max));
} else {
$map[$first] = $first;
}
}
$this->highlightMap = $map;
}
public function handleRequest(AphrontRequest $request) {
$viewer = $request->getViewer();
$id = $request->getURIData('id');
$paste = id(new PhabricatorPasteQuery())
->setViewer($viewer)
->withIDs(array($id))
->needContent(true)
->executeOne();
if (!$paste) {
return new Aphront404Response();
}
$file = id(new PhabricatorFileQuery())
->setViewer($viewer)
->withPHIDs(array($paste->getFilePHID()))
->executeOne();
if (!$file) {
return new Aphront400Response();
}
$forks = id(new PhabricatorPasteQuery())
->setViewer($viewer)
->withParentPHIDs(array($paste->getPHID()))
->execute();
$fork_phids = mpull($forks, 'getPHID');
$header = $this->buildHeaderView($paste);
$actions = $this->buildActionView($viewer, $paste, $file);
$properties = $this->buildPropertyView($paste, $fork_phids, $actions);
$object_box = id(new PHUIObjectBoxView())
->setHeader($header)
->addPropertyList($properties);
$source_code = $this->buildSourceCodeView(
$paste,
null,
$this->highlightMap);
- $source_code = id(new PHUIBoxView())
- ->appendChild($source_code)
- ->addMargin(PHUI::MARGIN_LARGE_LEFT)
- ->addMargin(PHUI::MARGIN_LARGE_RIGHT)
- ->addMargin(PHUI::MARGIN_LARGE_TOP);
+ require_celerity_resource('paste-css');
+ $source_code = phutil_tag(
+ 'div',
+ array(
+ 'class' => 'container-of-paste',
+ ),
+ $source_code);
$crumbs = $this->buildApplicationCrumbs($this->buildSideNavView())
->addTextCrumb('P'.$paste->getID(), '/P'.$paste->getID());
$timeline = $this->buildTransactionTimeline(
$paste,
new PhabricatorPasteTransactionQuery());
$is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business');
$add_comment_header = $is_serious
? pht('Add Comment')
: pht('Eat Paste');
$draft = PhabricatorDraft::newFromUserAndKey($viewer, $paste->getPHID());
$add_comment_form = id(new PhabricatorApplicationTransactionCommentView())
->setUser($viewer)
->setObjectPHID($paste->getPHID())
->setDraft($draft)
->setHeaderText($add_comment_header)
->setAction($this->getApplicationURI('/comment/'.$paste->getID().'/'))
->setSubmitButtonName(pht('Add Comment'));
return $this->buildApplicationPage(
array(
$crumbs,
$object_box,
$source_code,
$timeline,
$add_comment_form,
),
array(
'title' => $paste->getFullName(),
'pageObjects' => array($paste->getPHID()),
));
}
private function buildHeaderView(PhabricatorPaste $paste) {
$title = (nonempty($paste->getTitle())) ?
$paste->getTitle() : pht('(An Untitled Masterwork)');
if ($paste->isArchived()) {
$header_icon = 'fa-ban';
$header_name = pht('Archived');
$header_color = 'dark';
} else {
$header_icon = 'fa-check';
$header_name = pht('Active');
$header_color = 'bluegrey';
}
$header = id(new PHUIHeaderView())
->setHeader($title)
->setUser($this->getRequest()->getUser())
->setStatus($header_icon, $header_color, $header_name)
->setPolicyObject($paste);
return $header;
}
private function buildActionView(
PhabricatorUser $viewer,
PhabricatorPaste $paste,
PhabricatorFile $file) {
$can_edit = PhabricatorPolicyFilter::hasCapability(
$viewer,
$paste,
PhabricatorPolicyCapability::CAN_EDIT);
$can_fork = $viewer->isLoggedIn();
$fork_uri = $this->getApplicationURI('/create/?parent='.$paste->getID());
return id(new PhabricatorActionListView())
->setUser($viewer)
->setObject($paste)
->setObjectURI($this->getRequest()->getRequestURI())
->addAction(
id(new PhabricatorActionView())
->setName(pht('Edit Paste'))
->setIcon('fa-pencil')
->setDisabled(!$can_edit)
->setWorkflow(!$can_edit)
->setHref($this->getApplicationURI('/edit/'.$paste->getID().'/')))
->addAction(
id(new PhabricatorActionView())
->setName(pht('Fork This Paste'))
->setIcon('fa-code-fork')
->setDisabled(!$can_fork)
->setWorkflow(!$can_fork)
->setHref($fork_uri))
->addAction(
id(new PhabricatorActionView())
->setName(pht('View Raw File'))
->setIcon('fa-file-text-o')
->setHref($file->getBestURI()));
}
private function buildPropertyView(
PhabricatorPaste $paste,
array $child_phids,
PhabricatorActionListView $actions) {
$viewer = $this->getViewer();
$properties = id(new PHUIPropertyListView())
->setUser($viewer)
->setObject($paste)
->setActionList($actions);
$properties->addProperty(
pht('Author'),
$viewer->renderHandle($paste->getAuthorPHID()));
$properties->addProperty(
pht('Created'),
phabricator_datetime($paste->getDateCreated(), $viewer));
if ($paste->getParentPHID()) {
$properties->addProperty(
pht('Forked From'),
$viewer->renderHandle($paste->getParentPHID()));
}
if ($child_phids) {
$properties->addProperty(
pht('Forks'),
$viewer->renderHandleList($child_phids));
}
$descriptions = PhabricatorPolicyQuery::renderPolicyDescriptions(
$viewer,
$paste);
return $properties;
}
}
diff --git a/src/applications/system/engine/PhabricatorSystemActionEngine.php b/src/applications/system/engine/PhabricatorSystemActionEngine.php
index 8f463c588..b6a8e2671 100644
--- a/src/applications/system/engine/PhabricatorSystemActionEngine.php
+++ b/src/applications/system/engine/PhabricatorSystemActionEngine.php
@@ -1,170 +1,201 @@
<?php
final class PhabricatorSystemActionEngine extends Phobject {
/**
* Prepare to take an action, throwing an exception if the user has exceeded
* the rate limit.
*
* The `$actors` are a list of strings. Normally this will be a list of
* user PHIDs, but some systems use other identifiers (like email
* addresses). Each actor's score threshold is tracked independently. If
* any actor exceeds the rate limit for the action, this method throws.
*
* The `$action` defines the actual thing being rate limited, and sets the
* limit.
*
* You can pass either a positive, zero, or negative `$score` to this method:
*
* - If the score is positive, the user is given that many points toward
* the rate limit after the limit is checked. Over time, this will cause
* them to hit the rate limit and be prevented from taking further
* actions.
* - If the score is zero, the rate limit is checked but no score changes
* are made. This allows you to check for a rate limit before beginning
* a workflow, so the user doesn't fill in a form only to get rate limited
* at the end.
* - If the score is negative, the user is credited points, allowing them
* to take more actions than the limit normally permits. By awarding
* points for failed actions and credits for successful actions, a
* system can be sensitive to failure without overly restricting
* legitimate uses.
*
* If any actor is exceeding their rate limit, this method throws a
* @{class:PhabricatorSystemActionRateLimitException}.
*
* @param list<string> List of actors.
* @param PhabricatorSystemAction Action being taken.
* @param float Score or credit, see above.
* @return void
*/
public static function willTakeAction(
array $actors,
PhabricatorSystemAction $action,
$score) {
// If the score for this action is negative, we're giving the user a credit,
// so don't bother checking if they're blocked or not.
if ($score >= 0) {
$blocked = self::loadBlockedActors($actors, $action, $score);
if ($blocked) {
foreach ($blocked as $actor => $actor_score) {
throw new PhabricatorSystemActionRateLimitException(
$action,
$actor_score);
}
}
}
if ($score != 0) {
$unguarded = AphrontWriteGuard::beginScopedUnguardedWrites();
self::recordAction($actors, $action, $score);
unset($unguarded);
}
}
public static function loadBlockedActors(
array $actors,
PhabricatorSystemAction $action,
$score) {
$scores = self::loadScores($actors, $action);
$window = self::getWindow();
$blocked = array();
foreach ($scores as $actor => $actor_score) {
// For the purposes of checking for a block, we just use the raw
// persistent score and do not include the score for this action. This
// allows callers to test for a block without adding any points and get
// the same result they would if they were adding points: we only
// trigger a rate limit when the persistent score exceeds the threshold.
if ($action->shouldBlockActor($actor, $actor_score)) {
// When reporting the results, we do include the points for this
// action. This makes the error messages more clear, since they
// more accurately report the number of actions the user has really
// tried to take.
$blocked[$actor] = $actor_score + ($score / $window);
}
}
return $blocked;
}
public static function loadScores(
array $actors,
PhabricatorSystemAction $action) {
if (!$actors) {
return array();
}
$actor_hashes = array();
foreach ($actors as $actor) {
$actor_hashes[] = PhabricatorHash::digestForIndex($actor);
}
$log = new PhabricatorSystemActionLog();
$window = self::getWindow();
$conn_r = $log->establishConnection('r');
$scores = queryfx_all(
$conn_r,
'SELECT actorIdentity, SUM(score) totalScore FROM %T
WHERE action = %s AND actorHash IN (%Ls)
AND epoch >= %d GROUP BY actorHash',
$log->getTableName(),
$action->getActionConstant(),
$actor_hashes,
(time() - $window));
$scores = ipull($scores, 'totalScore', 'actorIdentity');
foreach ($scores as $key => $score) {
$scores[$key] = $score / $window;
}
$scores = $scores + array_fill_keys($actors, 0);
return $scores;
}
private static function recordAction(
array $actors,
PhabricatorSystemAction $action,
$score) {
$log = new PhabricatorSystemActionLog();
$conn_w = $log->establishConnection('w');
$sql = array();
foreach ($actors as $actor) {
$sql[] = qsprintf(
$conn_w,
'(%s, %s, %s, %f, %d)',
PhabricatorHash::digestForIndex($actor),
$actor,
$action->getActionConstant(),
$score,
time());
}
foreach (PhabricatorLiskDAO::chunkSQL($sql) as $chunk) {
queryfx(
$conn_w,
'INSERT INTO %T (actorHash, actorIdentity, action, score, epoch)
VALUES %Q',
$log->getTableName(),
$chunk);
}
}
private static function getWindow() {
// Limit queries to the last hour of data so we don't need to look at as
// many rows. We can use an arbitrarily larger window instead (we normalize
// scores to actions per second) but all the actions we care about limiting
// have a limit much higher than one action per hour.
return phutil_units('1 hour in seconds');
}
+
+ /**
+ * Reset all action counts for actions taken by some set of actors in the
+ * previous action window.
+ *
+ * @param list<string> Actors to reset counts for.
+ * @return int Number of actions cleared.
+ */
+ public static function resetActions(array $actors) {
+ $log = new PhabricatorSystemActionLog();
+ $conn_w = $log->establishConnection('w');
+
+ $now = PhabricatorTime::getNow();
+
+ $hashes = array();
+ foreach ($actors as $actor) {
+ $hashes[] = PhabricatorHash::digestForIndex($actor);
+ }
+
+ queryfx(
+ $conn_w,
+ 'DELETE FROM %T
+ WHERE actorHash IN (%Ls) AND epoch BETWEEN %d AND %d',
+ $log->getTableName(),
+ $hashes,
+ $now - self::getWindow(),
+ $now);
+
+ return $conn_w->getAffectedRows();
+ }
+
}
diff --git a/src/applications/uiexample/examples/PHUIActionPanelExample.php b/src/applications/uiexample/examples/PHUIActionPanelExample.php
index cbffbf612..c57617a56 100644
--- a/src/applications/uiexample/examples/PHUIActionPanelExample.php
+++ b/src/applications/uiexample/examples/PHUIActionPanelExample.php
@@ -1,99 +1,92 @@
<?php
final class PHUIActionPanelExample extends PhabricatorUIExample {
public function getName() {
return pht('Action Panel');
}
public function getDescription() {
return pht('A panel with strong tendencies for inciting ACTION!');
}
public function renderExample() {
$view = id(new AphrontMultiColumnView())
- ->setFluidLayout(true)
- ->setBorder(true);
+ ->setFluidLayout(true);
/* Action Panels */
$panel1 = id(new PHUIActionPanelView())
->setFontIcon('fa-book')
->setHeader(pht('Read Documentation'))
->setHref('#')
->setSubHeader(pht('Reading is a common way to learn about things.'))
- ->setStatus(pht('Carrots help you see better.'))
- ->setState(PHUIActionPanelView::STATE_NONE);
+ ->setState(PHUIActionPanelView::COLOR_BLUE);
$view->addColumn($panel1);
$panel2 = id(new PHUIActionPanelView())
->setFontIcon('fa-server')
->setHeader(pht('Launch Instance'))
->setHref('#')
->setSubHeader(pht("Maybe this is what you're likely here for."))
- ->setStatus(pht('You have no instances.'))
- ->setState(PHUIActionPanelView::STATE_ERROR);
+ ->setState(PHUIActionPanelView::COLOR_RED);
$view->addColumn($panel2);
$panel3 = id(new PHUIActionPanelView())
->setFontIcon('fa-group')
->setHeader(pht('Code with Friends'))
->setHref('#')
->setSubHeader(pht('Writing code is much more fun with friends!'))
- ->setStatus(pht('You need more friends.'))
- ->setState(PHUIActionPanelView::STATE_WARN);
+ ->setState(PHUIActionPanelView::COLOR_YELLOW);
$view->addColumn($panel3);
$panel4 = id(new PHUIActionPanelView())
->setFontIcon('fa-cloud-download')
->setHeader(pht('Download Data'))
->setHref('#')
->setSubHeader(pht('Need a backup of all your kitten memes?'))
- ->setStatus(pht('Building Download'))
- ->setState(PHUIActionPanelView::STATE_PROGRESS);
+ ->setState(PHUIActionPanelView::COLOR_PINK);
$view->addColumn($panel4);
$view2 = id(new AphrontMultiColumnView())
- ->setFluidLayout(true)
- ->setBorder(true);
+ ->setFluidLayout(true);
/* Action Panels */
$panel1 = id(new PHUIActionPanelView())
->setFontIcon('fa-credit-card')
->setHeader(pht('Account Balance'))
->setHref('#')
->setSubHeader(pht('You were last billed $2,245.12 on Dec 12, 2014.'))
- ->setStatus(pht('Account in good standing.'))
- ->setState(PHUIActionPanelView::STATE_SUCCESS);
+ ->setState(PHUIActionPanelView::COLOR_GREEN);
$view2->addColumn($panel1);
$panel2 = id(new PHUIActionPanelView())
- ->setBigText('148')
+ ->setBigText(true)
->setHeader(pht('Instance Users'))
->setHref('#')
->setSubHeader(
- pht('You currently have 140 active and 8 inactive accounts'));
+ pht('148'));
$view2->addColumn($panel2);
$panel3 = id(new PHUIActionPanelView())
- ->setBigText('March 12')
+ ->setBigText(true)
->setHeader(pht('Next Maintenance Window'))
->setHref('#')
->setSubHeader(
- pht('At 6:00 am PST, Phacility will conduct weekly maintenence.'))
- ->setStatus(pht('Very Important!'))
- ->setState(PHUIActionPanelView::STATE_ERROR);
+ pht('March 12'))
+ ->setState(PHUIActionPanelView::COLOR_ORANGE);
$view2->addColumn($panel3);
$panel4 = id(new PHUIActionPanelView())
- ->setBigText('1,113,377')
+ ->setBigText(true)
->setHeader(pht('Lines of Code'))
->setHref('#')
- ->setSubHeader(pht('Your team has reviewed lots of code!'));
+ ->setSubHeader(pht('1,113,377'))
+ ->setState(PHUIActionPanelView::COLOR_INDIGO);
$view2->addColumn($panel4);
$view = phutil_tag_div('mlb', $view);
return phutil_tag_div('ml', array($view, $view2));
}
}
diff --git a/src/infrastructure/markup/interpreter/PhabricatorRemarkupCowsayBlockInterpreter.php b/src/infrastructure/markup/interpreter/PhabricatorRemarkupCowsayBlockInterpreter.php
index d1c4de115..66801d957 100644
--- a/src/infrastructure/markup/interpreter/PhabricatorRemarkupCowsayBlockInterpreter.php
+++ b/src/infrastructure/markup/interpreter/PhabricatorRemarkupCowsayBlockInterpreter.php
@@ -1,60 +1,68 @@
<?php
final class PhabricatorRemarkupCowsayBlockInterpreter
extends PhutilRemarkupBlockInterpreter {
public function getInterpreterName() {
return 'cowsay';
}
public function markupContent($content, array $argv) {
- if (!Filesystem::binaryExists('cowsay')) {
- return $this->markupError(
- pht(
- 'Unable to locate the `%s` binary. Install cowsay.',
- 'cowsay'));
- }
-
- $bin = idx($argv, 'think') ? 'cowthink' : 'cowsay';
+ $action = idx($argv, 'think') ? 'think' : 'say';
$eyes = idx($argv, 'eyes', 'oo');
$tongue = idx($argv, 'tongue', ' ');
- $cow = idx($argv, 'cow', 'default');
-
- // NOTE: Strip this aggressively to prevent nonsense like
- // `cow=/etc/passwd`. We could build a whiltelist with `cowsay -l`.
- $cow = preg_replace('/[^a-z.-]+/', '', $cow);
-
- $future = new ExecFuture(
- '%s -e %s -T %s -f %s ',
- $bin,
- $eyes,
- $tongue,
- $cow);
-
- $future->setTimeout(15);
- $future->write($content);
-
- list($err, $stdout, $stderr) = $future->resolve();
-
- if ($err) {
- return $this->markupError(
- pht(
- 'Execution of `%s` failed: %s',
- 'cowsay',
- $stderr));
+
+ $map = self::getCowMap();
+
+ $cow = idx($argv, 'cow');
+ $cow = phutil_utf8_strtolower($cow);
+ if (empty($map[$cow])) {
+ $cow = 'default';
}
+ $result = id(new PhutilCowsay())
+ ->setTemplate($map[$cow])
+ ->setAction($action)
+ ->setEyes($eyes)
+ ->setTongue($tongue)
+ ->setText($content)
+ ->renderCow();
if ($this->getEngine()->isTextMode()) {
- return $stdout;
+ return $result;
}
return phutil_tag(
'div',
array(
'class' => 'PhabricatorMonospaced remarkup-cowsay',
),
- $stdout);
+ $result);
+ }
+
+ private static function getCowMap() {
+ $root = dirname(phutil_get_library_root('phabricator'));
+
+ $directories = array(
+ $root.'/externals/cowsay/cows/',
+ $root.'/resources/cows/builtin/',
+ $root.'/resources/cows/custom/',
+ );
+
+ $map = array();
+ foreach ($directories as $directory) {
+ foreach (Filesystem::listDirectory($directory, false) as $cow_file) {
+ $matches = null;
+ if (!preg_match('/^(.*)\.cow\z/', $cow_file, $matches)) {
+ continue;
+ }
+ $cow_name = $matches[1];
+ $cow_name = phutil_utf8_strtolower($cow_name);
+ $map[$cow_name] = Filesystem::readFile($directory.$cow_file);
+ }
+ }
+
+ return $map;
}
}
diff --git a/src/infrastructure/markup/interpreter/PhabricatorRemarkupFigletBlockInterpreter.php b/src/infrastructure/markup/interpreter/PhabricatorRemarkupFigletBlockInterpreter.php
index c1b0d5805..e823d7bde 100644
--- a/src/infrastructure/markup/interpreter/PhabricatorRemarkupFigletBlockInterpreter.php
+++ b/src/infrastructure/markup/interpreter/PhabricatorRemarkupFigletBlockInterpreter.php
@@ -1,47 +1,65 @@
<?php
final class PhabricatorRemarkupFigletBlockInterpreter
extends PhutilRemarkupBlockInterpreter {
public function getInterpreterName() {
return 'figlet';
}
+ /**
+ * @phutil-external-symbol class Text_Figlet
+ */
public function markupContent($content, array $argv) {
- if (!Filesystem::binaryExists('figlet')) {
- return $this->markupError(
- pht(
- 'Unable to locate the `%s` binary. Install figlet.',
- 'figlet'));
- }
+ $map = self::getFigletMap();
- $font = idx($argv, 'font', 'standard');
- $safe_font = preg_replace('/[^0-9a-zA-Z-_.]/', '', $font);
- $future = id(new ExecFuture('figlet -f %s', $safe_font))
- ->setTimeout(15)
- ->write(trim($content, "\n"));
+ $font = idx($argv, 'font');
+ $font = phutil_utf8_strtolower($font);
+ if (empty($map[$font])) {
+ $font = 'standard';
+ }
- list($err, $stdout, $stderr) = $future->resolve();
+ $root = dirname(phutil_get_library_root('phabricator'));
+ require_once $root.'/externals/pear-figlet/Text/Figlet.php';
- if ($err) {
- return $this->markupError(
- pht(
- 'Execution of `%s` failed: %s',
- 'figlet',
- $stderr));
- }
+ $figlet = new Text_Figlet();
+ $figlet->loadFont($map[$font]);
+ $result = $figlet->lineEcho($content);
if ($this->getEngine()->isTextMode()) {
- return $stdout;
+ return $result;
}
return phutil_tag(
'div',
array(
'class' => 'PhabricatorMonospaced remarkup-figlet',
),
- $stdout);
+ $result);
+ }
+
+ private static function getFigletMap() {
+ $root = dirname(phutil_get_library_root('phabricator'));
+
+ $dirs = array(
+ $root.'/externals/figlet/fonts/',
+ $root.'/externals/pear-figlet/fonts/',
+ $root.'/resources/figlet/custom/',
+ );
+
+ $map = array();
+ foreach ($dirs as $dir) {
+ foreach (Filesystem::listDirectory($dir, false) as $file) {
+ if (preg_match('/\.flf\z/', $file)) {
+ $name = phutil_utf8_strtolower($file);
+ $name = preg_replace('/\.flf\z/', '', $name);
+ $map[$name] = $dir.$file;
+ }
+ }
+ }
+
+ return $map;
}
}
diff --git a/src/infrastructure/markup/interpreter/PhabricatorRemarkupGraphvizBlockInterpreter.php b/src/infrastructure/markup/interpreter/PhabricatorRemarkupGraphvizBlockInterpreter.php
deleted file mode 100644
index 5ccf4fb7a..000000000
--- a/src/infrastructure/markup/interpreter/PhabricatorRemarkupGraphvizBlockInterpreter.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-
-final class PhabricatorRemarkupGraphvizBlockInterpreter
- extends PhutilRemarkupBlockInterpreter {
-
- public function getInterpreterName() {
- return 'dot';
- }
-
- public function markupContent($content, array $argv) {
- if (!Filesystem::binaryExists('dot')) {
- return $this->markupError(
- pht(
- 'Unable to locate the `%s` binary. Install Graphviz.',
- 'dot'));
- }
-
- $width = $this->parseDimension(idx($argv, 'width'));
-
- $future = id(new ExecFuture('dot -T%s', 'png'))
- ->setTimeout(15)
- ->write(trim($content));
-
- list($err, $stdout, $stderr) = $future->resolve();
-
- if ($err) {
- return $this->markupError(
- pht(
- 'Execution of `%s` failed (#%d), check your syntax: %s',
- 'dot',
- $err,
- $stderr));
- }
-
- $file = PhabricatorFile::buildFromFileDataOrHash(
- $stdout,
- array(
- 'name' => 'graphviz.png',
- ));
-
- if ($this->getEngine()->isTextMode()) {
- return '<'.$file->getBestURI().'>';
- }
-
- $img = phutil_tag(
- 'img',
- array(
- 'src' => $file->getBestURI(),
- 'width' => nonempty($width, null),
- ));
- return phutil_tag_div('phabricator-remarkup-embed-image-full', $img);
- }
-
- // TODO: This is duplicated from PhabricatorEmbedFileRemarkupRule since they
- // do not share a base class.
- private function parseDimension($string) {
- $string = trim($string);
-
- if (preg_match('/^(?:\d*\\.)?\d+%?$/', $string)) {
- return $string;
- }
-
- return null;
- }
-}
diff --git a/src/view/phui/PHUIActionPanelView.php b/src/view/phui/PHUIActionPanelView.php
index ad260f203..bfe44ba13 100644
--- a/src/view/phui/PHUIActionPanelView.php
+++ b/src/view/phui/PHUIActionPanelView.php
@@ -1,173 +1,139 @@
<?php
final class PHUIActionPanelView extends AphrontTagView {
private $href;
private $fontIcon;
private $header;
private $subHeader;
private $bigText;
private $state;
private $status;
- const STATE_WARN = 'phui-action-panel-warn';
- const STATE_INFO = 'phui-action-panel-info';
- const STATE_ERROR = 'phui-action-panel-error';
- const STATE_SUCCESS = 'phui-action-panel-success';
- const STATE_PROGRESS = 'phui-action-panel-progress';
- const STATE_NONE = 'phui-action-panel-none';
+ const COLOR_RED = 'phui-action-panel-red';
+ const COLOR_ORANGE = 'phui-action-panel-orange';
+ const COLOR_YELLOW = 'phui-action-panel-yellow';
+ const COLOR_GREEN = 'phui-action-panel-green';
+ const COLOR_BLUE = 'phui-action-panel-blue';
+ const COLOR_INDIGO = 'phui-action-panel-indigo';
+ const COLOR_VIOLET = 'phui-action-panel-violet';
+ const COLOR_PINK = 'phui-action-panel-pink';
public function setHref($href) {
$this->href = $href;
return $this;
}
public function setFontIcon($image) {
$this->fontIcon = $image;
return $this;
}
public function setBigText($text) {
$this->bigText = $text;
return $this;
}
public function setHeader($header) {
$this->header = $header;
return $this;
}
public function setSubHeader($sub) {
$this->subHeader = $sub;
return $this;
}
public function setState($state) {
$this->state = $state;
return $this;
}
public function setStatus($text) {
$this->status = $text;
return $this;
}
- protected function getStateIcon() {
- $icon = new PHUIIconView();
- switch ($this->state) {
- case self::STATE_WARN:
- $icon->setIconFont('fa-exclamation-circle msr');
- break;
- case self::STATE_INFO:
- $icon->setIconFont('fa-info-circle msr');
- break;
- case self::STATE_ERROR:
- $icon->setIconFont('fa-exclamation-triangle msr');
- break;
- case self::STATE_PROGRESS:
- $icon->setIconFont('fa-refresh ph-spin msr');
- break;
- case self::STATE_SUCCESS:
- $icon->setIconFont('fa-check msr');
- break;
- case self::STATE_NONE:
- return null;
- break;
- }
- return $icon;
+ protected function getTagName() {
+ return 'div';
}
protected function getTagAttributes() {
require_celerity_resource('phui-action-panel-css');
$classes = array();
$classes[] = 'phui-action-panel';
- if ($this->status) {
- $classes[] = 'phui-action-panel-has-status';
+ if ($this->state) {
$classes[] = $this->state;
-
+ }
+ if ($this->bigText) {
+ $classes[] = 'phui-action-panel-bigtext';
}
return array(
'class' => implode(' ', $classes),
);
-
}
protected function getTagContent() {
$icon = null;
- if ($this->fontIcon || $this->bigText) {
- if ($this->fontIcon) {
- $fonticon = id(new PHUIIconView())
- ->setIconFont($this->fontIcon);
- } else {
- $fonticon = phutil_tag(
- 'span',
- array(
- 'class' => 'phui-action-panel-bigtext',
- ),
- $this->bigText);
- }
- if ($this->href) {
- $fonticon = phutil_tag(
- 'a',
- array(
- 'href' => $this->href,
- ),
- $fonticon);
- }
+ if ($this->fontIcon) {
+ $fonticon = id(new PHUIIconView())
+ ->setIconFont($this->fontIcon);
$icon = phutil_tag(
- 'div',
+ 'span',
array(
'class' => 'phui-action-panel-icon',
),
$fonticon);
}
$header = null;
if ($this->header) {
- $header = $this->header;
- if ($this->href) {
- $header = phutil_tag(
- 'a',
- array(
- 'href' => $this->href,
- ),
- $this->header);
- }
$header = phutil_tag(
- 'div',
+ 'span',
array(
'class' => 'phui-action-panel-header',
),
- $header);
+ $this->header);
}
$subheader = null;
if ($this->subHeader) {
$subheader = phutil_tag(
- 'div',
+ 'span',
array(
'class' => 'phui-action-panel-subheader',
),
$this->subHeader);
}
- $status = null;
- if ($this->status && $this->state) {
- $state_icon = $this->getStateIcon();
- $status = phutil_tag(
- ($this->href) ? 'a' : 'div',
- array(
- 'class' => 'phui-action-panel-status',
- 'href' => ($this->href) ? $this->href : null,
- ),
- array($state_icon, $this->status));
- }
-
- return array($icon, $header, $subheader, $status);
+ $row = phutil_tag(
+ 'span',
+ array(
+ 'class' => 'phui-action-panel-row',
+ ),
+ array(
+ $icon,
+ $subheader,
+ ));
+
+ $table = phutil_tag(
+ 'span',
+ array(
+ 'class' => 'phui-action-panel-table',
+ ),
+ $row);
+
+ return phutil_tag(
+ 'a',
+ array(
+ 'href' => $this->href,
+ 'class' => 'phui-action-panel-hitarea',
+ ),
+ array($header, $table));
}
}
diff --git a/webroot/rsrc/css/application/paste/paste.css b/webroot/rsrc/css/application/paste/paste.css
index b9b2fe2dd..ae53a577e 100644
--- a/webroot/rsrc/css/application/paste/paste.css
+++ b/webroot/rsrc/css/application/paste/paste.css
@@ -1,27 +1,35 @@
/**
* @provides paste-css
*/
+.container-of-paste {
+ margin: 16px;
+}
+
+.device .container-of-paste {
+ margin: 8px;
+}
+
.paste-embed {
background: {$sh-yellowbackground};
border: 1px solid {$sh-lightyellowborder};
border-radius: 3px;
}
.paste-embed .phabricator-source-code-container {
border: none;
}
.paste-embed-head {
border-bottom: 1px solid {$sh-lightyellowborder};
padding: 8px 12px;
}
.paste-embed-head a {
color: {$darkbluetext};
font-weight: bold;
}
.paste-embed-body {
overflow-y: auto;
}
diff --git a/webroot/rsrc/css/core/remarkup.css b/webroot/rsrc/css/core/remarkup.css
index 9a3906f3b..98dad91a2 100644
--- a/webroot/rsrc/css/core/remarkup.css
+++ b/webroot/rsrc/css/core/remarkup.css
@@ -1,541 +1,541 @@
/**
* @provides phabricator-remarkup-css
*/
.phabricator-remarkup {
line-height: 1.51em;
word-break: break-word;
}
.phabricator-remarkup p {
margin: 0 0 12px;
}
.PhabricatorMonospaced,
.phabricator-remarkup .remarkup-code-block .remarkup-code {
font: 10px/13px "Menlo", "Consolas", "Monaco", monospace;
}
.platform-windows .PhabricatorMonospaced,
.platform-windows .phabricator-remarkup .remarkup-code-block .remarkup-code {
font: 11px/13px "Menlo", "Consolas", "Monaco", monospace;
}
.phabricator-remarkup .remarkup-code-block {
margin: 12px 0;
white-space: pre;
}
.phabricator-remarkup .remarkup-code-header {
padding: 2px 8px;
font-size: 13px;
font-weight: bold;
background: {$sh-yellowbackground};
display: inline-block;
}
.phabricator-remarkup .code-block-counterexample .remarkup-code-header {
background-color: {$sh-redbackground};
}
.phabricator-remarkup .remarkup-code-block pre {
- background: {$sh-yellowbackground};
+ background: #FFFEF5;
border: 1px solid {$sh-lightyellowborder};
display: block;
- color: #000000;
+ color: #000;
overflow: auto;
- padding: 12px 8px;
+ padding: 8px;
}
.phabricator-remarkup pre.remarkup-counterexample {
border: 1px solid {$sh-lightredborder};
background-color: {$sh-redbackground};
}
.phabricator-remarkup tt.remarkup-monospaced {
color: #000;
background: rgba(71,87,120,0.1);
padding: 1px 4px;
border-radius: 3px;
white-space: pre-wrap;
}
/* NOTE: You can currently produce this with [[link | `name`]]. Restore the
link color. */
.phabricator-remarkup a tt.remarkup-monospaced {
color: {$anchor};
}
.phabricator-remarkup ul.remarkup-list {
list-style: disc;
margin: 12px 0 12px 30px;
}
.phabricator-remarkup ol.remarkup-list {
list-style: decimal;
margin: 12px 0 12px 30px;
}
.phabricator-remarkup ol ol.remarkup-list {
list-style: upper-alpha;
}
.phabricator-remarkup ol ol ol.remarkup-list {
list-style: lower-alpha;
}
.phabricator-remarkup ol ol ol ol.remarkup-list {
list-style: lower-roman;
}
.phabricator-remarkup ul.remarkup-list-with-checkmarks {
list-style: none;
margin-left: 18px;
}
.phabricator-remarkup .remarkup-list-with-checkmarks input {
margin-right: 2px;
}
.phabricator-remarkup .remarkup-list-with-checkmarks .remarkup-checked-item {
color: {$greytext};
}
.phabricator-remarkup ul.remarkup-list ol.remarkup-list,
.phabricator-remarkup ul.remarkup-list ul.remarkup-list,
.phabricator-remarkup ol.remarkup-list ol.remarkup-list,
.phabricator-remarkup ol.remarkup-list ul.remarkup-list {
margin: 4px 0 4px 24px;
}
.phabricator-remarkup .remarkup-list-item {
line-height: 1.6em;
}
.phabricator-remarkup li.phantom-item,
.phabricator-remarkup li.phantom-item {
list-style-type: none;
}
.phabricator-remarkup h1.remarkup-header {
font-size: 24px;
line-height: 1.625em;
margin: 24px 0 4px;
}
.phabricator-remarkup h2.remarkup-header {
font-size: 20px;
line-height: 1.5em;
margin: 20px 0 4px;
}
.phabricator-remarkup h3.remarkup-header {
font-size: 18px;
line-height: 1.375em;
margin: 20px 0 4px;
}
.phabricator-remarkup h4.remarkup-header {
font-size: 16px;
line-height: 1.25em;
margin: 12px 0 4px;
}
.phabricator-remarkup h5.remarkup-header {
font-size: 15px;
line-height: 1.125em;
margin: 8px 0 4px;
}
.phabricator-remarkup h6.remarkup-header {
font-size: 14px;
line-height: 1em;
margin: 4px 0;
}
.phabricator-remarkup .remarkup-header + .remarkup-header {
margin-top: 0px;
}
.phabricator-remarkup blockquote {
border-left: 3px solid {$sh-blueborder};
color: {$darkbluetext};
font-style: italic;
margin: 4px 0 12px 0;
padding: 8px 12px;
background-color: {$lightbluebackground};
}
.phabricator-remarkup blockquote blockquote {
background-color: rgba(175,175,175, .1);
}
.phabricator-remarkup blockquote em {
font-style: normal;
}
.phabricator-remarkup blockquote div.remarkup-reply-head {
font-style: normal;
padding-bottom: 4px;
}
.phabricator-remarkup blockquote div.remarkup-reply-head
.phui-tag-core {
background-color: transparent;
border: none;
padding: 0;
color: {$darkbluetext};
}
.phabricator-remarkup img.remarkup-proxy-image {
max-width: 640px;
max-height: 640px;
}
.phabricator-remarkup audio {
display: block;
margin: 16px auto;
min-width: 240px;
width: 50%;
}
.phabricator-remarkup-mention-exists {
font-weight: bold;
background: #e6f3ff;
}
.phabricator-remarkup-mention-disabled {
font-weight: bold;
background: #dddddd;
}
.phui-remarkup-preview .phabricator-remarkup-mention-unknown,
.aphront-panel-preview .phabricator-remarkup-mention-unknown {
font-weight: bold;
background: #ffaaaa;
}
.phabricator-remarkup-mention-nopermission .phui-tag-core {
background: {$lightgreybackground};
color: {$lightgreytext};
}
.phabricator-remarkup .remarkup-note {
margin: 16px 0;
padding: 12px;
border-left: 3px solid {$blue};
background: {$lightblue};
}
.phabricator-remarkup .remarkup-warning {
margin: 16px 0;
padding: 12px;
border-left: 3px solid {$yellow};
background: {$lightyellow};
}
.phabricator-remarkup .remarkup-important {
margin: 16px 0;
padding: 12px;
border-left: 3px solid {$red};
background: {$lightred};
}
.phabricator-remarkup .remarkup-note .remarkup-monospaced,
.phabricator-remarkup .remarkup-important .remarkup-monospaced,
.phabricator-remarkup .remarkup-warning .remarkup-monospaced {
background-color: rgba(150,150,150,.2);
}
.phabricator-remarkup .remarkup-note-word {
font-weight: bold;
color: {$darkbluetext};
}
.phabricator-remarkup-toc {
float: right;
border-left: 1px solid {$lightblueborder};
background: #fff;
width: 160px;
padding-left: 8px;
margin: 0 0 4px 8px;
}
.phabricator-remarkup-toc-header {
font-size: 13px;
line-height: 13px;
color: {$darkbluetext};
font-weight: bold;
margin-bottom: 4px;
}
.phabricator-remarkup-toc ul {
padding: 0;
margin: 0;
list-style: none;
overflow: hidden;
}
.phabricator-remarkup-toc ul ul {
margin: 0 0 0 8px;
}
.phabricator-remarkup-toc ul li {
padding: 0;
margin: 0;
font-size: 12px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.phabricator-remarkup-embed-layout-right {
text-align: right;
}
.phabricator-remarkup-embed-layout-center {
text-align: center;
}
.phabricator-remarkup-embed-layout-inline {
display: inline;
}
.phabricator-remarkup-embed-float-right {
float: right;
margin: .5em 1em 0;
}
.phabricator-remarkup-embed-layout-link {
padding-left: 20px;
background: url(/rsrc/image/icon/fatcow/page_white_put.png) 0 0 no-repeat;
}
.phabricator-remarkup-embed-float-left {
float: left;
margin: .5em 1em 0;
}
.phabricator-remarkup-embed-image {
display: inline-block;
border: 3px solid white;
box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.20);
}
.phabricator-remarkup-embed-image-full {
display: inline-block;
max-width: 100%;
}
.phabricator-remarkup-embed-image-full img {
height: auto;
max-width: 100%;
}
.phabricator-remarkup table.remarkup-table {
border-collapse: separate;
border-spacing: 1px;
background: {$lightblueborder};
margin: 12px 0;
word-break: normal;
}
.phabricator-remarkup table.remarkup-table th {
font-weight: bold;
padding: 4px 6px;
background: {$lightbluebackground};
}
.phabricator-remarkup table.remarkup-table td {
background: #ffffff;
padding: 3px 6px;
}
body div.phabricator-remarkup.remarkup-has-toc
.phabricator-remarkup-toc + .remarkup-header {
margin-top: 0;
padding-top: 0;
}
body .phabricator-remarkup p:first-child,
body .phabricator-remarkup ul.remarkup-list:first-child,
body .phabricator-remarkup ol.remarkup-list:first-child,
body .phabricator-remarkup .remarkup-code-block:first-child,
body .phabricator-remarkup h1.remarkup-header:first-child,
body .phabricator-remarkup h2.remarkup-header:first-child,
body .phabricator-remarkup h3.remarkup-header:first-child,
body .phabricator-remarkup h4.remarkup-header:first-child,
body .phabricator-remarkup h5.remarkup-header:first-child,
body .phabricator-remarkup h6.remarkup-header:first-child,
body .phabricator-remarkup blockquote:first-child,
body .phabricator-remarkup table.remarkup-table:first-child,
body .phabricator-remarkup .remarkup-note:first-child {
margin-top: 0;
}
body .phabricator-remarkup p:last-child,
body .phabricator-remarkup ul.remarkup-list:last-child,
body .phabricator-remarkup ol.remarkup-list:last-child,
body .phabricator-remarkup .remarkup-code-block:last-child,
body .phabricator-remarkup h1.remarkup-header:last-child,
body .phabricator-remarkup h2.remarkup-header:last-child,
body .phabricator-remarkup h3.remarkup-header:last-child,
body .phabricator-remarkup h4.remarkup-header:last-child,
body .phabricator-remarkup h5.remarkup-header:last-child,
body .phabricator-remarkup h6.remarkup-header:last-child,
body .phabricator-remarkup blockquote:last-child,
body .phabricator-remarkup table.remarkup-table:last-child,
body .phabricator-remarkup .remarkup-note:last-child {
margin-bottom: 0;
}
.remarkup-assist-textarea {
border-left-color: {$blueborder};
border-right-color: {$blueborder};
border-bottom-color: {$blueborder};
border-top-color: {$thinblueborder};
border-radius: 0;
box-shadow: none;
-webkit-box-shadow: none;
/* Set line height explicitly so the metrics <var /> and the real textarea
are forced to the same value. */
line-height: 1.25em;
/* Prevent Safari and Chrome users from dragging the textarea any wider,
because the top bar won't resize along with it. */
resize: vertical;
}
var.remarkup-assist-textarea {
/* This is an invisible element used to measure the size of text in the
textarea so we can float typeaheads over the cursor position. */
display: block;
border-color: orange;
box-sizing: border-box;
padding: 4px 6px;
white-space: pre-wrap;
visibility: hidden;
}
.remarkup-assist-textarea:focus {
border: 1px solid rgba(82, 168, 236, 0.8);
}
.remarkup-assist-bar {
height: 26px;
border-width: 1px 1px 0;
border-style: solid;
border-top-color: {$blueborder};
border-left-color: {$blueborder};
border-right-color: {$blueborder};
background: {$lightbluebackground};
overflow: hidden;
}
.remarkup-assist-button {
display: block;
padding: 4px 5px;
float: left;
}
.remarkup-assist-button:hover {
background-color: rgba(100,100,100,.15);
}
.remarkup-assist-button:hover .phui-icon-view.phui-font-fa {
color: {$darkbluetext};
}
.remarkup-assist-button:active {
outline: none;
}
.remarkup-assist-button:focus {
outline: none;
}
.remarkup-assist-separator {
display: block;
float: left;
margin: 7px 4px;
height: 14px;
width: 0px;
border-right: 1px solid #cccccc;
}
.remarkup-interpreter-error {
padding: 8px;
border: 1px solid {$sh-redborder};
background-color: {$sh-redbackground};
}
.remarkup-cowsay {
white-space: pre-wrap;
}
.remarkup-figlet {
white-space: pre-wrap;
}
.remarkup-assist {
width: 14px;
height: 14px;
overflow: hidden;
text-align: center;
vertical-align: middle;
}
.remarkup-assist-right {
float: right;
}
.jx-order-mask {
background: white;
opacity: 1.0;
}
.remarkup-control-fullscreen-mode {
position: fixed;
top: -1px;
bottom: -1px;
left: -1px;
right: -1px;
}
.remarkup-control-fullscreen-mode textarea.remarkup-assist-textarea {
position: absolute;
top: 27px;
left: 0;
right: 0;
bottom: 0;
/* NOTE: This doesn't work in Firefox, there's a JS behavior to correct it. */
height: auto;
border-width: 1px 0 0 0;
outline: none;
}
.phabricator-image-macro-hero {
margin: auto;
max-width: 95%;
}
.phabricator-remarkup-macro {
height: auto;
max-width: 100%;
}
.remarkup-nav-sequence-arrow {
color: {$lightgreytext};
}
.phabricator-remarkup hr {
background: {$thinblueborder};
margin: 24px 0;
}
diff --git a/webroot/rsrc/css/layout/phabricator-source-code-view.css b/webroot/rsrc/css/layout/phabricator-source-code-view.css
index 047a30459..4bd57fcfc 100644
--- a/webroot/rsrc/css/layout/phabricator-source-code-view.css
+++ b/webroot/rsrc/css/layout/phabricator-source-code-view.css
@@ -1,74 +1,74 @@
/**
* @provides phabricator-source-code-view-css
*/
.phabricator-source-code-container {
- background: #fff;
overflow-x: auto;
overflow-y: hidden;
border: 1px solid {$sh-lightyellowborder};
border-radius: 3px;
- background-color: #FCFBF7;
+ background-color: #FFFEF5;
}
.phui-object-item .phabricator-source-code-container {
margin-left: 8px;
}
.phabricator-source-code-view tr:first-child * {
padding-top: 8px;
}
.phabricator-source-code-view tr:last-child * {
padding-bottom: 8px;
}
.phabricator-source-code {
white-space: pre-wrap;
padding: 2px 8px 1px;
width: 100%;
}
.phabricator-source-line {
background-color: {$sh-yellowbackground};
text-align: right;
padding: 2px 6px 1px 12px;
border-right: 1px solid {$sh-lightyellowborder};
color: {$sh-yellowtext};
/* When the user selects rows of source, don't visibly select the line
numbers beside them. We use JS to strip the line numbers out when the user
copies the text. */
-moz-user-select: -moz-none;
-khtml-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
+ white-space: nowrap;
}
th.phabricator-source-line a {
color: {$darkbluetext};
}
th.phabricator-source-line:hover {
background: {$sh-lightyellowborder};
cursor: pointer;
}
.phabricator-source-highlight {
background: {$sh-yellowbackground};
}
.phabricator-source-code-summary {
padding-bottom: 8px;
}
/* If a Paste has enormously long lines, truncate them in the summary on the
list page. They'll be fully visible on the Paste itself. */
.phabricator-source-code-summary .phabricator-source-code-container {
overflow-x: hidden;
}
.phabricator-source-code-summary .phabricator-source-code {
white-space: nowrap;
}
diff --git a/webroot/rsrc/css/phui/phui-action-panel.css b/webroot/rsrc/css/phui/phui-action-panel.css
index 0c9aa2c83..6d7c566de 100644
--- a/webroot/rsrc/css/phui/phui-action-panel.css
+++ b/webroot/rsrc/css/phui/phui-action-panel.css
@@ -1,131 +1,226 @@
/**
* @provides phui-action-panel-css
*/
.phui-action-panel {
position: relative;
+ background-color: #fff;
+ border: 1px solid {$lightblueborder};
+ border-radius: 3px;
+ margin: 0 8px;
+ min-height: 108px;
+ overflow: hidden;
}
-.phui-action-panel-has-status.phui-action-panel {
- padding-bottom: 44px;
+.device .phui-action-panel {
+ margin: 0;
}
-.phui-action-panel-icon {
- height: 128px;
- line-height: 160px;
- text-align: center;
- vertical-align: bottom;
+.phui-action-panel-hitarea {
+ display: block;
+}
+
+.device-desktop .phui-action-panel-hitarea:hover {
+ text-decoration: none;
+ background-color: rgba(255,255,255,.25);
+}
+
+.device-desktop .phui-action-panel-hitarea:hover .phui-icon-view {
+ margin-top: -4px;
+ transition-duration: .2s;
}
-.phui-action-panel-bigtext {
- font-size: 40px;
- color: {$lightgreytext};
- line-height: 96px;
+.phui-action-panel-table {
+ display: table;
+ height: 80px;
+ width: 100%;
+}
+
+.phui-action-panel-row {
+ display: table-row;
+}
+
+.phui-action-panel-icon {
+ width: 64px;
+ text-align: center;
+ vertical-align: middle;
+ display: table-cell;
}
.phui-action-panel-icon a {
display: block;
}
.phui-action-panel-icon a:hover .phui-icon-view,
.phui-action-panel-icon a:hover .phui-action-panel-bigtext {
color: {$blue};
}
.phui-action-panel-icon a:hover {
text-decoration: none;
}
.phui-action-panel-icon .phui-icon-view {
- font-size: 64px;
- color: {$lightgreytext};
+ font-size: 36px;
+ color: {$lightbluetext};
}
.phui-action-panel-header {
- padding: 0 8px 4px 8px;
+ padding: 8px;
+ border-bottom: 1px solid {$thinblueborder};
font-weight: bold;
- font-size: {$biggerfontsize};
+ white-space: nowrap;
+ overflow: hidden;
color: {$darkbluetext};
+ display: block;
}
-.phui-action-panel-header a {
- color: {$blue};
+.phui-action-panel-bigtext .phui-action-panel-subheader {
+ font-size: 28px;
+ color: {$darkbluetext};
+ text-align: center;
+ padding: 0 8px;
}
.phui-action-panel-subheader {
- padding: 0 8px 4px 8px;
- font-size: {$normalfontsize};
- color: {$bluetext};
+ display: table-cell;
+ vertical-align: middle;
+ color: {$darkbluetext};
+ padding: 8px 8px 8px 0;
+}
+
+.phui-action-panel-subheader a {
+ text-decoraction: none;
}
.phui-action-panel-status {
padding: 8px 12px;
position: absolute;
bottom: 0;
left: 0;
right: 0;
}
.phui-action-panel-status:hover {
text-decoration: none;
}
-.phui-action-panel-none .phui-action-panel-status {
- background-color: {$lightgreybackground};
- border-left: 4px solid {$greyborder};
- color: {$greytext};
+/* - Red -------------------------------------------------------------------- */
+
+.phui-action-panel-red {
+ background-color: {$sh-redbackground};
+ border-color: {$sh-redborder};
}
-.phui-action-panel-warn .phui-action-panel-status .phui-icon-view {
- color: {$greytext};
+.phui-action-panel-red .phui-action-panel-icon .phui-icon-view {
+ color: {$sh-redicon};
}
-.phui-action-panel-warn .phui-action-panel-status {
- background-color: {$lightyellow};
- border-left: 4px solid #bc7837;
- color: #bc7837;
+.phui-action-panel-red .phui-action-panel-header {
+ border-color: {$sh-lightredborder};
}
-.phui-action-panel-warn .phui-action-panel-status .phui-icon-view {
- color: #bc7837;
+/* - Orange ----------------------------------------------------------------- */
+
+.phui-action-panel-orange {
+ background-color: {$sh-orangebackground};
+ border-color: {$sh-orangeborder};
}
-.phui-action-panel-error .phui-action-panel-status {
- background-color: {$lightred};
- border-left: 4px solid {$red};
- color: {$red};
+.phui-action-panel-orange .phui-action-panel-icon .phui-icon-view {
+ color: {$sh-orangeicon};
}
-.phui-action-panel-error .phui-action-panel-status .phui-icon-view {
- color: {$red};
+.phui-action-panel-orange .phui-action-panel-header {
+ border-color: {$sh-lightorangeborder};
}
-.phui-action-panel-info .phui-action-panel-status {
- background-color: {$lightblue};
- border-left: 4px solid {$blue};
- color: {$blue};
+/* - Yellow ----------------------------------------------------------------- */
+
+.phui-action-panel-yellow {
+ background-color: {$sh-yellowbackground};
+ border-color: {$sh-yellowborder};
}
-.phui-action-panel-info .phui-action-panel-status .phui-icon-view {
- color: {$blue};
+.phui-action-panel-yellow .phui-action-panel-icon .phui-icon-view {
+ color: {$sh-yellowicon};
}
-.phui-action-panel-success .phui-action-panel-status {
- background-color: {$lightgreen};
- color: {$green};
- border-left: 4px solid {$green};
+.phui-action-panel-yellow .phui-action-panel-header {
+ border-color: {$sh-lightyellowborder};
}
-.phui-action-panel-success .phui-action-panel-status .phui-icon-view {
- color: {$green};
+/* - Green ------------------------------------------------------------------ */
+
+.phui-action-panel-green {
+ background-color: {$sh-greenbackground};
+ border-color: {$sh-greenborder};
}
-.phui-action-panel-progress .phui-action-panel-status {
- background-color: {$lightblue};
- color: {$blue};
- border-left: 4px solid {$blue};
+.phui-action-panel-green .phui-action-panel-icon .phui-icon-view {
+ color: {$sh-greenicon};
}
-.phui-action-panel-progress .phui-action-panel-status .phui-icon-view {
- color: {$blue};
+.phui-action-panel-green .phui-action-panel-header {
+ border-color: {$sh-lightgreenborder};
+}
+
+/* - Blue ------------------------------------------------------------------- */
+
+.phui-action-panel-blue {
+ background-color: {$sh-bluebackground};
+ border-color: {$sh-blueborder};
+}
+
+.phui-action-panel-blue .phui-action-panel-icon .phui-icon-view {
+ color: {$sh-blueicon};
+}
+
+.phui-action-panel-blue .phui-action-panel-header {
+ border-color: {$sh-lightblueborder};
+}
+
+/* - Indigo ----------------------------------------------------------------- */
+
+.phui-action-panel-indigo {
+ background-color: {$sh-indigobackground};
+ border-color: {$sh-indigoborder};
+}
+
+.phui-action-panel-indigo .phui-action-panel-icon .phui-icon-view {
+ color: {$sh-indigoicon};
+}
+
+.phui-action-panel-indigo .phui-action-panel-header {
+ border-color: {$sh-lightindigoborder};
+}
+
+/* - Violet ----------------------------------------------------------------- */
+
+.phui-action-panel-violet {
+ background-color: {$sh-violetbackground};
+ border-color: {$sh-violetborder};
+}
+
+.phui-action-panel-violet .phui-action-panel-icon .phui-icon-view {
+ color: {$sh-violeticon};
+}
+
+.phui-action-panel-violet .phui-action-panel-header {
+ border-color: {$sh-lightvioletborder};
+}
+
+/* - Pink ------------------------------------------------------------------- */
+
+.phui-action-panel-pink {
+ background-color: {$sh-pinkbackground};
+ border-color: {$sh-violetborder};
+}
+
+.phui-action-panel-pink .phui-action-panel-icon .phui-icon-view {
+ color: {$sh-pinkicon};
+}
+
+.phui-action-panel-pink .phui-action-panel-header {
+ border-color: {$sh-lightpinkborder};
}

Event Timeline