summaryrefslogtreecommitdiff
path: root/language/french
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /language/french
Initial commit
Diffstat (limited to 'language/french')
-rw-r--r--language/french/e-french/README108
-rw-r--r--language/french/e-french/README-TDS22
-rwxr-xr-xlanguage/french/e-french/bin/linux/makefrindex2
-rwxr-xr-xlanguage/french/e-french/bin/windows/makefrindex.cmd1
-rw-r--r--language/french/e-french/install/MiniDocEf_Lnx.pdfbin0 -> 46525 bytes
-rw-r--r--language/french/e-french/install/MiniDocEf_Win.pdfbin0 -> 41745 bytes
-rw-r--r--language/french/e-french/install/MiniDocMkfr.pdfbin0 -> 71109 bytes
-rw-r--r--language/french/e-french/install/MiniDoc_Unx.txt48
-rw-r--r--language/french/e-french/install/MiniDoc_Win.txt45
-rw-r--r--language/french/e-french/install/Probl_Msg.pdfbin0 -> 35081 bytes
-rw-r--r--language/french/e-french/install/Probl_Msg.txt27
-rw-r--r--language/french/e-french/texmf/doc/Probl_Msg.pdfbin0 -> 35368 bytes
-rw-r--r--language/french/e-french/texmf/doc/Probl_Msg.txt25
-rw-r--r--language/french/e-french/texmf/doc/changements.html113
-rw-r--r--language/french/e-french/texmf/doc/histoire.html84
-rw-r--r--language/french/e-french/texmf/doc/licence.html86
-rw-r--r--language/french/e-french/texmf/doc/lisez-moi.html39
-rw-r--r--language/french/e-french/texmf/doc/manuels/FrenchLe.html39
-rw-r--r--language/french/e-french/texmf/doc/manuels/FrenchPro.html41
-rw-r--r--language/french/e-french/texmf/doc/manuels/efrench.pdfbin0 -> 829862 bytes
-rw-r--r--language/french/e-french/texmf/doc/manuels/faq.pdfbin0 -> 259545 bytes
-rw-r--r--language/french/e-french/texmf/doc/manuels/french_doc.pdfbin0 -> 139477 bytes
-rw-r--r--language/french/e-french/texmf/doc/manuels/frenchle.pdfbin0 -> 289583 bytes
-rw-r--r--language/french/e-french/texmf/doc/src/MiniDocEf_Lnx.tex65
-rw-r--r--language/french/e-french/texmf/doc/src/MiniDocEf_Win.tex61
-rw-r--r--language/french/e-french/texmf/doc/src/Probl_Msg.tex52
-rw-r--r--language/french/e-french/texmf/doc/src/efrench.tex4380
-rw-r--r--language/french/e-french/texmf/doc/src/faq.tex1469
-rw-r--r--language/french/e-french/texmf/doc/src/frabbrevlat9.tex297
-rw-r--r--language/french/e-french/texmf/doc/src/frabbrevutf8.tex297
-rw-r--r--language/french/e-french/texmf/doc/src/french_doc.tex17
-rw-r--r--language/french/e-french/texmf/doc/src/french_doc.txt4334
-rw-r--r--language/french/e-french/texmf/doc/src/frenchle.tex2584
-rw-r--r--language/french/e-french/texmf/doc/src/myfroptn.sty17
-rw-r--r--language/french/e-french/texmf/doc/src/mymaj.sty181
-rw-r--r--language/french/e-french/texmf/doc/test/README51
-rw-r--r--language/french/e-french/texmf/doc/test/XeLaTeX/frenT1xe.pdfbin0 -> 274788 bytes
-rw-r--r--language/french/e-french/texmf/doc/test/XeLaTeX/frenT1xe.tex85
-rw-r--r--language/french/e-french/texmf/doc/test/XeLaTeX/french.tst3684
-rw-r--r--language/french/e-french/texmf/doc/test/XeLaTeX/lisez-moi.txt2
-rw-r--r--language/french/e-french/texmf/doc/test/french.tst3805
-rw-r--r--language/french/e-french/texmf/doc/test/frenchab.tex68
-rw-r--r--language/french/e-french/texmf/doc/test/frenchla.tex21
-rw-r--r--language/french/e-french/texmf/doc/test/frenchlb.tex84
-rw-r--r--language/french/e-french/texmf/doc/test/frenchll.tex102
-rw-r--r--language/french/e-french/texmf/doc/test/frenchln.tex35
-rw-r--r--language/french/e-french/texmf/doc/test/frenchlr.tex18
-rw-r--r--language/french/e-french/texmf/doc/test/frenchrf.pdfbin0 -> 721224 bytes
-rw-r--r--language/french/e-french/texmf/doc/test/fxench.tst3750
-rw-r--r--language/french/e-french/texmf/doc/test/mya4.sty502
-rw-r--r--language/french/e-french/texmf/doc/test/myfigure.eps12824
-rw-r--r--language/french/e-french/texmf/doc/test/mygglo.ist69
-rw-r--r--language/french/e-french/texmf/doc/test/mylist.sty109
-rw-r--r--language/french/e-french/texmf/doc/test/mysmall.sty136
-rw-r--r--language/french/e-french/texmf/doc/test/tests-formats/EC.def64
-rw-r--r--language/french/e-french/texmf/doc/test/tests-formats/README65
-rw-r--r--language/french/e-french/texmf/doc/test/tests-formats/TSIv5n4.tex154
-rw-r--r--language/french/e-french/texmf/doc/test/tests-formats/TSIv5n48.tex154
-rw-r--r--language/french/e-french/texmf/doc/test/tests-formats/gencoup.tex90
-rw-r--r--language/french/e-french/texmf/doc/test/tests-formats/lgencoup.tex23
-rw-r--r--language/french/e-french/texmf/doc/test/tests-formats/ltesthyp24
-rw-r--r--language/french/e-french/texmf/doc/test/tests-formats/ltstcoup.tex22
-rw-r--r--language/french/e-french/texmf/doc/test/tests-formats/testhyp23
-rw-r--r--language/french/e-french/texmf/doc/test/tests-formats/tstcoup.tex135
-rw-r--r--language/french/e-french/texmf/doc/test/texxetlb.tex27
-rw-r--r--language/french/e-french/texmf/makeindex/fridx1.ist16
-rw-r--r--language/french/e-french/texmf/makeindex/fridx2.ist16
-rw-r--r--language/french/e-french/texmf/makeindex/fridx3.ist16
-rw-r--r--language/french/e-french/texmf/makeindex/fridx4.ist16
-rw-r--r--language/french/e-french/texmf/tex/deutschx.mlp34
-rw-r--r--language/french/e-french/texmf/tex/efrench.sty12
-rw-r--r--language/french/e-french/texmf/tex/efrenchu.tex13
-rw-r--r--language/french/e-french/texmf/tex/epreuve.sty63
-rw-r--r--language/french/e-french/texmf/tex/fenglish.sty126
-rw-r--r--language/french/e-french/texmf/tex/frabbrev-u8.tex297
-rw-r--r--language/french/e-french/texmf/tex/frabbrev.tex297
-rw-r--r--language/french/e-french/texmf/tex/francais.mlp43
-rw-r--r--language/french/e-french/texmf/tex/french-msg.tex206
-rw-r--r--language/french/e-french/texmf/tex/french.all39
-rw-r--r--language/french/e-french/texmf/tex/french.cfg12
-rw-r--r--language/french/e-french/texmf/tex/french.chk55
-rw-r--r--language/french/e-french/texmf/tex/french.cmd89
-rw-r--r--language/french/e-french/texmf/tex/french.dmy70
-rw-r--r--language/french/e-french/texmf/tex/french.sty3282
-rw-r--r--language/french/e-french/texmf/tex/french_french-msg.tex213
-rw-r--r--language/french/e-french/texmf/tex/frenchle.cfg12
-rw-r--r--language/french/e-french/texmf/tex/frenchle.sty2090
-rw-r--r--language/french/e-french/texmf/tex/frenchpro.sty11
-rw-r--r--language/french/e-french/texmf/tex/frhyphex.tex75
-rw-r--r--language/french/e-french/texmf/tex/fxabbrev.tex297
-rw-r--r--language/french/e-french/texmf/tex/german_french-msg.tex205
-rw-r--r--language/french/e-french/texmf/tex/internat.mlp51
-rw-r--r--language/french/e-french/texmf/tex/mlp-01.sty13
-rw-r--r--language/french/e-french/texmf/tex/mlp-33.sty19
-rw-r--r--language/french/e-french/texmf/tex/mlp-49.sty59
-rw-r--r--language/french/e-french/texmf/tex/mlp-49n.sty59
-rw-r--r--language/french/e-french/texmf/tex/mlp-opts.sty14
-rw-r--r--language/french/e-french/texmf/tex/mlp.sty29
-rw-r--r--language/french/e-french/texmf/tex/ndeutsch.mlp40
-rw-r--r--language/french/e-french/texmf/tex/noesterr.mlp40
-rw-r--r--language/french/e-french/texmf/tex/oesterre.mlp40
-rw-r--r--language/french/e-french/texmf/tex/pmfrench.sty12
102 files changed, 48541 insertions, 0 deletions
diff --git a/language/french/e-french/README b/language/french/e-french/README
new file mode 100644
index 0000000000..0ea8988c3e
--- /dev/null
+++ b/language/french/e-french/README
@@ -0,0 +1,108 @@
+ eFrench - French typography for LaTeX
+
+ Version 6.101 2019-05-30
+
+e-French, FRENCHLE and FRENCH.
+ -------------------
+ The package e-french installed gives access to both
+ frenchle.sty and french.sty.
+ ---------------------------
+
+Therefore the package with frenchle disapeard to be placed
+under THE obsolete packages.
+
+
+HISTORY from FrenchPro to e-French
+
+The eFrench projet is born in order to keep up to date French for (La)Tex and
+maintain it available for future users. FrenchPro for (La)Tex, is the result
+of a fifteen years work of its creator, Bernard Gaulle
+
+Beginning 1999, the FrenchPro package was marketted as shareware, and Bernard
+Gaulle alone owner of all rights. He died Aug. 2nd 2007. His wife Catherine
+Gaulle, the heiress, gave authorization in that matter to the eFrench group in
+order to maintain the whole work in the future.
+
+The project is maintained by a small group started by Laurent Bloch and hosted
+by Tux Family: https://svn.tuxfamily.org/viewvc.cgi/efrench_efrenchsources/trunk/,
+email: efrench@lists.tuxfamily.org.
+
+
+ The credit for this piece of work remains with
+ the first and main author, Bernard Gaulle.
+
+LICENCE
+
+Copyright 2010 eFrench Group
+This work may be distributed and/or modified under the conditions of the
+LaTeX Project Public License, either version 1.3 of this license or
+(at your option) any later version. The latest version of this license
+is in http://www.latex-project.org/lppl.txt and version 1.3 or later
+is part of all distributions of LaTeX version 2005/12/01 or later.
+
+This work has the LPPL maintenance status «maintained».
+The Current Maintainer of this work is Raymond Juillerat
+(raymond -at- juil-dot-ch).
+
+DISTRIBUTION
+
+The distribution includes an unique package for both Unix (Linux, OSx)
+or Windows operating systems. Compatibility have been tested
+under MikTeX (2.8 and 2.9) and TeXLive (Ubuntu).
+The user's manual is named efrench.pdf, documentation of french.sty
+(source) is named french_doc.pdf. A FAQ explains the context in which
+these packages are to be used.
+
+** The install directory
+ Short documentations for beginners are written in
+- in english: MiniDoc_Unx.txt for Unix,
+ MiniDoc_Win.txt for Windows
+ FilesInTDS.txt as further explanation
+- in french : MiniDocEf_Unx.pdf for Unix,
+ MiniDocEf_Win.pdf for Windows
+ Because pdf better for languages using
+ non 7-bits accented characters like french.
+
+** The french directory
+The french directory with its content is to be placed in a correct
+place in the Tex Directory Structure, normally under .../tex/plain
+resulting in the branch .../tex/plain/french,
+- see also FilesInTDS.txt in the install directory
+
+** The doc directory
+The documentation is provided with the sources as required under
+LPPL agreement
+- User's manuals are under "/manuels".
+- Short documentation
+ - histoire.html is the history of french.sty written in french
+ an abstract is given in changements.html
+ - lisez-moi.html explains why this name "efrench"
+ - licence.html explains the licence-history (french and english)
+ In order to render non-ascii accented characters in french,
+ html instead text for these short documentations
+
+
+MIGRATING FROM FRENCHPRO
+
+ No problem for the user. French.sty is the FrenchPro's version
+with shareware test removed and updated to a new version.
+
+MIGRATING FROM FRENCHLE
+ It is not neccessary to migrate, in e-french frenchle.sty is as
+easy accessible as french.sty
+ But for a use with XeLaTeX please migrate to french.sty
+ If you migrate there are only these things to do:
+- replace "frenchle" with "french" in the \usepackage calling it.
+- if in use please rename frenchle.cfg to french.cfg and adapt it.
+ - Within it, please desactivate the things with french
+ guillemets (chevrons), if they were active.
+
+DEVELOPMENTS FOR A BETTER COMPATIBILITY WITH XELATEX / BIBLATEX
+
+The version 6.1 takes in account the the interchartoks used by
+BibLaTeX with XeLaTeX. See the manual efrench.pdf under the
+corresponding indexes.
+
+Enjoy. Raymond Juillerat for the e-french group
+ raymond(at)juil(dot)ch
+
diff --git a/language/french/e-french/README-TDS b/language/french/e-french/README-TDS
new file mode 100644
index 0000000000..251f1ca156
--- /dev/null
+++ b/language/french/e-french/README-TDS
@@ -0,0 +1,22 @@
+ eFrench distribution Files in TDS
+_______________________ _____________________________
+
+/texmf/doc/*.* -> doc/generic/e-french/*.*
+/texmf/makeindex/*.ist -> makeindex/e-french/*.ist
+/texmf/tex/*.* -> tex/generic/e-french/*.*
+
+ = = = Could be also placed in a local directory = = =
+- - - - Linux - Unix TeXLive
+/bin/unix/makefrindex -> .../bin/i386-linux/*
+
+- - - - Windows MiKTeX
+/bin/windows/makefrindex.cmd -> ...\MiKTeX*.*\miktek\bin\*.*
+
+ = = = are not meant for TDS = = =
+README-TDS (this file)
+/install
+README
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+for torture-tests to be transfered by the user if wished
+doc/generic/e-french/test/ -> a local workplace
+
diff --git a/language/french/e-french/bin/linux/makefrindex b/language/french/e-french/bin/linux/makefrindex
new file mode 100755
index 0000000000..9f71df317f
--- /dev/null
+++ b/language/french/e-french/bin/linux/makefrindex
@@ -0,0 +1,2 @@
+#!/bin/bash
+makeindex -s fridx1.ist $1.idx
diff --git a/language/french/e-french/bin/windows/makefrindex.cmd b/language/french/e-french/bin/windows/makefrindex.cmd
new file mode 100755
index 0000000000..194f5871f1
--- /dev/null
+++ b/language/french/e-french/bin/windows/makefrindex.cmd
@@ -0,0 +1 @@
+makeindex -s fridx1.ist %1
diff --git a/language/french/e-french/install/MiniDocEf_Lnx.pdf b/language/french/e-french/install/MiniDocEf_Lnx.pdf
new file mode 100644
index 0000000000..3f6fb4264b
--- /dev/null
+++ b/language/french/e-french/install/MiniDocEf_Lnx.pdf
Binary files differ
diff --git a/language/french/e-french/install/MiniDocEf_Win.pdf b/language/french/e-french/install/MiniDocEf_Win.pdf
new file mode 100644
index 0000000000..6849355a84
--- /dev/null
+++ b/language/french/e-french/install/MiniDocEf_Win.pdf
Binary files differ
diff --git a/language/french/e-french/install/MiniDocMkfr.pdf b/language/french/e-french/install/MiniDocMkfr.pdf
new file mode 100644
index 0000000000..b43da4dc57
--- /dev/null
+++ b/language/french/e-french/install/MiniDocMkfr.pdf
Binary files differ
diff --git a/language/french/e-french/install/MiniDoc_Unx.txt b/language/french/e-french/install/MiniDoc_Unx.txt
new file mode 100644
index 0000000000..5e46b52171
--- /dev/null
+++ b/language/french/e-french/install/MiniDoc_Unx.txt
@@ -0,0 +1,48 @@
+How to install eFrench under Linux
+june 6th 2012, for eFrench, RayJ
+----------------------------------
+
+ This eFrench installation has been tested with TeXLive
+but should be valid for all Linux systems.
+This distribution abides by the LPPL copyright.
+
+Installation instructions
+=========================
+
+Put the french directory (and if necessary also the
+msg directory) in place beeing accessible by
+the \input command. Under TeXLive, for example
+here (~ is the user's directory)
+ ~/texmf/tex
+or here
+ ~/texmf/tex/plain
+(or in the system TDS under tex/plain)
+This way to do has been sucessfully tested under Ubuntu (9 to 11)
+
+Notice
+------
+If for any reason french.sty after installation announces
+that msg.sty or msg-msg.tex is missing, then read the directives
+from Probl_Msg.txt, here in the install directory.
+
+PS :
+1. Messages are ANSI coded (latin9)
+2. The language.dat file must define french as a
+ language, it's generally the case
+3. For frenchle users a conflict can arise with the default frenchle
+ (installed for example under /usr/share/texmf-texlive/tex/latex/frenchle)
+ A solution is to suppress that directory with its whole content.
+ (followed by $sudo texhash)
+ Another (easier) is to use french.sty instead of frenchle.sty
+
+Documentation
+=============
+ The user's manuals efrench.pdf and frenchle.pdf are in french.
+ Frenchle.pdf is included because it is also valid for efrench
+ as a good introduction to it's possibilities. And frenchle
+ is now a part of e-french.
+
+ -- rayj for the eFrench group, all questions to be sent to
+Laurent Bloch <http://www.laurentbloch.org/MySpip3/spip.php?article166>
+
+(/usr/share/texmf-texlive/tex/latex/frenchle/frenchle.cfg)
diff --git a/language/french/e-french/install/MiniDoc_Win.txt b/language/french/e-french/install/MiniDoc_Win.txt
new file mode 100644
index 0000000000..15eef29850
--- /dev/null
+++ b/language/french/e-french/install/MiniDoc_Win.txt
@@ -0,0 +1,45 @@
+How to install eFrench under Windows
+june 6th 2012, for eFrench, RayJ
+----------------------------------
+
+ This eFrench installation has been tested with MiKTeX
+but should be valid for all TeX motors.
+This distribution abides by the LPPL copyright.
+
+Installation instructions
+=========================
+
+Put the french directory (and if necessary also the msg directory)
+in a place beeing accessible by the \input command.
+Under MikTeX 2.8, for example here
+ c:\LocalTexMf\tex\
+or here
+ c:\LocalTexMf\tex\plain\
+(or in the system TDS under tex\plain\)
+
+ and announce it to MikTeX
+(Maintenance - Setting - Roots - Add ...)
+
+
+This way to do has also been tested under MikTeX 2.9
+
+Notice
+------
+If for any reason french.sty after installation announces
+that msg.sty or msg-msg.tex is missing, then read the directives
+from Probl_Msg.txt, here in the install directory.
+
+PS :
+1. Messages are ANSI coded (latin9)
+2. The language.dat file must define french as a
+ language, it's generally the case
+
+Documentation
+=============
+ The user's manuals efrench.pdf and frenchle.pdf are in french.
+ Frenchle.pdf is included because it is also valid for efrench
+ as a good introduction to it's possibilities. And frenchle
+ is now a part of e-french.
+
+ -- rayj for the eFrench group, all questions to be sent to
+Laurent Bloch <http://www.laurentbloch.org/MySpip3/spip.php?article166>
diff --git a/language/french/e-french/install/Probl_Msg.pdf b/language/french/e-french/install/Probl_Msg.pdf
new file mode 100644
index 0000000000..2441b7c648
--- /dev/null
+++ b/language/french/e-french/install/Probl_Msg.pdf
Binary files differ
diff --git a/language/french/e-french/install/Probl_Msg.txt b/language/french/e-french/install/Probl_Msg.txt
new file mode 100644
index 0000000000..380541af01
--- /dev/null
+++ b/language/french/e-french/install/Probl_Msg.txt
@@ -0,0 +1,27 @@
+Problems in french.sty with msg.sty and msg-msg.tex
+===================================================
+
+Maybe, after having installed the e-french package that french
+announces that msg.sty is missing or that msg-msg.tex is missing.
+With the new versions of TeXLive, no such problem,
+by MikTeX v2.9, only msg-msg.tex is missing.
+With a recent update or the newer versions it's OK.
+
+If msg.sty is missing, msg-msg.tex is generally also missing.
+This would be the cas by older or other environnements.
+In any case, these files can be found on the internet.
+One possibility is CTAN, for exemple to get from
+<http://mirror.ctan.org/macros/latex/contrib/msg/>
+or from
+<http://mirror.ctan.org/macros/latex/contrib/msg.zip>
+at least the files msg.ins, msg.dtx and msgfiles.dtx.
+and to download them in a work directory
+ Then with the command
+ latex msg.ins
+you have the missing files msg.sty and msg-msg.tex,
+in order to put them in your french directory.
+A second possibility is to download them from
+<http://www.efrench.org/distributions/e-fr_msg/>
+
+
+
diff --git a/language/french/e-french/texmf/doc/Probl_Msg.pdf b/language/french/e-french/texmf/doc/Probl_Msg.pdf
new file mode 100644
index 0000000000..c34461c0c7
--- /dev/null
+++ b/language/french/e-french/texmf/doc/Probl_Msg.pdf
Binary files differ
diff --git a/language/french/e-french/texmf/doc/Probl_Msg.txt b/language/french/e-french/texmf/doc/Probl_Msg.txt
new file mode 100644
index 0000000000..353787d89f
--- /dev/null
+++ b/language/french/e-french/texmf/doc/Probl_Msg.txt
@@ -0,0 +1,25 @@
+Problems in french.sty with msg.sty and msg-msg.tex
+===================================================
+
+Maybe, after having installed the e-french package that french
+announces that msg.sty is missing or that msg-msg.tex is missing.
+With the new versions of TeXLive, no such problem,
+by MikTeX v2.9, only msg-msg.tex is missing.
+With a recent update or the newer versions it's OK.
+
+If msg.sty is missing, msg-msg.tex is generally also missing.
+This would be the cas by older or other environnements.
+In any case, these files can be found on the internet.
+One possibility is CTAN, for exemple to get from
+<http://mirror.ctan.org/macros/latex/contrib/msg/>
+at least the files msg.ins, msg.dtx and msgfiles.dtx.
+and to download them in a work directory
+ Then with the command
+ latex msg.ins
+you have the missing files msg.sty and msg-msg.tex,
+in order to put them in your french directory.
+A second possibility is to download them from
+<http://www.efrench.org/distributions/e-fr_msg/>
+
+
+
diff --git a/language/french/e-french/texmf/doc/changements.html b/language/french/e-french/texmf/doc/changements.html
new file mode 100644
index 0000000000..a7bb3c9842
--- /dev/null
+++ b/language/french/e-french/texmf/doc/changements.html
@@ -0,0 +1,113 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html>
+<head><title>changements e-French</title>
+<meta name="author" content="Raymond Juillerat">
+<meta name="copyright" content="LPPL - e-French">
+<meta name="keywords" content="FrenchPro eFrench LaTeX TeX LPPL">
+<meta name="changements" content="The package e-French is under LPPL copyright">
+<meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
+<meta http-equiv="content-type" content="text/html">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<h2>Historique tr&egrave;s r&eacute;sum&eacute;</h2>
+L'historique svn complet du projet est disponible &agrave; l'adresse :
+<a href="http://svn.tuxfamily.org/viewvc.cgi/efrench_efrenchsources/" title="dépôt">
+http://svn.tuxfamily.org/viewvc.cgi/efrench_efrenchsources/</a> <BR />
+
+Ce fichier en est un r&eacute;sum&eacute; lisible pour les utilisateurs, pr&eacute;sent&eacute; par ordre
+chronologique inverse.<BR />
+<table border=0 summary="">
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="3">2015-10-30</td>
+ </tr>
+ <tr>
+ <td valign="top">&nbsp;-</td>
+ <td colspan="2">Mise &agrave; jour compl&egrave;te pour aboutir &agrave; une version 6,0&nbsp;:</td>
+ </tr>
+ <tr>
+ <td valign="top">&nbsp;-</td>
+ <td colspan="2"> - frenchle.sty, french.sty, frenchle.pdf, french.pdf </td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="3">2015-08-15</td>
+ </tr>
+ <tr>
+ <td valign="top">&nbsp;-</td>
+ <td colspan="2">E-french fait partie des extension de TeXLive et de MiKTeX.</td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="3">2012-05-28</td>
+ </tr>
+ <tr>
+ <td valign="top">&nbsp;-</td>
+ <td colspan="2">Le manuel frenchle.pdf pour frenchle dont Bernard Gaulle s'est occup&eacute; jusqu'&agrave;
+ fin mai 2007 a &eacute;t&eacute; repris et mise &agrave; jour.</td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="3">2012-03-07</td>
+ </tr>
+ <tr>
+ <td valign="top">&nbsp;-</td>
+ <td colspan="2">la foire aux questions (FAQ) dont Bernard Gaulle s'est occup&eacute; jusqu'&agrave;
+ fin mai 2007 a &eacute;t&eacute; reprise et mise &agrave; jour.</td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="3">2011-09-26</td>
+ </tr>
+ <tr>
+ <td valign="top">&nbsp;-</td>
+ <td colspan="2">r&eacute;vision &agrave; cause du conflit d&ucirc; &agrave; \arabic aussi utilis&eacute; pour la langue
+ arabe. Il faut utiliser \arabicLang &agrave; la place.<br />
+ \&lt;langue&gt;Lang corrigerait
+ tout autre conflit de ce genre, s'il y en a</td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="3">2010-08-07</td>
+ </tr>
+ <tr>
+ <td valign="top">&nbsp;-</td>
+ <td colspan="2">premi&egrave;re version sur le CTAN</td>
+ </tr>
+ <tr>
+ <td valign="top">&nbsp;-</td>
+ <td colspan="2">r&eacute;vision de l'installateur</td>
+ </tr>
+ <tr>
+ <td valign="top">&nbsp;-</td>
+ <td colspan="2">suppression du contr&ocirc;le de licence</td>
+ </tr>
+ <tr>
+ <td valign="top">&nbsp;-</td>
+ <td colspan="2">r&eacute;vision de l'installateur</td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="3">2009-11-11</td>
+ </tr>
+ <tr>
+ <td valign="top">&nbsp;-</td>
+ <td colspan="2">naissance officielle du projet. </td>
+ </tr>
+</table>
+</body></html>
+
diff --git a/language/french/e-french/texmf/doc/histoire.html b/language/french/e-french/texmf/doc/histoire.html
new file mode 100644
index 0000000000..dd436804c4
--- /dev/null
+++ b/language/french/e-french/texmf/doc/histoire.html
@@ -0,0 +1,84 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html>
+<head><title>historique e-French</title>
+<meta name="author" content="Raymond Juillerat">
+<meta name="copyright" content="e-French">
+<meta name="keywords" content="FrenchPro eFrench LaTeX TeX LPPL">
+<meta name="description" content="The package e-French is under LPPL copyright">
+<meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
+<meta http-equiv="content-type" content="text/html">
+<meta http-equiv="content-type" content="application/xhtml+xml">
+<meta http-equiv="content-style-type" content="text/css">
+<meta http-equiv="expires" content="0">
+</head>
+<body>
+<h1>e-French succ&egrave;de &agrave; FrenchPro</h1>
+<ol>
+ <li><a href="#french" title="">Explications en fran&ccedil;ais</a></li>
+ <li><a href="#engl" title="">Copyright and short history</a></li>
+ <li>Les distributions
+ pour <a href="http://www.efrench.org/distributions/eFre4Lnx.tar.gz">unix-linux</a>
+ et <a href="http://www.efrench.org/distributions/eFre4Win.zip">Windows</a> </li>
+ <li><a href="http://www.efrench.org/Wiki"> Le Wiki </a></li>
+</ol> <a name="french"></a>
+<h2>Quelques explications</h2>
+FrenchPro, le grand'&oelig;uvre de Bernard Gaulle ne doit pas tomber dans l'oubli
+apr&egrave;s la mortde son auteur, survenue le 2 ao&ucirc;t 2007.
+C'est pour maintenir cet outil pr&eacute;cieux de la typographie fran&ccedil;aise
+que s'est constitu&eacute;un groupe d'utilisateurs enthousiastes.
+Le projet reprenant les travaux laiss&eacute;s brutalement en plan s'appelle eFrench.
+Son but est de continuer de mettre &agrave; disposition des utilisateurs de LaTeX
+ce chef-d'&oelig;uvrede la typographie fran&ccedil;aise.
+<p>L'h&eacute;riti&egrave;re de Bernard, son &eacute;pouse Catherine Gaulle est aussi
+l'h&eacute;riti&egrave;re des droits d'auteur.Elle autorise cette mani&egrave;re
+de maintenir le projet &agrave; disposition du public.</p>
+Le projet e-French est maintenu par Laurent Bloch
+ et une petite &eacute;quipe enthousiaste.
+ Le tout &eacute;tant publi&eacute; sous licence publique des projets LaTeX,
+ LPPL,version 1,3 ou ult&eacute;rieure.La derni&egrave;re version de LPPL se
+ trouve sous<a href="http://www.latex-project.org/lppl.txt">http://www.latex-project.org/lppl.txt</a>
+ <div style="text-align: center">&nbsp;<br> <font size="+2" color="#050000">
+ N'oublions pas que<br> nous devons ce grand'&oelig;uvre essentiellement &agrave; <br>
+ son premier et principal auteur, Bernard Gaulle </font> <br>
+ &nbsp;<br></div>
+<hr color="00ffff">
+
+<a name="engl">
+<h2>About the e-French Package, here «This work»</h2></a>
+<p>Copyright 2010 eFrench Group</p>
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in <a href="http://www.latex-project.org/lppl.txt">
+<nobr>http://www.latex-project.org/lppl.txt</nobr></a>
+and version 1.3 or later is part of all distributions of LaTeX<br/>
+version 2005/12/01 or later.<br/>
+<p>This work has the LPPL maintenance status «maintained».</p>
+The Current Maintainer of this work is Laurent Bloch.
+<p>This work consists of all files of the SVN repository
+efrench/efrenchsource, under http://svn.tuxfamily.org/ or
+<a href="http://svn.tuxfamily.org/viewvc.cgi/efrench_efrenchsources"> here </a>
+and a copy <a href="http://www.efrench.org/bases/">is maintained here.</a></p>
+The authors are the committers allowed by the maintainer.
+<hr size="3" color="0000ff">
+<h2>History</h2>
+<h3>Birth of eFrench</h3>
+eFrench is born in order to keep up to date French for (La)Tex
+
+and maintain it available for future users.
+<p>French for (La)Tex, is the result of a fifteen years work of its creator,
+<i><font size="1" color="#050000"></font>Bernard Gaulle</i>
+<p>Copyrighted by Gaulle-GUTenberg 1992-1998, B. Gaulle 1999-2007.</p>
+Beginning 1999, the FrenchPro package was marketted as shareware,
+and Bernard Gaulle alone owner of all rights. He died Aug. 2nd 2007.
+His wife Catherine Gaulle, the heiress, gave authorization in that matter
+to the e-French group in order to maintain the whole work in the future.
+Now the package is delivered under Latex Project Public Licence.</p>
+Since Nov. 11., 2009 maintained as eFrench by Laurent Bloch
+(lb -at- laurentbloch.org)
+<div style="text-align: center">
+&nbsp;<br>
+ <font size="+2" color="#050000">The credit for this piece of work remains with <br>
+ the first and main author, Bernard Gaulle </font> <br>
+&nbsp;<br></div>
+ </body>
+ </html>
diff --git a/language/french/e-french/texmf/doc/licence.html b/language/french/e-french/texmf/doc/licence.html
new file mode 100644
index 0000000000..28251eb3c1
--- /dev/null
+++ b/language/french/e-french/texmf/doc/licence.html
@@ -0,0 +1,86 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+<title>Licence e-French</title>
+<meta name="author" content="Raymond Juillerat">
+<meta name="copyright" content="e-French">
+<meta name="keywords" content="FrenchPro eFrench LaTeX TeX LPPL">
+<meta name="description" content="The package e-French is under LPPL copyright">
+<meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
+<meta http-equiv="content-type" content="text/html">
+<meta http-equiv="content-type" content="application/xhtml+xml">
+<meta http-equiv="content-style-type" content="text/css">
+<meta http-equiv="expires" content="0">
+</head>
+<body>
+(French version below.)
+<h1>Licence statement for the eFrench bundle</h1>
+<table border="0" >
+ <tr>
+ <td>Copyright 1992-1998</td>
+ <td>association GUTenberg & Bernard Gaulle (LPPL)</td>
+ </tr>
+ <tr>
+ <td>Copyright 1999-2007</td>
+ <td>Bernard Gaulle <i>(shareware)</i></td>
+ </tr>
+ <tr>
+ <td>Copyright 2010-2015</td>
+ <td>contributors to the eFrench project (LPPL)</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>(Laurent Bloch, Raymond Juillerat,
+ Manuel P&eacute;gouri&eacute;-Gonnard)</td>
+ </tr>
+</table>
+<p align="left">NOTE: After the death of Bernard Gaulle in 2007, his widow and heiress to his
+copyrights, Catherine Gaulle, kindly agreed to have the French Pro bundle
+released as eFrench under a free licence, namely the LPPL.</p>
+<p align="left">This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ <a href="http://www.latex-project.org/lppl.txt" title="lppl">http://www.latex-project.org/lppl.txt</a>
+and version 1.3 or later and is part of all distributions of LaTeX
+version 2005/12/01 or later.</p>
+<p>This work has the LPPL maintenance status `maintained'.</p>
+<p>The Current Maintainers of this work are the eFrench project contributors.</p>
+<p>This work consists of the files found at
+<a href="http://svn.tuxfamily.org/viewvc.cgi/efrench_efrenchsources/" title="efrench">
+http://svn.tuxfamily.org/viewvc.cgi/efrench_efrenchsources/</a>
+and derived files.</p>
+<h2>Notice de licence pour le project eFrench</h2>
+<table border="0">
+ <tr>
+ <td>Copyright 1992-1998</td>
+ <td>association GUTenberg &amp; Bernard Gaulle (LPPL)</td>
+ </tr>
+ <tr>
+ <td>Copyright 1999-2007</td>
+ <td>Bernard Gaulle <i>(shareware)</i></td>
+ </tr>
+ <tr>
+ <td>Copyright 2010-2015</td>
+ <td>contributeurs du projet eFrench (LPPL)</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>(Laurent Bloch, Raymond Juillerat,
+ Manuel P&eacute;gouri&eacute;-Gonnard)</td>
+ </tr>
+</table>
+<p>NOTE : Apr&egrave;s la mort de Bernard Gaulle en 2007, sa veuve et h&eacute;riti&egrave;re des
+droits d'auteur, Catherine Gaulle, a aimablement permis que la distribution
+French Pro devienne le projet eFrench et soit distribu&eacute; sous une licence
+libre, la LPPL <a href="http://www.latex-project.org/lppl.txt" title="lppl">
+http://www.latex-project.org/lppl.txt</a>.
+</p>
+<p>Ce projet est constitu&eacute; des fichiers disponibles en
+<a href="http://svn.tuxfamily.org/viewvc.cgi/efrench_efrenchsources/" title="efrench">
+http://svn.tuxfamily.org/viewvc.cgi/efrench_efrenchsources/</a>
+et des fichiers d&eacute;riv&eacute;s.
+</p>
+</body>
+</html>
+
diff --git a/language/french/e-french/texmf/doc/lisez-moi.html b/language/french/e-french/texmf/doc/lisez-moi.html
new file mode 100644
index 0000000000..2b84e54bfe
--- /dev/null
+++ b/language/french/e-french/texmf/doc/lisez-moi.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+<title>lisez-moi e-French</title>
+<meta name="author" content="rai" >
+<meta name="copyright" content="e-French">
+<meta name="keywords" content="FrenchPro eFrench LaTeX TeX LPPL">
+<meta name="description" content="The package e-French is under LPPL copyright">
+<meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
+<meta http-equiv="content-type" content="text/html">
+<meta http-equiv="content-type" content="application/xhtml+xml">
+<meta http-equiv="content-style-type" content="text/css">
+<meta http-equiv="expires" content="0">
+</head>
+<body>
+<h1>eFrench - typographie fran&ccedil;aise pour LaTeX</h1>
+<p>FrenchPro, le grand'&oelig;uvre de Bernard Gaulle ne doit pas tomber dans l'oubli
+apr&egrave;s la mort de son auteur, survenue le 2 ao&ucirc;t 2007. C'est pour maintenir cet
+outil pr&eacute;cieux de la typographie fran&ccedil;aise que s'est constitu&eacute; un groupe
+d'utilisateurs enthousiastes. Le projet reprenant les travaux laiss&eacute;s
+brutalement en plan s'appelle eFrench. Son but est de continuer de mettre &agrave;
+disposition des utilisateurs de LaTeX ce chef-d'&oelig;uvre de la typographie
+fran&ccedil;aise.</p>
+<p>L'h&eacute;riti&egrave;re de Bernard, son &eacute;pouse Catherine Gaulle est aussi l'h&eacute;riti&egrave;re des
+droits d'auteur. Elle autorise cette mani&egrave;re de maintenir le projet &agrave;
+disposition du public (voir licence.html).</p>
+<p>Le projet eFrench est maintenu par une petite &eacute;quipe form&eacute;e autour de Laurent
+Bloch, et h&eacute;berg&eacute; par Tux Family :
+<a href="http://svn.tuxfamily.org/viewvc.cgi/efrench_efrenchsources/trunk/">
+http://svn.tuxfamily.org/viewvc.cgi/efrench_efrenchsources/trunk/</a>
+</a>
+</p>
+<p align="center"><font size="+1">N'oublions pas que nous devons ce grand'&oelig;uvre <br />
+ essentiellement &agrave; son premier et principal auteur,<br />
+ Bernard Gaulle.
+</font></p>
+</body>
+</html>
+
diff --git a/language/french/e-french/texmf/doc/manuels/FrenchLe.html b/language/french/e-french/texmf/doc/manuels/FrenchLe.html
new file mode 100644
index 0000000000..a47160da53
--- /dev/null
+++ b/language/french/e-french/texmf/doc/manuels/FrenchLe.html
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+ <title>Passer de FrenchLe à eFrench</title>
+ </head>
+ <body bgcolor="#FFD0CC">
+ <p style="height: 82px;"><br />
+ </p>
+ <h1 style= "text-align: center;">Comment passer de
+ FrenchLe à eFrench<br />
+ </h1>
+<h2>C'est assez simple</h2>
+ <p><br />
+ </p>
+ <p><br />
+ </p>
+<h3>L'extension frenchle.sty est un extrait de french.sty selon eFrench </h3>
+ <p>Après l'installation de e-french, selon les directives d'installation et ayant veillé à ce que
+ la nouvelle installation soit bien lue, quelques petites manupulations.<br />
+<table border=0 summary="">
+ <tr>
+ <td>-&nbsp;</td>
+ <td colspan="2">remplacer "frenchle" par "french" dans l'instruction \usepackage qui l'appelle.</td>
+ </tr>
+ <tr>
+ <td>-&nbsp;</td>
+ <td colspan="2">s'il est utilisé renommer le fichier frenchle.cfg en french.cfg et l'adapter. </td>
+ </tr>
+ <tr>
+ <td></td><td>-&nbsp;</td>
+ <td> dans ce fichier, désactiver ce qui concerne '«' ET '»', si cette partie était active </td>
+ </tr>
+</table>
+ </p>
+<h3>Bien du plaisir à eFrench</h3>
+ </body>
+</html>
+
diff --git a/language/french/e-french/texmf/doc/manuels/FrenchPro.html b/language/french/e-french/texmf/doc/manuels/FrenchPro.html
new file mode 100644
index 0000000000..7d7f73c7a4
--- /dev/null
+++ b/language/french/e-french/texmf/doc/manuels/FrenchPro.html
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+ <title>Passer de FrenchPro à eFrench</title>
+ </head>
+ <body bgcolor="#FFD0CC">
+ <p style="height: 82px;"><br />
+ </p>
+ <h1 style= "text-align: center;">Comment passer de
+ FrenchPro à eFrench<br />
+ </h1>
+<h2>Rien de plus simple</h2>
+ <p><br />
+ </p>
+ <p><br />
+ </p>
+<h3>Les modules french.sty sont compatibles </h3>
+ <p>Donc il suffit de suivre les directives d'installation, de veiller que
+ c'est bien la nouvelle installation qui est lue par défaut et le tout est
+ joué.<br />
+ <h3>Le test de licence Partagiciel a été supprimé</h3>
+C'est la grande différence. Cette version tourne sous LPPL.
+ </p>
+ <p><br />
+<h3>Le système a été allégé </h3>
+<table border=0 summary="">
+ <tr>
+ <td>-&nbsp;</td>
+ <td>Le fichier language.dat est totalement géré par TeXLive ou MikTeX.
+ Il suffit de charger la langue française.</td>
+ </tr>
+ <tr>
+ <td>-&nbsp;</td>
+ <td>Bien d'autres éléments dépassés et devenus inutiles ont été supprimés de la distribution.</td>
+ </tr>
+</table>
+ </p>
+<h3>Bien du plaisir à eFrench</h3>
+</body>
+</html>
diff --git a/language/french/e-french/texmf/doc/manuels/efrench.pdf b/language/french/e-french/texmf/doc/manuels/efrench.pdf
new file mode 100644
index 0000000000..8dd38bb4b3
--- /dev/null
+++ b/language/french/e-french/texmf/doc/manuels/efrench.pdf
Binary files differ
diff --git a/language/french/e-french/texmf/doc/manuels/faq.pdf b/language/french/e-french/texmf/doc/manuels/faq.pdf
new file mode 100644
index 0000000000..80027e681e
--- /dev/null
+++ b/language/french/e-french/texmf/doc/manuels/faq.pdf
Binary files differ
diff --git a/language/french/e-french/texmf/doc/manuels/french_doc.pdf b/language/french/e-french/texmf/doc/manuels/french_doc.pdf
new file mode 100644
index 0000000000..65eb635481
--- /dev/null
+++ b/language/french/e-french/texmf/doc/manuels/french_doc.pdf
Binary files differ
diff --git a/language/french/e-french/texmf/doc/manuels/frenchle.pdf b/language/french/e-french/texmf/doc/manuels/frenchle.pdf
new file mode 100644
index 0000000000..73db4b54e4
--- /dev/null
+++ b/language/french/e-french/texmf/doc/manuels/frenchle.pdf
Binary files differ
diff --git a/language/french/e-french/texmf/doc/src/MiniDocEf_Lnx.tex b/language/french/e-french/texmf/doc/src/MiniDocEf_Lnx.tex
new file mode 100644
index 0000000000..9de6e515bc
--- /dev/null
+++ b/language/french/e-french/texmf/doc/src/MiniDocEf_Lnx.tex
@@ -0,0 +1,65 @@
+% !TeX encoding = utf-8
+\documentclass[11pt,a4paper]{article}
+
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{times}
+\usepackage{hyperref}
+\usepackage{french}
+\author{Raymond Juillerat}
+\begin{document}
+\section*{eFrench Linux : mini-doc d'installation }
+revue pour eFrench sous LPPL les 6 juin 2012 et 10 août 2015 par RayJ\\[3ex]
+
+ Cette distribution de eFrench a été testée avec \TeX{}live mais elle doit
+fonctionner avec tous les autres moteurs \TeX. Cette distribution
+est LPPL.
+
+
+\subsection*{Consignes d'installation}
+
+ Placer le répertoire /french (et si nécessaire aussi /msg, voir plus bas) à un endroit où
+ tous les fichiers seront accessibles par{ \backslash}input.
+\subsection*{Pour \TeX{}live, par exemple sous }
+ $\sim$/texmf/tex\hspace{1cm}
+($\sim$ est le répertoire personnel)\\
+ou
+
+ $\sim$/texmf/tex/plain
+
+ et annoncez à TeXLive (\$ texhash $\sim$/texmf)
+ ce répertoire en tant que répertoire supplémentaire de sources .
+Cette configuration a été testée avec succès sous Ubuntu (9 à 11).
+
+Les fichiers de /makeindex vont dans le répertoire de même nom de \TeX{}live
+ou dans le répertoire de travail selon besoins.
+
+En tant que superviseur on peut suivre les indications de \emph{FilesInTDS.txt} .
+
+\paragraph*{Remarque}
+Si pour une raison ou une autre (ancien \TeX{}live ou autre système), french.sty annonce que msg.sty ou msg-msg.tex manque,
+des solutions sont indiquées dans Probl\_Msg.pdf du dossier install.
+\subsection*{PS}
+\begin{enumerate}
+\item Les messages sont codés en ANSI (latin9)
+\item Le fichier language.dat doit définir french en tant
+ que langue, ce qui est le cas généralement
+\end{enumerate}
+
+\subsection*{Documentation }
+
+Les manuels sont fournis sous forme de fichier en format pdf :
+efrench.pdf et frenchle.pdf, ce dernier étant aussi valable
+pour efrench, les explications y sont plus détaillées
+mais concernent moins de possibilités. Et frenchle
+fait partie maintenant d'e-french.
+
+
+\centering{Bonne utilisation de eFrench !}
+
+ -- \href{mailto:raymond@juil.ch}{rayj }
+pour l'équipe d'eFrench, pour toute question passer par son initiateur,
+{Laurent Bloch}
+\href{https://www.laurentbloch.net/MySpip3/e-french-desormais-dans-les-depots?lang=fr}{e-french désormais dans les dépôts TeXLive et MiKTeX} .
+
+\end{document}
diff --git a/language/french/e-french/texmf/doc/src/MiniDocEf_Win.tex b/language/french/e-french/texmf/doc/src/MiniDocEf_Win.tex
new file mode 100644
index 0000000000..4f66939bc2
--- /dev/null
+++ b/language/french/e-french/texmf/doc/src/MiniDocEf_Win.tex
@@ -0,0 +1,61 @@
+% !TeX encoding = utf-8
+\documentclass[11pt, a4paper]{article}
+
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{times}
+\usepackage{hyperref}
+\usepackage{french}
+\author{Raymond Juillerat}
+\begin{document}
+\section*{eFrench Windows : mini-doc d'installation }
+revue pour eFrench sous LPPL le 13 août 2015, par RayJ\\[3ex]
+
+ Cette distribution de eFrench a été testée avec Mik\TeX{} mais elle doit
+fonctionner avec tous les autres moteurs \TeX. Cette distribution
+est LPPL.
+
+\subsection*{Consignes d'installation}
+
+Placer le répertoire \backslash french (et si nécessaire aussi \backslash msg, voir plus bas) à un endroit où
+ tous les fichiers seront accessibles par \backslash input.
+\subsection*{Pour Mik\TeX 2.8, par exemple sous}
+ c:\backslash LocalTexMf\backslash tex\\
+ou
+
+ c:\backslash LocalTexMf\backslash tex\backslash plain\\
+ et annoncez à Mik\TeX \textit{(Maintenance - Setting - Roots - Add ... )}
+ ce répertoire c:\backslash LocalTexMf en tant que répertoire supplémentaire de sources
+Cette configuration a aussi été testée avec succès sous Mik\TeX 2.9.
+
+Les fichiers de \backslash makeindex vont dans le répertoire de même nom de Mik\TeX {}
+ou dans le répertoire de travail selon besoins.
+Voir aussi les indications de \emph{FilesInTDS.txt} utilisables en tant qu'administrateur.
+
+\paragraph*{Remarque}
+Si pour une raison ou une autre (Mik\TeX version 2.9 ou plus ancien, autre système), french.sty annonce que msg.sty ou msg-msg.tex manque,
+des solutions sont indiquées dans Probl\_Msg.pdf du dossier install.
+\subsection*{PS}
+\begin{enumerate}
+\item Les messages sont codés en ANSI (latin9)
+\item Le fichier language.dat doit définir french en tant
+ que langue, ce qui est le cas généralement
+\end{enumerate}
+
+\subsection*{Documentation }
+
+Les manuels sont fournis sous forme de fichier en format pdf :
+efrench.pdf et frenchle.pdf, ce dernier étant aussi valable
+pour efrench, les explications y sont plus détaillées
+mais concernent moins de possibilités. Et frenchle
+fait partie maintenant d'e-french.
+
+\centering{Bonne utilisation de eFrench !}
+
+ -- \href{mailto:raymond@juil.ch}{rayj }
+ pour l'équipe d'eFrench, pour toute question passer par son initiateur,
+{Laurent Bloch}
+\href{https://www.laurentbloch.net/MySpip3/e-french-desormais-dans-les-depots?lang=fr}{e-french désormais dans les dépôts TeXLive et MiKTeX} .
+
+
+\end{document}
diff --git a/language/french/e-french/texmf/doc/src/Probl_Msg.tex b/language/french/e-french/texmf/doc/src/Probl_Msg.tex
new file mode 100644
index 0000000000..69e00b4601
--- /dev/null
+++ b/language/french/e-french/texmf/doc/src/Probl_Msg.tex
@@ -0,0 +1,52 @@
+% !TeX encoding = utf-8
+\documentclass[11pt, a4paper]{article}
+
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{times}
+\usepackage{hyperref}
+\usepackage{french}
+\author{Raymond Juillerat}
+\begin{document}
+\section*{Si french annonce que msg.sty ou msg-msg.tex est absent }
+
+Après l’installation,
+vous voulez compiler en utilisant french.sty et ce dernier s'achope à
+l'absence de l'un des deux fichiers msg.sty ou msg-msg.tex.
+
+Avec les nouvelles version de TeXLive, il n'y a pas de problème de ce genre.
+Avec MikTeX, version 2.9, seul msg-msg.tex manque.
+
+Si msg.sty manque, alors généralement msg-msg.tex manque aussi.
+C'est le cas avec d'autres environnements ou d'anciennes versions.
+
+Une possibilité, c'est de les chercher sur CTAN.
+
+Pour ce faire vous téléchargez de
+
+\href{http://mirror.ctan.org/macros/latex/contrib/msg}
+{http://mirror.ctan.org/macros/latex/contrib/msg/}\\
+ou de \href{http://mirror.ctan.org/macros/latex/contrib/msg.zip}
+{http://mirror.ctan.org/macros/latex/contrib/msg.zip}\\
+au minimum les fichiers msg.ins, msg.dtx et msgfiles.dtx pour les
+déposer dans un dossier de travail. Avec la commande
+\textit{latex msg.ins}, vous aurez les fichiers cherchés
+ msg.sty et msg-msg.tex qui manquent pour les mettre
+dans votre dossier french.
+
+Une autre possibilité, c'est de les télécharger de\\
+%La solution, c'est de les télécharger de\\
+\href{http://svn.tuxfamily.org/viewvc.cgi/efrench\_efrenchsources/trunk/inputs/msg/}
+{http://svn.tuxfamily.org/viewvc.cgi/efrench\_efrenchsources/trunk/inputs/msg/}\\
+
+
+\begin{center}{Bonne utilisation de eFrench !}
+\end{center}
+
+ -- \href{mailto:raymond@juil.ch}{rayj }
+pour l'équipe d'eFrench, pour toute question passer par son initiateur,
+{Laurent Bloch}
+\href{https://www.laurentbloch.net/MySpip3/e-french-desormais-dans-les-depots?lang=fr}{<https://www.laurentbloch.net/MySpip3/e-french-desormais-dans-les-depots?lang=fr>}
+
+\end{document}
+
diff --git a/language/french/e-french/texmf/doc/src/efrench.tex b/language/french/e-french/texmf/doc/src/efrench.tex
new file mode 100644
index 0000000000..5155e7878c
--- /dev/null
+++ b/language/french/e-french/texmf/doc/src/efrench.tex
@@ -0,0 +1,4380 @@
+% !TeX encoding = utf8
+% File efrench.tex
+% This is the user's guide for the package `` french ''
+% LPPL Copyright as in Copyright.htm
+%
+% (a composer en 3 passages,
+% avec makeindex -s fridx1.ist apres le deuxieme passage)
+%
+\documentclass[a4paper,11pt,openright]{report}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{lmodern}
+\usepackage{url}
+
+\makeatletter\def\tempa{\let\if@screen\iffalse}\makeatother%
+\tempa%
+\def\href#1#2{#2}
+\let\titcolor\relax
+\usepackage[print]{pdfscreen}
+
+\usepackage{french, mymaj, fancybox}
+
+\usersfrenchoptions{%
+ \disallowuchyph
+ \nooverfullhboxmark
+}
+
+ \definecolor{section0}{rgb}{.722,.525,.431}
+ \definecolor{section1}{rgb}{.937,.561,.123}
+ \definecolor{section2}{rgb}{.855,.647,.123}
+ \definecolor{section3}{rgb}{.804,.361,.361}
+ \definecolor{section4}{rgb}{.545,.271,.750}
+ \definecolor{section5}{rgb}{.627,.322,.176}
+ \definecolor{titcolor}{rgb}{.922,.725,.831}
+ \definecolor{bleu}{rgb}{.0,.0,.850}
+\def\titcolor{\color{section0}}
+
+\hypersetup{
+ pdfwindowui=true, pdfnewwindow=true,
+ colorlinks=true, pdfmenubar=true, pdffitwindow=true,
+ anchorcolor=bleu, urlcolor=bleu,
+}
+
+\makeatletter
+\newcommand{\linkandfootnote}[3]{%
+ \href{#3}{#2}\bgroup%
+ \expandafter\ifx\csname r@tlf.#1\endcsname\relax%
+ \expandafter\global%
+ \expandafter\let\csname r@tlf.#1\endcsname\empty%
+ \footnote{\texttt{<}\url{#3}\texttt{>}.\label{lf.#1}}%
+ \else\refmark{lf.#1}%
+ \fi\egroup%
+ }%
+\makeatother
+
+\newif\ifnoDOCinstall
+\newif\ifnoFINALS
+
+\textwidth=16.8cm
+\textheight=24.0cm
+\voffset -1in
+\hoffset -1in
+\oddsidemargin=2.2cm
+\evensidemargin=2.2cm
+\topmargin=1.0cm
+\footskip=2.3cm
+
+\makeindex
+\begin{document}
+% \labelsinmargin
+\def\raccouXe{X
+\raisebox{1.2ex}{\hspace{-1ex}\rotatebox{180}{E}}\hspace{-0.3ex}}%
+
+\title{\fboxsep=2ex%
+ \shadowbox{\Huge Guide de l'utilisateur \textsl{eFrench}}\\%
+{ -- \textsl{eFrench}, son style \textsl{french}, ses extensions --}%
+\\ {\huge dans un environnement \LaTeX},\\
+Pdf\LaTeX{} et \raccouXe\LaTeX\\%T
+[2\baselineskip]}
+\author{\textsl{eFrench} est dérivé de \textsl{French Pro} développé par {\LARGE B. \fsc{Gaulle}} \\[4\baselineskip]}
+\date{\LARGE\frenchstyleid}
+
+\maketitle\thispagestyle{empty}
+
+\begin{resume} Cette notice décrit comment installer et utiliser avec \LaTeX{}
+ l'extension \textsl{eFrench}, son style \texttt{french}
+et ses diverses propres extensions. Le paquetage
+\textsl{eFrench} a été créé pour imprimer des documents typographiquement
+ plus conformes à l'usage français que ce que produit \LaTeX{} par défaut.
+ Un grand nombre de commandes peuvent être utilisées mais
+ l'emploi courant de cette extension ne nécessite
+ {\em a priori\/} aucune connaissance particulière
+ ni une utilisation forcenée de commandes spécifiques. Toutefois cet
+ emploi n'est pas toujours {\em transparent}.
+ Une version allégée est fournie (style \texttt{frenchle}).
+Une version appauvrie (\texttt{pmfrench})
+ est aussi utilisable sur tous les sites et dans toutes les
+ configurations. D'autres extensions accompagnent le style \texttt{french}
+et le modulent.
+\end{resume}
+
+\sommaire[3]
+
+%% \NNL sert a éliminer les saut de page dans la toc ou le sommaire
+%% mais cela génère de messages « Token not allowed » avec hyperref.
+\newcommand{\NNL}{\protect\let\\\relax}
+\makeatletter\def\HyPsd@CatcodeWarning#1{}\makeatother%
+%%
+\let\Subsubsection\subsection
+\def\subsubsection#1{\Subsubsection[\NNL#1]{\protect\titcolor#1}}
+\let\Subsection\section
+\def\subsection#1{\Subsection[\NNL#1]{\protect\titcolor#1}}
+\let\Section\chapter
+\def\section#1{\Section[\NNL#1]{\protect\titcolor#1}}
+
+\hbox{}\vfill
+
+\Section*{\titcolor Introduction}
+
+\let\XXboi\backslash% abreviation
+\let\exclam\pointexclamation
+\def\oMlTeX{\texttt{\mbox{--mltex}}}
+%\def\biburl#1{\hbox{}\hfill\texttt{<}\url{#1}\texttt{>}}%
+\tthyphenation
+\abbreviations
+
+%
+%\CheckSevenBits/À/% check it, will stop here if 7-bits.
+ % {\STOP un retour charriot permet de continuer...}
+%
+
+\begin{drapeaufd}
+{\small
+{\sf Les limites de mon langage\\
+signifient les limites\\
+de mon propre monde.}\par
+
+\smallskip
+Ludwig \fsc{Wittgenstein}\\
+({in \em Tractatus logico-philosophicus})
+}
+\end{drapeaufd}
+
+\bigskip
+
+\def\FrenchPro{\textsl{FrenchPro}}
+\def\eFrench{\textsl{eFrench}}
+
+\ifx\ToDo\undefined
+\font\lettrinefont=cmr17 scaled\magstep3\label{lettrinefont}
+\else
+\font\lettrinefont=cmr17 at 50pt\label{lettrinefont}
+\fi
+\lettrine{L'extension} {\eFrench}
+a été conçue pour pouvoir imprimer des documents
+respectant {\em automatiquement} un maximum de règles typographiques
+françaises de l'imprimerie nationale
+telles qu'elles sont présentées dans \cite{lexique}.
+D'autres aspects comme, par exemple,
+ la francisation des classes de documents, des styles \LaTeX{}
+ou la réalisation de documents
+multilingues sont aussi abordés.
+
+%Nous parlerons indifféremment d'\textit{option de style}, d'\textit{extension}
+%ou simplement d'\textit{option} en ce qui concerne la francisation
+%de \LaTeX\ proposée ici.
+
+Tous les dispositifs introduits fonctionnent avec l'ensemble
+des moteurs \TeX\ mais nous recommandons plutôt l'utilisation
+d'un moteur avec option \oMlTeX
+\footnote{Les moteurs \TeX{} basés sur \texttt{web2c} disposent
+ de cette option \oMlTeX\ à la création du format.}.
+
+Cette notice
+qui fait suite à la
+\makeatletter
+\if@screen%
+\linkandfootnote{FAQ}{FAQ (foire aux questions)}%
+{http://efrench.org/bases/screen.pdf/FAQscreen.pdf}
+\else%
+\linkandfootnote{FAQ}{FAQ (foire aux questions)}%
+{http://www.efrench.org/doc/faq.pdf}
+\fi%
+\makeatother
+ à propos de \LaTeX\ en français,
+explique comment utiliser l'extension {\eFrench}
+mais ne démontre pas largement ses effets ; vous pouvez
+vous reporter d'une part à la notice d'utilisation de la version allégée
+\makeatletter\if@screen%
+\linkandfootnote{docfrenchle}{\texttt{frenchle}}%
+{http://www.efrench.org/doc/frenchle.pdf}
+\else%
+\linkandfootnote{docfrenchle}{\texttt{frenchle}}%
+{http://efrench.org/doc/frenchle.pdf}
+\fi%
+\makeatother%
+et d'autre part au document
+\linkandfootnote{torture}{<< test de torture >>}%
+{http://www.efrench.org/distributions/frenchlb-torture-test.pdf}.
+\index{extension!allége@allégée \emph{frenchle}}%
+\index{version!allégée}%
+\index{frenchle@\emph{frenchle}}%
+
+Deux types d'utilisation sont possibles, l'un {\em normal\/} et
+l'autre {\em étendu\/} plutôt réservé aux utilisateurs
+expérimentés. Nous allons détailler ces deux types d'utilisation
+(nous verrons par la suite qu'il existe aussi une utilisation
+appauvrie pour ceux qui ne peuvent pas ou ne désirent pas faire
+appel à tous les dispositifs).
+
+\section{Utilisation normale}\label{normal}
+\index{utilisation!normale}%
+Pour utiliser l'extension {\eFrench} il suffit de la {\em charger
+en mémoire} pour \LaTeX{}
+\hbox{c.-à-d.} comme toute extension, par
+l'ordre \verb|\usepackage|.
+En fait, on l'appelera sous le nom \texttt{french}
+(de préférence à \texttt{efrench}) pour bénéficier d'un maximum
+de dispositifs :
+\index{usepackage@\texttt{\backslash usepackage}}%
+\begin{verbatim}
+ \documentclass[a4paper,11pt]{book}
+ \usepackage{french}
+\end{verbatim}
+
+\noindent
+mais vous pouvez aussi charger l'extension {\eFrench} en faisant
+appel à l'extension multilingue \emph{mlp} : %
+\index{extension!eFrench@\emph{efrench}}
+\begin{verbatim}
+ \documentclass[a4paper,11pt]{book}
+ \usepackage[french]{mlp}
+\end{verbatim}
+\index{extension!mlp@\emph{mlp}}%
+\index{mlp@\emph{mlp}}%
+le résultat est identique dans les deux cas, mais si vous souhaitez utiliser
+plusieurs langues dans le document il est alors plus normal de le faire
+avec l'extension \emph{mlp} en précisant les langues en option (de
+\vers|\usepackage| ou de \vers|\document|\-\vers|class|).
+
+ L'utilisation de \emph{mlp} limite en fait le multilinguisme aux modules de langues
+qui peuvent être lancés sans \emph{babel}, ce qui restreint son usage à l'anglais (\texttt{english}) et à l'allemand
+\texttt{german} ou \texttt{ngerman}.
+
+Vous ne pouvez plus utiliser {\eFrench} en option de l'extension
+\index{babel@\emph{babel}!en opt@{\eFrench} en option de}%
+multilingue \emph{babel}.
+Une commande de ce genre :
+\begin{verbatim}
+ \documentclass[a4paper,11pt]{book}
+ \usepackage[french]{babel}
+\end{verbatim}
+fera appel à la version \emph{babel} de typographie française, c'est à dire à \emph{frenchb} de \textsc{D.~Flipo}.
+
+
+\noindent
+Mettre de préférence \texttt{french} en dernier dans la liste des
+extensions que vous précisez
+\footnote{L'extension {\eFrench} peut
+aussi être chargée de façon anarchique par \texttt{\backslash
+input french.sty} avant le \texttt{\backslash begin}\{\texttt{document}\}
+mais cela est déconseillé.}
+de façon à ce que {\eFrench} puisse s'adapter aux extensions déjà
+chargées en mémoire.
+\index{documentclass@\texttt{\backslash documentclass}}%
+\index{begin@\texttt{\backslash begin}!\texttt{\backslash begin}\{\texttt{document}\}}%
+\index{activation de {\eFrench}}%
+\index{babel@\emph{babel}!activ@activation de {\eFrench}}%
+Cela dit, vous noterez toutefois que
+l'extension \texttt{french} ne devient vraiment active qu'après
+le \texttt{\backslash begin}\{\texttt{document}\}
+\index{extension!babel@\emph{babel}}%
+\index{extension!french@{\eFrench}}%
+\index{babel@\emph{babel}}%
+\index{begin@\texttt{\backslash begin}!\texttt{\backslash begin}\{\texttt{document}\}}%
+\par
+
+L'extension {\eFrench} est conçue pour être utilisée
+avec les classes de document standard \LaTeX{} c.-à-d.
+ \verb|book|, \verb|report|, \verb|article| et
+\index{classe!letter@\texttt{letter}}%
+\index{classe!book@\texttt{book}}%
+\index{classe!article@\texttt{article}}%
+\index{classe!minimal@\texttt{minimal}}%
+\index{book@\texttt{book}}%
+\index{report@\texttt{report}}%
+\index{article@\texttt{article}}%
+\index{letter@\texttt{letter}}%
+\index{minimal@\texttt{minimal}}%
+\verb|letter|%
+\footnote{L'extension {\eFrench} n'est pas utilisable,
+par exemple, avec la classe \texttt{minimal}.}%
+.
+
+\medskip
+\noindent
+\textbf{[}Pour ceux que la lecture des codes source ravit, il est précisé que,
+depuis la version 3,30 du style french,
+les commentaires ne figurent plus dans
+le fichier \verb|french.sty| mais dans %]
+\linkandfootnote{codefrench}{\texttt{french\_{}doc.pdf}}%
+{http://efrench.org/doc/french_doc.pdf}%
+ (dont la mise à jour accuse un certain retard.\textbf{]}
+\index{fichier!french_doc.pdf@\texttt{french\string_doc.pdf}}%
+
+\subsection{Pour commencer}\label{Pour commencer}\index{pour commencer}%
+\subsubsection{Saisie}\label{saisie}\index{saisie}%
+Rappelons ici quelques règles de saisie usuelles
+pratiquées en dactylographie française et qui sont à appliquer
+lorsque l'on saisit du \LaTeX{} destiné à être utilisé avec
+l'extension {\eFrench} :
+\begin{itemize}
+\item vous devez saisir un espace (barre d'espacement du clavier) :
+\begin{itemize}
+\item avant la double ponctuation%
+\footnote{Elle est aussi appelée {\em ponctuation haute}.}
+(\verb|! ? : ;|) ;
+\index{double ponctuation}\index{\texttt{\exclam}}\index{\texttt{?}}%
+\item avant le \% (\verb|\%|) et en général les {\em unités}
+ monétaires, kilométriques, \etc.%
+\index{unites@unités!de mesure}%
+\index{\texttt{\%}}%
+\item avant les guillemets fermants (\verb|>|\verb|>|) et le tiret
+\index{tiret}\index{guillemets}%
+\index{>a@\texttt{\superieura\relax\superieura}}%
+\index{>b@\rightguillemets}%
+ lorsqu'il est utilisé en milieu de phrase%
+\footnote{\label{tripleT}Les habitudes typographiques ne sont pas
+toujours identiques selon les imprimeurs. Il semble, en effet, que dans
+de nombreux cas le triple tiret soit utilisé. Le double tiret
+me semble mieux adapté en milieu de phrase.}
+ (\verb|--|)
+ ;
+\item après \verb|<|\verb|<| (et bien sûr après \verb|>|\verb|> , ; : . ! ?|%
+\footnote{Il s'agit là du cas général ;
+vous trouverez aisément de
+nombreux exemples où il ne faudra pas saisir
+d'espace après ces caractères
+de ponctuation.}%
+) et tiret ;
+\index{\texttt{.}}\index{\texttt{;}}\index{\texttt{:}}%
+\index{<a@\texttt{\inferieura\relax\inferieura}}%
+\index{<b@\leftguillemets}%
+\end{itemize}
+\end{itemize}
+\noindent Par ailleurs :
+\begin{itemize}
+\item les guillemets (<< et >>) se saisissent directement si votre clavier
+a été bien défini pour \LaTeX{} ou sinon : \verb|<<| et \verb|>>| ; toute
+autre sorte de guillemets est à prohiber en français
+(\verb|` " '| \`{ } \'{ } `` ,, '') ;
+\item {\em french.sty} a été étendu pour accepter aussi les guillemets \MAJ
+{\em utf8} sous \raccouXe\LaTeX ceci pour autant que {\em efrenchu.tex}
+soit accessible ;\endMAJ
+\item on marque les intervalles avec un simple tiret
+(\verb|-|) comme dans << la guerre de 1939-45 >> ou << voir explication
+p. 169-173 >> ;
+\index{\texttt{`}}\index{\texttt{\dittomark}}\index{\texttt{'}}%
+\index{{\`\space}}\index{{\'\space}}\index{{``}}\index{{,,}}\index{{''}}%
+\item les tirets se saisissent \verb|--| lorsqu'ils sont employés dans le
+\index{-2@\texttt{--}}\index{-3@\texttt{---}}%
+ texte\refmark{tripleT}
+ ou en début d'énumération (mais on saisit \verb|---| pour
+commencer le discours d'un personnage de roman)
+ ;
+\item les points de suspension sont saisis par 3 points normaux (\verb|...|) ;
+\index{\texttt{...}}%
+\item les nombres \label{nombres}%
+\index{nombres}%
+\index{nombre}%
+\index{nombre@\texttt{\backslash nombre}}%
+\index{,@\texttt{\backslash ,}}%
+ne s'écrivent pas en anglais comme en français : il faut
+mettre une virgule pour séparer les unités de la partie
+décimale, exemple :
+1,5~km et mettre un blanc insécable%
+\footnote{Le blanc insécable peut être remplacé, valablement ici,
+par une {\em espace fine} (\texttt{\backslash,}) ;
+c'est ce qui est appliqué avec la commande \texttt{\backslash nombre}.
+On notera alors le moyen
+mnémotechnique suivant pour transformer un nombre, de l'anglais au
+français : \primo remplacer les virgules par \texttt{\backslash,} et
+\secundo le point par une virgule.}%
+ (\texttt{\tilde}) pour séparer les tranches des milliers
+ou des millièmes comme
+dans \verb|12~345,678~91| mais pour avoir une composition aisée
+on préfèrera la commande \verb|\nombre{12 345,678 91}|.
+\end{itemize}
+Ce qui suit est plus particulièrement lié à la
+composition du document
+mais doit être pris en compte dès la saisie :
+\begin{itemize}
+\item les locutions latines sont mises en italique dans le texte en
+\index{locutions latines}\index{italique}\index{romain}%
+romain (sauf pour cf., \etc. et toutes les locutions francisées comme
+critérium) ;
+\item voici aussi quelques abréviations usuelles (à retenir si
+vous n'utilisez pas le dispositif d'abréviation proposé par l'extension
+ {\eFrench}, voir page \pageref{frenchmacros}) qui
+\index{abreviations@abréviations!usuelles}%
+se saisissent de la manière suivante :
+\begin{verbatim}
+\hbox{c.-à-d.} /\emph{i.e.} / p.ex. / \etc. / cf. / id.
+ p.i. / p.o. / doc. / chap. / part. / vol.
+ paragr. / R.S.V.P. / T.S.V.P. /...
+\end{verbatim}
+\item les noms propres se composent en petites capitales (mais le prénom
+ reste en romain classique) soit par exemple : Donald \fsc{knuth}
+\index{romain}%
+ (voir plus loin l'ordre \verb|\fsc| au §~\ref{fsc}
+page \pageref{fsc}) ;
+\item ne pas mettre de point entre les lettres des sigles
+ ({\sc ratp, sncf}...)%
+\footnote{Voir aussi l'ordre \texttt{\backslash lsc} au §~\ref{lsc}
+page \pageref{lsc}.}
+sauf lorsque ce sigle est peu connu et s'énonce lettre par lettre
+ ; \index{sigles}%
+\item le caractère insécable ({\large\verb|~|})
+\index{caractère insécable (\texttt{\tilde})}%
+\index{~@\texttt{\tilde}}%{{$\widetilde{\space\space}$}}%
+ ne s'utilise que pour corriger une
+coupure malheureuse ; son utilisation systématique ne facilite pas la
+relecture et est bien souvent sans raison d'être dans les textes
+courants (et certainement pas pour la ponctuation
+qui est entièrement gérée par le stype \texttt{french} de l'extension {\eFrench}) ;
+toutefois on pourra l'utiliser entre {\em prénom} et {\em nom} lorsque
+le prénom est abrégé comme dans \verb|D.~KNUTH|%
+\footnote{Autre exemple, entre {\em chiffres\/} et {\em unités\/} comme
+dans : 130~km/h (\texttt{130\tilde{}km/h}).}.
+Rappelons par ailleurs que l'on indique les points possibles de division
+(\verb|-|) des
+mots grâce à l'ordre \TeX{} \vers|\hyphen|\-\vers|ation|. Inversement,
+ on empêche la coupure d'un mot tout le long
+d'un document en ne lui donnant aucun point de division possible
+"cad" en le précisant ainsi : \vers|\hyphenation{|%
+{\em mot}\/\verb|}| %
+(il est aussi possible de fournir une liste
+d'exceptions à la création du {\em format}\/ "cad" au moment de
+\index{fichier!d'exceptions}%
+l'installation ou ultérieurement, voir le §~\ref{cesure} page
+\pageref{cesure} sur la césure) ;
+\item les majuscules doivent toujours être accentuées ;
+\item dans les titres, ne mettre de majuscule qu'à
+la première lettre du
+premier mot (consultez les bons ouvrages
+\cite{lexique,codetypo,cahiers}, pour
+connaître précisément quels \index{majuscules}%
+sont les noms devant commencer par une majuscule) ;
+ne pas terminer un titre par un caractère de ponctuation (à l'exception
+des points d'exclamation et d'interrogation) ;
+\item dans une énumération simple comme celle-ci
+(c.-à-d. ne comportant pas plus d'une phrase par élément),
+vous devez commencer chaque élément ({\em item}) par
+une minuscule (en règle générale le double tiret << -- >>
+\index{tiret}\index{enumeration@énumération simple}%
+n'est jamais suivi d'une
+majuscule) et le terminer par un point virgule (sauf le dernier) ;
+\item dans les tableaux, les titres ("cad" l'ordre \verb|\caption|
+\label{tableaux}%
+\index{figures et tableaux}%
+\index{tableaux!titres}%
+ de \LaTeX{}) doivent être positionnés autrement
+ que dans les figures ; ils doivent être impérativement
+ mis devant
+ les tableaux alors qu'ils se placent après dans le cas
+ des figures.
+\end{itemize}
+
+Pour de plus amples renseignements on pourra consulter le manuel
+de l'imprimerie nationale \cite{lexique} mais aussi
+le petit document d'E. \fsc{Saudrais} \cite{saudrais} que l'on
+trouvera sur Internet.
+
+\subsubsection{Les noms de fichiers}
+
+Une bonne habitude est de découper son document en autant de fichiers que
+de chapitres ou sections (voire sous-sections, selon la complexité
+du document). Une deuxième bonne habitude est aussi de ne jamais
+mettre de caractères accentués dans les noms de fichiers car, non seulement
+les systèmes d'exploitation n'aiment pas trop ça mais en plus
+le document n'est plus portable sur un autre type de système.
+
+Pour préciser un fichier Windows il faut d'abord indiquer sur
+\index{fichier!d'exceptions}%
+ quelle unité il réside (comme par exemple \verb|C:/fichier|%
+\footnote{L'anti-slash est normalement reconnu par le moteur \TeX}%
+) ; on indique ainsi un chemin absolu. Ce n'est pas toujours la bonne
+méthode car d'une part le nom des unités peut varier et encore une fois
+ce nom complet n'est plus portable sur un autre système. L'autre
+méthode consiste, lorsque tous les fichiers sont sur la même unité,
+d'indiquer le chemin relatif par rapport au dossier dans lequel
+vous travaillez (par exemple \verb|./fichier| ou \verb|../figures/fichier|).
+Si toutefois vous ne pouvez pas ou ne souhaitez pas appliquer cette
+méthode il faudra donc coder en absolu mais avec quelques précautions
+dues au caractère << \verb|:| >> qui est un caractère actif avec {\eFrench}.
+Vous devrez définir vos unités Windows %
+\index{unites@unités!Windows}%}
+ utilisées dans le document :
+\begin{verbatim}
+ \WindowsUnits{disque=C,cd=D,autre=E}
+\end{verbatim}
+\index{windowsunits@\texttt{\backslash WindowsUnits}}%
+\index{unites@unités!windowsunits@\texttt{\backslash WindowsUnits}}%
+ en choississant les noms que vous voulez (cela va définir des commandes
+du même nom). Ensuite, lorsque vous aurez
+besoin de faire appel à un fichier sur \texttt{C} (dans la
+partie en français de votre document) il suffira de coder :
+\begin{verbatim}
+ \disque:/fichier
+\end{verbatim}
+mais attention à ne pas oublier le << \verb|:| >> sinon
+vous obtiendrez un message
+<< \texttt{Use of ... doesn't match its definition} >>.
+Ainsi vous pourrez coder :
+\begin{verbatim}
+ \input{\disque:/bouqin/chapitreIV/sectionIII/texte.tex}
+ \graphicpath{\cd:/images}
+ \includegraphics{\autre:/bouqin/graphiques/image}
+\end{verbatim}
+
+\subsubsection{Contenant et contenu}
+Ne vous occupez surtout pas du contenant de votre document lorsque
+vous le saisissez et concentrez vous uniquement sur le contenu (une bonne
+occasion de se relire...). Lorsque vous saisissez des listes, des
+énumérations, \etc. veillez à ce que celles-ci restent brèves (de l'ordre
+d'une phrase ou deux) sinon réfléchissez à la possibilité de
+rajouter une section de niveau inférieur.
+
+Il faut éviter à tout prix le souligné, c'est un dispositif de
+secours qui ne donne jamais un bon effet typographique.
+
+De la même manière l'encadré ne doit pas être utilisé trop souvent
+sauf s'il fait partie de la maquette.
+
+Une tendance qui nous vient d'outre-atlantique et qui n'est pas
+du plus bel effet est l'usage immodéré de la numérotation en 5 ou
+6 niveaux (par exemple : paragraphe 3.27.6.2.1). À partir du troisième
+niveau demandez-vous s'il est vraiment indispensable de numéroter.
+
+En tout, l'exagération est un vilain défaut... tout au moins en typographie
+(en excluant la publicité, bien entendu) ; c'est le cas de la numérotation
+mais aussi de l'usage abusif de la couleur ou de fontes différentes.
+Le sujet est vaste et je ne saurai trop vous recommander de bons ouvrages
+comme \cite{ManPerrou,CompoPerrou}.
+
+\subsubsection{Programmation de votre éditeur de textes}
+\index{editeur@éditeur de textes}%
+Il est souhaitable de ne pas entraver l'action de l'extension {\eFrench}
+par des {\em automatismes} mis en œuvre au niveau de l'éditeur de
+textes. Puisque la ponctuation est gérée
+typographiquement par l'extension {\eFrench},
+il serait nocif de systématiser, par exemple,
+ l'insertion d'espace devant la
+\index{ponctuation}%
+double ponctuation ou la génération des points de
+suspension à la \TeX{}
+lorsqu'on saisit 3 points consécutifs. Votre éditeur de textes
+\index{points!3 points}%
+ne doit donc pas intervenir sur la ponctuation
+que vous aurez saisie {\em à la française\/} (voir §~\ref{saisie}).
+
+Par contre votre éditeur de textes pourra vous rendre beaucoup de services
+pour gérer les
+\index{begin@\texttt{\backslash begin}}\index{end@\texttt{\backslash end}}%
+\index{mode mathématique}%
+\verb|\begin| et \verb|\end| de \LaTeX{},
+vous proposer des prototypes de documents ou d'environnements,
+vous aider en mode mathématique, \etc.
+
+\subsubsection{Configuration avant utilisation}\label{conf}
+
+\index{configuration}\index{premiere@première utilisation}%
+Par rapport à ce qui était nécessaire du temps de Bernard Gaulle,
+la configuration avant première utilisation est nettement plus simple
+avec les moteurs actuels que ce soit \TeX{}live ou Mik\TeX{}.
+Les dernières versions de \TeX{}live mettent d'emblée la
+paquet \textit{e-french} à disposition, pour Mik\TeX{}, il suffit de le charger à partir
+des paquets disponibles.
+
+Ainsi, normalement, l'extension {\eFrench} doit -- en tout état de cause --
+trouver et donner la possibilité de choisir
+au moins deux langues :
+\begin{center}
+\verb|\french | et \verb| \english|
+\end{center}
+\index{langues!\texttt{\backslash french}}\index{langues!\texttt{\backslash english}}%
+\index{french@\texttt{\backslash french}}\index{english@\texttt{\backslash english}}%
+\verb|\english| permettant de revenir au standard \LaTeX{} et \verb|\french|
+de réactiver l'extension {\eFrench} lorsque nécessaire.
+
+\subsection{Commandes principales}\label{Commandes principales}\index{commandes principales}%
+
+\subsubsection{Quelques commandes du mode texte}\label{commandes}
+
+On l'aura compris, les noms des langues précisés dans le fichier
+de description \verb|language.dat| servent à définir des
+commandes du même nom qui permettent de passer
+dynamiquement d'une langue à une autre ;
+ainsi dès lors que l'on a choisi d'utiliser
+l'extension {\eFrench} on peut écrire :
+\begin{verbatim}
+ Texte en français
+ \english
+ Text in English
+ \french
+ Suite du texte en français...
+\end{verbatim}
+%\ifnoDOCinstall\else\newpage\fi%
+Mais il est aussi possible d'écrire d'une autre manière :
+\begin{verbatim}
+ Texte en français
+ \begin{english}
+ Text in English
+ \end{english}
+ Suite du texte en français...
+\end{verbatim}
+\index{begin@\texttt{\backslash begin}!\texttt{\backslash begin}\{\texttt{english}\}}%
+\index{end@\texttt{\backslash end}!\texttt{\backslash end}\{\texttt{english}\}}%
+\index{endenglish@\texttt{\backslash endenglish}}%
+
+On peut ainsi mélanger des parties en français et d'autres en anglais,
+voire avec \emph{mlp} \index{extension!eFrench@\emph{efrench}}
+en allemand( \textit{german} et \textit{ngerman}) .
+Il n'y a pas possibilité de passer à d'autres langues, les autres étant
+uniquement prévues pour \emph{babel}.
+Chaque page ou partie de page du document
+est composée selon la typographie associée à la langue active.
+Si l'on souhaite une présentation homogène du début à la fin du
+document on codera \verb|\ConstantLayout| juste après le
+\index{ConstantLayout@\texttt{\backslash ConstantLayout}}%
+\verb|\begin{document}|%
+\footnote{Il est aussi possible de fournir cet ordre via
+\texttt{\backslash usersfrenchoptions} dont on parle page \pageref{usersf}.}%
+\index{usersfrenchoptions@\texttt{\backslash usersfrenchoptions}}%
+.
+
+\medskip
+
+Quelques commandes ont été ajoutées au jeu standard \LaTeX{},
+il s'agit de :
+
+\begin{itemize}
+\item \verb|\begin{resume} texte du résumé \end{resume}|
+\index{begin@\texttt{\backslash begin}!\texttt{\backslash begin}\{\texttt{resume}\}}%
+\index{end@\texttt{\backslash end}!\texttt{\backslash end}\{\texttt{resume}\}}%
+
+ pour imprimer un {\em Résumé\/} lorsqu'on a déjà utilisé
+\verb|\begin{abstract}|
+\verb|...| \verb|\end{abstract}| en \verb|\english| ;
+\index{begin@\texttt{\backslash begin}!\texttt{\backslash begin}\{\texttt{abstract}\}}%
+\index{end@\texttt{\backslash end}!\texttt{\backslash end}\{\texttt{abstract}\}}%
+
+\item \verb|\begin{motsclef} liste des mots clef \end{motsclef}|
+\index{environnement!motsclef@\texttt{motsclef}}%
+\index{motsclef|see{environnement}}%
+\index{begin@\texttt{\backslash begin}!\texttt{\backslash begin}\{\texttt{motsclef}\}}%
+\index{end@\texttt{\backslash end}!\texttt{\backslash end}\{\texttt{motsclef}\}}%
+
+ pour imprimer la liste des mots clef d'un document ;
+
+on peut aussi utiliser
+\verb|\begin{keywords}|
+\verb|...| \verb|\end{keywords}| lorsque l'on est en \verb|\english| ;
+\index{environnement!keywords@\texttt{keywords}}%
+\index{keyword|see{environnement}}%
+\index{begin@\texttt{\backslash begin}!\texttt{\backslash begin}\{\texttt{keywords}\}}%
+\index{end@\texttt{\backslash end}!\texttt{\backslash end}\{\texttt{keywords}\}}%
+
+\item \verb|\sommaire[n]| imprime le sommaire du document ; le paramètre
+\index{sommaire1@\texttt{\backslash sommaire}}%
+\index{sommaire2@\texttt{\backslash sommaire[n]}}%
+optionnel \verb|[n]| peut prendre une valeur de 1 à 4 et permet
+de choisir le
+niveau de {\em profondeur} du sommaire%
+\footnote{La profondeur dont on parle ici est (malheureusement, pour
+des raisons techniques) inverse de celle de \LaTeX{}
+(\texttt{\backslash tocdepth}).}
+; avec le niveau 1 les titres de
+\index{tocdepth@\texttt{\backslash tocdepth}}%
+paragraphe et de sous-paragraphes ne seront pas imprimés,
+tandis qu'au niveau
+4 ce seront les titres de sections et tous les titres
+de niveau inférieur%
+\footnote{À condition que le compteur \LaTeX{}
+\texttt{\backslash tocdepth} n'ait pas
+été positionné à une valeur contradictoire.}
+ ; par
+défaut \verb|n| prend la valeur 3 (retrait des titres de
+sous-sections et des
+éléments inférieurs) ; la commande
+\verb|\tableofcontents| reste utilisable ;
+\index{tableofcontents@\texttt{\backslash tableofcontents}}%
+deux passages dans \LaTeX{} sont nécessaires pour produire un sommaire
+correct ;
+
+\item pour réaliser une bibliographie
+\index{bibliographie}%
+ (en faisant appel à un style ad hoc) on choisira de préférence l'utilitaire
+\texttt{bibtex8} qui est capable de traiter les caractères accentués
+des entrées bibliographiques à indexer et à préparer pour \LaTeX.
+\index{bibtex8@\texttt{bibtex8}}%
+ Vous trouverez quelques styles BiB\TeX\ francisés sur \lsc{CTAN} et dans le
+dossier \texttt{contrib} de la distribution.
+\eFrench\ traduit les diverses commandes et mot-clés mise en œuvre dans
+ces styles et/ou quelques extensions \LaTeX\ de bibliographie
+(voir aussi page \pageref{bibliographie}).
+
+\item \verb|\annexe| ou \verb|\annexes| permettent de commencer des annexes ;
+ils doivent précéder immédiatement un ordre \verb|\chapter| ;
+\index{annexe1@\texttt{\backslash annexe}}%
+\index{annexe2@\texttt{\backslash annexes}}%
+chaque titre d'annexe sera donné par \verb|\chapter{Nom_de_l'annexe}| ; la
+table des matières et le sommaire sont modifiés (automatiquement)
+en conséquence ; les annexes
+sont numérotées alphabétiquement à partir de A ;
+ceci ne peut pas être utilisé avec la
+\index{article@\texttt{article}}%
+classe \verb|article| (\LaTeX{} ne l'a pas prévu) ;
+%un article en général n'a pas d'annexe !
+
+\index{glossaire1@\texttt{\backslash glossaire}}%
+\index{glossaire2@\texttt{\backslash glossaires}}%
+\item pour réaliser un glossaire on peut :
+ \begin{order}
+ \item coder \verb|\glossary{[|{\em nom}\verb| :]|
+ {\em explication%
+\footnote{L'ordre \texttt{\backslash glossary} ne doit
+ pas dépasser une ligne ni contenir de commentaires.}%
+.} \verb|}| pour chaque entrée désirée ;
+ \item commencer le ou les glossaires par :
+ \verb|\glossaire| ou \verb|\glossaires| ;
+chaque titre de glossaire est à donner par : \\
+\verb|\section{Nom_du_glossaire}| ; la table des matières et le sommaire
+sont modifiés automatiquement en conséquence ;
+ \item mettre \verb|\printglossary| à l'endroit voulu dans
+ le document ;
+ si le nom du fichier glossaire n'a pas l'extension \verb|.gls| ou
+ porte un autre nom, on pourra coder :
+
+\verb| \printglossary[nom_de_fichier]|
+
+\index{printglossary@\texttt{\backslash printglossary}}%
+\index{makeindex@\texttt{\backslash makeindex}}%
+\index{fichier!glo@\texttt{.glo}}%
+\index{fichier!gls@\texttt{.gls}}%
+\index{fichier!gglo.ist@\texttt{gglo.ist}}%
+ Il faut rappeler que le fichier glossaire produit par \LaTeX{} a
+ l'extension \verb|.glo| et qu'il est d'usage que ce glossaire, une
+ fois trié par le programme \lsc{MAKEINDEX}%
+\footnote{Le programme \lsc{MAKEINDEX} ne trie pas selon l'alphabet
+français (lettres accentuées). On peut toujours ruser avec le caractère
+\texttt{\at} ou utiliser un programme de tri 8-bits tel que \emph{Xindy}.%
+\label{xindy}}
+\index{makeindex@{\sc makeindex} (programme)}%
+ (commande \verb|makeindex|
+ \verb|-s| \verb|gglo.ist|), porte l'extension \verb|.gls|.
+ À défaut
+ d'utilitaire \lsc{MAKEINDEX} on pourra remplacer \verb|\printglossary|
+ par une commande \verb|\input| du fichier \verb|.glo|. Tout ce qui
+ précède n'est valable que si aucune option de style
+ n'est utilisée
+ pour mettre en page le glossaire et n'introduit l'environnement
+ \verb|theglossary|.
+ \end{order}
+\item pour réaliser un index on utilisera
+le programme \lsc{MAKEINDEX}\refmark{xindy}
+(par ex\-em\-ple avec la commande :
+\texttt{makeindex -s fridx1.ist} {\em fichier}).
+\index{makeindex@{\sc makeindex} (programme)}%
+\index{fichier!fridx1.ist@\texttt{fridx1.ist}}%
+Il ne faut pas
+\index{index!trie de l'}%
+\index{index!makeindex@\texttt{makeindex}}%
+\index{makeidx@\texttt{makeidx} (extension)}%
+préciser à \LaTeX{} l'extension \texttt{make}\-\texttt{idx} car elle
+est incluse et francisée dans l'extension {\eFrench} ; on consultera
+toutefois la documentation de \verb|makeindex|
+\cite{makeindex} ; la table des
+matières et le sommaire sont modifiés ;
+l'extension {\eFrench} apporte la commande \verb|\seealso| mais
+contrairement à la commande \verb|\see| qui s'utilise uniquement
+à l'intérieur d'\verb|\index|%
+\footnote{Comme ceci : \texttt{\backslash index}\{\texttt{
+...|see}\{{\em qqc}\}\}.}%
+, celle-ci s'utilise en dehors et produit la commande
+\verb|\index| nécessaire ; il suffit de coder
+\verb|\seealso{|{\em entrée}\verb|}{|{\em renvoi\/}\verb|}| ;
+\index{index!see1@\texttt{see}}%
+\index{see1@\texttt{\backslash see}}%
+\index{see2@\texttt{\backslash seealso}}%
+\index{index!see2@\texttt{\backslash seealso}}%
+rappelons que la commande \vers|\print|\-\vers|index| permet
+\index{printindex@\texttt{\backslash printindex}}%
+l'impression de l'index ;
+
+Rappelons aussi
+que la commande \verb|\index| ne doit pas dépasser une ligne
+et qu'il est fort souhaitable de la placer dans le texte en dehors
+de tout argument de commande.
+
+\item dans le texte courant (c.-à-d. le texte en
+\verb|\normalsize|%
+\index{texte courant}\index{normalsize@\texttt{\backslash normalsize}}%
+\footnote{Si vous disposez d'une bonne extension qui permet
+de changer de taille de police relativement comme \texttt{smaller}
+ou \texttt{relsize}, le
+texte mis en petite taille (\texttt{\backslash small}) sera imprimé
+dans la taille inférieure appropriée en fonction
+de la police utilisée à cet instant.\label{small}
+Vous trouverez ma version personnelle (\texttt{mysmaller.sty}
+dans le sous-répertoire \texttt{tst} de la distribution).}%
+\index{taille de police}%
+\index{extension!relsize@\emph{relsize}}%
+) on pourra
+utiliser les commandes suivantes pour faciliter la composition avec \LaTeX{} :
+\begin{itemize}
+\item \verb|\ier| ou \verb|\iers| pour imprimer 1\ier{} ou 1\iers{};
+ il suffira de saisir \verb|1\ier{}| ou \verb|\iers{}|,
+\index{ier@\texttt{\backslash ier}}\index{iers@\texttt{\backslash iers}}%
+\item \verb|\iere| (et \verb|\ieres|)
+pour imprimer 1\iere{}\!, (ou 1\ieres{}\!) par exemple, on saisira
+\verb|1\iere{}| ou \verb|1\ieres{}|,
+\index{iere@\texttt{\backslash iere}}\index{ieres@\texttt{\backslash ieres}}%
+\item \verb|\ieme| (ou \verb|\iemes|) pour imprimer 2\ieme{} (\verb|2\ieme{}|),
+\index{ieme@\texttt{\backslash ieme}}\index{iemes@\texttt{\backslash iemes}}%
+\item \verb|\ordinal{|\emph{compteur}\verb|}| pour imprimer la valeur ordinale
+d'un compteur (\emph{premier, deuxième, ...} jusqu'à \emph{vingtième}),
+\verb|\Ordinal| pour commencer par une majuscule,
+\verb|\Ordinale| ou \verb|\ordi|\-\verb|nale|
+pour imprimer la même chose au
+féminin (\emph{Première}),
+\index{ordinal@\texttt{\backslash ordinal}}%
+\index{ordinale@\texttt{\backslash ordinale}}%
+\index{Ordinal@\texttt{\backslash Ordinal}}%
+\index{Ordinale@\texttt{\backslash Ordinale}}%
+\item \verb|\degres| pour imprimer 14\degres{}C (\verb|14\degres{}C|),
+\index{degres@\texttt{\backslash degres}}%
+\item \verb|\primo \secundo \tertio \quarto| donneront \primo\ \secundo\
+\tertio\ \quarto\ mais vous pouvez%
+\index{primo@\texttt{\backslash primo}}\index{secundo@\texttt{\backslash secundo}}%
+\index{tertio@\texttt{\backslash tertio}}\index{quarto@\texttt{\backslash quarto}}%
+\footnote{Bien que cela ne soit pas l'usage typographique, on pourra aussi
+utiliser : \texttt{\backslash primo) \backslash secundo)
+\backslash tertio) \backslash quarto)}
+ qui donneront \primo)\ \secundo)\ \tertio)\ et \quarto)%
+.}
+ continuer avec \verb|\quando={11}| qui donnera alors \quando={11}\!,
+\index{quando@\texttt{\backslash quando}}%
+\item \verb|\numero| ou \verb|\Numero| pour imprimer \numero 12 ou \Numero 13
+\index{numero@\texttt{\backslash numero}}\index{numeros@\texttt{\backslash numeros}}%
+\index{Numero@\texttt{\backslash Numero}}\index{Numeros@\texttt{\backslash Numeros}}%
+(\verb|\Numero 13|) mais il existe aussi \verb|\numeros| et \verb|\Numeros|
+pour imprimer << \numeros >> et << \Numeros >>,\label{numero}
+\item l'ordre \verb|\fup{texte}| permettra de surélever le texte et de le
+mettre dans une police de petite taille (\verb|\small|\refmark{small}%
+\index{fup@\texttt{\backslash fup}}% Du fait du \kern on ne pouvait
+) comme pour imprimer {XVI\fup{e}} % pas couper ici.
+(\verb|XVI\fup{e}|) ;
+\end{itemize}
+L'espacement engendré par ces commandes peut ne pas
+convenir dans certains
+\index{\texttt{\backslash\exclam}}%
+\index{espace!fine@fine négative (\texttt{\backslash\exclam})}%
+\index{espacement!correction d' (\texttt{\backslash\exclam})}%
+cas, on le supprimera alors en saisissant \verb|\!| ; ainsi pour
+imprimer (\numero\!) il faut saisir \verb|(\numero\!)|.
+\item voici aussi quelques ordres pour pouvoir imprimer :
+\begin{itemize}
+\item le << a enroulé >> (\at{} : arobase) avec \verb|\at|,
+\index{at@\texttt{\backslash at}}%
+\item le circonflexe ou chapeau ({\Large\chap}) avec \verb|\chap|,
+\index{chap@\texttt{\backslash chap}}%
+\item la barre verticale (\texttt{\vert}) avec \verb|\texttt{\vert}|
+\footnote{\label{ttOT1}%
+ Ces caractères existent dans d'autres polices
+que la police télétype à condition de ne plus utiliser le
+{\em fontencoding\/} \texttt{OT1}
+(ni le codage de fonte \texttt{LO1} défini par l'extension \emph{mltex})
+mais \texttt{T1}.},
+\index{extension!mltex@\emph{mltex}}%
+\index{codage!\texttt{LO1}}%
+\index{LO1@\texttt{LO1} (codage)}%
+\index{fontencoding@{\em fontencoding}!\texttt{LO1}}%
+\index{fontencoding@{\em fontencoding}}%
+\index{fontencoding@{\em fontencoding}!\texttt{OT1}}%
+\index{fontencoding@{\em fontencoding}!\texttt{T1}}%
+\index{encodage!voir codage}%
+\index{codage!\texttt{OT1}}%
+\index{codage!de fonte}%
+\index{codage!\texttt{T1}}%
+\index{OT1@\texttt{OT1} (codage)}%
+\index{T1@\texttt{T1} (codage)}%
+\index{vert@\texttt{\backslash vert}}%
+\item la barre oblique inversée (\texttt{\backslash})
+avec \verb|\texttt{\backslash}|%
+\footnote{Avec le codage de fontes \texttt{OT1} la commande
+\texttt{\backslash backslash} est aussi utilisable
+ en romain droit mais attention car la version anglaise
+ne donne pas le même glyphe.}\refmark{ttOT1}%,
+\index{backslash@\texttt{\backslash backslash}}%
+\item le tilde ({\Large\tilde}) avec \verb|\tilde| (en
+fait ici \verb|{\Large\tilde}|) ;
+\index{tilde@\texttt{\backslash tilde}}%
+\end{itemize}
+
+\item l'ordre \verb|\fsc| permet de composer un nom propre en petites
+capitales sans avoir à se préoccuper de savoir quelle partie doit
+être ou non en majuscules ; ainsi \verb|\fsc{KNUTH}| autant que
+\verb|\fsc{knuth}| imprimera \fsc{kNuTh} et ce nom ne sera jamais
+coupé en bout de ligne
+(sauf exception signalée au §~\ref{cesure}) ;\label{fsc}
+la forme étoilée, \verb|\fsc*|, permet de forcer l'utilisation
+le \verb|\rmfamily| et de \verb|\mdseries| lorsqu'il n'existe
+pas de police en petites capitales, avec la même graisse,
+ dans la fonte en service.
+\index{fsc*@\texttt{\backslash fsc*}}%
+\index{rmfamily@\texttt{\backslash rmfamily}}%
+\index{mdseries@\texttt{\backslash mdseries}}%
+
+\item \verb|\lsc| est destiné aux noms de firmes ou de marques quand on
+veut les mettre en minuscules {\em small caps}. Par exemple,
+\verb|\lsc{RaTp}| et \verb|\lsc{Unix}| s'imprimeront : \label{lsc}
+\index{lsc@\texttt{\backslash lsc}}%
+\lsc{RaTp} et \lsc{Unix} ; ces noms ne seront, non plus, jamais coupés en
+fin de ligne
+(sauf exception signalée au §~\ref{cesure}).
+La forme étoilée, \verb|\lsc*|, permet de forcer l'utilisation
+de \verb|\rmfamily| et de \verb|\mdseries| lorsqu'il n'existe
+pas de police en petites capitales, avec la même graisse,
+ dans la fonte en service.
+\index{lsc*@\texttt{\backslash lsc*}}%
+\index{rmfamily@\texttt{\backslash rmfamily}}%
+\index{mdseries@\texttt{\backslash mdseries}}%
+\index{lsc@\texttt{\backslash lsc}}%
+\end{itemize}
+
+Nous verrons plus loin les guillemets français (\S~\ref{guillemets} page
+\pageref{guillemets}), les lettrines
+\S~\ref{lettrines} page \pageref{lettrines}) et les commandes
+pour la classe \texttt{letter}
+\index{classe!letter@\texttt{letter}}%
+(\S~\ref{letter} page \pageref{letter}).
+
+\subsubsection{Les commandes du mode mathématique}\label{maths}
+
+\index{mode mathématique}%
+
+Aucune commande spécifique n'est ajoutée, pour l'instant
+\footnote{Les mathématiciens et typographes français doivent
+d'abord se mettre d'accord
+pour définir précisément ce qu'est la typographie mathématique
+française et en quoi \AllTeX{} n'est pas entièrement satisfaisant.}%
+, par l'extension {\eFrench} au mode mathématique. Cela est
+dû en partie au fait que la composition mathématique n'est pas
+encore bien standardisée en France. D'ici quelques temps peut-être...
+Signalons cependant l'existence de l'extension \emph{fourier}
+\index{fourier@\emph{fourier}}%
+et de la fonte du même nom (en fait, \emph{fourier-GUT}, basée sur
+la fonte \texttt{utopia} d'Adobe) qui apporte de nouvelles commandes
+et facilités pour le mode mathématique (en codage \texttt{T1}).
+
+Une modification due à \eFrench\ est toutefois à signaler : il s'agit de la
+suppression de l'espacement derrière la virgule car la virgule est
+utilisée usuellement en français dans un nombre décimal, voir
+\verb|\nombre| en %
+\ref{nombres} page~\pageref{nombres}
+(et \ref{frenchtypography} page~\pageref{frenchtypography}).
+\index{nombre}%
+\index{nombre@\texttt{\backslash nombre}}%
+\index{nombres}%
+
+%D'autre part, des fontes mathématiques spécifiques et modernes
+%sont encore à l'étude.
+%En attendant, le mode mathématique est toujours composé avec
+%les fontes \emph{cm} (c'est-à-dire en codage OT1).
+
+%Les utilisateurs de l'option \oMlTeX\ ayant introduit la partie francisation de
+%clavier dans le format (avec \texttt{kbconfig}%
+%%%%%%%%%%%%%%%%%%%%%
+%\ifnoDOCinstall\else%
+%%%%%%%%%%%%%%%%%%%%%
+%, cf. §~\ref{kbconfig} page \pageref{kbconfig},%
+%\index{kbconfig@\texttt{kbconfig}}%
+%\fi) apprécieront de pouvoir imprimer des caractères accentués
+%\index{lettres accentuées!en mode mathématique}%
+%\index{caractères accentués!en mode mathématique}%
+%en mode mathématique
+%\footnote{Sauf l'accentuation \texttt{\backslash H} du mode texte
+%qui n'a pas d'équivalent en mode mathématique.}%
+%.
+
+\subsubsection{Les guillemets français}\label{guillemets}
+
+Les ordres \verb|<<| et \verb|>>|%
+\footnote{En fait \texttt{\inferieura} et \texttt{\superieura} sont
+des ordres (macros-instructions) réalisant
+des fonctions spécifiques et ce spécialement
+lorsque le caractère qui suit est
+\texttt{\inferieura} et respectivement~\texttt{\superieura}.}
+ou leurs équivalents 8-bits (<< et >>, si vous
+en disposez à votre clavier)
+\index{fichier!.kbc@\texttt{.kbc}}%
+ permettent de saisir facilement
+\index{<a@\texttt{\inferieura\relax\inferieura}}%
+\index{<b@\leftguillemets}%
+\index{>a@\texttt{\superieura\relax\superieura}}%
+\index{>b@\rightguillemets}%
+\index{guillemets!<<a@\texttt{\inferieura\relax\inferieura}}%
+\index{guillemets!<<b@\leftguillemets}%
+\index{guillemets!>>a@\texttt{\superieura\relax\superieura}}%
+\index{guillemets!>>b@\rightguillemets}%
+les guillemets français (et bien sûr de les imprimer : << >>) ; notez
+qu'il est impératif de mettre des guillemets fermants à la fin d'une
+citation (ou autre information) commencée par des guillemets ouvrants ;
+cela est très important car ils forment un {\em bloc} (\verb|{}|)
+ au sens \LaTeX{} (mais aussi un \index{environnement!guillemets@\texttt{guillemets}}
+environnement) ; il est ainsi possible de changer de police
+ de caractères pour tout le texte entre guillemets sans avoir à
+l'encadrer entre accolades ; par contre si on code quelque chose
+comme \verb|\footnote{...<<| \verb|...}...\section{...}| alors la
+\index{footnote@\texttt{\backslash footnote}}%
+note de bas de page ne sera jamais fermée et tout le texte qui se
+trouve après y sera inclus ;
+par défaut l'extension {\eFrench} propage les guillemets à chaque
+début de paragraphe, comme c'est l'usage, jusqu'aux guillemets fermants
+(sauf à l'intérieur d'une lettrine.)
+\index{lettrine!avec guillemets}%
+
+Rappelons qu'un espace est nécessaire après les guillemets ouvrants
+et avant les guillemets fermants pour assurer une composition correcte.
+Au cas où vous désireriez utiliser les guillemets à un autre usage
+\footnote{Les guillemets français sont automatiquement désactivés
+en mode mathématique avec les extensions AmS\LaTeX.}
+\index{guillemets!avec AmS\LaTeX{}}%
+\index{AmSLaTeX@AmS\LaTeX{}}%
+ que celui prévu dans l'extension {\eFrench}, choisissez alors l'option
+\vers|\nofrenchguil|\-\vers|lemets| décrite
+page~\pageref{nofrenchguillemets}.
+
+\verb|\begin{guillemets}| et bien sûr \verb|\end{guillemets}|
+\index{begin@\texttt{\backslash begin}!\texttt{\backslash begin}\{\texttt{guillemets}\}}%
+\index{end@\texttt{\backslash end}!\texttt{\backslash end}\{\texttt{guillemets}\}}%
+peuvent être utilisés en \LaTeX{} à la place de
+\verb|<<| et \verb|>>| ;
+\index{guillemets@\texttt{\backslash guillemets}}%
+\index{guillemets!guillemets@\texttt{\backslash guillemets}}%
+\index{guillemets!endguillemets@\texttt{\backslash endguillemets}}%
+\index{endguillemets@\texttt{\backslash endguillemets}}%
+ accessoirement on pourra aussi utiliser :
+
+\noindent
+\verb| \guillemets{} | et \verb| \endguillemets{}| ;
+
+\noindent mais, encore une fois, toute citation commencée par des guillemets
+doit se terminer par des guillemets ;
+\index{citation}\index{citation!dans une citation}%
+on devra absolument utiliser \verb|\endguillemets{}|
+lorsque deux citations se terminent au
+même endroit comme ici :
+
+\begin{verbatim}
+ << Première citation << suivie d'une
+ deuxième citation se terminant au
+ même endroit que la première par \endguillemets{} ;
+\end{verbatim}
+là où nous aurions normalement dû saisir \texttt{>{}>{}>{}>{}}
+pour terminer les deux citations, nous avons mis \verb|\endguillemets{}| ;
+on se servira aussi de la commande \verb|\endguil|\-\verb|lemets|
+pour apparier \label{apparier} des guillemets
+ouvrants qui auraient été fermés préalablement dans un bloc ou
+environnement plus intérieur.
+
+\verb|\leftguillemets{}| ou \verb|\rightguillemets{}| peuvent aussi bien
+\index{leftguillemets@\texttt{\backslash leftguillemets}}%
+\index{rightguillemets@\texttt{\backslash rightguillemets}}%
+\index{guillemets!leftguillemets@\texttt{\backslash leftguillemets}}%
+\index{guillemets!rightguillemets@\texttt{\backslash rightguillemets}}%
+être utilisés {\em ponctuellement\/} lorsqu'il est nécessaire de
+ne pas apparier guillemets ouvrants et fermants ; il n'y a pas dans
+ce cas de notion de {\em bloc} \LaTeX{}.
+
+\subsubsection{Les lettrines}\label{lettrines}
+
+\verb|\lettrine{L'extension}| a permis d'imprimer la lettrine de
+l'introduction.
+
+Une lettrine doit être placée au début d'un paragraphe%
+\footnote{La lettrine peut débuter tout environnement de type paragraphe
+comme par exemple \texttt{\backslash parbox} (qui lui-même peut être dans un
+environnement \texttt{tabular}, etc.).}
+ qui est supposé être composé, au minimum, \emph{au fer à gauche}
+s'il n'est pas aligné aussi à droite.
+\index{mise en page!au fer à gauche}
+Le {\em texte} doit être une partie significative de la phrase,
+ayant un sens
+en soi. Le paragraphe doit se terminer implicitement (ligne blanche) ou
+\index{par@\texttt{\backslash par}}%
+explicitement (\verb|\par|) par une fin de paragraphe
+lorsque cela est nécessaire (tout spécialement avant les
+ordres de sectionnement).
+
+Le texte qui suit l'ordre \verb|\lettrine| doit obligatoirement commencer
+par une lettre mais il ne devrait jamais être réduit
+à une seule lettre (l'extension {\eFrench} émet dans ce cas un
+message d'avertissement).
+Si cette lettre doit être accentuée à la mode \TeX{}
+ancienne alors le couple $accent + lettre$ sera mis entre accolades.
+
+Il nous faut distinguer maintenant deux options bien différentes
+dans la construction des lettrines :
+
+\begin{enumerate}
+
+\item Vous souhaitez ajuster vous-même la taille de la police
+utilisée pour la lettrine, c'est l'option par défaut
+\index{noautomaticlettrine@\texttt{\backslash noautomaticlettrine}}%
+\verb|\noautomaticlettrine|.
+
+Le nombre exact de lignes (usuellement 2 ou 3)
+qui seront en retrait est calculé automatiquement mais vous pouvez
+l'imposer\footnote{Mais attention,
+l'effet rendu peut être assez laid
+lorsque le caractère imprimé descend notablement en dessous
+de la ligne de base.}
+ par la commande :
+\begin{verbatim}
+ \def\lettrinehang{n}
+\end{verbatim}
+\index{lettrine!lignes en retrait \\ (\texttt{\backslash lettrinehang})}%
+\index{lettrinehang@\texttt{\backslash lettrinehang}}%
+(il n'y a pas de valeur par défaut).
+
+Notez bien que la lettrine doit dépasser légèrement du haut
+de la première ligne ; elle ne doit pas être {\em posée} sur
+le paragraphe mais y être incluse.
+ Si ce n'est pas le cas, alors cela veut dire que
+votre taille de lettrine n'est pas adaptée et il vous faut donc la changer.
+Le choix de la taille de police
+peut être commandé lorsque la
+valeur par défaut (\verb|\Huge|) ne convient pas, comme par exemple :
+\index{lettrine@\texttt{\backslash lettrine}}%
+\index{flettrine@\texttt{\backslash flettrine}}%
+\index{lettrinefont@\texttt{\backslash lettrinefont}}%
+\index{lettrine!taille de la}%
+\index{lettrine!police utilisée \\(\texttt{\backslash lettrinefont})}%
+\index{lettrine!encadrée (\texttt{\backslash flettrine})}%
+\index{guillemets!dans une lettrine}%
+\index{\texttt{\backslash\exclam}!après une lettrine}%
+\begin{itemize}
+\item \vers|\let\lettrinefont=\Large| (ou tout autre taille) ;
+\item ou \vers|\font\lettrinefont=cmr17 scaled\magstep3| (ce qui
+a été utilisé dans l'exemple page \pageref{lettrinefont}).
+\end{itemize}
+
+\item Vous laissez l'extension {\eFrench} choisir la taille appropriée
+\index{automaticlettrine@\texttt{\backslash automaticlettrine}}%
+de la fonte, c'est l'option \vers|\automa|\-\vers|tic|\-%
+\vers|let|\-\vers|trine|.
+
+Cette option est activée soit en codant \verb|\automaticlettrine| soit
+en précisant un nom de police comme dans l'exemple ci-dessous :\\
+\verb| \def\lettrinefontname{cmr17}|\\
+\index{lettrine!nom de police utilisé\\(\texttt{\backslash lettrinefontname})}%
+Notez bien qu'il s'agit ici simplement d'un nom de police et que rien
+n'indique sa taille comme dans \verb|\lettrinefont|.
+
+Cette option calcule pour vous la taille de la police à utiliser en
+fonction de son nom générique (par défaut la police courante) et du
+nombre de lignes en retrait (par défaut 2). Ce calcul nécessitera
+probablement, à l'impression ou à la visualisation,
+la génération
+d'une nouvelle (taille de) police par \lsc{Metafont}, si vous n'utilisez
+\index{polices!PostScript}%
+\index{polices!TrueType}%
+pas de polices de type vectorielles PostScript ou TrueType.
+\seealso{polices}{fontes}%
+\end{enumerate}
+
+Toute ponctuation autour de la lettrine doit être précisée dans
+le texte entre accolades.
+Lorsque la lettrine doit être précédée ou suivie de guillemets,
+ il faudra
+alors utiliser la forme exprimée ci-dessous :\\
+\verb| |\verb*|\lettrine[<< {|{\em La citation}\verb*|} >>]|\\
+(les blancs figurés dans l'exemple sont absolument nécessaires mais
+les guillemets fermants peuvent être plus loin dans le paragraphe).
+Notez que le mécanisme \verb|\every|\-\verb|parguillemets|
+(voir §~\ref{everyparguills}
+page \pageref{everyparguills}) n'est jamais en service dans une lettrine.
+Cela signifie que si l'effet des guillemets doit être prolongé
+au(x) paragraphe(s) suivant(s) il est impératif d'ouvrir à nouveau
+les guillemets au début du premier paragraphe suivant.
+
+Le texte peut -- si nécessaire -- être légèrement
+rapproché de la lettrine
+par l'ordre \verb|\!|. Ce sera le cas, par exemple avec un << A >> dont la
+partie haute est en général très fine.
+
+\verb|\flettrine{|{\em texte}\verb|}| est à utiliser lorsque
+l'on désire produire une lettrine encadrée.
+
+\subsubsection{La classe \emph{letter} est francisée} \label{letter}
+
+Voici quelques ordres pour la classe \verb|letter| à placer
+\index{classe!letter@\texttt{letter}}%
+après la commande
+ \verb|\begin{|\-\verb|document}| pour être pris en compte par
+\index{begin@\texttt{\backslash begin}!\texttt{\backslash begin}\{\texttt{document}\}}%
+l'extension {\eFrench} :
+\begin{itemize}
+\item \verb|\wideletter| est une option permettant une présentation
+différente des lettres, plus classique, avec des lignes plus longues ;
+\index{wideletter@\texttt{\backslash wideletter}}%
+\item l'ordre \verb|\location| permet d'imprimer la
+date d'une lettre comme il est d'usage ainsi en saisissant
+\verb|\location{Paris, le}|
+on obtient une composition de la date comme suit :
+
+\hbox to \textwidth{\hfill Paris, le \today}
+\index{lettre}\index{courrier}\index{letter@\texttt{letter}}%
+\index{location@\texttt{\backslash location}}%
+\item \verb|\yourref{...}| permet de préciser la
+référence à un courrier reçu
+ (par exemple \verb|\yourref|\-\verb|{BG-ML,|\-\verb|92-237}|) ;
+\index{yourref@\texttt{\backslash yourref}}%
+\item \verb|\ourref{...}| pour imprimer la référence
+du courrier à envoyer ;
+\index{ourref@\texttt{\backslash ourref}}%
+\item \verb|\object{...}| pour indiquer l'objet du courrier ;
+\index{object@\texttt{\backslash object}}%
+\item \verb|\PS{...}| pour mettre un {\em postscriptum} ;
+\index{PS@\texttt{\backslash PS}}\index{postscriptum@{\em postscriptum}}%
+\item \verb|\email{...}| pour imprimer l'adresse réseau juste en
+ dessous de la signature ;
+\index{email@\texttt{\backslash email}}%
+\item \verb|\fclosing[n]| est une alternative à \verb|\closing|, il
+permet de choisir la distance entre la formule de politesse et la
+signature ; par défaut \texttt{n} vaut 9, soit 9 fois \verb|\medskipamount| ;
+\index{fclosing@\texttt{\backslash fclosing}}%
+\item
+il est possible de personnaliser le haut de la première page (dans un style
+personnel ou maison, ou avant le \verb|\begin{let|\-\verb|ter}|)
+en définissant un \verb|\formhead| par
+ la séquence : \verb|\def\formhead|\-\verb|{...}| à la \TeX{} ou
+par la commande \verb|\renewcom|\-\verb|mand{\formhead}{...}| de \LaTeX{} ;
+\index{formhead@\texttt{\backslash formhead}}%
+\item et par \verb|\def\formfoot{...}| (ou son équivalent \LaTeX{}) il est
+possible de personnaliser le bas de cette même
+ première page ;
+\index{formfoot@\texttt{\backslash formfoot}}%
+\index{bas de page!d'une lettre}\index{haut de page!d'une lettre}%
+ces deux dernières commandes ne sont pas opérationelles en cas
+d'utilisation de
+%\verb|\nopagenumbers|
+ styles de pages spécifiques (comme
+\verb|\|[\texttt{this}]\verb|pagestyle{empty}|) qui ne permettent pas
+l'impression de haut ou de bas de page.
+\index{pagestyle@\texttt{\backslash pagestyle}}%
+\index{thispagestyle@\texttt{\backslash thispagestyle}}%
+\end{itemize}
+%===============
+Il faut noter que la classe \verb|letter| actuelle de \LaTeX{} est
+\index{classe!letter@\texttt{letter}}%
+assez imparfaite ; on est ainsi souvent amené à coder un \verb|\vfill|
+avant le \verb|\end{letter}| lorsque la lettre fait moins d'une page,
+sinon l'adresse du destinataire n'apparaît pas correctement
+placée dans
+la fenêtre de l'enveloppe
+
+%===============
+%\input{frenchlet} % activer dès l'instant où lettre.cls, version 3 est sur CTAN
+
+\subsection{La classe \emph{lettre} } \label{lettre}
+La classe \texttt{lettre}
+ de l'Observatoire de Genève peut aussi être utilisée
+par {\eFrench}.
+%https://gna.org/projects/lettre_observatoire
+S'il est vrai que la classe \texttt{lettre} a été conçue et développée d'abord pour être utilisée avec \textsl{babel},
+sa version 3.000 devrait être compatible avec \textsl{e-french}.
+Les versions précédentes sortaient dans certaines configurations (sous Windows avec Mik\TeX) une page blanche avant chaque lettre.
+\subsubsection{Exemples complets d'utilisation}
+On ne peut pas appliquer tels quels les exemples donnés dans la documentation
+de la classe \texttt{lettre} sous \textsl{babel}. C'est pourquoi il existe une documentation spéciale et
+ des exemples d'utilisation avec {\eFrench} sous
+\url{http://efrench.org/doc/eflettre.zip}
+
+\subsection{Environnements}\label{Environnements}\index{environnements}%
+\subsubsection{Les messages à la console}\label{messages}
+
+\index{messages!à la console}
+
+ \MAJ Les messages émis par l'extension {\eFrench} sont désormais
+en 7-bits ce qui est la seule solution pour éviter les mélanges
+entre 8-bits et unicode. Autre possibilité pour l'utilisateur :
+supprimer {\em french\_french-msg.tex} afin d'avoir les messages en anglais.
+\endMAJ
+
+\subsubsection{À propos de césure\label{cesure}}
+
+On est souvent désemparé devant les messages \texttt{Overfull hbox}.
+\index{cesure@césure}\index{Overfull@\texttt{Overfull hbox}}%
+Rappelons que cela vient {\em en général\/} de mots qui ne peuvent
+être coupés par \TeX{}. Les règles appliquées sont
+celles fournies
+dans le fichier des motifs de césure ({\em patterns}) française.
+\index{motifs de césure}\index{patterns@{\em patterns}}%
+Ce fichier est standard et ne doit en aucun cas être modifié.
+Par contre il est toujours possible à l'auteur d'introduire des
+coupures possibles à l'aide de la séquence \texttt{\backslash-} introduite
+\index{\texttt{\backslash-}}%
+à l'endroit voulu dans le mot. Cela doit rester exceptionnel.
+
+Plutôt que de forcer des coupures qui risqueraient d'être mauvaises
+il faudra souvent préférer agir sur l'espacement entre les mots.
+Pour cela quelques ordres sont fournis par l'extension {\eFrench}, on
+les trouvera au §~\ref{frenchmacros} page~\pageref{frenchmacros}.
+Rappelons simplement ici
+l'existence de la séquence \texttt{\backslash,} pour rajouter ponctuellement
+\index{\texttt{\backslash,}}%
+une espace fine. Ce genre d'intervention manuelle qui relève
+du travail de professionnel doit être fait avec une grande prudence...
+
+Rappelons aussi que dans les cas où la division des mots faite par \TeX{}
+n'est pas parfaite il est aussi possible de la changer par l'ordre
+\vers|\hyphenation|,
+ dans ce cas on indique les points de coupure avec des tirets (la
+séquence \verb|\-| est ici, avec {\eFrench}, équivalente
+à un espace) ; pour plus de détails se reporter à
+\verb|\frenchhyphenation| page \pageref{frenchhyphenation} et
+\verb|\moretolerance| page \pageref{moretolerance} ; \maj
+%Par défaut, le fichier \vers|frhyphex.tex| contenant
+%quelques exceptions françaises est introduit dans \TeX{} à
+%la création du {\em format}%
+%\footnote{Ceci n'est pas possible avec l'extension
+% \label{frhyphbab}\emph{babel}.} %
+%\index{fichier!d'exceptions}%
+%\index{format}%
+mais vous pouvez avoir votre propre fichier d'exceptions en ayant dans votre
+répertoire personnel un fichier de configuration \vers|language.dat| %
+\index{fichier!language.dat@\texttt{language.dat}}%
+\index{language.dat@\texttt{language.dat}}%
+précisant le nom de ce fichier. Le chargement de ces exceptions peut alors
+être fait, en précisant avant le \vers|\begin{document}|
+ l'ordre \vers|\frhyphex|%\refmark{frhyphbab}%
+.%
+\index{begin@\texttt{\backslash begin}!\texttt{\backslash begin}\{\texttt{document}\}}%
+\label{frhyphex}%
+\index{frhyphex@\texttt{\backslash frhyphex}!avec babel}%
+\index{babel@\emph{babel}!frhyph@\texttt{\backslash frhyphex}}
+\index{babel@\emph{babel}!pas@pas d'exception de césure}
+\index{frhyphex@\texttt{\backslash frhyphex}}%
+
+\LaTeX{} ne permet pas en standard de couper les textes écrits en
+\verb|verbatim|. L'extension {\eFrench} suppose que cela n'a pas
+été changé par quelque option de style et propose
+\index{tthyphenation@\texttt{\backslash tthyphenation}}%
+\index{cesure@césure!tthyphenation@\texttt{\backslash tthyphenation}}%
+\index{notthyphenation@\texttt{\backslash notthyphenation}}%
+\index{cesure@césure!notthyphenation@\texttt{\backslash notthyphenation}}%
+l'ordre \vers|\tthyphenation| pour résoudre le problème.
+Cet ordre s'applique uniquement à la police utilisable en mode
+télétype (fonte \verb|tt|), dans la taille de police
+en cours (\texttt{\backslash small}
+ou \texttt{\backslash normalsize} ou...) et au minimum sur le paragraphe
+commencé. Bien
+entendu l'ordre inverse \vers|\notthyphenation| est fourni pour
+revenir au standard%
+\footnote{On comprendra aisément que la séquence : \\
+\{\texttt{\backslash small\backslash tthyphenation blabla}\}\{%
+\texttt{\backslash normalsize
+\backslash nott\-hyphenation} \\
+ne produise pas l'effet désiré à cause
+des différences de taille des polices utilisées.}
+(voir aussi l'ordre \vers|\vers| au §~\ref{outils}).
+Cela, toutefois, ne résout pas tous les problèmes et c'est
+pourquoi l'extension {\eFrench} propose, comme on le
+verra au §~\ref{versatim} page \pageref{versatim},
+l'environnement \vers|versatim|.
+
+Par défaut l'extension {\eFrench} autorise la coupure des mots
+commençant par une majuscule (\texttt{\backslash allow\-uc\-hyph})
+\index{allowuchyph@\texttt{\backslash allowuchyph}}%
+\index{cesure@césure!allowuchyph@\texttt{\backslash allowuchyph}}%
+\index{disallowuchyph@\texttt{\backslash disallowuchyph}}%
+\index{cesure@césure!disallowuchyph@\texttt{\backslash disallowuchyph}}%
+suivant en cela la recommandation de la %première
+réunion du {\em comité de francisation GUT\-enberg}
+du 15 avil 1992 à l'ENS%
+\footnote{C'était il y a longtemps ... et il n'y a jamais eu
+d'autre réunion, à mon grand regret.}%
+\index{GUTenberg}%
+. Il me semble toutefois plus {\em productif}
+de choisir l'option inverse (\texttt{\backslash dis\-allow\-uc\-hyph})
+car vous ne
+risquerez jamais par exemple de couper malencontreusement les noms
+propres (que l'on oublie souvent de protéger contre ce risque).
+Mais bien sûr vous obtiendrez quelques \vers|Overfull hbox|
+supplémentaires pour lesquels il vous faudra vous-même
+préciser la césure.
+L'option \verb|\allowuchyph| n'affecte pas les ordres tels que
+\verb|\fsc| ou \verb|\lsc| (voir page \pageref{fsc})
+pour lesquels les noms sont, par
+défaut, mis dans une boîte \TeX{}.
+Si vous désirez qu'il en soit
+autrement vous pourrez alors utiliser l'ordre
+\verb|\allowfulluc|\-\verb|hyph|.
+\index{allowfulluchyph@\texttt{\backslash allowfulluchyph}}%
+\index{cesure@césure!allowfulluchyph@\texttt{\backslash allowfulluchyph}}%
+Ces options de césure restent
+inchangées lorsque
+l'extension est réinitialisé par l'ordre \verb|\french| ou
+alors par \verb|\begin{french}|.
+
+Il est aussi possible d'éviter la coupure d'un mot, localement, en le
+plaçant dans un \verb|\hbox| ou bien, plus généralement, en plaçant le
+texte à l'intérieur d'un environnement \texttt{nohyphenation} (plus
+précisément voir p. \pageref{nohyphenation}).
+\index{mbox@\texttt{\backslash mbox}}%
+\index{nohyphenation@\texttt{\backslash nohyphenation}}%
+\index{environnement!nohyphenation@\texttt{nohyphenation}}%
+\index{cesure@césure!stoppée}%
+\index{coupure!de mots}%
+\index{coupure!de mots évitée}
+
+Les problèmes de césures surviennent essentiellement du fait du choix,
+par défaut, de \LaTeX{} d'une mise en page entièrement justifiée.
+\index{mise en page!justifiée}%
+\index{composition|see{mise en page}}%
+\index{composition!en drapeau}%
+\seealso{drapeau}{compo. en drapeau}%
+Rappelons que les environnements \texttt{flushleft} et \texttt{flushright}
+permettent une composition \textit{en drapeau}.
+\index{environnement!flushleft@\texttt{flushleft}}%
+\index{environnement!flushright@\texttt{flushright}}%
+L'extension {\eFrench} apporte sur ce points les nouveaux environnements
+ci-après.
+
+\subsubsection{Environnements pour la composition \emph{en drapeau}}
+\label{endrapeau}
+\index{mise en page!au fer}
+\index{mise en page!en drapeau}
+
+L'environnement \texttt{drapeaufg} permet une composition \emph{en drapeau,
+au fer à gauche}, avec coupure de mots :
+
+\medskip
+\noindent
+\index{environnement!drapeaufg@\texttt{drapeaufg}}%
+\begin{minipage}{0.5\textwidth}
+\begin{verbatim}
+\begin{drapeaufg}
+Ceci est un exemple
+très simple d'une
+composition en drapeau,
+au fer à gauche.
+\end{drapeaufg}
+\end{verbatim}
+\end{minipage}
+% }
+\hfill
+\fbox{%
+\begin{minipage}{0.33\textwidth}
+\begin{drapeaufg}
+Ceci est un exemple
+très simple d'une
+composition en drapeau,
+au fer à gauche.
+\end{drapeaufg}
+\end{minipage}
+ }
+\index{mise en page!au fer à gauche}
+
+\medskip
+L'environnement \texttt{drapeaufgIN} permet une composition
+\emph{en drapeau, au fer à gauche} mais sans coupure de mot, selon
+les recommandations de l'imprimerie nationale \cite{lexique}.
+L'inconvénient de cette méthode est le risque de débordement dans la
+marge à droite. Dans ce cas il faudra intervenir, au coup par coup, en
+\index{saut de ligne (\texttt{\backslash\backslash})}%
+ insérant un \emph{saut de ligne} (\verb|\\|).
+
+\medskip
+\noindent
+\index{environnement!drapeaufg@\texttt{drapeaufg}}%
+\begin{minipage}{0.5\textwidth}
+\begin{verbatim}
+\begin{drapeaufgIN}
+Ceci est un exemple
+très simple d'une
+composition en drapeau,
+au fer à gauche et
+sans coupure de mot.
+\end{drapeaufgIN}
+\end{verbatim}
+\end{minipage}
+% }
+\hfill
+\fbox{%
+\begin{minipage}{0.33\textwidth}
+\begin{drapeaufgIN}
+Ceci est un exemple
+très simple d'une
+composition en drapeau,
+au fer à gauche et
+sans coupure de mot.
+\end{drapeaufgIN}
+\end{minipage}
+ }
+\index{environnement!drapeaufgIN@\texttt{drapeaufgIN}}
+
+\smallskip
+
+Des environnements équivalents existent pour la composition
+\emph{en drapeau, au fer à droite} qui sont d'utilisation
+un peu moins courante. Ainsi vous disposez de l'environnement
+\texttt{drapeaufd} :
+
+\medskip
+\index{environnement!drapeaufd@\texttt{drapeaufd}}%
+
+\noindent
+\index{environnement!drapeaufg@\texttt{drapeaufg}}%
+\begin{minipage}{0.5\textwidth}
+\begin{verbatim}
+\begin{drapeaufd}
+Ceci est un exemple
+très simple d'une
+composition en drapeau,
+au fer à droite.
+\end{drapeaufd}
+\end{verbatim}
+\end{minipage}
+% }
+\hfill
+\fbox{%
+\begin{minipage}{0.33\textwidth}
+\begin{drapeaufd}
+Ceci est un exemple
+très simple d'une
+composition en drapeau,
+au fer à droite.
+\end{drapeaufd}
+\end{minipage}
+ }
+
+\medskip
+et enfin l'environnement \texttt{drapeaufdIN}
+qui ne donnera pas de coupure de mot (mais \texttt{drapeaufd}
+a déjà fort peu de chances de générer une coupure de mot).
+\index{mise en page!au fer à droite}
+\index{environnement!drapeaufdIN@\texttt{drapeaufdIN}}%
+
+\subsubsection{Environnements de liste\label{envir}}
+
+Les environnements de liste en \LaTeX{} sont de plusieurs types
+({\em itemize, enumerate, description,} \etc.) mais aucun d'eux ne
+correspond typographiquement aux exigences françaises (marqueurs,
+espacements horizontaux et verticaux, retrait, \etc.).
+Tout cela a donc été modifié.
+
+Parmi ces modifications il faut noter l'espacement vertical dans
+différentes listes qui a été considérablement réduit par rapport
+aux valeurs standard dans \LaTeX.
+
+L'extension {\eFrench} apporte aussi un nouvel environnement de liste :
+l'environnement \verb|order|
+(\verb|\be|\-\verb|gin|\-\verb|{order}|, \verb|\end{order}|)
+\index{order@\texttt{order}}\index{environnement!order@\texttt{order}}%
+\index{begin@\texttt{\backslash begin}!\texttt{\backslash begin}\{\texttt{order}\}}%
+\index{end@\texttt{\backslash end}!\texttt{\backslash end}\{\texttt{order}\}}%
+\index{endorder@\texttt{\backslash endorder}}%
+a été conçu pour des listes ordonnées (\primo... \secundo...).
+\index{liste ordonnée}%
+Il s'agit en fait d'un environnement \verb|enume|\-\verb|rate| avec
+numérotation latine.
+
+\subsubsection{Placement des figures}
+Placer les figures et les tableaux à l'endroit désiré
+relève parfois de
+l'exploit en \LaTeX{}. Il est possible de demander le placement en
+\index{figures et tableaux}%
+\index{tableaux}%
+\index{haut de page!(figures en...)}%
+\index{bas de page!(figures en...)}%
+haut de page (\verb|[t]|{\em op}), en bas de page (\verb|[b]|{\em ottom}),
+sur une page séparée (\verb|[p]|{\em page of float}) ou à l'endroit
+même (\verb|[h]|{\em ere}) mais cette dernière option fonctionne assez
+rarement dans la pratique
+\footnote{On peut toujours utiliser l'option \texttt{H} de l'extension
+\emph{float}.}%
+\index{extension!float@\emph{float}}%
+. Il est donc très difficile de placer
+une figure à l'endroit exact où elle arrive dans le texte.
+C'est pour cette
+raison que l'environnement \verb|figurette| a été créé ;
+il s'utilise
+exactement comme l'environnement \verb|figure|
+(dans les classes de documents où il est défini)
+mais ne comporte
+aucun paramètre optionnel.
+
+\begin{verbatim}
+ \begin{figurette}
+ [\center] texte de la figure...
+ [\caption{titre de la figure}]
+ \end{figurette}
+\end{verbatim}
+
+\label{figurette}%
+\index{figurette}%
+\index{begin@\texttt{\backslash begin}!\texttt{\backslash begin}\{\texttt{figurette}\}}%
+\index{end@\texttt{\backslash end}!\texttt{\backslash end}\{\texttt{figurette}\}}%
+\index{environnement!figurette@\texttt{figurette}}%
+Cet environnement ne permet pas de faire des petits tableaux. Rappelons
+que la
+mise en page des tableaux est différente de celle des figures (voir
+§~\ref{tableaux} page \pageref{tableaux}).
+Comme son nom le laisse entendre, cet environnement est particulièrement
+destiné aux petites figures ; celles-ci peuvent trouver plus facilement
+ leur place dans une page. Il ne faudra pas s'étonner toutefois, à
+l'occasion de mises à jour ultérieures du texte,
+de trouver d'éventuels
+bas de page incomplets
+lorsque les {\em figurettes} seront reportées à la page suivante.
+Si vous utilisez {\bf aussi} l'environnement \verb|figure|,
+il faudra surveiller que \LaTeX{} place bien les figures
+en séquence (il peut
+arriver effectivement que \LaTeX{} ne les place pas dans l'ordre de leur
+numérotation).
+
+\subsection{Extension utiles}\label{Extension utiles}\index{extension utiles}%
+
+\subsubsection{Petits outils supplémentaires}\label{outils}
+Il ne s'agit pas ici d'outils typiquement français mais
+leur intérêt
+m'a semblé suffisamment général pour être inclus
+dans l'extension
+(en attendant de les trouver par défaut dans \LaTeX{}) :
+
+\begin{itemize}
+\item il est parfois bien utile de faire appel à une note de bas
+\index{bas de page!note de...}%
+de page\footnote{Voici la note.\label{note}} depuis plusieurs endroits
+comme ici\refmark{note}, pour cela nous avons codé :
+\index{refmark@\texttt{\backslash refmark}}%
+\begin{verbatim}
+... de page\footnote{Voici la note\label{note}}
+depuis plusieurs endroits comme ici\refmark{note}, ...
+\end{verbatim}
+\item comme l'environnement \verb|verbatim| de \LaTeX{} est très rigide
+une alternative est proposée avec l'environnement \vers|versatim|
+\label{versatim}
+\index{begin@\texttt{\backslash begin}!\texttt{\backslash begin}\{\texttt{versatim}\}}%
+\index{versatim@\texttt{\backslash versatim}}%
+\index{endversatim@\texttt{\backslash endversatim}}%
+\index{end@\texttt{\backslash end}!\texttt{\backslash end}\{\texttt{versatim}\}}%
+(\vers|\begin{versatim}| ... \vers|\end{versatim}|) qui sait couper
+les phrases en fin de ligne et compose les lignes suite dans le style
+de l'environnement \vers|verse|%
+\footnote{L'environnement \texttt{versatim} et l'ordre \texttt{\backslash vers}
+n'ont pas de version \texttt{*} comme \texttt{verbatim*} et
+\texttt{\backslash verb*}, respectivement.\label{etoile}
+Ils savent par contre obéir aux ordres \texttt{\backslash noenglishquote} et
+\texttt{\backslash noenglishdoublequotes} que
+l'on trouvera au §~\ref{noenglishquote}
+page~\pageref{noenglishquote}.}%
+ ;
+\item l'ordre \vers1\vers|...|1 fonctionne comme
+\index{vers@\texttt{\backslash vers}}%
+\verb|\verb|\refmark{etoile} ; il
+autorise en plus la césure automatique ; cette césure par défaut
+est réalisée entre les mots mais peut aussi se faire à
+l'intérieur
+des mots si l'option \texttt{\backslash tthyphenation} a
+été précisée (voir §
+\ref{cesure}) ; lorsqu'une séquence
+\vers1\vers|blabla1\-\vers1tech1\-\verb1ni1\-\verb1que|1
+ne peut être coupée automatiquement par \TeX{} on pourra lui proposer des
+coupures de la manière suivante : \vers1\vers|blabla|\-\vers|technique|1 ;
+\item pour la mise au point \LaTeX{} il existe l'option \verb|draft| qui
+permet de visualiser les débordements de ligne ;
+l'extension {\eFrench} offre de même les commandes : \\
+\index{overfullhboxmark@\texttt{\backslash overfullhboxmark}}%
+\verb| \overfullhboxmark | (et \verb|\nooverfullhboxmark|)\\
+qui peuvent, par contre, être activées à tout moment ;
+cette option et son contraire ne doivent pas se retrouver sur la
+même page, faute de quoi elles ne produiraient aucun effet ;
+\item il est aussi très utile de retrouver où ont
+été mis des \verb|\label|s
+et quels noms ont été donnés, c'est pour cela
+que l'extension {\eFrench} offre
+la commande : \\
+\index{labelsinmargin@\texttt{\backslash labelsinmargin}}%
+\verb| \labelsinmargin | (et \verb|\nolabelsinmargin|)\\
+qui imprimera dans la marge le texte des \verb|\label|s mais
+attention n'y mettez pas de texte mathématique. Notez aussi que les
+labels à l'intérieur des \verb|\footnote| ne sont jamais
+imprimés dans
+la marge.
+\end{itemize}
+
+Tout ce qui est fait dans l'extension {\eFrench} devrait fonctionner
+théoriquement avec \LaTeX{} sur tous les moteurs \TeX{}.
+Pour exprimer cette idée en
+\index{AllTeX@\texttt{\backslash AllTeX}}%
+raccourci on écrit souvent : (La)\TeX{}. Cette présentation
+n'étant pas très jolie, j'ai souhaité ici lui donner une forme
+plus sympathique et plus définitive. L'extension {\eFrench}
+propose donc la séquence \verb|\AllTeX| qui imprime \AllTeX.
+
+\subsubsection{Compatibilité interchartoks}
+
+La compatibilité avec tous les moteurs \LaTeX{} a été étendue à
+\raccouXe\LaTeX{} pour une typographie correcte dans le cas où
+certains modules utilisent interchartoks\index{interchartoks}.
+Cette extension permet entre autres une utilisation correcte de BibLaTeX
+\index{BibLaTeX@\texttt{Bib\LaTeX}}.
+
+\subsubsection{Personnalisation}
+Nous avons parlé jusqu'ici d'une utilisation normale, standard,
+de l'extension {\eFrench}. Mais il est toujours possible de
+la paramétrer pour une utilisation différente. Tout cela est décrit
+dans les pages à venir mais pour les lecteurs pressés voici un résumé
+des possibilités.
+
+Si l'on désire imposer des options par défaut différentes, pour
+tout le document, on se reportera au paragraphe \ref{usersf} page
+\pageref{usersf}.
+
+On peut simplifier les noms de commandes à rallonge de {\eFrench}
+(voir §~\ref{simplification} page \pageref{simplification}).
+
+%On peut changer de clavier de saisie (c'est-à-dire en général de système
+%d'exploitation), en cours de document, pour cela on se reportera
+%au descriptif de l'extension \emph{keyboard} (§~\ref{keyboard}
+%page \pageref{keyboard}).
+\rule{0pt}{1ex}\maj
+%Il est possible de transmettre un document source francisé à
+%l'étranger sans que cela impose une modification de format, voir
+%pour cela le paragraphe suivant et le
+%<< style {\eFrench} du pauvre >> §~\ref{reduit}
+%page \pageref{reduit}.
+
+L'essentiel des autres commandes de personnalisation est décrit au
+chapitre \ref{etendue} à partir de la page~\pageref{etendue}.
+
+\subsubsection{Transmettre un document à l'étranger}
+Si vous devez envoyer votre document \LaTeX{}
+à un destinataire éloigné qui
+n'a pas effectué
+ l'installation complète de l'extension {\eFrench}
+il vaudra mieux l'engager à installer
+entièrement les fichiers de l'extension {\eFrench} pour
+qu'il bénéficie de tous ses avantages.
+Ceci d'autant plus que généralement il n'y a rien à faire,
+l'extension complète est déjà là, voir le chapitre
+\ref{chapinstall}, page \pageref{chapinstall}.
+
+\subsubsection{Simplification des noms de commande}\label{simplification}
+\index{commandes!noms simplifiés}%
+
+Les noms de commande définis par l'extension {\eFrench} sont volontairement
+longs pour ne pas risquer de conflit avec d'autres codes \TeX{}.
+Grâce à la commande \verb|\frenchalias| l'utilisateur
+peut les simplifier à volonté en définissant
+des équivalences. Voici un
+exemple avec \verb|\overfullhboxmark| :
+\begin{verbatim}
+ \documentclass[a4paper]{book}
+ \usepackage{french}
+ \frenchalias\BB\overfullhboxmark
+ \begin{document}
+ ...
+ \BB
+\end{verbatim}
+\index{frenchalias@\texttt{\backslash frenchalias}}%
+\index{begin@\texttt{\backslash begin}!\texttt{\backslash begin}\{\texttt{document}\}}%
+\index{usepackage@\texttt{\backslash usepackage}}%
+
+\subsubsection{Suppression de l'extension \emph{keyboard}}
+
+\label{keyboard}
+
+On notera que la spécification du codage du texte d'entrée (paquetage \verb|inputenc|)
+doit intervenir, de préférence,
+avant le chargement de l'extension {\eFrench}.
+
+Différents codages d'entrée sont disponibles, parmi ceux-ci
+on trouvera :
+\begin{description}
+\item [ansinew] pour \lsc{Windows} ;
+\index{windows@\lsc{windows}}%
+\index{système!windows@\lsc{windows}}%
+\item [latin1] pour Unix ou Linux par exemple mais ce n'est pas le
+\index{unix@\lsc{unix}}%
+\index{système!unix@\lsc{unix}}%
+\index{linux@\lsc{linux}}%
+\index{codage!d'entrée}%
+\index{codage!ansiwnew@\texttt{ansinew}}%
+\index{codage!latin1@\texttt{latin1}}%
+\index{codage!latin9@\texttt{latin9}}%
+\index{codage!decmulti@\texttt{decmulti}}%
+\index{codage!utf8@\texttt{utf8}}%
+\index{codage!next@\texttt{next}}%
+\index{codage!applemac@\texttt{applemac}}%
+\index{codage!cp850@\texttt{cp850}}%
+\index{système!linux@\lsc{linux}}%
+ codage le meilleur ;
+\item [latin9] c'est le codage \texttt{latin1} enrichi
+ avec le caractère euro et les
+ caractères français \oe, \OE\ et Ÿ ;
+\item [decmulti] pour Digital Unix, VMS, \etc. (option
+ avantageuse pour les systèmes \lsc{Unix} ne disposant
+ pas de \texttt{latin9}) ;
+
+\item [utf8] qui est un sous-ensemble du codage \lsc{UNICODE}
+ utilisable avec \lsc{LINUX} depuis la RedHat 9 et tend à se
+ généraliser dans les systèmes d'exploitation comme par exemple
+ avec MacOs X ;
+ la version du format \LaTeX\ doit dater au moins de 2003
+(\texttt{2003/12/01}) pour bénéficier du codage \texttt{utf8}.
+C'est le codage par défaut de \raccouXe\LaTeX{}.\maj
+%(avec
+%l'extension \emph{inputenc} à laquelle fait appel \eFrench\ pour
+%gérer ce cas spécifique) ;
+\item [next] pour les systèmes du même nom ;
+
+\item [cp850] pour DOS avec code-page 850 ;
+\index{dos@\lsc{dos}}%
+\index{système!dos@\lsc{dos}}%
+
+\item [applemac] pour {MacOS} ;
+\index{MacOs@MacOS}%
+\index{système!MacOs}%
+
+\item [ascii] si l'on ne veut pas grand chose...
+\end{description}
+Il n'est plus nécessaire aujourd'hui de définir son propre codage.
+
+Voici un exemple qui montre comment changer de codage
+dans un même document sans utiliser l'extension \emph{keyboard}
+que proposait la version \FrenchPro{},
+mais en jouant avec l'ordre \verb|\inputencoding|
+et en mettant les parties codées différemment du contexte général
+dans des fichiers externes.
+\begin{versatim}
+\usepackage[latin1,utf8]{inputenc} % les codages mis à disposition
+On commence ici en UTF8 (le dernier de [liste]inputenc) ...
+... avant de passer à latin 9 :
+\inputencoding{latin9} % pour changer le codage d'entrée
+\input{flatin9.txt} % flatin9.txt : fichier écrit en latin9
+\inputencoding{utf8} % Retour à UTF8
+texte codé en utf8 ...
+\end{versatim}
+Les traitements de texte pour créer les sources pourront ainsi
+être utilisés pour la saisie de chaque partie sous un codage local fixe.
+\subsubsection{Autres extensions}
+\index{extension!autres extensions}%
+
+L'extension {\eFrench} n'est pas, a priori, incompatible avec
+toutes les autres
+<< bonnes\footnote{Je veux dire les autres extensions bien écrites.} >>
+extensions existantes.
+Certaines extensions ou certaines classes ne peuvent toutefois tirer
+parti entièrement de la francisation ; c'est le cas de la classe
+\texttt{ltxdoc}
+\index{classe!ltxdoc@\texttt{ltxdoc}}%
+pour ce qui est du texte introduit par \verb|\DocInput|.
+\index{DocInput@\texttt{\backslash DocInput}}%
+Parfois, seuls quelques dispositifs sont désactivés,
+comme par exemple l'usage des guillemets en mode mathématique
+avec AmS\LaTeX.
+\index{guillemets!avec AmS\LaTeX{}}%
+\index{AmSLaTeX@AmS\LaTeX{}}%
+
+Certaines extensions (comme l'ancien \verb|psfig|) peuvent être chargées
+hors du préambule.
+Il faut absolument déconseiller cette pratique qui
+ne peut que créer des problèmes.
+
+Par ailleurs, il faut noter l'existence de quelques extensions plus
+particulièrement intéressantes pour la communauté francophone.
+En voici une
+liste succincte :
+\begin{description}
+\item[decalign] permet, dans des tableaux, l'alignement des nombres sur la
+virgule décimale.
+\index{extension!decalign@\emph{decalign}}%
+
+\item[endfloat] pour reporter figures et tableaux en fin de document.
+\index{extension!endfloat@\emph{endfloat}}%
+
+\item[endnotes] permet de reporter des notes (ou toutes les notes de
+bas de page) en fin de document.
+\index{extension!endnotes@\emph{endnotes}}%
+
+\item[footnpag] permet de renuméroter les notes de bas de page
+ à chaque page.
+\index{extension!footnpag@\emph{footnpag}}%
+
+\item[graphicx] pour imprimer des graphiques et notamment
+ inclure des images Post\-Script {\em encapsulées}
+ (ou \lsc{PDF})
+ si l'on utilise un pilote d'impression comprenant
+ le PostScript (ou un moteur tel que \texttt{pdflatex}).
+\index{moteur!pdflatex@\texttt{pdflatex}}%
+\index{extension!graphicx@\emph{graphicx}}%
+
+\item[icomma] permet de conserver ou non (grâce à une bonne
+ coopération avec {\eFrench}), en mode mathématique,
+ l'espace après la virgule.
+\index{extension!icomma@\emph{icomma}}%
+\index{virgule}%
+
+\item[relsize] permet de changer de taille de police, relativement.
+\index{taille de police}%
+\index{extension!relsize@\emph{relsize}}%
+
+\item[wrapfig] pour mettre une figure sur le côté et placer le texte
+autour.
+\end{description}
+Cette courte liste ne reflète absolument pas la quantité
+d'extensions
+ disponibles dans le domaine public, on consultera à cet effet le
+<< \em \LaTeX\ companion >> \cite{companion} ou le
+\linkandfootnote{catalog}{catalogue \LaTeX}%
+{http://mirror.ctan.org/}
+accessible par le navigateur \lsc{CTAN}
+si vous disposez d'un accès à l'internet\footnote{Qui n'a pas l'accès à l'internet aujourd'hui ?}.
+Vous pouvez bien entendu obtenir les dernières versions
+sur l'un de ces serveurs
+d'archives \lsc{CTAN} sinon auprès
+des associations d'utilisateurs de \TeX{}.
+
+\subsubsection{Fragilité des commandes}
+\index{commandes!fragilité}%
+
+On sait qu'en \LaTeX{} les commandes doivent être {\em protégées\/}
+lorsqu'on veut les coder dans certaines commandes comme \verb|\section|.
+Il faut alors faire précéder ces commandes par l'ordre
+\verb|\protect|.
+\index{protect@\texttt{\backslash protect}}%
+\index{fragilité des commandes}%
+Il peut éventuellement en être de même pour quelques commandes
+introduites par l'extension {\eFrench}.
+
+\begin{center}
+\fbox{\fbox{\parbox{10cm}{Ce qui suit va progressivement se compliquer ;
+certains passages sont plus particulièrement destinés aux
+utilisateurs expérimentés en \LaTeX{}.}}}
+\end{center}
+\bigskip
+\subsubsection{Compatibilité}\label{compatibilite}
+\index{compatibilité}%
+
+L'extension {\eFrench} rend {\em actifs\/}%
+\footnote{Ou plutôt {\em peut rendre actifs}
+car ils ne sont pas forcément tous actifs en même temps.}
+ les caractères suivants :
+
+\medskip
+\verb| < ` " ' >| \ \ \ \ \ et \ \ \verb| : ; ! ?|
+\index{caractères actifs}%
+\index{\texttt{<{}}}\index{\texttt{`}}\index{\texttt{\dittomark}}%
+\index{\texttt{'}}\index{\texttt{>{}}}%
+
+\medskip
+Cela veut dire que ces caractères sont désormais des
+ macro-instructions
+et ne peuvent plus jouer
+leurs rôles originels tels qu'ils sont
+définis en \LaTeX{}. Si la nécessité
+impose de les utiliser, on codera :
+\begin{verbatim}
+\inferieura à la place de < \superieura à la place de >
+\lq " ` \rq " '
+\lqq " `` \rqq " ''
+\deuxpoints " : \pointvirgule " ;
+\pointexclamation ! \pointinterrogation ?
+\dittomark " "
+\end{verbatim}
+\index{\texttt{`}}\index{\texttt{\dittomark}}\index{\texttt{'}}%
+\index{{\`\space}}\index{{\'\space}}\index{{``}}\index{{,,}}\index{{''}}%
+\index{dittomark@\texttt{\backslash dittomark}}%
+\index{inferieura@\texttt{\backslash inferieura}}%
+\index{deuxpoints@\texttt{\backslash deuxpoints}}%
+\index{points!pointvirgule@\texttt{\backslash pointvirgule}}%
+\index{pointvirgule@\texttt{\backslash pointvirgule}}%
+\index{points!pointinterrogation@\texttt{\backslash pointinterrogation}}%
+\index{pointinterrogation@\texttt{\backslash pointinterrogation}}%
+\index{points!pointexclamation@\texttt{\backslash pointexclamation}}%
+\index{pointexclamation@\texttt{\backslash pointexclamation}}%
+\index{superieura@\texttt{\backslash superieura}}%
+\index{lq@\texttt{\backslash lq}}\index{lqq@\texttt{\backslash lqq}}%
+\index{rq@\texttt{\backslash rq}}\index{rqq@\texttt{\backslash rqq}}%%
+
+Dans certains cas comme, par exemple, dans l'environnement \verb|array|
+on pourra préférer faire précéder ces
+caractères de l'ordre
+\verb|\protect| plutôt que de les remplacer par les commandes
+de substitution.
+
+Rappelons aussi que \verb|\inferieura| et \verb|\superieura|,
+s'ils sont utilisés en codage de fonte \texttt{OT1}%
+\footnote{C'est aussi le cas avec
+le codage de fonte \texttt{LO1} défini par l'extension \emph{mltex}.}%
+, ne seront
+imprimés correctement qu'à condition d'utiliser une police \texttt{tt}.
+\index{polices!tt@\texttt{tt}}%
+\index{extension!mltex@\emph{mltex}}%
+\index{codage!\texttt{LO1}}%
+\index{LO1@\texttt{LO1} (codage)}%
+\index{fontencoding@{\em fontencoding}!\texttt{LO1}}%
+
+Certaines extensions font, elles aussi, une utilisation intensive des
+mêmes caractères. Cela peut s'avérer très gênant. Pour sa part,
+l'extension {\eFrench} teste, au chargement, si l'un des caractères
+de double ponctuation (\verb|! : ; ?|) est déjà défini et dans ce cas
+rend inopérante toute la gestion de la typographie fine au niveau de
+ces caractères (un message est émis).
+
+S'il s'agit d'un code que l'on ne peut modifier
+et pour lequel l'extension {\eFrench} est superflue,
+alors il est possible de l'encadrer par les commandes
+suivantes pour l'exécuter%
+\footnote{Les définitions de commandes à l'intérieur
+de l'environnement
+\texttt{nonfrench} sont par défaut locales à cet environnement. Il faudra
+éviter cette méthode pour {\em charger} des codes en mémoire.}
+\index{begin@\texttt{\backslash begin}!\texttt{\backslash begin}\{\texttt{nonfrench}\}}%
+\index{end@\texttt{\backslash end}!\texttt{\backslash end}\{\texttt{nonfrench}\}}%
+\index{nonfrench@\texttt{\backslash nonfrench}}%
+\index{endnonfrench@\texttt{\backslash endnonfrench}}%
+correctement : \\
+\verb| \begin{nonfrench} | et \verb| \end{nonfrench}|
+
+\noindent ou par : \\
+\verb| \nonfrench | et \verb| \endnonfrench|
+
+Si ce code réside dans un fichier particulier
+que l'on ne souhaite pas modifier, alors on utilisera la commande
+suivante pour le charger en mémoire :
+
+\index{originalinput@\texttt{\backslash originalinput}}%
+\verb| \originalinput{nom_de_fichier}|
+
+\noindent Cette commande n'a aucun intérêt avant
+\index{babel@\emph{babel}!origin@\texttt{\backslash originalinput}}%
+le \verb|\begin{document}| car l'extension {\eFrench}
+n'est pas encore active.
+\index{babel@\emph{babel}!activ@activation de {\eFrench}}%
+\index{activation de {\eFrench}}%
+\index{begin@\texttt{\backslash begin}!\texttt{\backslash begin}\{\texttt{document}\}}%
+Il faut noter que les valeurs par défaut de l'extension {\eFrench} sont
+réactivées après \verb|\originalinput|.
+Si l'on souhaite qu'il en soit
+autrement il faut imposer les options de son choix pour tout le
+document dans \verb|\usersfrenchoptions| (voir §~\ref{usersf} page
+\pageref{usersf}).
+
+Il reste bien entendu toujours possible d'annuler
+l'option {\eFrench} en revenant au language \verb|\|\texttt{en\-glish}
+(s'il a été défini via le fichier de
+\index{english@\texttt{\backslash english}}%
+\index{fichier!language.dat@\texttt{language.dat}}%
+\index{language.dat@\texttt{language.dat}}%
+configuration \verb|language.dat|).
+
+Pour écrire du texte dans un fichier, sans avoir l'expansion des
+caractères actifs de {\eFrench}, il suffit de coder :\\
+\index{originaloutput@\texttt{\backslash originaloutput}}%
+\verb| \originaloutput[numéro_de_fichier]{texte}|\\
+où \verb|numéro_de_fichier| est le numéro d'un flux de sortie
+défini par \verb|\newwrite|.
+
+ Voici un extrait de code à titre de démonstration :
+\begin{versatim}
+Du texte normal, puis envoi vers list.tex,
+\newwrite\tempfile% définit un numéro pour \tempfile
+\immediate\openout\tempfile=list% \immediate indispensable
+\originaloutput[\tempfile]{bonjour ! Ceci est un essai :
+qu'en pensez-vous, M\fup{me} ?}
+la suite du texte normal ...
+\originaloutput[\tempfile]{Au revoir M\fup{me} !
+et encore du texte ...
+\end{versatim}
+Chaque appel à \verb|\originaloutput| génère une nouvelle ligne dans le fichier de sortie.
+Et le résultat dans la sortie {\em pdf}, donne : \\
+\textsl{Du texte normal, puis envoi vers list.tex, la suite du texte normal ...et encore du texte ... }\\
+Pour savoir ce qu'il en est dans ce cas du contenu de \textsl{list.tex}, je vous conseille un petit essai.
+
+On peut utiliser \backslash\textsl{originaloutput} de cette manière, si l'on sait que \verb|\tempfile| vaut 3 :\\
+\verb|\originaloutput[3]{ bonjour ...}|\\
+\\[2ex]
+% ===
+%"file" is a stream
+% number related to open file defined by \newwrite.
+% ===
+
+Vous trouverez au début du fichier \verb|french.doc|
+\index{fichier!french.doc@\texttt{french.doc}}%
+\index{occupation mémoire}%
+l'occupation supplémentaire en mémoire interne de \TeX{} qui
+est imputable à l'extension.
+\section{Pour dépanner...}
+\index{dépannage}
+Il est parfois utile de savoir si un document risque de poser des
+problèmes une fois que l'on utilisera l'extension {\eFrench} ; c'est
+pour aider à répondre à cette question que vous pouvez inclure dans
+votre document (toujours avant le \verb|\begin{document}|)
+l'ordre \verb|\input french.chk|. Bien entendu il ne faut pas faire
+\index{fichier!french.chk@\texttt{french.chk}}%
+\index{begin@\texttt{\backslash begin}!\texttt{\backslash begin}\{\texttt{document}\}}%
+\index{input2 french.chk@\texttt{\backslash input french.chk}}%
+appel à l'extension {\eFrench} d'une manière ou d'une autre. Ainsi,
+s'il existe dans votre document une instruction qui risque d'être
+en conflit avec l'extension {\eFrench} vous obtiendrez à chaque fois
+un message d'erreur et la compilation de votre document s'arrêtera.
+Il devrait ensuite vous suffire d'appliquer les conseils indiqués
+au paragraphe \ref{compatibilite}.
+
+Une autre manière de dépanner peut aussi consister à
+rendre tous les
+ordres de l'extension {\eFrench} inopérants. Pour cela il faut tout
+d'abord retirer l'appel de l'extension {\eFrench} et ensuite rajouter
+l'ordre \verb|\input french.dmy|
+\index{fichier!french.dmy@\texttt{french.dmy}}%
+\index{begin@\texttt{\backslash begin}!\texttt{\backslash begin}\{\texttt{document}\}}%
+\index{input2 french.dmy@\texttt{\backslash input french.dmy}}%
+(comme toujours en \LaTeX{} : avant le \verb|\begin{document}|).
+Cette technique vous permettra d'éliminer les effets de l'extension
+{\eFrench} sans avoir à retirer de votre document tous les
+ordres relatifs à l'extension elle-même%
+\footnote{Cette technique ne doit pas être employée pour imprimer
+des documents français dans un environnement \LaTeX{} non francisé
+car le document ne peut être composé correctement
+de cette manière.}%
+.
+%On notera qu'il est fortement conseillé de traduire le texte en
+%7-bits avant l'utilisation de ce subterfuge.
+
+La version {\em du pauvre} dont vous trouverez l'explication page
+\pageref{reduit} (<< Poor Man French Style >>)
+peut aussi vous aider dans certains
+cas.
+
+\section{Utilisation étendue}\label{etendue}
+\index{utilisation!étendue}%
+Nous allons aborder ici une utilisation plus délicate de l'extension
+{\eFrench} car elle fait appel à des connaissances \TeX{}
+plus pointues.
+
+\subsection{Les grandes parties de l'extension {\eFrench}}
+
+L'extension {\eFrench} est composée de plusieurs parties essentielles :
+césure, typographie (dans la ligne), mise en page,
+traduction en français, macro-instruc\-tions et messages.
+Chacune de ces parties est {\em embrayable} ou {\em
+débrayable} à volonté.
+Pour ce faire les ordres suivants ont été définis :
+\begin{verbatim}
+ \frenchhyphenation ... \nofrenchhyphenation
+ \frenchtypography ... \nofrenchtypography
+ \frenchlayout ... \nofrenchlayout
+ \frenchtranslation ... \nofrenchtranslation
+ \frenchmacros ... \nofrenchmacros
+ \frenchwarnings ... \nofrenchwarnings
+\end{verbatim}
+%%% \frenchbibliography ... \nofrenchbibliography
+
+Lorsque l'extension {\eFrench} est appelée elle active toutes ces parties.
+Il en va de même à chaque fois que l'extension est réactivée
+par l'ordre \verb|\french| (sous réserve de choix
+différents faits dans une classe, un
+style personnel ou << maison >>, voir §~\ref{usersf}).
+
+Certaines de ces parties disposent de sous-options
+ou de commandes spécifiques que nous allons détailler ci-après.
+
+Nous ne parlerons presque pas de la bibliographie car
+\index{bibliographie}%
+elle est essentiellement traitée, pour l'instant,
+par \verb|\frenchtranslation| ; voir toutefois \ref{bibliographie}
+page \pageref{bibliographie}.
+
+Une autre partie, implicite mais non négligeable, concerne la
+commutation de langues ; elle est décrite en \ref{multilingue}
+page \pageref{multilingue}.
+
+\subsubsection{\texttt{\backslash frenchhyphenation}}
+\label{frenchhyphenation}
+\index{frenchhyphenation@\texttt{\backslash frenchhyphenation}}%
+Cette partie de l'extension {\eFrench} active la césure française
+\footnote{Les valeurs des variables \texttt{\backslash lefthyphenmin},
+\texttt{\backslash righthyphenmin} et \texttt{\backslash uchyph}
+y sont précisées
+(respectivement 2, 3 et 1).}%
+, autorise la division des mots commençant par une majuscule et permet le
+chargement d'un fichier d'exceptions personnel comme il
+en a été discuté
+au paragraphe \ref{cesure} page \pageref{cesure}.
+\index{fichier!d'exceptions}%
+\index{coupure!de mots}%
+\index{division!des mots}%
+
+Les ordres \verb|\hyphenation| et \verb|\showhyphens| ont été
+modifiés pour accepter des macro-instructions d'accentuation
+en paramètre.
+\index{hyphenation@\texttt{\backslash hyphenation}}%
+\index{showhypens@\texttt{\backslash showhyphens}}%
+
+Un ordre \verb|\allowhyphens|
+\index{allowhyphens@\texttt{\backslash allowhyphens}}%
+\index{cesure@césure!allowhyphens@\texttt{\backslash allowhyphens}}%
+est utilisable dans le texte pour forcer \TeX\
+à utiliser tous les points de coupure possibles d'un mot composé
+plutôt que le seul trait d'union entre les deux mots.
+Exemple : \\
+\verb|socio-\allowhyphens culturel|\\
+ou : \verb|définissez\allowhyphens-le|\\
+On notera que l'on précise \verb|\allowhyphens| \textbf{\emph{avant}}
+ou \textbf{\emph{après}} le trait d'union selon que l'on souhaite
+couper le mot composé avant ou après. Cette commande n'est pas
+utilisable en argument de l'ordre \verb|\hyphenation|.
+\index{hyphenation@\texttt{\backslash hyphenation}}%
+
+L'ordre \vers|\frenchhyphenation| n'est pas pris en compte immédiatement ;
+il ne prend effet qu'à partir du moment où
+il est demandé une réactivation de l'extension {\eFrench}
+par l'ordre \verb|\french| ou \verb|\begin|\-\verb|{french}|.
+
+\noindent
+\texttt{\backslash nofrenchhyphenation}
+\index{nofrenchhyphenation@\texttt{\backslash nofrenchhyphenation}}%
+ retire le mécanisme de césure française. Cela ne signifie
+pas qu'il n'y a
+plus de coupure de mot mais que la langue utilisée pour le faire n'est plus
+le français mais celle qui était active auparavant.
+
+L'installation du fichier \texttt{language.dat} par les moteurs
+\index{fichier!language.dat@\texttt{language.dat}}%
+MiK\TeX{} et \TeX{}Live
+ permet l'accès à une commande \verb|\nohyphenation|
+\label{nohyphenation}%
+\index{nohyphenation@\texttt{\backslash nohyphenation}}%
+\index{cesure@césure!stoppée}%
+qui stoppe immédiatement la césure et
+qui n'est rien d'autre qu'un langage spécifique sans motif de césure. La
+portée de cette commande doit donc être limitée à un bloc (\verb|{}|)
+bien précis.
+
+L'ordre \vers|\nofrenchhyphenation| n'est pas pris
+en compte immédiatement ;
+il ne prend effet qu'à partir du moment où
+il est demandé une réinitialisation de l'extension {\eFrench}
+par l'ordre \verb|\french| ou \verb|\begin{french}|.
+
+
+\subsubsection{\texttt{\backslash frenchtypography}}
+\label{frenchtypography}
+\index{frenchtypography@\texttt{\backslash frenchtypography}}%
+Cette partie de l'extension {\eFrench} applique
+ la typographie française à la ponctuation et aux guille\-mets
+\footnote{La typographie française n'est appliquée,
+ bien sûr, que si vous saisissez les espaces appropriés à ces
+ponctuations (cf. §~\ref{saisie}). À défaut, la ponctuation sera
+accolée aux mots, comme c'est l'usage classique en anglais.}%
+\index{ponctuation}\index{cesure@césure}%
+\index{lefthyphenmin@\texttt{\backslash lefthyphenmin}}%
+\index{righthyphenmin@\texttt{\backslash righthyphenmin}}%
+\index{uchyph@\texttt{\backslash uchyph}}%
+\index{guillemets}\index{points!deux-points (:)}%
+\index{deux-points (:)}%
+, propose l'accentuation dans l'environnement \vers|tabbing|
+(voir \ref{tabbingaccents} page \pageref{tabbingaccents})
+ et empêche (autant que possible) la coupure de ligne
+ou de page avant la ponctuation, avant les guillemets fermants, après les
+deux-points et les guillemets ouvrants.
+D'autres aspects typographiques
+liés au français sont aussi mis en œuvre comme :
+\begin{itemize}
+\item en mode mathématique l'espace après la virgule est supprimé (c'est
+ l'option par défaut de {\eFrench}
+ \verb|\frenchmathcomma| mais qui peut être annulée par la
+ commande \verb|\regularmath|\-\verb|comma|) ; on notera que
+{\eFrench} adopte le comportement de l'extension
+\texttt{icomma} lorsque cette dernière est chargée avant {\eFrench}.
+Le mode actif avant l'appel de {\eFrench} peut être restauré par la
+commande \verb|\originalmathcomma|.
+\index{extension!icomma@\emph{icomma}}%
+\index{frenchmathcomma@\texttt{\backslash frenchmathcomma}}%
+\index{regularmathcomma@\texttt{\backslash regularmathcomma}}%
+\index{originalmathcomma@\texttt{\backslash originalmathcomma}}%
+\index{virgule}\index{espacement!après la virgule}%
+\item \verb*|\nombre{1 234,56}| applique l'espacement correct. Le nombre
+ est toujours composé en mode mathématique. L'option \verb|\nofiles|
+ ne doit pas être indiquée en début de document.
+\index{nombre@\texttt{\backslash nombre}}%
+\index{nombre@\texttt{\backslash nombre}!nofiles@avec \texttt{\backslash nofiles}}%
+\index{nombre@\texttt{\backslash nombre}!en mode mathématique}%
+\index{nofiles@\texttt{\backslash nofiles}}%
+\index{nofiles@\texttt{\backslash nofiles}!et nombre@et \texttt{\backslash nombre}}%
+\item l'espacement des appels de notes (et des \verb|\thanks|)
+de bas de page et de \verb|minipage|.
+\item la composition des numéros de notes dans la police de la note de bas
+ de page ;
+notez que l'ordre \verb|\footnote| ou \verb|\thanks| peut
+désormais être séparé, dans le texte,
+du mot qui le précède, l'extension {\eFrench} n'imprimant pas cet espace.%
+\index{thanks@\texttt{\backslash thanks}}%
+\index{footnote@\texttt{\backslash footnote}}%
+\index{note!footnote@avec \texttt{\backslash footnote}}%
+\index{note!thanks@avec \texttt{\backslash thanks}}%
+\item la mise en italique du titre des figures et tableaux
+ (option par défaut, car l'utilisateur peut choisir de
+ préciser \verb|\captionfont|).
+\index{captionfont@\texttt{\backslash captionfont}}%
+\item la modification du séparateur
+des titres de figures et tableaux << \texttt{:} >> par
+\verb|\caption|\-\verb|separator| qui est initialisé par défaut
+dans {\eFrench} à << \verb|~--| >>.
+\index{captionseparator@\texttt{\backslash captionseparator}}
+
+ Rappelons que
+ c'est l'ordre \verb|\caption| de \LaTeX{} qui permet de donner
+ un titre à une figure ou un tableau. Mais ce titre n'est pas
+\index{figures et tableaux}%
+\index{tableaux!notes}%
+\index{tableaux!titres}%
+\index{note}%
+ placé dans les deux cas au même endroit.
+ Dans le cas d'une figure il est placé {\em après} ; dans celui
+ d'un tableau il est placé {\em avant\/}.
+\end{itemize}
+
+Les sous-options proposées sont les suivantes :
+\begin{itemize}
+\item \verb|\unnumberedcaptions{figure/table}| permet d'annuler
+définitivement la numérotation des figures ou des tableaux et
+les commandes correspondantes \verb|\listoffigures|
+ou \verb|\listof|\-\verb|tables|.
+Cette option ne peut être utilisée qu'une seule fois, pour chaque
+type, au début du document ; elle est
+irréversible, du moins à l'intérieur du texte français ;
+\index{unnumberedcaptions@\texttt{\backslash unnumberedcaptions}}%
+\index{listoffigures@\texttt{\backslash listoffigures}}%
+\index{listoftables@\texttt{\backslash listoftables}}%
+
+\item \verb|\noTeXdots| modifie \verb|\dots| et \verb|\ldots| pour produire
+trois points normaux, mais c'est l'option
+\index{noTeXdots@\texttt{\backslash noTeXdots}}%
+\index{points!\texttt{\backslash noTeXdots}}%
+\index{dots@\texttt{\backslash dots}}\index{points!\texttt{\backslash dots}}%
+\index{ldots@\texttt{\backslash ldots}}\index{points!\texttt{\backslash ldots}}%
+inverse \verb|\TeXdots| qui en est la
+valeur par défaut (car il suffit de ne pas utiliser \verb|\dots| ou
+\verb|\ldots|) ;
+
+\label{nofrenchguillemets}
+\item \verb|\nofrenchguillemets| permet de désactiver les guillemets 7-bits%
+\footnote{On entend par guillemets 7-bits les caractères
+\texttt{\inferieura\relax\inferieura} et \texttt{\superieura\relax\superieura}.
+En fait il s'agit de désactiver les caractères
+\texttt{\inferieura} et \texttt{\superieura} pour
+qu'ils n'exécutent plus les macro-instructions de l'extension {\eFrench}.}
+français pour un autre usage ;
+l'option par défaut de l'extension {\eFrench}
+est \verb|\french|\-\texttt{guil}\-\texttt{lemets} ;
+\index{frenchguillemets@\texttt{\backslash frenchguillemets}}%
+\index{nofrenchguillemets@\texttt{\backslash nofrenchguillemets}}%
+
+\item \verb|\ancientguillemets| permet d'obtenir des guillemets {\em à
+l'ancienne} c.-à-d. où chaque paragraphe
+ d'une citation de deuxième rang
+\index{ancientguillemets@\texttt{\backslash ancientguillemets}}%
+\index{todayguillemets@\texttt{\backslash todayguillemets}}%
+commence non pas par des guillemets ouvrants mais par des fermants ; la valeur
+par défaut de l'extension {\eFrench} est \verb|\todayguillemets| ;
+
+\item \verb|\guillemetsinarrays|, qui est la valeur par défaut
+de {\eFrench} permet d'obtenir des guillemets
+\index{guillemetsinarrays@\texttt{\backslash guillemetsinarrays}}%
+\index{noguillemetsinarrays@\texttt{\backslash noguillemetsinarrays}}%
+en mode texte dans les environnements standard \texttt{array} ;
+l'inconvénient de cette possibilité
+est qu'il est nécessaire de protéger les macros-commandes
+\verb|<| et \verb|>| lorsqu'ils terminent une case d'un
+tableau de ce genre (via \verb|\protect| ou en écrivant
+\index{protect@\texttt{\backslash protect}}%
+\verb|<{}| ou même \verb|<\relax|) ;
+\item \verb|\noguillemetsinarrays|, par contre, n'a pas
+cet inconvénient mais ne permet plus d'imprimer des guillemets
+\index{array}\index{eqnarray}%
+\index{environnement!array@\texttt{array}}%
+\index{environnement!eqnarray@\texttt{eqnarray}}%
+\index{environnement!eqnarray*@\texttt{eqnarray*}}%
+français dans ces environnements \texttt{array} et \texttt{eqnarray} ;
+
+\item \verb|\guillemetsinallfonts| permet d'obtenir des guillemets
+\index{guillemetsinallfonts@\texttt{\backslash guillemetsinallfonts}}%
+\index{guillemetsinroman@\texttt{\backslash guillemetsinroman}}%
+quelle que soit la police de caractères utilisée (en supposant que ces
+guillemets existent ; une correction d'italique est ajoutée
+si nécessaire, avant les guillemets fermants) ;
+mais par défaut les guillemets seront imprimés
+\index{romain droit}\index{romain}%
+en romain droit : \texttt{\backslash guil\-le\-mets\-in\-roman}
+ est la valeur par défaut ;
+dans ce dernier cas
+ ;
+
+\item \verb|\guillemetsfont| permet, par contre, de choisir la fonte
+ pour la composition des guillemets tout au long du document,
+ à condition que l'extension \eFrench\ travaille dans le
+ codage de fonte \texttt{T1} ;
+ vous pouvez, par exemple, coder ceci :
+\begin{verbatim}
+\def\guillemetsfont{%
+ \fontencoding{OT2}\fontfamily{wncyr}%
+ \selectfont}%
+\end{verbatim}
+ceci est à placer à l'endroit de votre choix, même avant le
+chargement de \eFrench\ ;
+\index{guillemetsfont@\texttt{\backslash guillemetsfont}}%
+\index{fontes!choix pour les guillemets}
+\index{fontencoding@{\em fontencoding}!\texttt{T1}}%
+\index{codage!\texttt{T1}}%
+\index{T1@\texttt{T1} (codage)}%
+
+\item \verb|\noenglishquote| permet de remplacer temporairement les
+\label{noenglishquote}%
+\index{noenglishquote@\texttt{\backslash noenglishquote}}%
+\index{englishquote@\texttt{\backslash englishquote}}%
+\index{catcode@\texttt{\backslash catcode}}%
+\index{tabbing@\texttt{tabbing} (environnement)}%
+\index{lccode@\texttt{\backslash lccode}}%
+\index{char@\texttt{\backslash char}}%
+\index{accents!remplaçant ` et '}%
+{\em quotes} anglaises par des accents%
+\footnote{Mais attention, les ordres \TeX{} tels que
+\texttt{\backslash catcode}, \texttt{\backslash lccode},
+\texttt{\backslash char}... deviennent
+\label{catcodes}
+inutilisables pendant toute la durée d'activité de cette option.}
+ ; cette option reste active à l'intérieur de l'environnement
+\vers|versatim|%
+\footnote{Cette option est inopérante dans l'environnement
+\texttt{tabbing}.\label{tabbing}}
+ (ou avec \vers|\vers|, voir §~\ref{outils} page~\pageref{outils}) ;
+\verb|\english|\-\verb|quote| est
+l'option par défaut de l'extension {\eFrench} ;
+
+\item \verb|\noenglishdoublequotes| remplace tous les doubles guillemets
+\refmark{catcodes}
+\index{noenglishdoublequotes@\texttt{\backslash noenglishdoublequotes}}%
+\index{englishdoublequotes@\texttt{\backslash englishdoublequotes}}%
+ à la \TeX{} `` et '' par << et >> ;
+cette option reste active à l'intérieur de l'environnement
+\vers|versatim|\refmark{tabbing}
+(ou avec \vers|\vers|, voir §~\ref{outils}) et elle
+ s'annule tout
+simplement par la commande inverse \verb|\englishdoublequotes| ;
+
+\item \verb|\untypedspaces| rajoute un espace là où l'utilisateur doit
+\index{espaces!untypedspaces@\texttt{\backslash untypedspaces}}%
+\index{untypedspaces@\texttt{\backslash untypedspaces}}%
+\index{espaces!typedspaces@\texttt{\backslash typedspaces}}%
+\index{typedspaces@\texttt{\backslash typedspaces}}%
+normalement en mettre un (et uniquement s'il l'a oublié)
+ c.-à-d. devant la double ponctuation
+\index{ponctuation}\index{guillemets}%
+(\verb|! ? ; :|) et
+les guillemets (après \verb|<<| et avant \verb|>>|)%
+\footnote{\texttt{\backslash untypedspaces} n'a aucun effet sur
+la typographie des nombres et donc avec la commande
+\texttt{\backslash nombre}.}
+ ; mais
+attention, il peut y avoir des cas où cette action systématique est
+ mauvaise, c'est pourquoi \verb|\typedspaces| est l'option par défaut de
+l'extension {\eFrench} ;
+
+\item \verb|\idotless| permet (pour ceux qui ne saisissent pas en 8 bits
+et/ou n'ont pas de bon éditeur de texte%
+\index{idotless@\texttt{\backslash idotless}}%
+\index{iwithdot@\texttt{\backslash iwithdot}}%
+\index{points!\texttt{\backslash idotless}}\index{points!\texttt{\backslash iwithdot}}%
+\footnote{Donc dans tous les cas où vous devez saisir les
+lettres accentuées sous leur forme \TeX{} c'est-à-dire par la séquence :
+\index{lettres accentuées}\index{caractères accentués}%
+\index{antislash-accent-lettre}%
+antislash-accent-lettre.}%
+) d'accentuer les i sans avoir à
+penser qu'il est absolument indispensable d'utiliser un \i{} sans point
+(\verb|\i{}|) ; \verb|\iwithdot|
+en est l'option inverse et la valeur par
+défaut ;
+
+\item \verb|\tabbingaccents|\label{tabbingaccents}
+ permet d'utiliser l'accentuation
+normale \mbox{7-bits} (\verb|\`| et \verb|\'|) dans un environnement
+\vers|tabbing| de \LaTeX{} ; les mêmes ordres influants sur
+la tabulation restent utilisables s'ils sont suivis d'un espace
+\index{accents!tabbingaccents@\texttt{\backslash tabbingaccents}}%
+\index{tabbingaccents@\texttt{\backslash tabbingaccents}}%
+\index{notabbingaccents@\texttt{\backslash notabbingaccents}}%
+\index{environnement!\texttt{tabbing}}%
+\index{accents!dans \texttt{tabbing}}%
+\index{accents!notabbingaccents@\texttt{\backslash notabbingaccents}}%
+(\verb*|\` | et \verb*|\' |) ; comme il s'agit d'une option qui
+n'aura plus d'intérêt à l'avenir, \vers|\notabbingaccents| est
+la valeur par défaut ;
+
+\item \verb|\EBCDICbrackets| remplace en mode texte
+\index{EBCDICbrackets@\texttt{\backslash EBCDICbrackets}}%
+\index{normalbrackets@\texttt{\backslash normalbrackets}}%
+\index{\texttt{[}}\index{\texttt{]}}\index{crochets}%
+(c.-à-d. non mathématique) les caractères \verb|<| et \verb|>| par
+des crochets [ et ] ; cette option est
+particulièrement {\em dédiée} aux
+systèmes IBM disposant de claviers sans crochets ;
+mais attention le doublement de ces caractères (\verb|<<| et
+\verb|>>|) donnera toujours << et >>
+(sauf en mode \verb|verbatim|) ;
+cette option nécessite l'utilisation de \verb|\nonfrench| pour
+l'introduction et l'exécution de certains jeux de macros-instructions
+(voir §~\ref{compatibilite} page \pageref{compatibilite}) ;
+\verb|\normalbrackets| en est la valeur
+par défaut ;
+
+\item \verb|\letpunctuationactivefor| est un ordre très curieux ! Son nom
+\index{letpunctuationactive@\texttt{\backslash letpunctuationactive}}%
+signale déjà qu'il ne doit pas être
+employé seul ; il ne doit aussi
+être employé que dans des cas très
+spécifiques et ce, en connaissance de
+cause ; en effet, cet ordre engendre irrémédiablement
+une {\em anomalie}
+(l'exception qui confirme la règle...) :
+les caractères {\em actifs}
+(\verb|! ; : ?|) resteront actifs même lorsque l'extension {\eFrench}
+se sera effacée au profit d'une autre ; cela est donc dangereux ! mais
+peut aussi être utile, comme nous allons le voir ci-après avec
+\verb|\wrongtypedspaces|.
+\end{itemize}
+
+Tous les dispositifs précités deviennent
+inopérants dès que l'on code
+\index{nofrenchtypography@\texttt{\backslash nofrenchtypography}}%
+\texttt{\backslash no\-french\-typo\-gra\-phy}.
+
+\noindent
+\texttt{\backslash nofrenchtypography} :
+{\em a priori} rien d'intéressant ici... sauf lorsque vous n'imprimez plus
+à la française et dans ce cas vous disposez des ordres :
+\begin{itemize}
+\item \verb|\wrongtypedspaces| pour supprimer les espaces superflus saisis
+\index{wrongtypedspaces@\texttt{\backslash wrongtypedspaces}}%
+\index{espaces!wrongtypedspaces@\texttt{\backslash wrongtypedspaces}}%
+(devant la double ponctuation c.-à-d. \verb|! ; : ?|)
+\index{double ponctuation}%
+par une dactylographe française trop zélée
+qui vient de taper une grande
+quantité de texte non-français dans un document
+français ; s'il s'agit
+d'anglais ou d'une autre langue dont l'espace n'est pas souhaitable,
+l'extension
+ {\eFrench} fera aussi le travail pour annuler les habitudes
+françaises ; mais attention ! avant d'abandonner le \verb|\french| pour,
+par exemple, l'\verb|\english| il aura fallu taper :\\
+\verb| \letpunctuationactivefor\wrongtypedspaces|\\
+pour maintenir {\em active\/} la double ponctuation
+(éviter alors d'employer cette dernière dans des macros, \LaTeX{}
+ ou non, qui n'auraient pas été conçues pour ce cas
+ou qui n'auraient pas
+été adaptées par le style linguistique
+correspondant --~à manipuler
+donc avec prudence)
+;
+
+\item \verb|\nowrongtypedspaces| permet d'annuler temporairement
+\index{nowrongtypedspaces@\texttt{\backslash nowrongtypedspaces}}%
+\index{espaces!nowrongtypedspaces@\texttt{\backslash nowrongtypedspaces}}%
+l'effet précité.
+\end{itemize}
+
+\subsubsection{\texttt{\backslash frenchlayout}}
+\index{frenchlayout@\texttt{\backslash frenchlayout}}%
+La partie mise en page de l'extension {\eFrench}
+réalise un grand nombre d'opérations :
+\begin{itemize}
+\item elle réintroduit
+le retrait des premiers paragraphes qui est supprimé en \LaTeX{}
+standard mais l'utilisateur conserve la possibilité de préciser son choix
+par les commandes
+\index{retrait}\index{indentation}%
+\begin{itemize}
+\item \verb|\indentfirst| qui est le choix par défaut,
+\item \verb|\nonindentfirst| qui n'applique pas de retrait en début des
+ premiers paragraphes.
+\end{itemize}
+Dans le cas où l'extension \emph{titlesec} est chargée, ce sont les options
+de cette extension qui sont utilisées et les commandes pécédentes n'ont
+plus d'effet.
+\index{extension!titlesec@\emph{titlesec}}%
+\index{titlesec@\emph{titlesec}}%
+
+\item elle définit les marqueurs utilisés dans les énumérations
+ (\texttt{itemize}). Vous pouvez choisir d'autres marqueurs
+ en fournissant d'autres caractères à la place des étoiles
+ ci-dessous :
+\begin{verbatim}
+\frlabelitems{%
+ \renewcommand{labelitemi}{*}%
+ \renewcommand{labelitemii}{**}%
+ \renewcommand{labelitemi}{***}%
+ }%
+\end{verbatim}
+\index{frlabelitems@\texttt{\backslash frlabelitems}}%
+\index{labelitemi@\texttt{\backslash labelitemi}}%
+\index{labelitemii@\texttt{\backslash labelitemii}}%
+\index{labelitemiii@\texttt{\backslash labelitemiii}}%
+\index{marqueurs de liste!modification}%
+À noter que le traitement des guillemets à chaque début
+d'éléments de liste (\verb|\item|) est alors supprimé (sauf à
+réintroduire la séquence
+\verb|\check|\-\verb|item|\-\verb|guille|\-\verb|mets| devant
+le marqueur).
+\index{checkitemguillemets@\texttt{\backslash checkitemguillemets}}%
+\index{guillemets!dans itemize@dans \texttt{itemize}}%
+\index{guillemets!et marqueurs de liste}%
+\index{marqueurs de liste!et guillemets}%
+
+\item elle propose les lettrines dont je vous ai déjà parlé au
+ \S~\ref{lettrines} page~\pageref{lettrines}.
+\index{lettrines}
+
+\item elle introduit les environnements dont je vous ai aussi
+déjà parlé :
+\begin{itemize}
+\item \verb|order| pour composer des listes ordonnées
+(voir §~\ref{envir} page~\pageref{envir}),
+\index{environnement!order@\texttt{order}}%
+
+\item \verb|figurette| pour placer exactement où l'on veut une petite
+figure (voir §~\ref{figurette} page~\pageref{figurette}),
+\index{environnement!figurette@\texttt{figurette}}%
+
+\item \texttt{drapeaufg},
+ \texttt{drapeau}\-\texttt{fg}\-\texttt{IN},
+ \texttt{drapeau}\-\texttt{fd},
+ \texttt{drapeau}\-\texttt{fd}\-\texttt{IN}
+pour la compostion \emph{au fer} à droite ou à gauche
+(voir §~\ref{endrapeau} page~\pageref{endrapeau}),
+\index{environnement!drapeaufg@\texttt{drapeaufg}}%
+\index{environnement!drapeaufgIN@\texttt{drapeaufgIN}}%
+\index{environnement!drapeaufd@\texttt{drapeaufd}}%
+\index{environnement!drapeaufdIN@\texttt{drapeaufdIN}}%
+
+\item \vers|versatim| en remplacement de \texttt{verbatim}
+ pour réaliser automatiquement la coupure de ligne
+ lorsque cela est nécessaire
+(voir \S~\ref{outils} page~\pageref{outils}).
+\index{environnement!versatim@\texttt{versatim}}%
+\end{itemize}
+
+\item elle remet à
+zéro le compteur de chapitre (section et autres sous-sections)
+à chaque nouvelle partie (\verb|\part|) du document%
+\footnote{La commande \texttt{\backslash noresetatpart}
+fournie via \texttt{\backslash usersfrenchoptions} ou
+en début de document
+(après le \texttt{\backslash begin}\{\texttt{docu}\-\texttt{ment}\}) permet
+d'annuler cet effet.}%
+, positionne les notes de tableau dans le tableau lui-même,
+\index{part@\texttt{\backslash part}}%
+\index{noresetatpart@\texttt{\backslash noresetatpart}}%
+gère les appels de note consécutifs en les séparant d'une virgule
+\footnote{Une note peut toujours être suivie...}%
+\footnote{... d'une autre note, à condition qu'elles ne soient séparées
+par aucun autre élément, pas même un espace.}.
+
+\item
+ lors d'un début de partie, de chapitre, d'annexe
+ ou d'index, elle corrige d'une part
+la position de la numérotation de page par défaut de \LaTeX{},
+d'autre part évite d'imprimer le titre courant
+\footnote{\LaTeX{} utilise anormalement le << \em pagestyle\/ >>
+\texttt{plain} avec la classe << \tt book >>.} sur cette page.
+\index{classe!book@\texttt{book}}%
+Elle modifie les environnements \texttt{theindex} et \texttt{thebibliography}
+de façon à faire automatiquement référence à l'index et à la
+bibliographie dans la table des matières comme dans les \emph{bookmarks}
+des hypertextes.
+\index{theindex@\texttt{theindex}}%
+\index{environnement!theindex@\texttt{theindex}}%
+\index{bibliographie}%
+\index{index!composition de l'}%
+\index{thebibliography@\texttt{thebibliography}}%
+\index{environnement!thebibliography@\texttt{thebibliography}}%
+\end{itemize}
+
+Cette partie traite aussi les sous-options suivantes :
+\begin{itemize}
+
+\item \verb|\noresetatpart| permet d'annuler la remise à
+ zéro du compteur de chapitre (section et autres sous-sections)
+ à chaque nouvelle partie (\verb|\part|) du document ;
+\index{part@\texttt{\backslash part}}%
+\index{noresetatpart@\texttt{\backslash noresetatpart}}%
+\index{numerotation@numérotation!des chapitres ou sections}%
+
+\item \verb|\noresetatchapter| permet de ne pas remettre à zéro le compteur
+ de notes de bas de page à chaque nouveau chapitre (\verb|\chapter|) ;
+\index{chapter@\texttt{\backslash chapter}}%
+\index{noresetatchapter@\texttt{\backslash noresetatchapter}}%
+\index{numerotation@numérotation!des notes de bas de page}
+
+\item \verb|\frenchtrivsep| réduit notablement l'espace vertical dans toutes
+\label{frenchtrivsep}
+ les listes \LaTeX; c'est la valeur par défaut de l'extension
+ {\eFrench} ; des messages d'attention (\texttt{-58-} voir p.
+ \pageref{-58-}) peuvent être émis si vous utilisez de nouveaux
+ environnements faisant appel aux environnements standard \LaTeX{} ;
+les valeurs d'espacement vertical
+(\texttt{\backslash parsep}, \texttt{\backslash itemsep},
+\texttt{\backslash topsep} et \texttt{\backslash partopsep})
+\index{espacement!vertical}%
+\index{espacement!parsep@\texttt{\backslash parsep}}%
+\index{espacement!itemsep@\texttt{\backslash itemsep}}%
+\index{espacement!topsep@\texttt{\backslash topsep}}%
+\index{espacement!partopsep@\texttt{\backslash partopsep}}%
+\index{parsep@\texttt{\backslash parsep}}%
+\index{itemsep@\texttt{\backslash itemsep}}%
+\index{topsep@\texttt{\backslash topsep}}%
+\index{partopsep@\texttt{\backslash partopsep}}%
+\index{espace!compteurs}%
+peuvent être modifiées en utilisant la commande :
+\begin{verbatim}
+\frtrivseplengths{%
+ \setlength{\partopsep}{0.2 ex ...}%
+ ... }
+\end{verbatim}
+et dans ce cas les messages d'avertissement précités ne sont plus
+émis (sauf si vous codez à nouveau
+\verb|\frenchtrivsepwarnings|
+dans cette commande
+ (voir \verb|\nofrenchtrivsepwarnings| page \pageref{ftsw}) ;
+\index{frenchtrivsep@\texttt{\backslash frenchtrivsep}}%
+
+\item \verb|\nofrenchtrivsep| rétablit l'espacement vertical standard de la
+ classe de document utilisée ;
+\index{nofrenchtrivsep@\texttt{\backslash nofrenchtrivsep}}%
+\label{everyparguills}
+\item \verb|\everyparguillemets| permet, lorsqu'une citation se prolonge sur
+\index{everyparguillemets@\texttt{\backslash everyparguillemets}}%
+\index{guillemets!everyparguillemets@\texttt{\backslash everyparguillemets}}%
+d'au\-tres paragraphes, de commencer chaque paragraphe
+par des guillemets, comme
+c'est l'usage ; lorsque la citation continue par une énumération
+\verb|order| ou \verb|itemize|, chaque alinea débute alors avec des
+guillemets ; l'option
+\vers|\everyparguillemets| est la valeur par défaut dans
+{\eFrench} ;
+
+\item \verb|\everyparguillemetsremoved| permet d'annuler cet effet
+(c'est-à-dire de commencer tous les paragraphes d'une citation
+par des guillemets ouvrants)
+\index{everyparguillemetsremoved@\texttt{\backslash everyparguillemetsremo\-ved}}%
+\index{guillemets!everyparguillemetsremoved@\texttt{\backslash everyparguillemets-\\ removed}}%
+
+\item \verb|\noeveryparguillemets| \, ne permet pas
+d'avoir plusieurs paragraphes
+dans une citation (tout ordre \verb|\par| est ignoré ;
+la citation doit obligatoirement commencer par des guillemets ouvrants%
+\footnote{Au cas où la citation ne commencerait pas en début de ligne,
+un saut de ligne sera imposé aux premiers guillemets ouvrants.}) ;
+\index{noeveryparguillemets@\texttt{\backslash noeveryparguillemets}}%
+\index{guillemets!noeveryparguillemets@\texttt{\backslash noeveryparguillemets}}%
+cette option qui gère correctement pour vous les citations de deuxième
+niveau en commençant chaque ligne par des guillemets
+est {\em fragile} et peut poser quelques
+problèmes de mise en œuvre voire même très mal fonctionner%
+\footnote{Cette option n'est pas adaptée, notamment, aux environnements
+dont la longueur de ligne est réduite.}
+ ;
+l'utilisation de l'environnement \texttt{guillemets} (ou \verb|\guillemets|)
+est totalement interdit dans ce cas ;
+il est impératif de rétablir
+\verb|\everypar|\-\verb|guil|\-\verb|le|\-\verb|mets| juste après
+le paragraphe concerné ;
+
+\item \verb|\overfullhboxmark| et \verb|\nooverfullhboxmark|
+\index{nooverfullhboxmark@\texttt{\backslash nooverfullhboxmark}}%
+\index{overfullhboxmark@\texttt{\backslash overfullhboxmark}}%
+(voir §~\ref{outils} page \pageref{outils}) ;
+
+\item \verb|\labelsinmargin| et \verb|\nolabelsinmargin|
+\index{labelsinmargin@\texttt{\backslash labelsinmargin}}%
+\index{nolabelsinmargin@\texttt{\backslash nolabelsinmargin}}%
+(voir §~\ref{outils} page \pageref{outils}).
+
+%\item \verb|\PasDeNumeroDePage| ou \verb|\nopagenumbers| supprime la
+%\index{PasDeNumerDePage@\texttt{\backslash PasDeNumeroDePage}}%
+%numérotation des pages (mais aussi les hauts de page). Cela est très
+%lié aux styles employés (ne convient donc pas dans
+%toutes les situations).
+\end{itemize}
+
+Cette partie gère aussi la mise en page du courrier fait avec la classe
+\verb|letter| ainsi les adresses, la date, l'\verb|\opening|
+(ainsi que le \verb|\closing|) \etc. sont disposées
+{\em à la française} ; l'adresse du correspondant
+apparaît au travers
+de la fenêtre des enveloppes format 11~x~22 cm ;
+\index{closing@\texttt{\backslash closing}}%
+il est possible de préciser les commandes
+\verb|\yourref|, \verb|\ourref|, \verb|\object|, \verb|\PS|
+ déjà vues (§~\ref{letter} page \pageref{letter})
+et de fournir les définitions
+des hauts et bas de page du courrier par les commandes
+\verb|\formhead| et \verb|\formfoot|.
+\index{lettre}\index{courrier}\index{letter@\texttt{letter}}%
+\index{classe!letter@\texttt{letter}}%
+\index{formhead@\texttt{\backslash formhead}}%
+\index{formfoot@\texttt{\backslash formfoot}}%
+\index{ourref@\texttt{\backslash ourref}}%
+\index{yourref@\texttt{\backslash yourref}}%
+\index{object@\texttt{\backslash object}}%
+\index{PS@\texttt{\backslash PS}}\index{postscriptum@{\em postscriptum}}%
+
+La commande \verb|\constantLayout| qui ne fait pas partie de cette
+section car elle porte sur tous les langages ; son rôle est
+est de garantir une présentation homogène du document tout au
+long de ce dernier, même en cas de changement de langue. Elle
+ne peut être utilisée qu'une seule fois au début du document ;
+ce n'est pas l'option par défaut avec {\eFrench}.
+\index{ConstantLayout@\texttt{\backslash ConstantLayout}}%
+
+\subsubsection{La bibliographie}\label{bibliographie}
+\index{bibliographie}%
+La bibliographie d'un document est réalisée en deux étapes :
+tout d'abord la sélection et le tri des entrées bibliographiques (en général
+reprises d'une base bibliographique BiB\TeX{} ou BiB\LaTeX) avec le programme
+\index{bibtex8@\texttt{bibtex8}}%
+\index{BibLaTeX@\texttt{Bib\LaTeX}}%
+\texttt{bibtex}
+\footnote{Utiliser de préférence \texttt{bibtex8} pour le traitement
+correct des caractères accentués. Mais avec XeLaTex, c'est une
+ combinaison Bib\LaTeX{}
+avec \texttt{biber} qui convient le mieux} et deuxièmement sa composition
+par \LaTeX. Dans la première étape le choix du style est important.
+Suivant le cas il est fait appel à certaines commandes \LaTeX\
+introduisant des libellés spécifiques (comme \verb|\editorname|
+pour << éditeur >>).
+Des extensions \LaTeX\ traitant de la bibliographie peuvent être
+utilisées dans la deuxième partie. \eFrench\ essaye de s'adapter
+à ces extensions%
+\footnote{\eFrench\ est spécialement adapté pour travailler
+avec \emph{jurabib} et \emph{fracm}. Dès la version 6,1
+\emph{biblatex} est aussi fonctionnel}%
+\index{extension!jurabib@\emph{jurabib}}%
+\index{extension!fracm@\emph{fracm}}%
+\index{BibLaTeX@\texttt{Bib\LaTeX}}%
+. Par défaut, il traduit les libellés utilisés
+le plus fréquemment, comme nous allons le voir dans ce qui suit.
+
+\subsubsection{\texttt{\backslash frenchtranslation}}
+\index{frenchtranslation@\texttt{\backslash frenchtranslation}}%
+Cette partie de l'extension {\eFrench} traduit en français tous les titres
+ou libellés utilisés en \LaTeX\ et dans la bibliographie, imprime les
+\index{bibliography}%
+ dates à la française, numérote correctement
+les différentes parties (\verb|\part|) d'un
+\index{resume@\texttt{\backslash resume}}%
+\index{endresume@\texttt{\backslash endresume}}%
+\index{glossaire1@\texttt{\backslash glossaire}}%
+\index{glossaire2@\texttt{\backslash glossaires}}%
+\index{annexe1@\texttt{\backslash annexe}}\index{annexe2@\texttt{\backslash annexes}}%
+\index{see1@\texttt{\backslash see}}\index{see2@\texttt{\backslash seealso}}%
+\index{sommaire2@\texttt{\backslash sommaire[n]}}%
+\index{printindex@\texttt{\backslash printindex}}%
+\index{textcurrency@\texttt{\backslash textcurrency}}%
+\index{texteuro@\texttt{\backslash texteuro}}%
+volume,
+modifie la commande \verb|\textcurrency| pour être équivallente
+à \verb|\texteuro| lorsque cette dernière est définie
+ et introduit les commandes (voir §~\ref{commandes}
+page \pageref{commandes}) :
+\begin{verbatim}
+\annexe \annexes \resume \endresume
+\glossaire \glossaires \see \seealso
+\sommaire[n] \printindex
+\motsclef \endmotsclef \keywords \endkeywords
+\end{verbatim}
+\index{motsclef@\texttt{\backslash motsclef}}%
+\index{endmotsclef@\texttt{\backslash endmotsclef}}%
+\index{keywords@\texttt{\backslash keywords}}%
+\index{endkeywords@\texttt{\backslash endkeywords}}%
+Pour modifier les libellés reportez-vous au paragraphe~\ref{styleperso}
+et tout spécialement page~\pageref{modiflibelle}.
+
+\subsubsection{\texttt{\backslash frenchmacros}}\label{frenchmacros}
+\index{frenchmacros@\texttt{\backslash frenchmacros}}%
+\index{ier@\texttt{\backslash ier}}%
+\index{ieme@\texttt{\backslash ieme}}%
+\index{at@\texttt{\backslash at}}%
+Cette partie est consacrée aux ordres tels que \verb|\ier|,
+\verb|\ieme|, \verb|\at|, \etc. décrits au paragraphe \ref{commandes}.
+\index{abbreviations@\texttt{\backslash abbreviations}}%
+\index{abreviations@abréviations!\texttt{\dittomark}...\texttt{\dittomark}}%
+On y trouve aussi une sous-option très spéciale : \\
+\verb|\abbreviations| qui permet de consulter le fichier des
+\index{fichier!des abréviations}%
+\index{fichier!frabbrev@\texttt{frabbrev.tex}}%
+abréviations fourni (\vers|frab|\-\vers|brev.tex| par défaut)
+ à {\em chaque} demande explicite
+d'abréviation de mot, de la forme : \verb|"Mot_à_abréger"| ;
+ s'il figure dans le fichier il est alors abrégé
+correctement sinon, un message est émis et le mot est composé
+comme il a été saisi (avec les guillemets) ; ainsi,
+\verb|"premier"| imprime "premier" et \verb|"Numéro"12| donne%
+\index{Numero@\texttt{\backslash Numero}}%
+\index{Numero@\texttt{\dittomark Numero\dittomark}}%
+\index{premier@\texttt{\dittomark premier\dittomark}}%
+\footnote{Pour imprimer \Numero{} il semble plus approprié d'utiliser
+directement
+la commande \texttt{\backslash Numero} (voir §~\ref{numero}).}
+"Numéro"12 mais \verb|"GUTenberg"| s'imprimera "GUTenberg" (car
+\index{abreviations@abréviations!GUTenberg}%
+\index{GUTenberg!abréviation de}%
+nous n'acceptons pas d'abréviation de GUTenberg).
+
+On notera que les majucules et minuscules sont importantes
+dans le \vers|Mot_|\-\vers|à_|\-\vers|abréger|
+car la comparaison se fait à l'identique
+dans le fichier des abréviations. Il faudra donc éviter d'utiliser
+des abréviations dans un argument de commande
+qui peut faire des transformations sur les
+lettres.
+
+Cette mécanique d'abréviations étant assez primitive au niveau informatique
+(relecture du fichier à chaque demande d'abréviation), le fichier des
+abréviations doit rester de petite taille.
+C'est la raison pour laquelle nous
+n'y avons mis qu'un jeu assez restreint d'abréviations.
+Ce fichier n'est pas
+modifiable mais par contre vous pouvez préciser votre propre fichier
+\gdef\iX{\texttt{\backslash abbreviations[fichier]}}%
+\index{abreviations@abréviations!abreviations2@\iX}%
+\index{abreviations@abréviations!\texttt{\backslash abbreviations}}%
+\index{noabreviations@\texttt{\backslash noabbreviations}}%
+d'abréviations par la commande : \verb|\abbreviations[fichier]|.
+\paragraph*{Abbréviations pour sources en UTF8} Le fichier d'abbréviations \MAJ
+ouvert par défaut (\vers|frab|\-\vers|brev.tex|) est codé en latin9.
+\index{codage!utf8@\texttt{utf8}}
+Maintenant existe aussi le même en utf8 nommé \vers|frab|\-\vers|brev-u8.tex|.
+Libre à chacun de changer les noms des fichiers d’abréviation ou d'appeler
+par la commande\\ \verb|\abbreviations[fichier]|
+celui qui convient au code source, par exemple\\
+ \verb|\abbreviations[frabbrev-u8.tex]|.
+\endMAJ
+
+Rappelons qu'en \TeX{} le caractère \verb|"| est
+normalement le début d'une valeur
+hexadécimale. L'option \verb|\abbreviations| interdit donc temporairement
+cette forme de codage (voir §~\ref{compatibilite}).\\
+\verb|\noabbreviations| est l'option par défaut.
+
+\medskip
+\noindent
+Il existe aussi :
+\begin{itemize}\label{moretolerance}
+\item \verb|\moretolerance| qui peut être utilisé, en dernier recours,
+\index{moretolerance@\texttt{\backslash moretolerance}}%
+lorsque les césures ne peuvent se faire correctement malgré tous
+les artifices déjà employés (rajouter ou retirer
+des mots,
+forcer des coupures avec \verb|\allow|\-\verb|hyphens|,
+\index{allowhyphens@\texttt{\backslash allowhyphens}}%
+imposer des coupures avec
+\verb|\-|, \etc.). À chaque fois que l'ordre
+\index{\texttt{\backslash-}}%
+\verb|\moretolerance| est fourni la {\em tolerance} de \TeX{} est
+doublée. La portée de cet ordre doit donc être limitée par des
+accolades \{\ \} ou tout autre moyen sûr. L'aspect négatif de cet
+ordre concerne l'extension de l'espace inter-mots qui ne manquera
+pas de se produire car \TeX\ aura alors tendance à rajouter de la
+\emph{glue} plutôt que de produire des coupures de mots en bout
+de ligne, les deux étant toutefois possibles :
+\begin{figurette}
+\Large
+\center
+\fbox{%
+\parbox{0.5\linewidth}{%
+\moretolerance\moretolerance\moretolerance
+Ici j'ai fourni trois fois cette commande et vous devriez
+vous rendre compte de l'effet de relâchement produit
+(inégalité, d'une ligne à l'autre, des espaces entre les mots).
+ }}%
+\end{figurette}
+
+\item \texttt{\backslash}\verb|!| est un ordre \TeX{} qui
+a été adapté pour
+\index{\texttt{\backslash\exclam}}%
+\index{espace!fine@fine négative (\texttt{\backslash\exclam})}%
+pouvoir être aussi utilisé dans le texte courant. Il permet de retirer
+une espace fine entre deux mots et peut ainsi faciliter la mise en page
+lorsque les coupures s'avèrent délicates. Rappelons que l'ordre
+\texttt{\backslash,} permet à l'inverse de rajouter une espace fine.
+\index{\texttt{\backslash,}}%
+\index{espace!fine@ fine (\texttt{\backslash,})}%
+\end{itemize}
+
+\subsubsection{\texttt{\backslash frenchwarnings}}
+Cette dernière partie est consacrée aux messages d'avertissement que peut
+émettre l'extension {\eFrench}. On y trouve les sous-options suivantes :
+
+\begin{itemize}
+\item \verb|\frenchtrivsepwarnings| indique qu'il faut émettre les messages
+ d'attention relatifs aux espacements verticaux non respectés. En effet,
+ l'extension {\eFrench} impose son propre espacement vertical
+\index{espace!vertical}%
+\index{frenchtrivsepwarnings@\texttt{\backslash frenchtrivsepwarnings}}%
+ (voir \verb|\french|\-\verb|trivsep| page~\pageref{frenchtrivsep}) dans
+ les principaux environnements \LaTeX{}, ce qui empêche
+ --~en théorie~-- l'utilisateur
+ de les modifier ; ce dernier est donc averti à chaque fois
+ qu'il tente d'utiliser un tel environnement modifié ;
+ cela est l'option par défaut.
+ Vous pouvez toujours choisir vos propres espacements verticaux
+ mais vous devez le faire avec l'ordre \verb|\frtrivseplengths|
+\index{frtrivseplengths@\texttt{\backslash frtrivseplengths}}%
+ décrit page~\pageref{frenchtrivsep}. Vous pouvez aussi revenir à
+ l'espacement standard en codant \verb|\nofrench|\-\verb|trivsep|.
+ Si vous souhaitez plutôt ne plus avoir de messages de ce genre
+ il vous suffit de coder l'option inverse ci-après.
+
+\item \verb|\nofrenchtrivsepwarnings| dispense, en effet,
+ {\eFrench}
+\label{ftsw}%
+\index{nofrenchtrivsepwarnings@\texttt{\backslash nofrenchtrivsepwarnings}}%
+ d'émettre des messages lorsque l'utilisateur
+ (ou une extension ou une classe) tente de modifier
+ les valeurs d'espacement vertical choisies par \eFrench.
+
+\item \verb|\nofrenchwarnings| supprime tous les messages émis par
+\index{nofrenchwarnings@\texttt{\backslash nofrenchwarnings}}%
+ {\eFrench}. Cela ne peut prendre effet qu'après le
+ chargement complet de l'extension {\eFrench}. Cette option
+ est très déconseillée.
+\end{itemize}
+
+\subsection{Utilisation multilingue}\label{multilingue}
+\index{utilisation!multilingue}\index{langues}\index{langages}%
+\seealso{langages}{langues}
+Avant cette version \nombre{6,0} chaque {\em langue} ou {\em langage}
+ indiqué dans le fichier
+\verb|language.dat| l'extension {\eFrench} définissait une commande du
+même nom.
+Maintenant, seuls l'anglais (\emph{english})et le français (\emph{french})
+peuvent être choisis et avec l'extension \emph{mlp}
+\index{extension!mlp@\emph{mlp}}%
+\index{mlp@\emph{mlp}}%
+de {\eFrench} aussi l'allemand ((\emph{german} et \emph{ngerman}).
+Cette limitation est due au fait que seules ces trois extensions existent aussi en version
+non basée sur \emph{babel}.
+L'option \emph{english} consiste à désactiver les autres extensions de langage.
+Elle est donc toujours présente.
+
+Voici un exemple pour montrer comment combiner français et allemand (nouvelle mouture) en utilisant \emph{mlp} :
+\begin{verbatim}
+ \documentclass[ngerman,french,a4paper,11pt]{book}
+ \usepackage[utf8]{inputenc}
+ \usepackage[T1]{fontenc}
+ ...
+ \usepackage{mlp}
+\end{verbatim}
+Dans cet exemple, pour changer de langue il
+suffit de demander \verb|\|{\em ngerman} pour passer à l'allemand, \verb|\|{\em english} à l'anglais
+ou \verb|\|{\em french} au français.
+
+Il y a aussi cette possibilité, équivalente à la précédente :
+\begin{verbatim}
+ \documentclass[a4paper,11pt]{book}
+ ...
+ \usepackage[ngerman,french,]{mlp}
+\end{verbatim}
+
+
+ Une commande \verb|\beginlanguage| est utilisable lorsqu'il est
+\index{beginlanguage@\texttt{\backslash beginlanguage}}%
+nécessaire de reprendre la composition avec la langue
+qui a été utilisé au début du document
+("cad" juste après le
+\index{begin@\texttt{\backslash begin}!\texttt{\backslash begin}\{\texttt{document}\}}%
+\verb|\begin{docu|\-\verb|ment}|) donc normalement la dernière option
+de langue fournie dans la commande \verb|\usepackage|.
+\index{usepackage@\texttt{\backslash usepackage}}%
+
+La commande \verb|\languagename| doit toujours contenir le nom du langage
+actif.
+\index{languagename@\texttt{\backslash languagename}}%
+
+Parfois un document doit pouvoir << réagir >> dynamiquement à la langue
+utilisée pour le composer. Une structure de programmation pour tester
+l'activation de l'extension {\eFrench} est disponible :\\
+\verb| \ifFrench ... \else ... \fi|
+\bigskip
+\subsection{Création de style personnel ou maison}
+\label{styleperso}
+\index{style!personnel ou maison}%
+\seealso{style}{extensions}
+Un créateur de style \LaTeX{} (normalement un maquettiste) est souvent une
+personne qui modifie un style existant (une extension ou une classe
+en général) et l'appelle autrement ; cela
+n'est possible qu'avec les styles ayant une licence de type logiciel libre.
+C'est le cas de l'extension {\eFrench} cf. {\em Copyright}
+(fichier
+\linkandfootnote{copyright}{\texttt{Copyright.pdf}}
+{http://efrench.org/\#french}) ;
+\index{copyright}\index{\protect\copyright}%
+\index{fichier!Copyright.pdf@\texttt{Copyright.pdf}}%
+\index{fichier!copyrigh.tex@\texttt{copyrigh.tex}}%
+ il est de plus est entièrement paramétrable et toutes
+les commandes citées dans cette notice sont utilisables
+dans d'autres styles ou extensions
+pourvu que l'extension {\eFrench} ait été
+préalablement chargée en extension \LaTeX{} ou
+\index{input1@\texttt{\backslash input}}%
+par la commande \verb|\input|.
+
+Quel que soit le moyen utilisé pour charger l'extension {\eFrench},
+les options ou commandes sont à préciser à l'aide de l'ordre
+\label{usersf}%
+\vers|\usersfrenchoptions|
+qui sera défini avant
+\index{begin@\texttt{\backslash begin}!\texttt{\backslash begin}\{\texttt{document}\}}%
+le \vers|\begin|\-\vers|{docu|\-\vers|ment}|. Voici un exemple --~utilisé pour
+composer ce document~-- dans lequel j'ai
+%\index{babel@\emph{babel}!users@\texttt{\backslash usersfrenchoptions}}%
+%\index{usersfrenchoptions@\texttt{\backslash usersfrenchoptions}!{avec \texttt{babel}}}%
+\index{usersfrenchoptions@\texttt{\backslash usersfrenchoptions}}%
+choisi d'appliquer \vers|\overfull|\-\vers|hbox|\-\verb|mark|
+et \vers|\disallowuchyph| à tout mon document :
+
+\medskip
+\begin{versatim}
+\usersfrenchoptions{% Voici les options que j'ai choisies.
+ \disallowuchyph % pas de coupure cap.
+ \overfullhboxmark % pas de carré noir.
+ }%
+\end{versatim}
+\index{begin@\texttt{\backslash begin}!\texttt{\backslash begin}\{\texttt{document}\}}%
+
+\medskip
+\noindent
+Peu importent alors les changements de langues réalisés tout au long
+du document ; ces options personnelles seront imposées à chaque fois
+qu'il sera fait appel à \vers|\french|.
+Cette commande peut être appelée plusieurs fois, les paramètres
+sont alors ajoutés aux précédents.
+
+Les libellés des titres usuels sont redéfinis
+\index{libellés}\index{titres usuels}%
+dans l'extension {\eFrench}
+et il faut les utiliser dans les styles ou extensions que vous créez ;
+voici leur définition à la \TeX{} :
+{\smaller
+\begin{verbatim}
+ \def\pagename{page}
+ \def\refname{Références}
+ \def\abstractname{Résumé}
+ \def\bibname{Bibliographie}
+ \def\contentsname{Table des matières}
+ \def\listfigurename{Table des figures}
+ \def\listtablename{Liste des tableaux}
+ \def\indexname{Index}
+ \def\seename{\emph{voir}}
+ \def\seealsoname{{\em voir aussi}}
+ \def\figurename{\textsc{Fig.}}
+ \def\tablename{\textsc{Tab.}}
+ \def\sommairename{Sommaire}
+ \def\partname{\ignorespaces\Ordinale{part}\ partie [...]}
+ \def\glossaryname{Glossaire}
+ \def\kwname{\textbf{Mots-clé}}
+ \def\draftname{- \noexpand\311preuve -}% imprimer épreuve (PS)
+ \def\prefacename{Préface}%
+ \def\headtoname{}% {à\space} est inusité.
+ \def\proofname{Démonstration}%
+ \def\ccname{c.c. }
+ \def\enclname{P.j. }
+ \def\PSname{P.-S. :}
+ \def\Objectname{Objet :}
+ \def\YourRefname{v/réf. :}
+ \def\OurRefname{n/réf. :}
+ \def\emailname{m.él. :}
+ \def\chaptername{Chapitre}
+ \def\appendixname{Annexe}
+ \def\slidename{Transparent}
+ \def\listslidename{Liste des transparents}
+ \def\ALG@name{algorithme}%
+ \def\listalgorithmname{Liste des \ALG@name s}%
+\end{verbatim}
+}
+
+D'autres libellés peuvent être traduits lorsque {\eFrench} détecte
+la présence de certaines extensions (signaler à l'auteur de l'extension
+et à moi-même les extensions qui ne sont pas traduites).
+Vous pouvez, bien sûr, modifier ces libellés mais
+il faut cependant ne pas
+oublier de respecter la typographie française usuelle ; toute modification
+doit être faite avec prudence. Si vous souhaitez, par exemple,
+modifier le libellé << \textsc{Fig.} >> en << figurine >> il suffit
+de coder :
+\label{modiflibelle}
+\begin{verbatim}
+\fraddto\captionsfrench{\def\figurename{figurine}}
+\end{verbatim}
+\index{fraddto@\texttt{\backslash fraddto}}%
+\index{captionsfrench@\texttt{\backslash captionsfrench}}
+
+D'autres commandes sont définies dans le cadre de la bibliographie, il
+\index{bibliographie}%
+s'agit de :
+\begin{verbatim}
+ \def\andname{et}
+ \def\editorname{éditeur}
+ \def\editornames{éditeurs}
+ \def\volumename{volume}
+ \def\Volumename{Volume}
+ \def\ofname{de}
+ \def\numbername{numéro}
+ \def\Numbername{Numéro}
+ \def\inname{dans}
+ \def\Inname{Dans}
+ \def\editionname{édition}
+ \def\pagesname{pages}
+ \def\technicalreportname{Rapport Technique}
+ \def\revisionname{Révision}
+ \def\masterthesisname{DEA}
+ \def\phdthesisname{Thèse de doctorat}
+ \def\janname{janvier}
+ \def\febname{février}
+ \def\marname{mars}
+ \def\aprname{avril}
+ \def\mayname{mai}
+ \def\junname{juin}
+ \def\julname{juillet}
+ \def\augname{août}
+ \def\sepname{septembre}
+ \def\octname{octobre}
+ \def\novname{novembre}
+ \def\decname{décembre}
+\end{verbatim}
+
+Si vous souhaitez les modifier ou en rajouter, vous pouvez
+procéder de la même manière :
+\begin{verbatim}
+\fraddto\bibsfrench{\def\phdthesisname{Thèse PHD}}
+\end{verbatim}
+\index{fraddto@\texttt{\backslash fraddto}}%
+\index{bibsfrench@\texttt{\backslash bibsfrench}}
+
+
+Pour toute autre
+personnalisation de l'extension {\eFrench} on se reportera
+à l'article \cite{et98} publié dans les Cahiers GUTenberg et dont
+on trouvera une version composée (%
+\linkandfootnote{artET98}{\texttt{artET98.pdf}}%
+{http://svn.tuxfamily.org/viewvc.cgi/efrench_efrenchsources/trunk/doc/artET98.pdf?revision=1&view=co}%
+) dans la distribution. Ce document est d'époque ; mais bien des éléments sont encore valables.
+
+\subsection{Création d'une nouvelle classe \LaTeX}
+
+ Pour les gourous (... uniquement !) la création d'une classe \LaTeX{}
+est chose aisée. Si vous souhaitez utiliser {\eFrench} n'oubliez pas
+que certaines commandes (macro-instructions)
+ peuvent être redéfinies par l'extension
+{\eFrench} et que la plupart de ces redéfinitions sont effectuées au
+\index{begin@\texttt{\backslash begin}!\texttt{\backslash begin}\{\texttt{document}\}}%
+\verb|\begin{document}|.
+
+
+Vous pouvez utiliser intentionnellement toutes les commandes de {\eFrench}
+qui sont décrites dans ce document. Toutes les autres macro-instructions
+comportant un << \texttt{@} >> sont susceptibles d'être
+modifiées ultérieurement, à l'exception de :
+
+\verb|\f@lastpage| vous permet de définir une macro de ce nom pour
+\index{end@\texttt{\backslash end}!\texttt{\backslash end}\{\texttt{document}\}}%
+réaliser une fonction spécifique en fin de dernière page du document
+et avant que {\eFrench} termine pour sa part le document.
+\index{falastpage@\texttt{\backslash f\at lastpage}}%
+
+Si vous souhaitez que {\eFrench} n'intervienne pas en fin de document,
+il suffit de coder :\\\vers|\let\f@last|\-\vers|page\nofrenchlayout|
+
+\section{Utilisation réduite \\<< Poor Man French Style >>}
+\label{reduit}\index{utilisation!réduite}%
+\index{utilisation!appauvrie}%
+Une version {\em du pauvre}\/ (<< Poor Man French Style >>)
+est disponible à travers l'extension
+\emph{pmfrench}. Elle peut-être chargée en mémoire
+de façon usuelle,
+par exemple :
+\index{usepackage@\texttt{\backslash usepackage}}%
+\begin{verbatim}
+ \documentclass[a4paper,11pt]{book}
+ \usepackage{pmfrench}
+\end{verbatim}
+\index{pmfrench@\emph{pmfrench}}%
+\index{extension!pmfrench@\emph{pmfrench}}%
+
+
+En faisant appel au << Poor Man French Style >>
+on peut utiliser un {\em moteur}
+\index{moteur!tex@\TeX}%
+\TeX{} non francisé "cad" ne contenant pas les motifs
+de césure français ni
+la liste des exceptions, \etc. Le fichier \vers|language.dat| n'est alors
+ \index{fichier!d'exceptions}%
+d'aucune utilité. La mémoire nécessaire à l'exécution
+est plus réduite.
+Plusieurs autres dispositifs sont inopérants, en voici
+un résumé :
+\begin{itemize}
+\item les lettrines (\verb|\lettrine| et \verb|\flettrine|) ;
+\index{lettrine@\texttt{\backslash lettrine}}%
+\index{flettrine@\texttt{\backslash flettrine}}%
+\item le mécanisme d'abréviation (\verb|"..."| et
+\verb|\abbreviations|) ;
+\index{abreviations@abréviations}%
+\index{abbreviations@\texttt{\backslash abbreviations}}%
+\item les guillemets de deuxième niveau avec
+\verb|\noeveryeparguillemets| ;
+\item le chargement du fichier des exceptions françaises dont
+ le nom a été précisé dans le fichier \vers|language.dat|.
+\index{fichier!language.dat@\texttt{language.dat}}%
+\end{itemize}
+Si vous êtes curieux, vous vous apercevrez que
+\vers|pmfrench.sty| est en fait
+l'équivalent de \vers|french.sty| plus l'ordre \vers|\pmfrench|.
+Lorsque cet ordre est placé dans le {\em préambule} "cad" avant le
+\vers|\begin{|\-\vers|document}|, alors l'extension {\eFrench} s'exécutera
+en mode réduit. Cela peut être utile, comme nous l'avons vu, sur
+des sites n'ayant pas encore réalisé une installation complète
+des fichiers de l'extension {\eFrench}.
+
+\section{Messages}
+
+Certains des messages suivants sont en anglais car ce sont en général
+des erreurs qui peuvent survenir avant que la francisation soit
+suffisamment mise en place.
+
+\begin{itemize}
+\let\labelitemi\relax
+
+\item \texttt{-1- la macro xxx existe déjà.} \\
+Signifie que vous vouliez, à l'aide de \verb|\frenchalias|,
+ utiliser une commande sous un nouveau nom. Or ce nom est déjà
+utilisé. La composition du document ne peut aller plus loin
+en besogne.
+\index{frenchalias@\texttt{\backslash frenchalias}}%
+
+\item \texttt{-2- file ... not found.} \\
+Le fichier dont le nom est indiqué est indispensable à la bonne
+marche de {\eFrench}. Vérifiez si les chemins d'accès à ce
+fichier sont en service.
+
+\item \texttt{\phantom{-2-} fichier ... non trouvé.} \\
+Dans sa version française, ce message ne témoigne
+ pas forcément d'une erreur ;
+à vous de voir si le fichier en question est vital, ou non,
+pour la composition du document.
+
+\item \texttt{-3- l'option (pm)french n'est pas active ici !} \\
+Vous avez fait appel à un ordre spécifique de l'extension
+{\eFrench} mais vous n'êtes pas dans
+un environnement où la langue \texttt{\backslash french} est active.
+\index{langues!\texttt{\backslash french}}%
+\index{french@\texttt{\backslash french}}%
+
+Peut-être, êtes-vous
+en anglais ou en \texttt{nonfrench} ?
+\index{begin@\texttt{\backslash begin}!\texttt{\backslash begin}\{\texttt{nonfrench}\}}%
+\index{end@\texttt{\backslash end}!\texttt{\backslash end}\{\texttt{nonfrench}\}}%
+\index{nonfrench@\texttt{\backslash nonfrench}}%
+\index{endnonfrench@\texttt{\backslash endnonfrench}}%
+
+\item \texttt{-4- entering now `\relax`Poor-Man-French-Style'\relax' way.} \\
+C'est l'extension \emph{pmfrench}
+\index{pmfrench@\emph{pmfrench}}%
+(le {\eFrench} du pauvre) qui est activée, soit automatiquement par suite
+d'anomalies soit à votre demande.
+
+\item \texttt{-5- définition de lettrine incorrecte.} \\
+Vous avez probablement
+dû employer des apostrophes ou des guillemets dans le texte de la lettrine.
+Ceux-ci doivent être indiqués différemment, voir la syntaxe des ordres
+de lettrines.
+
+\item \texttt{-6- lettrine à revoir.} \\
+Les choix que vous avez imposés pour la
+mise en page de cette lettrine conduisent à un mauvais résultat comme, par
+exemple, une lettrine ne portant que sur une seule ligne. Il est
+souhaitable de revoir le paramétrage.
+
+\item\texttt{-7- lettrine réduite à 1 seule lettre.} \\
+ Une lettrine se
+compose au minimum d'une lettre mise en valeur et d'un texte mis
+en petites capitales. Vous avez dû omettre ce dernier texte.
+
+\item\texttt{-8a- \backslash footnotetext}\{{\tt...}\}{\tt{} perdu.}\\
+ \texttt{-8b- Coder event. }\verb|\protect\footnote.|\\
+Signifie en général que vous avez utilisé une \verb|\footnote| dans un
+\verb|\caption| de tableau ou dans un \verb|\mbox|.
+L'extension {\eFrench} ne pouvant
+mettre correctement le texte de la note en bas de page (défaut actuel
+de \LaTeX{}), vous devez, vous-même, insérer la commande
+\verb|\footnotetext{...}| après le tableau ou le \verb|\mbox|.
+Cette erreur peut être fatale dans les titres de section
+si vous n'avez pas codé \verb|\protect| devant \verb|\footnote|.
+\index{protect@\texttt{\backslash protect}}%
+\index{mbox@\texttt{\backslash mbox}}%
+\index{caption@\texttt{\backslash caption}}%
+\index{footnote@\texttt{\backslash footnote}}%
+\index{footnotetext@\texttt{\backslash footnotetext}}%
+
+\item\texttt{-9- Corrupted/absent language.dat file.}\\
+L'extension {\eFrench} vérifie à chaque exécution que le fichier
+de configuration
+\texttt{language.dat} qui lui est accessible est bien compatible
+avec celui utilisé à la création du format. Ce fichier doit donc être
+présent et accessible. L'ordre des langues ne peut être changé mais
+d'autres langues peuvent être rajoutées pour des tests. Les motifs de
+césure ne sont pris en compte qu'à la création du format.
+
+\item\texttt{-10- french package not loaded.}\\
+Témoigne d'une utilisation du fichier \verb|frpatch.sty|
+en dehors de l'extension {\eFrench}.
+\index{fichier!frpatch.sty@\texttt{frpatch.sty}}%
+
+\item\texttt{-11- application du \string<\relax\string< %
+ frpatch \string>\relax\string> yy/mm/dd.} \\
+Signifie que le patch en question est appliqué à l'extension
+{\eFrench}.
+
+\item\texttt{-12- frpatch.sty est périmé, fichier à détruire.} \\
+Signifie que les corrections ont maintenant été apportées à
+la version de l'extension {\eFrench} que vous utilisez, aussi
+il faut effacer définitivement ce fichier de patch de votre système.
+
+\item\texttt{-13- le caractère `\relax`...'\relax' est déjà actif,}\\
+ \texttt{\phantom{-13-} la double ponctuation est alors désactivée.} \\
+Vous utilisez
+très probablement
+un style ou une extension qui fait déjà usage de ce ou ces
+caractères. Pour éviter toute anomalie de fonctionnement, l'extension
+{\eFrench} désactive alors l'effet de la double ponctuation
+(\verb|! : ; ?|) pour tout votre document. Si ce n'est pas ce que vous
+voulez, essayez de charger l'extension en question, soit après le
+chargement de l'extension {\eFrench} soit dans un environnement
+\texttt{nonfrench}.
+
+\item \texttt{-14- fermeture de guillemets non ouverts.} \\
+Vous êtes à la fin
+d'une citation mais vous souhaitez fermer
+les guillemets alors qu'aucun guillemet ouvrant n'a été employé
+à ce niveau. Vérifiez l'imbrication de vos environnements.
+Avec une lettrine, l'environnement guillemets se termine
+obligatoirement à la fin du paragraphe (même sans guillemets fermants).
+Donc, si la citation doit se poursuivre au paragraphe suivant il est
+nécessaire d'ouvrir à nouveau les guillemets.
+
+\item \texttt{-15- le langage \frenchname\space porte le %
+ numéro ...} \\
+L'extension {\eFrench} vous indique le
+numéro interne employé pour le langage \texttt{french}. Ceci est
+exceptionnel car cela veut dire qu'aucun langage \texttt{french}
+n'avait été défini au niveau de votre {\em format\/}
+mais qu'un numéro
+a pu être attribué grâce au fichier \texttt{language.dat}.
+\index{fichier!language.dat@\texttt{language.dat}}%
+\index{language.dat@\texttt{language.dat}}%
+
+\item \texttt{-16- the English language\space is numbered ...} \\
+Même explication
+que pour le message précédent mais portant ici sur l'anglais.
+
+\item \texttt{-17- \backslash wrongtypedspaces est %
+ inopérant dans ce contexte.}\\
+Cet ordre ne peut être utilisé seul à ce niveau.
+Il doit être précédé ici
+de l'ordre \vers|\letpunctua|\-\vers|tion|\-\vers|activefor|
+juste avant de quitter
+le français pour une autre langue.
+\index{wrongtypedspaces@\texttt{\backslash wrongtypedspaces}}%
+\index{letpunctuationactive@\texttt{\backslash letpunctuationactive}}%
+
+\item \texttt{-18- (pm)french.sty force l'option \backslash nofrenchguillemets \\
+en mode maths avec AmSLaTeX.}\\
+En effet, les chevrons ou guillemets sont employés à un autre usage
+en mode mathématique avec AmS\LaTeX{}.
+\index{nofrenchguillemets@\texttt{\backslash nofrenchguillemets}}%
+\index{guillemets!avec AmS\LaTeX{}}%
+\index{AmSLaTeX@AmS\LaTeX{}}%
+
+\item \texttt{-19- utilisation du langage interne numéro...} \\
+Votre
+document va être composé avec l'extension \emph{pmfrench}
+(le {\eFrench} du pauvre). Aucun
+langage \texttt{french} n'a été trouvé dans le format, aucun fichier
+de configuration
+\texttt{language.dat} n'a été trouvé, dans ces conditions l'extension
+{\eFrench} vous indique le numéro de langue interne qu'il va
+utiliser. À vous de voir si ce numéro est acceptable pour la mise
+en page de votre texte français.
+
+\item \texttt{-20- WARNING: the french language is undefined in your \\
+\phantom{-20-} format.} \\
+\texttt{\phantom{-20-} the french language is undefined (ERROR!)} \\
+Vous ne pouvez utiliser l'extension {\eFrench} sans que votre moteur \TeX{}
+\index{moteur!tex@\TeX}%
+soit un minimum francisé, c.-à-d. dispose par exemple de
+motifs de césure adaptés. Sinon, vous pouvez toujours faire le choix
+de l'extension \emph{pmfrench} (le {\eFrench} du pauvre).
+Le premier message n'est qu'un avertissement
+si le fichier \texttt{language.dat} définit le français ; si ce n'est
+pas le cas le deuxième message est émis.
+
+\item \texttt{-21-\backslash}{\em xxx}\texttt{TeXmods n'est pas défini.} \\
+Vous avez demandé à
+travailler avec la langue {\em xxx} mais celle-ci est inconnue
+ou, tout au moins, la commande
+\texttt{\backslash}{\em xxx}\texttt{TeXmods} n'est pas définie.
+
+\item \texttt{-22- abréviation de `\relax`...'\relax' non trouvée.} \\
+Le fichier d'abréviation ne contient pas l'abréviation citée.
+Vérifiez qu'il
+ne s'agit pas d'une incompatibilité de codage (7-bits {\em vs} 8-bits)
+entre le nom donné et le fichier des abréviations.
+
+\item \texttt{-23- Extension : style (pm)french V...-- date -- (B.Gaulle).}\\
+Ceci est la bannière de l'extension {\eFrench}.
+ Pensez à vous mettre à jour régulièrement.
+
+\item \texttt{-24- (pm)french.sty utilise dans ce document le codage}\\
+ \texttt{\phantom{-24-} de fonte (O)T1.}\\
+Ceci est un message d'information permettant de voir quel codage de fonte
+a été détecté par {\eFrench} et sera utilisé pour tout le document.
+Vous avez toujours le loisir de changer de codage {\em avant}
+le chargement initial de {\eFrench} de façon qu'il détecte celui qui
+convient à l'ensemble des parties françaises du document.
+\index{codage!utilisé}%
+\index{codage!changement de}%
+\index{OT1@\texttt{OT1} (codage)}%
+\index{T1@\texttt{T1} (codage)}%
+
+\item \texttt{-25- (pm)french.sty affiche ici ses messages en 7-bits}\\
+ \texttt{\phantom{-25-} }\verb|(\`|\texttt{a la TeX).}\\
+ Le format \LaTeX{} qui a été créé ne supporte pas le 8-bits en
+ sortie. Cela peut effectivement venir du moteur \TeX\ car tous
+\index{moteur!tex@\TeX}%
+ ne disposent pas de cette facilité. Si ce n'est pas le cas,
+ probablement que le format a été créé sans utiliser
+ le configurateur de clavier \texttt{kbconfig}
+%%%%%%%%%%%%%%%%%%%%%
+\ifnoDOCinstall\else%
+%%%%%%%%%%%%%%%%%%%%%
+(cf. \ref{kbconfig} page \pageref{kbconfig})
+\fi%
+.\\
+ Dans d'autres cas, les messages ne peuvent même pas être
+ émis << à la \TeX\ >> ; les ordres d'accentuation
+ sont alors totalement éliminés.\\
+ Si vous souhaitez
+ toutefois afficher les messages en 8-bits, forcez l'option
+ \verb|\usualmessages|.
+\index{usualmessages@\texttt{\backslash usualmessages}}%
+
+\texttt{-25- (pm)french.sty affiche ici ses messages en 8-bits.}\\
+ Ceci est l'option normale si le moteur \TeX{} est capable de produire
+\index{moteur!tex@\TeX}%
+ du 8-bits en sortie, à la place des caractères héxadécimaux sous
+ la forme \verb|^^xx|. Cette option peut avoir été forcée par la
+ commande \verb|\usualmessages|.
+
+\item\texttt{-26a- Erreur détectée dans (pm)french.sty.}\\
+ \texttt{-26b- (voir p.ex. le fichier language.dat)}\\
+Ceci ... ne devrait jamais arriver. Dans ce cas, après les vérifications
+d'usage concernant votre document et ses macros, il faut essayer
+de reproduire le problème sur un exemple plus réduit et me l'envoyer.
+
+\item\texttt{-27- (pm)french.sty language x (y) was initially}\\
+ \texttt{\phantom{-27-} (at initex) numbered z (ERROR!)}\\
+Signifie que l'ordre des langues a été probablement modifié
+dans le fichier \verb|language.dat| ou qu'il ne s'agit pas
+du bon fichier.
+\index{fichier!language.dat@\texttt{language.dat}}%
+
+\item \texttt{-28- ATTENTION : TeX Version 2 ne permet pas d'utiliser des \\
+ \phantom{-28-} caractères accentués 8-bits.} \\
+Il est grandement
+temps de passer a \TeX{} V3 ! (ce message est émis par \texttt{kbconfig}).
+
+\item \texttt{-29a- ***Warning***: TeX engine in use along with CM fonts}\\
+ \texttt{-29b- (as in current TeX format) isn't sufficient}\\
+ \texttt{\phantom{-29b-} to hyphenate}\\
+ \texttt{-29c- words containing diacritics (like in French).}\\
+Ce que l'on appelle communément la {\em césure} des mots ne pourra
+jamais être effective, dans ces conditions (fontes \emph{cm}),
+sur des mots comportant des lettres accentuées.
+\index{fontes!cm@\emph{cm}}%
+Il s'agit là du plus grave défaut de francisation
+que vous obtiendrez mais il y en a d'autres... Il serait peut-être
+bon de considérer l'installation d'un moteur \TeX\ avec option
+\index{moteur!tex@\TeX}%
+ \oMlTeX{} ou la mise en place,
+par défaut dans le {\em format\/}, de polices de caractères 8-bits
+(ce message est émis par \texttt{kbconfig} ou par {\eFrench}).
+
+\ifnoDOCinstall\else
+\item \texttt{-30- ERROR!} \\
+\texttt{Something wrong! your TeX engine can't hyphenate correctly}\\
+\texttt{french words with diacritics *in that current font* or}\\
+\texttt{encoding.}\\
+Vous essayez de charger des motifs de césure français 7-bits alors que
+\index{moteur!tex@\TeX}%
+votre moteur \TeX{} ne supporte pas la division des mots avec des
+caractères accentués composés de la lettre et de l'accent. Si vous
+n'avez pas de moteur avec option \oMlTeX{}
+vous pouvez certainement utiliser des
+fontes 8-bits, comme les fontes \emph{ec}, par exemple. Modifiez alors
+le fichier de configuration avant de relancer \lsc{initex}.
+\index{fontes!ec@\emph{ec}}%
+\index{polices!ec@\emph{ec}}%
+\fi
+
+\item \texttt{-31- Wrong French Hyphenation\string!} \\
+\texttt{\phantom{-31-} Are you sure to run with a format in which the french}\\
+ \texttt{\phantom{-31-} patterns were installed at initex time\string?} \\
+Le dispositif de césure de \TeX{} n'a pas
+donné le résultat escompté sur
+quelques mots français. Avez-vous bien installé
+les motifs de césure
+français ? (message émis pas le << \em torture test >>).
+Le message suivant peut alors apparaître :
+
+\item \texttt{-32- if yes try to switch to T1 font encoding}\\
+ \texttt{\phantom{-32-} (\backslash usepackage[T1]{fontenc}).} \\
+En passant au codage de fontes \texttt{T1} vous utiliserez automatiquement
+des fontes 8-bits (\emph{ec} par défaut)
+et cela solutionnera peut-être votre problème.
+\index{fontencoding@{\em fontencoding}!\texttt{T1}}%
+\index{codage!\texttt{T1}}%
+\index{T1@\texttt{T1} (codage)}%
+
+\ifnoDOCinstall\else
+\item \texttt{-33- CHECK the list for hexadecimal TeX codes you can't} \\
+\texttt{\phantom{-33-} display}\\
+\texttt{-33- and decide if they must be eliminated from xxx.kbc}\\
+\texttt{-33- assuming your} \verb|``locale''|
+ \texttt{settings are okay on your}\\
+\texttt{\phantom{-33-} system.}\\
+Vous utilisez le générateur \texttt{kb2lex}
+qui produit des fichiers \texttt{.lex}
+à partir des tables de codage \verb|<|\emph{langage}\verb|.>|xxx\texttt{.kbc}.
+\index{fichier!.kbc@\texttt{.kbc}}%
+\index{fichier!.kbc@\texttt{<}\emph{langage}\texttt{.}xxx\texttt{.kbc}}%
+\index{langage.xxx.kbc@\texttt{<}\emph{langage}\texttt{.}xxx\texttt{.kbc}}%
+Ces fichiers, une fois compilés par \texttt{lex}
+puis en C, vous donnerons des convertisseurs 7-bits et 8-bits. Les
+caractères pris en compte par ces convertisseurs
+sont listés à l'écran.
+Si certains d'entre-eux apparaissent en héxadécimal cela signifie qu'il
+y a une incompatibilité entre le fichier
+\verb|<|\emph{langage}\verb|.>|xxx\texttt{.kbc} et l'affichage
+de ces caractères par \TeX{}
+sur votre écran. Il faut alors vérifier l'un et l'autre.
+
+De nombreux systèmes d'exploitation (spécialement \lsc{unix})
+\index{unix@\lsc{unix}}%
+\index{système!unix@\lsc{unix}}%
+permettent maintenant de traduire automatiquement le code produit
+en sortie par une application ; il s'agit du mécanisme de \texttt{locale}.
+\index{locale@\texttt{locale}}%
+\fi
+
+\item {\tt
+-34- this file and other auxiliary files require to \\
+\phantom{-34-} use the following LaTeX packages: french ...!\\
+\phantom{-34-} check \backslash usepackage or remove these files.\\
+\phantom{-34- }Typesetting is aborted!}\\
+Vous avez dans un passage \LaTeX{} précédent utilisé une (ou plusieurs)
+extension
+qui n'est plus demandée actuellement. Peut-être est-ce volontaire ?
+Dans ce cas il est préférable d'effacer les fichiers auxiliaires pouvant
+contenir des informations relatives à cette extension. Sinon, il suffit
+de demander le chargement de l'extension ad hoc.
+
+\item \texttt{-35- kbconfig: Redefining }\verb|^^Y uccode|\\
+ \texttt{\phantom{-35-} kbconfig: Redefining }\verb|^^Z uccode.|\\
+ Ce message qui n'apparaît que dans le fichier log
+ témoigne d'un choix de \texttt{kbconfig}.
+
+\item \texttt{-36- ANOMALIE : nom de format LaTeX (...) invalide.} \\
+ \texttt{\phantom{-36-} ANOMALIE : format LaTeX (...) non standard.} \\
+Le document << \em torture test >> a détecté une anomalie dans le
+nom du format. La variable \verb|\fmtname| ne contient pas une valeur
+standard. Il faut refaire un {\em format\/} avec un nom standard.
+Dans le doute prenez une version plus à jour sur les serveurs.
+
+\item \texttt{-37- ANOMALIE : extension french active ici.} \\
+\texttt{\phantom{-37-} ANOMALIE : extension french inactive ici.} \\
+La commutation de langue semble ne pas fonctionner de façon
+satisfaisante avec le document de test \texttt{frenchlb} ({\em torture test}).
+Voir du côté du fichier \texttt{language.dat} et de la création du
+{\em format}.%
+\index{fichier!language.dat@\texttt{language.dat}}%
+\index{language.dat@\texttt{language.dat}}%
+
+\ifnoDOCinstall\else
+%\item\texttt{-38- the language x is used as language number n.}\\
+%Ce message fournit le numéro interne \TeX{} pour la langue considérée
+%(émis par \texttt{hyconfig}).
+%
+%\item\texttt{-39- Error: file language.dat not found, trying}\\
+% \texttt{\phantom{-39-} to load US-english hyphenation file.}\\
+%Signifie que \texttt{hyconfig} n'a pas trouvé de fichier
+%\texttt{language.dat} et ne peut donc pas charger de motifs de
+%césure. Par défaut les motifs utilisés par \TeX{} de façon
+%standard vont être chargés, s'ils sont accessibles.
+%\index{fichier!language.dat@\texttt{language.dat}}%
+%
+%\item\texttt{-40- Writing kb8to7.lex et kb7to8.lex.}\\
+%Ce message avertit l'utilisateur de la création des 2 fichiers
+%\texttt{lex} par le programme \texttt{kb2lex.tex}. Ces fichiers serviront
+%à générer ensuite des programmes C permettant la conversion
+%automatique de fichiers de 7-bits vers 8-bits et réciproquement.
+
+\item\texttt{-41- Format is out of date, please run initex again.}\\
+L'extension {\eFrench} s'est aperçue d'une incohérence
+au niveau des commandes de césure. Ces dernières correspondent
+à une installation antérieure de {\eFrench} qui les plaçait
+dans le format. Ce n'est plus le cas actuellement (depuis la
+version 4.00), aussi il est impératif de refaire le format avec
+les nouveaux fichiers d'installation.
+\fi%\ifnoDOCinstall\else
+
+\item\texttt{-42- The French patch file (frpatch.sty) is not suitable for}\\
+ \texttt{\phantom{-42-} this version of the \string"french\string"}
+ \texttt{package dated YY/MM/DD.}\\
+Signifie qu'un fichier de \textit{patch} a été trouvé dans le
+système mais qu'il ne convient pas à la version de l'extension
+{\eFrench} que vous utilisez. Il est nécessaire d'accorder
+l'un avec l'autre. Dans le doute vous pouvez toujours renommer
+le fichier de \textit{patch} pour qu'il ne soit pas trouvé.
+\index{fichier!frpatch.sty@\texttt{frpatch.sty}}%
+
+\item\texttt{-43- french.all is LOADED.}\\
+Ceci est un message d'information signifiant l'exécution du programme de
+débogage \texttt{french.all}
+\index{fichier!french.all@\texttt{french.all}}
+destiné à vérifier l'existence des commandes de l'extension {\eFrench}
+et leur exécutabilité.
+
+\item\texttt{-44- ERROR Command ... is undefined.}\\
+Cette commande supposée être dans l'extension {\eFrench} n'existe pas.
+Il se peut que cette commande soit effectivement une commande périmée.
+Message émis par \texttt{french.all}.
+
+\item\texttt{-45- executing ...}\\
+Le jeu de test \texttt{french.all} exécute la commande indiquée. Il
+s'ensuit éventuellement d'autres messages si cette commande n'est
+pas exécutée dans le bon environnement.
+
+\item\texttt{-46- Cette commande est déjà définie dans le style french.}\\
+ \texttt{\phantom{-46-} Problème éventuel avec le style french (macro ...).}\\
+Ces messages d'erreur sont produits par le programme \texttt{french.chk}
+\index{fichier!french.chk@\texttt{french.chk}}%
+qui permet de déboguer un document et de vérifier s'il utilise
+déjà des commandes spécifiques à l'extension {\eFrench}.
+
+\ifnoDOCinstall\else
+\item \texttt{-47- i must stop because your TeX engine is unable\\
+ \phantom{-47- }\tt to generate 8bit output codes, sorry!}\\
+Ce message émis par \texttt{kb2lex}
+\index{fichier!kb2lex@\texttt{kb2lex}}%
+vous signale que votre moteur \TeX{} ne dispose pas de l'extension
+\index{moteur!tex@\TeX}%
+(\emph{change file}) de sortie en 8-bits sur les fichiers
+externes et à l'écran. Vous pouvez alors
+envisager d'utiliser (et adapter
+si nécessaire) les fichiers \texttt{kb8to7.c} et \texttt{kb7to8.c}
+\index{fichier!kb7to8.c@\texttt{kb7to8.c}}%
+\index{fichier!kb8to7.c@\texttt{kb8to7.c}}%
+qui correspondent à une utilisation du
+codage d'entrée supposé pour votre système d'exploitation.
+\index{fichier!decmulti.kbc@\texttt{decmulti.kbc}}%
+Une compilation C de ces fichiers génèrera les programmes exécutables des
+traducteurs 7-bits \texttt{<}--\texttt{>} 8-bits.
+\fi
+
+\item\texttt{-48- Lecture du fichier de configuration de (pm)french.}\\
+Un fichier de configuration \texttt{(pm)french.cfg}
+\index{fichier!(pm)french.cfg@\texttt{(pm)french.cfg}}%
+a été détecté sur l'installation. Il est lu et les ordres
+exécutables sont appliqués. Au cas où les options choisies par
+l'installateur ne vous conviennent pas, vous pouvez toujours
+les changer avec l'ordre \verb|\usersfrenchoptions|
+(voir §~\ref{usersf} page \pageref{usersf}).
+\index{usersfrenchoptions@\texttt{\backslash usersfrenchoptions}}%
+
+\item\texttt{-49- fermeture prématurée de guillemets.}\\
+Les guillemets sont fermés dans un autre environnement. Cela n'est pas
+forcément une erreur mais dans ce cas l'environnement \emph{guillemets}
+ne peut être fermé correctement et le bloc associé reste ouvert. Il faut
+alors faire attention, par exemple, aux changements de police de caractères
+dont l'effet risque de se prolonger plus qu'il ne faut.
+On fermera correctement l'environnement \emph{guillemets}
+\index{environnement!guillemets@\texttt{guillemets}}%
+par une commande \verb|\endguillemets| placée au bon endroit
+pour apparier les guillemets ouvrants.
+
+\ifnoDOCinstall\else
+\item\texttt{-50- Error: the french language is undefined in language.dat \\
+\phantom{-50-} file.}\\
+Le fichier \texttt{language.dat} ne contient pas de ligne contenant la
+définition de la langue française (\texttt{french}), ce qui est une
+anomalie sérieuse pour créer un format français.
+\fi
+
+\item\texttt{-51- ERREUR : ce document n'a pas été converti en 8-bits.}\\
+Certains documents de la distribution {\eFrench} doivent être convertis
+en 8-bits avant utilisation. Selon le type de document, la composition est
+arrêtée temporairement ou définitivement.
+
+\item\texttt{-52- Error: the (pm)french package doesn't run in such\\
+ \phantom{-52-} minimal document class, sorry!}\\
+L'extension {\eFrench} ne peut fonctionner avec une classe de document
+réduite, et en particulier avec la classe \texttt{minimal}.
+\index{classe!minimal@\texttt{minimal}}%
+\index{minimal@\texttt{minimal}}%
+
+\item\texttt{-53- environnement guillemets inutilisable avec l'option\\
+ \phantom{-53-} \backslash noeveryparguillemets.}\\
+Vous devez alors saisir directement les guillemets en 7-bits ou en 8-bits
+mais pas avec le nom d'environnement \texttt{guillemets} de \eFrench.
+La commande \verb|\endguillemets|
+reste disponible pour clore une double citation.
+\index{noeveryparguillemets@\texttt{\backslash noeveryparguillemets}}%
+\index{guillemets!noeveryparguillemets@\texttt{\backslash noeveryparguillemets}}%
+
+%\item\texttt{-54- ERROR: \backslash unusedslot (...) is invalid}\\
+% \texttt{\phantom{-54-} (active char. generating ...)}\\
+%La case choisie dans le codage de fonte est déjà utilisée. Un
+%autre code hexadécimal doit être fourni dans le fichier
+%\texttt{keyboard.dat}. Ce code sert uniquement à la génération de la version
+%majuscule du caractère estzet.
+%
+%\item\texttt{-55- ERROR \backslash unusedslot (...) is not activated.}\\
+%Le code hexadécimal a bien été fourni dans le fichier
+%\texttt{keyboard.dat} mais le caractère n'a pas été activé, d'où
+%l'erreur fatale.
+%
+%\ifnoDOCinstall\else
+%\item\texttt{-56- Pocessed 8bits characters are: ...}\\
+%Ce message de \texttt{kbconfig.tex} est fourni l'ors de l'utilisation
+%du module \texttt{kb2lex.tex} pour vérifier si tous les caractères sont bien
+%affichés à l'écran (et non sous forme hexadécimale à la \TeX).
+%\fi
+%
+%\item\texttt{-57- keyboard.sty loaded; target font encoding is ...}\\
+%Ce message avertit l'utilisateur que le codage d'entrée génèrera des codes
+%relatifs aux positions des caractères dans les fontes de type \texttt{OT1}
+%ou \texttt{T1} ou autre.
+%Si l'objectif de ce codage n'est pas le bon, alors il est indispensable de
+%faire appel à l'extension \emph{fontenc}, avec comme argument le codage
+%\index{extension!fontenc@\emph{fontenc}}%
+%\index{extension!keyboard@\emph{keyboard}}%
+%de fonte souhaité et ce avant l'appel à l'extension \emph{keyboard}.
+%
+\item\texttt{-58- Valeur de ... ignorée.}\\
+\label{-58-}
+Un environnement de liste a été utilisé avec modification d'espacement
+vertical (\verb|\topsep|, \verb|\partopsep|, \verb|\itemsep| ou
+\verb|\parsep|) alors qu'ils sont imposés par {\eFrench}.
+\index{topsep@\texttt{\backslash topsep}}%
+\index{partopsep@\texttt{\backslash partopsep}}%
+\index{itemsep@\texttt{\backslash itemsep}}%
+\index{parsep@\texttt{\backslash parsep}}%
+\index{espace!vertical}%
+Vous avez plusieurs solutions : soit vous abandonnez l'idée de les modifier
+(si cela vient de vous) soit vous pouvez revenir aux espacements standard
+de \LaTeX{} avec \verb|\nofrenchtrivsep|
+\index{nofrenchtrivsep@\texttt{\backslash nofrenchtrivsep}}%
+\index{nofrenchtrivsepwarnings@\texttt{\backslash nofrenchtrivsepwarnings}}%
+soit enfin vous pouvez supprimer ce message avec l'ordre
+\vers|\nofrenchtrivsep|\-\vers|warnings|.
+
+\item\texttt{-59- FATAL ERROR: unusual strange text generated.}\\
+La définition du codage d'entrée via \texttt{kbconfig} vient de
+générer du texte à mettre en page ; c'est une anomalie complète
+puisque vous êtes en train de vouloir produire un format. Cela
+vient certainement de la définition des caractères dans le
+fichier \texttt{.kbc} utilisé ; sinon envoyez-moi un rapport
+de bogue.
+
+\item\texttt{-60- point manquant après \backslash etc (à la ligne ...).}\\
+ La commande \verb|\etc| doit toujours être suivie d'un point. La
+ correction est à faire dans votre fichier source.
+
+\ifnoDOCinstall\else
+\item\texttt{-61- hypht1.tex file not found.}\\
+ Avertissement de l'inexistence du fichier de motifs de césure
+ complémentaire pour l'encodage de fontes T1. Message issu par
+ \texttt{hymltex.tex} ou \texttt{hyconfig.tex}.
+\index{fichier!hypht1.tex@\texttt{hypht1.tex}}%
+
+\item\texttt{-62- additional hyphenation file loading for T1 fonts.}\\
+ Avertissement du chargement complémentaire de motifs de césure
+ pour l'encodage de fontes T1 (\texttt{hypht1.tex}). Ces motifs sont
+ appliqués à toutes les langues ayant une liste non vide de motifs.
+ Ce message est issu par \texttt{hymltex.tex} ou \texttt{hyconfig.tex}.
+\fi
+
+\item\texttt{-63- french/frenchle/frenchpro style files not found.}\\
+ \texttt{\phantom{-63-} Check if files exist somewhere in your site.}\\
+ Vous avez demandé une option \texttt{french} de \emph{babel} mais le
+ fichier \texttt{.sty} associé n'a pas été trouvé (soit
+ \texttt{frenchpro.sty} ou \texttt{french.sty} [pour la version pro]
+ soit \texttt{frenchle.sty} [pour la version allégée]).
+\index{babel@\emph{babel}!options}%
+ Ce message est émis par \texttt{french.ldf}, \texttt{frenchle.ldf} ou
+ \texttt{frenchpro.ldf}.
+ Avant d'aller
+ chercher ces fichiers ailleurs, vérifiez qu'ils n'existent pas déjà dans
+ votre système et qu'ils ne sont pas inaccessibles pour quelque
+ raison technique.
+
+\ifnoDOCinstall\else
+\item\texttt{-64- }\\
+ \emph{réservé pour un usage futur.}
+\fi
+
+\item\texttt{-65- [pm]french.sty charge les traductions pour la }\\
+ \texttt{\phantom{-65-} bibliographie : ...}\\
+ Les fichiers indiqués à la fin du message ont été pris en compte
+ par l'extension {\eFrench} pour décrire les libellés utilisés
+ dans la bibliographie. Ces noms de fichiers dépendent des extensions
+ de bibliographie chargées avant {\eFrench} (comme \emph{jurabib}
+\index{extension!jurabib@\emph{jurabib}}%
+\index{extension!fracm@\emph{fracm}}%
+ ou \emph{fracm}). Par défaut, \texttt{frbib.tex} et \texttt{enbib.tex}
+ sont chargés. On peut éviter ce chargement en saisissant :
+ \verb|\let\iffrench|\-\verb|biblio|\-\verb|graphy|\-\verb|\iffalse|
+ avant de charger {\eFrench}.
+\index{fichier!frbib.tex@\texttt{frbib.tex}}%
+\index{fichier!enbib.tex@\texttt{enbib.tex}}%
+\index{iffrenchbibilography@\texttt{\backslash iffrenchbibliography}}%
+
+\ifnoDOCinstall\else
+\item\texttt{-66- ERROR! This file can't be typeset without any input}\\
+ \texttt{\phantom{-66-} encoding declaration}\\
+ \texttt{\phantom{-66-} (look at keyboard or inputenc packages.)}\\
+Vous essayez de composer le test de torture sans avoir préparé de format
+francisé \emph{ad hoc} ; c'est un cas d'erreur fatale. Pour pouvoir reprendre
+il vous faut modifier le document pour charger quelques extensions
+indispensables : la première est sans contest celle qui vous permettra
+de fournir à \AllTeX\ des caractères accentués (8 bits) qu'il saura
+interpréter. Pour cela la distribution {\eFrench} vous apporte
+l'extension \emph{keyboard}.
+\fi
+
+\item\texttt{-67- WARNING it seeems your are using inputenc and}\\
+ \texttt{\phantom{-67-} keyboard, please chose!}\\
+Vous avez chargé deux extensions pour le même objectif : le codage
+d'entrée de votre document ; une seule suffit. Bien entendu je
+vous conseille \emph{keyboard} mais c'est vous qui choisissez selon
+votre utilisation.
+
+\item\texttt{-68- ERROR: french is no more running}\\
+ \texttt{\phantom{-68-} with 2.09 emulation, sorry!}\\
+Vous utilisez probablement un très vieux document qui n'a pas été
+entièrement reconverti pour \LaTeXe\ ; cette version de {\eFrench}
+ne peut être utilisée dans ce cas ; voir éventuellement dans la
+distribution {\eFrench} le fichier de style
+\texttt{frltx209.sty} du répertoire \texttt{obsolate} qui pourrait
+vous dépanner temporairement.
+\index{fichier!frltx209.sty@\texttt{frltx209.sty}}% .
+\index{frltx209.sty@\texttt{frltx209.sty}}%
+\index{dossier \texttt{obsolate}}
+\index{répertoire \texttt{obsolate}}
+\index{latex209@\LaTeX2.09}
+
+\ifnoDOCinstall\else%
+\item\texttt{-69- kbconfig: Intercepting the dump control sequence }\\
+ \texttt{\phantom{-69-} for eliminating few invalid chars.}\\%
+Ce message émis à l'occasion d'une fabrication de format indique
+que la commande \verb|\dump| a été interceptée pour pouvoir modifier
+des définitions de caractères qui sont jugés comme des caractères
+invalides en \LaTeX\ standard (cf message -35-).
+
+\item\texttt{-70- kbconfig: modifying %
+ \string\@tabacckludge for math.}\\%
+La commande \LaTeX\ \verb|\@tabacckludge| a été redéfinie dans le format
+pour éviter une boucle sans fin en cas d'utilisation en mode mathématique
+avec l'extension \texttt{inputenc}.
+\fi
+
+\item\texttt{-71- ATTENTION : si babel est utilisé, }\\%
+ \texttt{\phantom{-71-} mettre french en option}\\%
+Vous avez probablement fait appel à \emph{babel} par une commande
+du genre \verb!\usepackage![...]\verb!{babel}! puis vous avez demandé à charger
+une extension french (\eFrench\ ou \texttt{frenchle}),
+ce qui est incompatible. Soit vous utilisez \emph{babel} avec
+l'option \texttt{frenchpro} ou \texttt{frenchle} soit vous utilisez
+une extension french toute seule. Il est probable que la composition du
+document n'ira pas bien loin...
+\index{babel@\emph{babel}!en opt@{\frenchname} en option de}%
+
+\item\texttt{-72- kbconfig: utf8 encoding can't be completed with Plain!}\\
+\phantom{-72- }
+\texttt{continuing with no Unicode characters.}\\%
+Le codage \texttt{utf8} fait appel à du code spécifique à \LaTeX\ ; il
+n'est donc pas utilisable avec Plain \TeX.
+Par contre les fichiers
+\texttt{*.lex} peuvent être générés correctement pour produire les
+\index{convertisseurs!\texttt{kb8to7}}%
+\index{fichier!*.lex@\texttt{*.lex}}%
+convertisseurs \texttt{kb8to7} et \texttt{kb7to8}.
+
+\item\texttt{-73- ERREUR avec AmSTeX : frenchle/french/frenchpro.sty}\\
+\phantom{-73- }\texttt{a été chargé trop tot.}\\%
+Il est indispensable de charger l'extension de francisation après
+AmSTeX de façon à ce qu'elle s'adapte au contexte.
+
+\item\texttt{-74- ERROR, keyboard loaded after french...sty!}\\
+Il est indispensable de charger l'extension de francisation après
+l'extension \texttt{keyboard} de façon à ce qu'elle s'adapte au contexte.
+
+\item\texttt{-75- kbconfig: utf8 encoding not found via inputenc package!}\\
+\phantom{-75- }
+\texttt{continuing with no Unicode characters.}\\%
+Le codage \texttt{utf8} fait appel à du code spécifique à \LaTeX\ introduit
+en janvier 2004 ; il s'agit notamment du fichier \texttt{utf8.def} qui
+\index{fichier!utf8.def@\texttt{utf8.def}}%
+n'a pas été trouvé ; vous ne pourrez donc pas bénéficier de ce codage
+tant que \LaTeX\ n'aura pas été mis à jour.
+Par contre les fichiers
+\texttt{*.lex} peuvent être générés correctement pour produire les
+\index{convertisseurs!\texttt{kb8to7}}%
+\index{fichier!*.lex@\texttt{*.lex}}%
+convertisseurs \texttt{kb8to7} et \texttt{kb7to8}.
+
+\item\texttt{-75- kbconfig: no language dependencies available}\\
+\texttt{\phantom{-75- } within Plain TeX!}\\
+Le dispositif permettant de disposer de fichiers \texttt{*.kbc} en
+\index{fichier!*.kbc@\texttt{*.kbc} avec Plain \TeX}%
+fonction du langage utilisé n'est pas disponible avec Plain TeX.
+
+\end{itemize}
+
+%%%%%%%%%%%%%%%%%%%%%
+\ifnoDOCinstall\else%
+%%%%%%%%%%%%%%%%%%%%%
+
+\section{Installation et tests}\label{chapinstall}
+\index{installation}\index{tests}%
+
+\subsection{Rappels}
+
+Tout est devenu beaucoup plus simple ces dernières années.
+Les moteurs \TeX{}live et Mik\TeX{} par exemple connaissent le paquetage
+\eFrench. Concernant les dernières versions, \TeX{}live
+le met directement à disposition, Mik\TeX{} le propose dans
+sa bibliothèque de paquets, il suffit de le charger.
+
+Sinon, on peut s'inspirer des procédures proposées sous
+\linkandfootnote{ctanlanguage}{\lsc{CTAN}}%
+{http://mirror.ctan.org/language/french/e-french/install/} .
+
+\subsubsection{Procédures d'installation pour Linux (ou Unix)}
+Avec \TeX{}live, il suffit de passer à la dernière version.
+Sinon, manuellement, ce n'est pas un grand problème.
+Le fichier \texttt{MiniDocEf\_Lnx.pdf} de
+\linkandfootnote{ctanlinux}{\lsc{CTAN}}%
+{http://mirror.ctan.org/language//french/e-french/install/MiniDocEf\_Lnx.pdf}
+indique ce qu'il faut faire
+
+
+\subsubsection{Procédure d'installation pour Windows}
+Sous Windows, deux possibilités de moteur \TeX au départ, à savoir
+\TeX{}live et Mik\TeX{} .
+Avec \TeX{}live, il suffit de passer à la dernière version.
+ Mik\TeX{} le propose dans
+sa bibliothèque de paquets, il suffit de le charger.
+Sinon, manuellement, ce n'est pas un grand problème.
+Le fichier \texttt{MiniDocEf\_Lnx.pdf} de
+\linkandfootnote{ctanmswin}{\lsc{CTAN}}%
+{http://mirror.ctan.org/language//french/e-french/install/MiniDocEf\_Win.pdf}
+indique ce qu'il faut faire
+
+\subsubsection{Procédure d'installation pour %\protect\lsc
+ {MacOs}}
+
+Les utilisateurs sous OS X
+ doivent choisir la procédure d'installation
+\lsc{unix} - \lsc{linux} .
+
+La reprise eFrench de \FrenchPro{} ne soutient plus les anciens MacOs.
+
+\subsubsection{Suivi par le groupe \eFrench}
+\begin{order}
+\item Après quelques mois d'utilisation de \eFrench{} ou de
+l'extension
+allégée
+\makeatletter\if@screen%
+\linkandfootnote{docfrenchle}{\texttt{frenchle}}%
+{http://efrench.org/bases/doc/frenchle.pdf}%
+\else%
+\linkandfootnote{docfrenchle}{\texttt{frenchle}}%
+{http://efrench.org/bases/doc/frenchle.pdf}%
+\fi%
+ ;
+\makeatother%
+vous aurez peut-être des modifications ou
+suggestions à nous proposer n'hésitez pas à le faire
+en envoyant un message à
+\href{mailto:lb@laurentbloch.org}{\texttt{<Laurent Bloch>}}
+à \href{mailto:raymond@juil.ch}{\texttt{ <Raymond Juillerat>}}
+ou au groupe de \href{mailto:efrench@lists.tuxfamily.org}{\texttt{maintenance \eFrench}}.%
+
+\item Installez les mises à jour majeures qui seront
+déposées sur les serveurs.
+\index{mises à jour}\index{serveurs}\index{serveur de référence}%
+Le serveur Web de référence est
+\linkandfootnote{ctanefrench}{\lsc{CTAN}}%
+{http://mirror.ctan.org/language/french/e-french/}
+ et les fichiers sources sont à \\
+<{\url{http://svn.tuxfamily.org/viewvc.cgi/efrench_efrenchsources/trunk/}>}.
+\end{order}
+
+%===
+\bigskip
+\fi
+\ifnoFINALS\else
+\section{Points finals} %
+
+\subsection{De Bernard Gaulle}
+Quelques remarques en guise de conclusion :
+\begin{itemize}
+\item vous avez trouvé des défauts à l'extension \FrenchPro{} ? %{\eFrench} ?
+proposez-nous alors les corrections/amélio\-rations ou tout au moins
+signalez-les-nous (cf. paragraphes précédents).
+
+\item comme pour l'extension \FrenchPro{}, ce document contient des erreurs ;
+elles sont involontaires ; merci de me les signaler ;
+je ferai mon possible pour les corriger.
+
+\item ce travail avait auparavant
+ le soutien de l'association GUTenberg ; ce n'est plus le cas depuis
+l'an 2000.
+Il continue d'évoluer en fonction de vos demandes et de votre soutien.
+Il est maintenant largement diffusé,
+notamment sur \lsc{CTAN}.
+\end{itemize}
+
+\bigskip
+Nous espérons que vous apprécierez ce travail.
+% et que vous l'encouragerez en
+%\linkandfootnote{register}{%
+%règlant rapidement votre licence d'utilisation}%
+%{http://efrench.org/bases/REGISTER.pdf}.
+\bigskip
+\bigskip
+
+\noindent
+\begin{minipage}{0.90\linewidth}
+Je tiens à remercier tous ceux qui ont participé activement
+et contribuent encore régulièrement ou ponctuellement
+à l'amélioration de l'extension \FrenchPro.
+\medskip
+
+\begin{flushright}
+{\em En espérant avoir été utile à tous,}
+
+\bigskip\bigskip
+Bernard {\sc Gaulle}
+
+\bigskip\bigskip
+{\sc Bergerac}\ le \ 1/11/91 \\
+(dernière mise-à-jour de \FrenchPro{} par B. G. le 28 juin 2007)\\
+\end{flushright}
+\vfil
+
+\begin{flushleft}
+\footnotesize{\sf
+À ma femme, \\% qui a fait preuve d'une très grande patience
+à l'association GUTenberg, \\%qui en fera bon usage
+\index{GUTenberg}%
+à tous mes collègues francophones et\\
+à l'université }{\sc Laval} au {\sc Québec}.
+\end{flushleft}
+\end{minipage}
+\fi
+
+
+\subsection{Du groupe \eFrench}\MAJ
+Le statut actuel de
+\eFrench{} est le résultat des travaux de Laurent Bloch, Manuel Pégourié-Gonnard
+et Raymond Juillerat. Nous remercions le groupe \lsc{CTAN} de ses nombreuses suggestions
+et quelques utilisateurs des remarques qui nous ont aidés et permis de peaufiner
+le paquet.\\
+\begin{flushright}
+(dernière mise-à-jour de ce manuel pour \eFrench{} par RayJ le \today)
+\end{flushright}\endMAJ
+
+\def\AvertO{\ \vfill%
+%%% Ceci était un extrait de la documentation de l'extension
+%%% \eFrench.
+
+ \begin{center}*---*\end{center}
+ \def\AvertO{}}
+
+\ifnoDOCinstall\par\medskip\AvertO\fi%
+\ifnoFINALS\par\medskip\AvertO\fi%
+
+\vfill
+\newpage
+
+\bibliographystyle{plain}
+\ifx\Section\undefined\else\let\section\Section\fi% Restore \section.
+\def\refname{Références bibliographiques}
+\begin{drapeaufg}
+\begin{thebibliography}{99}
+
+\bibitem{cahiers} J. {\sc André} \& J. {\sc Grimault},
+\linkandfootnote{cahiers}{\em Emploi des capitales (première partie)}%
+{http://www.gutenberg.eu.org/pub/GUTenberg/publicationsPDF/6-andregrim.pdf}%
+, {\em in} Les Cahiers GUTenberg \Numero 6, 1990.\\
+
+\bibitem{codetypo} {\em Code typographique},
+%Syndicat national des cadres et maîtrise du livre, de la presse
+% et des industries graphiques
+Fédération de la communication
+, 17\ieme édition, 1995.
+
+\bibitem{TSI} J. {\sc Désarménien}, {\em La division par ordinateur des
+ mots français : application à \TeX{}},
+ {\em in} TSI vol. 5 \Numero 4, 1986.% AFCET-Gauthier-Villars
+\index{division!des mots}%
+
+%\bibitem{flipo4}D. {\sc Flipo}, B. {\sc Gaulle} et K. {\sc Vancauwenberghe},
+%\linkandfootnote{flipo4}{\em Motifs de césure français}%
+%{http://www.gutenberg.eu.org/pub/GUTenberg/publicationsPDF/18-motifs.pdf}%
+%,
+% {\em in} Les Cahiers GUTenberg \Numero 18, 1994.
+\makeatletter\if@screen%
+\linkandfootnote{18-motifs}%
+ {\em Motifs de césure français}%
+{%http://www.gutenberg.eu.org/pub/GUTenberg/publicationsPDF/18-motifs.pdf
+http://frenchpro6.com/screen.pdf/artcesuresscreen.pdf},
+\else
+\linkandfootnote{18-motifs}%
+ {\em Motifs de césure français}%
+{http://www.gutenberg.eu.org/pub/GUTenberg/publicationsPDF/18-motifs.pdf
+%http://efrench.org/bases/doc/artcesures.pdf
+},
+\fi
+\makeatother
+{\em in} Les Cahiers GUTenberg \Numero 18, 1994.
+
+\bibitem{cork} M.-J. {\sc Ferguson},
+\linkandfootnote{cork}{\em Fontes latines européennes et \TeX{} 3.0}%
+{http://www.gutenberg.eu.org/pub/GUTenberg/publicationsPDF/7-ferguson.pdf}%
+, {\em in} Les Cahiers \hbox{GUTenberg} \Numero 7, 1990.
+
+\bibitem{frenchle}B. {\sc Gaulle},
+\makeatletter\if@screen%
+\linkandfootnote{frenchle}%
+{\em L'extension \emph{frenchle} pour \LaTeX, notice d'utilisation}%
+{http://efrench.org/bases/doc/frenchle.pdf}%
+\else%
+\linkandfootnote{frenchle}%
+{\em L'extension \emph{frenchle} pour \LaTeX, notice d'utilisation}%
+{http://www.efrench.org/doc/frenchle.pdf}%
+\fi%
+\makeatother
+, \number\year
+
+\bibitem{torture}B. {\sc Gaulle},
+\linkandfootnote{torture}{\em French style torture test}%
+{http://efrench.org/bases/tst/frenchrf.dvi}%
+, document de travail (distribution logicielle de l'extension
+ {\eFrench}) applicable à \LaTeX{}, \number\year\\
+
+\bibitem{et98}B. {\sc Gaulle},
+%\linkandfootnote{et98}%
+%{\emph{Comment peut-on personnaliser l'extension \texttt{french} de \linebreak[4] \LaTeX\ ?}}%
+%{http://efrench.org/bases/doc/artET98.pdf}%
+\makeatletter\if@screen%
+\linkandfootnote{artET98.pdf}{\emph{Comment peut-on personnaliser
+ l'extension \emph{french} de \LaTeX\ ?}}
+{%http://efrench.org/bases/doc/artET98.pdf
+http://svn.tuxfamily.org/viewvc.cgi/efrench_efrenchsources/trunk/doc/artET98.pdf?revision=1&view=co},%
+\else
+\linkandfootnote{artET98.pdf}{\emph{Comment peut-on personnaliser
+ l'extension \emph{french} de \LaTeX\ ?}}
+{%http://efrench.org/bases/doc/artET98.pdf
+http://svn.tuxfamily.org/viewvc.cgi/efrench_efrenchsources/trunk/doc/artET98.pdf?revision=1&view=co},%
+\fi
+\makeatother
+ document {\em in} Les Cahiers GUTenberg \Numero 28-29, 1998\\
+
+\bibitem{faq}B. {\sc Gaulle},
+\makeatletter\if@screen%
+\linkandfootnote{faq}%
+{\emph{FAQ {\eFrench}}, foire aux questions à propos de \LaTeX\ en français}
+{http://www.efrench.org/doc/faq.pdf}%
+\else%
+\linkandfootnote{faq}%
+{\emph{FAQ {\eFrench}}, foire aux questions à propos de \LaTeX\ en français}
+{http://www.efrench.org/doc/faq.pdf}%
+\fi%
+\makeatother%
+, \number\year\\
+
+\bibitem{companion}M. \fsc{Goossens}, F. \fsc{Mittelbach} et A. \fsc{Samarin},
+ {\em The \LaTeX{} companion}, Addison-Wesley,
+ second edition, 2004.
+
+\bibitem{romand} {\em Guide du typographe romand}, Association suisse
+ des compositeurs à la machine, 6\ieme édition, 2000.
+
+\bibitem{latexbook}L. {\sc Lamport}, {\em \LaTeX, A
+ document preparation system}, Addison-Wesley, 1994.
+
+\bibitem{makeindex}L. {\sc Lamport}, {\em An Index Processor For \LaTeX}, 1987.
+
+
+\bibitem{lexique}{\em Lexique des règles
+ typographiques en usage à l'Imprimerie nationale}, \linebreak[4]
+ 4\ieme édition, 1991,
+ \texttt{ISBN 2-11-081075-0}.
+
+
+\bibitem{ManPerrou}Y. \textsc{Perrousseaux},
+ \emph{Manuel de typographie française
+ élémentaire}, \linebreak[4]
+ Atelier \textsc{Perrousseaux}, 4\ieme édition, 1995,
+ \texttt{ISBN 2-911220-00-5}.
+
+\bibitem{CompoPerrou}Y. \textsc{Perrousseaux},
+ \emph{Mise en page et impression},
+ Atelier \linebreak[4]\textsc{Perrousseaux}, 1996,
+ \texttt{ISBN 2-911220-01-3}.
+
+\bibitem{saudrais}E. {\sc Saudrais},
+\linkandfootnote{saudrais}%
+{\emph{Le petit typographe rationel}}%
+{http://perso.wanadoo.fr/eddie.saudrais/prepa/typo.pdf}%
+, document électronique, \number\year
+
+\bibitem{TDS} \TeX\ Users Group,
+\linkandfootnote{TDS}{\emph{A directory Structure for TeX Files}}%
+{http://www.tug.org/tds/}%
+, document électronique disponible sur \lsc{CTAN},
+ \number\year.
+\end{thebibliography}
+\end{drapeaufg}
+\vfill
+\newpage
+\nooverfullhboxmark% Pourquoi faut-il le repréciser pour la versions screen?
+\printindex
+
+\def\footnote#1{}% nullify any footnote here.
+\tableofcontents
+
+\end{document}
diff --git a/language/french/e-french/texmf/doc/src/faq.tex b/language/french/e-french/texmf/doc/src/faq.tex
new file mode 100644
index 0000000000..35583ab92b
--- /dev/null
+++ b/language/french/e-french/texmf/doc/src/faq.tex
@@ -0,0 +1,1469 @@
+% !TeX encoding = utf8
+%This is FaQ.tex : the LaTeX F A Q of the french style
+% LPPL Copyright by eFrench
+%
+%
+\documentclass[a4paper,12pt,openright]{article}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{times}
+\usepackage{url}
+
+\makeatletter\def\tempa{\let\if@screen\iffalse}\makeatother%
+\tempa%
+\def\href#1#2{#2}
+\let\titcolor\relax
+\usepackage[print]{pdfscreen}
+
+\usepackage{french, mymaj, fancybox}
+
+\usersfrenchoptions{%
+ \disallowuchyph
+ \overfullhboxmark
+}
+
+ \definecolor{section0}{rgb}{.722,.525,.431}
+ \definecolor{section1}{rgb}{.650,.350, 0 }%{.937,.561,.123}
+ \definecolor{section2}{rgb}{.750,.250, 0}%{.855,.647,.123}
+ \definecolor{section3}{rgb}{.950,.050,.0}
+ \definecolor{section4}{rgb}{.545,.271,.750}
+ \definecolor{section5}{rgb}{.627,.322,.176}
+ \definecolor{titcolor}{rgb}{.922,.725,.831}
+ \definecolor{bleu}{rgb}{.0,.0,.650}
+%\def\titcolor{\color{section0}}
+
+\hypersetup{
+ pdfwindowui=true, pdfnewwindow=true,
+ colorlinks=true, pdfmenubar=true, pdffitwindow=true,
+ anchorcolor=bleu, urlcolor=bleu,
+}
+
+\makeatletter
+\newcommand{\linkandfootnote}[3]{%
+ \href{#3}{#2}\bgroup%
+ \expandafter\ifx\csname r@tlf.#1\endcsname\relax%
+ \expandafter\global%
+ \expandafter\let\csname r@tlf.#1\endcsname\empty%
+ \footnote{\texttt{<}\url{#3}\texttt{>}.\label{lf.#1}}%
+ \else\refmark{lf.#1}%
+ \fi\egroup%
+ }%
+\makeatother
+
+\newif\ifnoDOCinstall
+\newif\ifnoFINALS
+
+\textwidth=152mm
+\textheight=240mm
+\voffset -1in
+%\hoffset 0in%-1in
+\oddsidemargin=11mm
+\evensidemargin=11mm
+\topmargin=1.0cm
+\footskip=1.3cm
+\renewcommand{\ttdefault}{cmtt}
+%\hypersetup{
+%pdfinfo={
+%Title={Foire aux questions },
+%Author={Bernard Gaulle, Raymond Juillerat},
+%Creator={Bernard Gaulle},
+%Subject={TeX, LaTeX et la langue française},
+%Keywords={TeX, LaTeX, pdfLaTeX, efrench, frenchle.sty, french.sty},
+% }
+%}
+\hypersetup{
+pdftitle={Foire aux questions },
+pdfauthor={Bernard Gaulle, Raymond Juillerat},
+pdfcreator={Bernard Gaulle},
+pdfsubject={TeX, LaTeX et la langue française},
+pdfkeywords={TeX, LaTeX, pdfLaTeX, efrench, frenchle.sty, french.sty},
+}
+%\makeindex
+\begin{document}
+\newlength{\oriparindent}
+\setlength{\oriparindent}{\parindent}
+\newcommand{\indneg}{\setlength{\parindent}{-2mm}}
+\newcommand{\indpos}{\setlength{\parindent}{\oriparindent}}
+\newcommand{\pgLapdTeX}
+{(L\hspace{-.8ex}\raisebox{.4ex}{\scriptsize A}\hspace{-.3ex})\TeX}
+%\disallowuchyph% C'est ma devise... (inclus dans myfroptn)
+
+% Page de titre :
+\makeatletter
+\def\@fnsymbol#1{\ensuremath{\ifcase#1\or \star \or \diamond
+ \or \heartsuit \else\@ctrerr\fi}}
+\makeatother
+\title{\hbox{}\vspace*{-3cm}
+ \huge\bf
+ FAQ \textit{eFrench}\\
+ Foire aux questions\\ à propos de \LaTeX{ }%\textsl{eFrench}
+%\footnote{Les marques de mise à jour dans la marge sont en rapport
+% avec la version V5,00 du 22 décembre 2000.}
+% \\ pour \LaTeX
+ en français}
+\author{Bernard \fsc{Gaulle}, repris par Raymond \fsc{Juillerat}\\
+et le groupe \textit{eFrench} \href{mailto:efrench(at)lists.tuxfamily.org}{\texttt{<efrench.org>}}%
+\thanks{Attention, l'adresse m.él. fournie via les butineurs est
+piégée ; il faut la corriger à la main.}\\%
+LPPL © {\sc eFrench} (voir le fichier
+\linkandfootnote{copyright}{\texttt{Copyright.pdf}}
+{http://efrench.org/}%
+% ou \texttt{copyrigh.tex}
+).\\
+}
+\date{version pro \frenchstyleid}\label{prempage}
+\maketitle\thispagestyle{empty}
+
+%\begin{resume} Cette notice décrit comment installer et utiliser avec \LaTeX{}
+% l'extension \textsl{} (appelée autrefois style \texttt{french} puis \texttt{ French Pro}).
+% Cette extension a été créée pour imprimer des documents typographiquement
+% plus conformes à l'usage français que ce que produit \LaTeX{} par défaut.
+% Un grand nombre de commandes peuvent être utilisées mais
+% l'emploi courant de cette extension ne nécessite
+% {\em a priori\/} aucune connaissance particulière
+% ni une utilisation forcenée de commandes spécifiques. Toutefois cet
+% emploi n'est pas toujours {\em transparent}.
+%\maj
+% Une version allégée est fournie (\texttt{frenchle}).
+%Une version appauvrie (\texttt{pmfrench})
+% est aussi utilisable sur tous les sites et dans toutes les
+% configurations. L'installation de \textsl{eFrench} s'accompagne d'une
+% création de {\em format} pour l'introduction, notamment, des
+% fichiers de motifs de césure français. D'autres extensions l'accompagnent.
+%\end{resume}
+\vfill\vfill
+\section*{Préface}
+Cette publication est une version modifiée sur la base d'un document \textit{faq.pdf}
+créé par Bernard \textsc{Gaulle} et mis à jour par lui une dernière fois le 28 juin 2007.
+Cette FAQ était à l'origine un des nombreux documents qui accompagnaient
+cette création complète de typographie française appelée \textit{FrenchPro}.
+
+Son auteur, Bernard \textsc{Gaulle}, est décédé en août 2007. En novembre 2007, pour
+ne pas laisser tomber dans l'oubli ce grand-Å“uvre et
+laisser à disposition des auteurs francophones ces outils incomparables, Laurent \textsc{Bloch}
+ a lancé le projet nommé \textit{eFrench}\cite{lblochefr}.
+
+Parallèlement, les environnements \TeX{} et \LaTeX{} ont évolué jusqu'à aujourd'hui vers une simplification pour
+l'utilisateur \textit{lambda},
+avec le résultat que certaines explications ne sont plus du tout d'actualité,
+les manipulations évoquées ayant été automatisées depuis,
+en particulier en ce qui concerne les moteurs
+les plus courants (voir § \ref{Qpdftex} et \ref{motfrahup}).
+
+C'est surtout pour la mettre à jour que cette FAQ a été revue et corrigée. Les modifications sont marquées par une barre dans la marge gauche.
+\vfill
+\newpage
+\sommaire[3]
+\noindent
+
+{\sc eFrench} © LPPL (voir le fichier
+\linkandfootnote{copyright}{\texttt{Copyright.pdf}}
+{http://efrench.org/}%
+% ou \texttt{copyrigh.tex}
+).\\
+%% \NNL sert a éliminer les saut de page dans la toc ou le sommaire
+%% mais cela génère de messages « Token not allowed » avec hyperref.
+\newcommand{\NNL}{\protect\let\\\relax}
+\makeatletter\def\HyPsd@CatcodeWarning#1{}\makeatother%
+%%
+\let\Subsubsection\subsubsection
+\def\subsubsection#1{\Subsubsection[\NNL#1]{\protect\color{section3}#1}}
+\let\Subsection\subsection
+\def\subsection#1{\Subsection[\NNL#1]{\protect\color{section2}#1}}
+\let\Section\section
+\def\section#1{\Section[\NNL#1]{\protect\color{section1}#1}}
+
+\section{Quelques notions de base}
+
+Pour mieux répondre à vos interrogations les réponses sont éclatées en
+deux parties : d'une part, l'explication textuelle voulue la plus brève
+possible et d'autre part, l'application \TeX{}nique qui illustre le propos ou le
+complète.
+%? Copyright 1996-2007
+\subsection {Qu'est-ce que {\TeX} ?}
+\indneg
+
+{\sl \small En bref :} Si vous ne connaissez pas
+\linkandfootnote{TeX}{\TeX}
+{http://www.tug.org/whatis.html}
+ (prononcez « \textit{tek} ») sachez que c'est
+un programme génial dont l'auteur est
+\linkandfootnote{DKnuth}{Donald \sc Knuth}
+{http://www-cs-faculty.stanford.edu/~knuth}
+%Donald Knuth2
+et qui permet de
+composer, mettre en page des documents à imprimer ou à visualiser. Le
+document source est fourni sous forme de texte balisé. Celui que vous lisez
+contient, par exemple, la balise \texttt{$\backslash$title\{FAQ} ...\texttt{\}}. Ces balises ont un rôle
+important au moment de la composition par \TeX{} car, suivant la classe de
+document employée, la typographie appliquée sera différente.\indpos
+
+On emploie souvent, par erreur, le mot \TeX{} à la place de celui de \LaTeX{}
+(voir ci-après) ou \textit{vice versa}.
+
+\indneg{\TeX\sl nique :} \indpos {\TeX} produit en sortie un fichier « \texttt{dvi} » indépendant de l'unité de
+restitution.
+
+\begin{MAJ}Mais aujourd'hui, le format « \texttt{dvi} » fait de plus en plus place au
+format « \texttt{pdf} » et c'est plutôt {pdf\TeX} que {\TeX} ou mieux encore
+plutôt {pdf\LaTeX} que {\LaTeX} qui sont utilisés.
+\end{MAJ}
+
+\subsection {Qu'est-ce que \LaTeX{} ?}
+\indneg{\sl \small En bref :}
+\linkandfootnote{LaTeX}{\LaTeX}
+{http://www.latex-project.org/}
+%LATEX3
+ (prononcez « \textit{la tek} ») est un langage de balisage qui étend
+les possibilités de \TeX; il propose des balises extrêmement puissantes. C'est
+\LaTeX{} qui est le plus utilisé dans le monde ; il s'agit d'un standard de fait,
+\maj aujourd'hui supplanté par sa version nettement plus étendue {pdf\LaTeX}.
+
+\indneg{\TeX\sl nique :} \indpos La classe de document employée pour ce document a été la classe
+\texttt{article} ; elle a été précisée au moyen de la balise
+\begin{center}
+\fbox{\makebox[0.7\textwidth][l]{$\backslash$\texttt{documentclass} \it\{classe\_de\_documents\} }}%\usebox{\mybox}}}
+\end{center}\indpos
+dans ce document-ci donc \{classe\_de\_documents\} = \texttt{article}.
+
+Une balise \LaTeX{} est en fait une macro-instruction faisant appel à des commandes
+\TeX.\indpos
+
+La plupart des compilateurs {\TeX} sont désormais basés sur la distribution
+générique (sous forme source)
+\linkandfootnote{ web2c}{web2c}
+{http://www.tug.org/web2c}
+% web2c4
+\maj et la base multilingue \textit{babel}.
+On emploie souvent, par erreur, le mot \LaTeX{} à la place de celui de \TeX{}
+ou \textit{vice versa}.
+\subsection {Qu'est-ce qu'un format {\TeX} ?}\label{quoiFormat}
+\indneg{\sl \small En bref :} Le programme \TeX, lorsqu'il démarre, a besoin d'un ensemble de
+données qui ont été préparées à l'installation du produit ; c'est ce que l'on
+appelle le « \textit{format} ». Il contient notamment la définition de toutes les balises
+mises à disposition de l'utilisateur. Le format par défaut de {\TeX} s'appelle
+\texttt{plain} mais il est souvent appelé sous le nom plus normal de \texttt{tex} ; celui de
+\LaTeX{} s'appelle \texttt{latex}. \begin{MAJ}
+Par contre les formats francisés étaient généralement
+appelés, respectivement, \texttt{frtex} et \texttt{frlatex}, mais ils ne sont plus
+aujourd'hui nécessaires, ce qui simplifie l'installation.%lasse_de_documents
+\end{MAJ}
+
+\indneg{\TeX\sl nique :} Pour créer un format on exécute un « initex » :
+%\usepackage{mltex}
+\begin{center}
+\fbox{\makebox[0.7\textwidth][l]{\texttt{tex -ini} \it nom\_du\_format . . .}}
+\end{center}
+\setlength{\parindent}{\oriparindent}
+
+%\TeX -ini nom\_du\_format . . .
+\subsection{ Qu'est-ce que {pdf\TeX} ; pdf\LaTeX ?}\label{Qpdftex}
+\setlength{\parindent}{-2mm}{\sl \small En bref :} Le moteur
+\linkandfootnote{pdfTeX}{pdf\TeX}
+{http://www.tug.org/applications/pdftex/}
+%pdfTEX5
+ est un moteur {\TeX} standard produisant, par
+défaut, un fichier de type Adobe PDF. Il peut aussi fonctionner à l'identique
+de \TeX. Son nom de format commence en général par \texttt{pdf}. \\
+\begin{MAJ}
+%Pour les formats
+%francisés on utilisait en général les noms \texttt{frpdftex} et \texttt{frpdflatex},\begin{MAJ}
+%mais ce formatage n'est plus nécessaire aujourd'hui,
+%n'apportant aucun avantage.
+
+La différence entre pdf\TeX{} et pdf\LaTeX{} est la même qu'entre
+\TeX{} et \LaTeX{} au niveau de la saisie.
+Les moteurs pdf\TeX et pdf\LaTeX{} peuvent produire en sortie un fichier de type « \texttt{pdf} » ou « \texttt{dvi} ».
+\end{MAJ}
+
+\subsection{ Qu'est-ce que Ml\TeX{} ?}\label{qmltex}
+\indneg{\sl \small En bref :}
+\linkandfootnote{MlTeX}{Ml\TeX}
+{http://mirror.ctan.org/systems/generic/mltex}
+%Ml\TeX6
+ou MultiLingual {\TeX} est une option (\texttt{-mltex}), utilisable
+avec tous les moteurs {\TeX} basés sur
+\linkandfootnote{ web2c}{web2c}%
+{http://www.tug.org/web2c}%
+%web2c4
+, qui avait été réalisée à l'origine
+par \textsc{Michael Ferguson} pour résoudre divers problèmes linguistiques dont
+celui de la césure de mots accentués.
+\linkandfootnote{DKnuth}{Donald \sc KNUTH}%
+{http://www-cs-faculty.stanford.edu/~knuth}
+% Donald Knuth2
+a repris un certain
+nombre d'idées dans la version 3 de \TeX{} mais pas toutes. Le suivi et la
+mise à jour de {Ml\TeX} était assurée par
+%\linkandfootnote{BReichle}{\sc Bernd Raichle}
+%{http://www.informatik.uni-stuttgart.de/ifi/is/Personen/raichle.html}
+Bernd {\sc Raichle}.
+Pour
+des raisons de Copyright, les moteurs {\TeX} modifiés pour offrir cette option
+ne peuvent être appelés \TeX. On trouvera ainsi, pour \textsc{Unix} :
+\linkandfootnote{ teTEX}{te\TeX}
+{http://www.tug.org/tetex/}%
+%teTEX8
+, pour MacOs :
+\linkandfootnote{ CMacTEX}{CMac\TeX}
+{http://www.kiffe.com/cmactex.html}%
+%CMacTEX9
+, pour Windows (win32) :
+\linkandfootnote{ fpTEX}{fp\TeX}
+{http://www.fptex.org/}%\bf
+%fpTEX10 ???
+, etc.
+Cette option est choisie à l'installation et plus précisément à la création du
+format ; elle permet donc ensuite la césure automatique des mots accentués
+en environnement standard.
+
+\indneg\TeX{\sl nique} : {Ml\TeX} étant devenu une option standard d'exécution des compilateurs
+\TeX{} basés sur
+\linkandfootnote{ web2c}{web2c}{http://www.tug.org/web2c}%
+%web2c4
+, il suffit de coder cette option à la création du
+format :
+\begin{center}
+\fbox{\makebox[0.6\textwidth][l]{\texttt{tex -ini -mltex} \it nom\_du\_format . . .}}
+\end{center}\indpos
+Il existe aussi une extension de \LaTeX,
+\linkandfootnote{MlTeX}{\tt mltex}{http://mirror.ctan.org/systems/generic/mltex}
+%mltex6 ,
+, que l'on peut charger lorsque
+le format (fabriqué avec l'option « \texttt{-mltex} ») ne contient pas de descriptif
+des caractères accentués contrairement à ce qui était conseillé par \textit{FrenchPro}.
+\begin{center}
+\fbox{\makebox[0.4\textwidth][l]{$\backslash$\texttt{usepackage\{mltex\}}}}
+\end{center}
+
+\begin{MAJ}
+Somme toute, {Ml\TeX} était une façon de parer aux défauts des fontes de type \texttt{OT1}.
+Avec \textit {eFrench}\cite{frenchpro} on conseille plutôt de passer aux fontes de type \texttt{T1} sans Ml\TeX{}.
+\end{MAJ}
+%%\usepackage{mltex}
+%5. <>.
+%6. <>.
+%7. <>.
+%8. <>.
+%9. <>.
+%10. <>.
+%3
+\subsection{ Qu'est-ce que TeX--XeT ? }\label{qtexxet}
+\indneg{\sl \small En bref :} TeX--XeT ou « {\TeX} de droite-à-gauche » est une option utilisable avec
+quelques moteurs \TeX{} qui a été réalisée par Peter {\sc Bretenlohner} pour résoudre
+le problème de la mise en page dans les langues écrites de droite à
+gauche. Donald \textsc{Knuth} avait étudié la question avec Pierre \textsc{Mackay} mais
+était arrivé à une version incompatible avec \TeX. La version proposée par
+\textsc{Bretenlohner} n'a pas d'impact sur le compilateur \TeX{} et est donc optionnelle.
+Pour des raisons de Copyright, les moteurs \TeX{} modifiés pour offrir
+cette option ne peuvent être appelé \TeX. On trouvera ainsi pour Windows : l'ancien G{\TeX} qui était proposé par l'association
+\linkandfootnote{GUTenberg}{GUTenberg}{http://www.gutenberg.eu.org}
+%GUTenberg 12
+avec la distribution WinGUT, etc.\indpos
+
+\begin{MAJ}
+Aujourd'hui, TeX-XeT est intégré à pdf\LaTeX{}.
+Pour avoir l'option « \TeX{} de droite-à-gauche », il faut l'activer en définissant
+\texttt{$\backslash$TeXXeTstate=1}.
+L'effet est de rendre ainsi actives les balises
+\texttt{$\backslash$beginL} \textit{pour le texte de gauche à droite} \texttt{$\backslash$endL}, ainsi que
+\texttt{$\backslash$beginR} \textit{pour le texte de droite à gauche} \texttt{$\backslash$endR}.
+Ces quatre balises sont celles qui ont été définies dans TeX-XeT.
+\end{MAJ}
+\subsection{ Fontes et codages}\label{fontcoda}
+\indneg{\sl \small En bref :} D'une fonte à l'autre, d'un producteur à l'autre,
+les caractères ne sont
+que rarement à la même place ; ce que l'on exprime en disant : les codages de
+fontes sont différents. C'est d'ailleurs le cas pour les fontes par défaut dans
+\TeX, les {\it cm}, avec lesquelles on obtient des images de caractères ({\it glyphes})
+différentes en commutant, par exemple, au style \texttt{tt}. Le codage très particulier
+des {\it cm} est appelé \texttt{OT1} dans \LaTeX. Par défaut \LaTeX{} fonctionne avec ce
+codage ; il n'est donc pas nécessaire de lui préciser quoi que ce soit si on
+l'utilise ainsi.
+Depuis la création de la norme dite de Cork, de nouvelles fontes ont été
+créées, telles les \textit{ec} dont le codage est appelé \texttt{T1} dans \LaTeX. Dans ce codage
+figurent les glyphes de tous les caractères composés français. Quelques polices
+ de caractères (de plus en plus) \maj sont codées selon cette norme.
+
+\indneg{\TeX\sl nique :}
+Si on fait appel à des fontes codées \texttt{T1} il faut le préciser à \LaTeX{} :
+\begin{center}
+\fbox{\makebox[0.5\textwidth][l] {\texttt{$\backslash$usepackage[T1]\{fontenc\}}}}
+\end{center}%%\usepackage[T1]{fontenc}
+Dans ce cas \LaTeX{} fera appel, par défaut, aux fontes \textit{ec} pour le mode texte
+et aux fontes \textit{cm} pour le mode mathématique.
+Les fontes PostScript peuvent être recodées en \texttt{T1} (voir notamment les
+logiciels
+\linkandfootnote{fontinst}{fontinst}{http://www.tug.org/applications/fontinst/}%
+%fontinst13 1.3
+ou
+\linkandfootnote{dvi2ps}{dvi2ps}{http://www.tug.org/dvipsk/}%
+%dvi2ps14 1.3
+ou
+\linkandfootnote{afm2tfm}{afm2tfm}{http://www.tug.org/texinfohtml/dvips.html\#Makink-a-font-available}%
+%afm2tfm15
+)
+grâce au système de fontes virtuelles.
+\subsubsection{Fontes virtuelles}
+\indneg{\sl \small En bref :} Certaines fontes sont, en effet, virtuelles parce qu'elles n'existent pas.
+Dans la pratique cela veut dire que l'on fait appel, sous ce nom et à la place
+%11. <>.
+%12. <>.
+%13. <>.
+%14. <>.
+%15. <>.
+%4
+d'une fonte virtuelle, à d'autres fontes, bien réelles celles-ci. Pendant toute
+une période où les fontes \emph{ec} n'existaient pas, les français ont utilisé des fontes
+virtuelles (\textit{dm}) qui permettaient d'accéder à des caractères accentués et ainsi
+de disposer d'une césure française correcte. Malheureusement ces fontes \textit{dm}
+ne répondent à aucun standard et sont bien incomplètes, il n'est donc plus
+très conseillé de les utiliser. Il existe aussi les fontes virtuelles \textit{ae} qui respectent
+le standard mais n'offrent pas la panoplie complète des glyphes.\indpos
+
+La fonte virtuelle
+\linkandfootnote{fourier-GUT}{fourier-GUT}%{http://mirror.ctan.org/pkg/fourier}
+{http://mirror.ctan.org/fonts/fourier-GUT}
+%fourier-GUT16
+ fournit un ensemble complet pour le
+français :
+\begin{center}
+\fbox{\makebox[0.5\textwidth][l]{\texttt{$\backslash$usepackage\{fourier\}}}}
+\end{center}\indpos
+%%\usepackage{fourier}
+
+La société
+\linkandfootnote{YandY}{Y\&Y}{http://tug.org/yandy/}
+%Y\&Y17
+a développé des fontes {\it em} qui adoptent encore un autre codage : LY1.\indpos
+
+L'extension
+\linkandfootnote{MlTeX}{\tt mltex}{http://mirror.ctan.org/systems/generic/mltex}
+%mltex6
+pour \LaTeX{} utilise, de façon interne, un autre codage : LO1.
+\subsection{ Qu'est-ce que TDS ?}
+\indneg{\sl \small En bref :}
+\linkandfootnote{TDS}{TDS}{http://www.tug.org/tds}
+%TDS18
+est une norme pour l'arborescence des fichiers utilisés dans
+une installation \TeX. La structure proposée est commune à toutes les plate-formes
+matérielles. On peut ainsi partager une même hiérarchie de fichiers de
+données (styles, fontes, etc.) ou plusieurs entre différents systèmes d'exploitation,
+tels \textsc{Unix}, Windows ou MacOS. Les formats (voir paragr. \ref{quoiFormat}) générés
+à partir de compilateurs {\TeX} basés sur
+\linkandfootnote{ web2c}{web2c}{http://www.tug.org/web2c}
+%web2c4
+sont même utilisables, en
+principe, depuis n'importe lequel des systèmes d'exploitations ; ils sont donc
+indépendants de toute plate-forme logicielle.
+
+\indneg{\TeX\sl nique :} la hiérarchie de fichiers est appelée « \texttt{texmf} ». Il en existe au moins
+une que l'on ne modifie jamais \texttt{(TEXMFMAIN=texmf)} car elle correspond à la
+distribution officielle et une autre, locale \texttt{(TEXMFLOCAL=texmf-local)} que
+l'on peut modifier à volonté. En cas de difficulté de gestion de ces hiérarchies
+{\TeX} vous pouvez consulter avec intérêt le manuel d'%
+\linkandfootnote{administration}{administration}
+{http://daniel.flipo.free.fr/doc/tex-admin/TeX-admin.pdf}{ }
+%administration19
+de Daniel Flipo.
+\section{(La)\TeX{} et le français}
+\indneg{\sl \small En bref :} qu'appelle-t-on {(La)\TeX} ou \pgLapdTeX{} ?
+Ce logo à mi-chemin entre
+\linkandfootnote{TeX}{\TeX}
+{http://www.tug.org/whatis.html}{ }
+et \linkandfootnote{LaTeX}{\LaTeX}
+{http://www.latex-project.org/}
+précise que l'on parle de \TeX{} comme de \LaTeX{} ou de tout
+\linkandfootnote{autres}{autre}
+{http://mirror.ctan.org/systems/}{ }
+%autre 20
+ensemble de macro-instructions faisant appel à un moteur \TeX.
+%16. </>.
+%17. <>.
+%18. <>.
+%19. <>.
+%20. <>.
+%5
+\subsection{Est-ce que ça fonctionne bien en français?}
+\indneg{\sl \small En bref :} Quel que soit le logiciel de traitement de texte, divers dispositifs sont
+nécessaires et doivent correspondre à l'usage français : la césure des mots, les
+caractères composés, la typographie, les usages des éditeurs, etc. Ces dispositifs
+existent potentiellement dans \hbox{\pgLapdTeX} mais d'autres, tels que la correction
+orthographique, ne peuvent pas en faire partie car \TeX{} est juste un compilateur
+(de programme informatique) ; il n'agit pas au moment de la saisie.
+Les fonctions de ce genre font partie des éditeurs (de fichiers ou de textes)
+ou des traitements de textes usuels. Bien que {\pgLapdTeX} intègre l'essentiel des
+dispositifs, certaines précautions d'usage ou certains préalables d'installation
+(décrits dans ce document) sont nécessaires. Moyennant quoi {\pgLapdTeX} fonctionne
+admirablement bien en français.
+\subsection{ Césure et caractères composés}
+\indneg{\sl \small En bref :} {\TeX} a été conçu avec une petite faiblesse : son incapacité à couper
+(en bout de ligne) les mots contenant la primitive
+\verb!\accent!
+qui est utilisée
+à chaque fois que l'on désire imprimer une lettre accentuée. Heureusement
+divers contournements existent ; les deux principaux sont les suivants :
+
+\begin{itemize}
+\item l'utilisation de {Ml\TeX} (voir paragr. \ref{qmltex}) ;
+\item l'utilisation de polices de caractères contenant tous les caractères composés
+nécessaires au français : les fontes \textit{ec} ou les fontes \textit{lmodern}, au
+codage \texttt{T1}, répondent à ce critère (mais il en existe bien d'autres).
+\end{itemize}\indpos
+
+À condition d'avoir choisi l'une de ces deux possibilités, \LaTeX{} offre alors,
+à ce niveau, tous les dispositifs nécessaires au français ; il faut éventuellement
+lui préciser aussi le codage du texte d'entrée (voir paragr. \ref{inenco}) et celui des
+fontes (voir paragr. \ref{soncodent}).
+
+\indneg{\TeX\sl nique :} rappelons que ces codages sont précisés comme suit :
+\begin{center}
+\fbox{\parbox{0.6\textwidth}
+{\texttt{$\backslash$usepackage[}\textit{codage\_d'entrée}\texttt{]\{inputenc\}}\\[.5ex]
+\texttt{$\backslash$usepackage[}\textit{codage\_des\_fontes}\texttt{]\{fontenc\}}}}
+\end{center}
+
+\subsection{ Caractères français}
+\indneg{\sl \small En bref :} Celui qui publie en français utilise un jeu de caractères adapté à la langue. Chaque
+caractère a une position alphabétique. Lorsque l'on réalise des index et des
+bibliographies, il est d'usage de respecter l'ordre alphabétique français.
+On pourra consulter le
+ \linkandfootnote{docja}{document de Jacques André}
+{http://jacques-andre.fr/faqtypo/unicode/alpha-fr.pdf} sur le sujet.
+%21. <>.
+%6
+
+\indneg{\TeX\sl nique :} Voici donc le jeu de caractères exact dans l'ordre alphabétique :\\
+\rule{0pt}{1ex}\\
+\fbox{\begin{tabular}{*{21}{c@{\hspace{1.4ex}}}}
+a&A&à&À&â&Â&æ&Æ&b&B&c&C&ç&Ç&d&D&e&E&é&É&è\\
+È&ê&Ê&ë&Ë&f&F&g&G&h&H&i&I&î&ÃŽ&ï&Ã&j&J&k&K\\
+l&L&m&M&n&N&o&O&ö&Ö&œ&Œ&p&P&q&Q&r&R&s&S&t\\
+T&u&U&ù&Ù&û&Û&ü&Ü&v&V&w&W&x&X&y&Y&ÿ&Ÿ&z&Z\\
+\end{tabular}}
+\subsection{Motifs français de césure}\label{motfrahup}
+\indneg{\sl \small En bref :} {\TeX} peut couper les mots français selon l'usage si son format (voir
+paragr. \ref{quoiFormat}) qui a été créé avec \texttt{initex}
+ou \texttt{virtex} contient une table des
+motifs français de césure. L'association GUTenberg est le garant de la validité
+de cette table.\indpos
+
+Le fichier correspondant
+ \linkandfootnote{frhyphCtan}{\tt frhyph.tex}
+{http://mirror.ctan.org/language/hyphenation/}
+%{http://ctan.tug.org/language/hyphenation/}%
+%(frhyph.tex) 22
+est utilisé dans toutes les distributions
+francisées ; il est aussi accessible sur les serveurs
+\linkandfootnote{frhyphCtan}{\tt ctan}
+{http://mirror.ctan.org/language/hyphenation/frhyph.tex}
+% ctan23
+ Mais dans la distribution {\it eFrench} est aussi incluse
+une extension en $\beta$test de \texttt{frhyph.tex},
+nommée \linkandfootnote{frhyph1}{\texttt{frhyph1.tex}}
+{http://www.efrench.org/hyphen/frhyph1.tex}
+ et proposée par Bernard Gaulle.
+
+Ces motifs français de césure ont été mis au point tout au long des années ;
+ils sont actuellement le meilleur compromis pour appliquer une coupure correcte
+de mots dans un document français. Il est donc fortement conseillé de
+faire confiance à ces motifs de césure et de n'appliquer qu’exceptionnellement
+des modifications de césure ponctuelles dans le document lui-même ou dans
+un fichier séparé, mais jamais dans les fichiers officiels précités.
+
+Pour mieux connaître et comprendre ces motifs de césure on consultera
+l'article \cite{cesures} publié dans les Cahiers GUTenberg.
+
+
+\indneg{\TeX\sl nique :} Le fichier des motifs français de césure est chargé automatiquement,\begin{MAJ}
+à l'installation de la langue \texttt{french} dans le moteur (Mik\TeX{} ou \TeX Live, par exemple).
+Ceci se fait en deux phases :
+\begin{enumerate}
+\item le chargement dans le système (Mik\TeX{} , \TeX Live, ...) d'une langue, que ce soit
+\texttt{french} ou une autre, adapte le fichier \texttt{language.dat} en y incorporant
+les dénominations les fichiers de césure correspondants.
+\item la partie de \textit{ babel} (voir paragr. \ref{forbabel}) qui est est incorporée
+au moteur {\LaTeX} charge les fichier de césure selon le contenu de \texttt{language.dat},
+sans que \textit{ babel} soit invoqué explicitement.
+\end{enumerate}
+Remarquons que c'est aussi à cause de ce mécanisme qu'il n'est plus
+nécessaire de créer les formats \texttt{fr}...\texttt{tex} .
+\end{MAJ}
+%la création du format (voir paragr. 1.3) soit par hyconfig.tex25 de la
+%distribution FrenchPro 24 ou
+%e fichier de configuration language.dat26 :
+%22. <>.
+%23. <>.
+%24. <http://frenchpro6.com/frenchpro/french/initex/>.
+%25. <http://frenchpro6.com/frenchpro/french/initex/>.
+%7
+%le fichier de configuration language.dat26 :
+Voici à titre documentaire la partie de \texttt{language.dat} définissant les césures de la langue française :\\[0.5ex]
+\begin{minipage}{12cm}
+ici précédée par l'anglais \\[0.5ex]
+\fbox{
+\begin{minipage}{11cm}
+\tt
+\%==============================================/ \\
+\% Name~~~| patterns ~| exceptions | ~ encoding / \\
+\%==============================================/ \\
+usenglish ushyph.tex \% this is the original ~ ~/ \\
+\rule{0pt}{1pt} ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ \% Don. Knuth's hyphenation/ \\
+=english ~enhyph.tex ~enhyphex.tex \% ~ ~ ~ ~ ~ / \\
+french ~~ frhyph.tex ~frhyphex.tex \% ~ ~ ~ ~ ~ / \\
+=patois ~ \% ~ ~ ~ ~ ~\% ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ / \\
+=acadien ~\% ~ ~ ~ ~ ~\% ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ / \\
+ german ~ ~dehypht.tex\% traditional german ~ ~ ~/\\
+\vdots
+\end{minipage}\\[1ex]
+}\\[1ex]
+et suivie de l'allemand traditionnel et d'autres langues ...
+\end{minipage}
+\indpos
+%...celui de
+
+Il est à noter que la césure d'un mot est fortement liée à la fonte utilisée
+et aussi au codage (voir paragr. \ref{fontcoda}) de cette fonte. Heureusement le fichier
+des motifs français est indépendant des codages de fontes usuels, tels que \texttt{T1}
+ (préférable) et \texttt{OT1}.
+\subsection{ Faut-il saisir avec un clavier français ?}
+\indneg{\sl \small En bref :} Le clavier doit, avant tout, vous être familier.
+Que la disposition des touches soit française
+(\texttt{AZERTY}) ou autre (en général \texttt{QWERTY}, en Suisse \texttt{QWERTZ})
+n'est pas vraiment un problème pour
+\pgLapdTeX. Il est souhaitable que l'éditeur de document utilisé facilite la saisie
+des éléments français répétitifs dans vos textes. C'est le cas des caractères
+composés. Si vous ne disposez pas de tous les caractères composés au clavier,
+il faut alors que l'éditeur accepte des combinaisons de touches permettant de
+les afficher à l'écran sous leur forme normale.
+%Si ce n'est pas le cas vous pouvez
+%configurer cela vous même, facilement, grâce à l'extension keyboard (voir
+%paragr. 2.7) de FrenchPro.
+
+\indpos Avec \LaTeX, par défaut, vous êtes supposé saisir de l'{\sc ascii} (7-bits), ce qui
+correspond aux possibilités du clavier \texttt{QWERTY} des anglo-saxons. Comme il y a
+de fortes chances pour que ce ne soit pas votre cas ou du moins que vous ne
+le souhaitiez pas, vous devrez le préciser en nommant votre codage d'entrée
+(voir ci-après).
+\subsection{Quel codage d'entrée faut-il préciser à \LaTeX?}
+\label{inenco}
+\indneg{\sl \small En bref :} Le codage d'entrée de votre texte saisi ({\it input encoding} en anglais)
+peut être spécifié au moyen de l'extension \textit{inputenc}
+(standard \LaTeX).
+% ou keyboard (voir paragr. 2.7) de FrenchPro. L'intérêt de
+%l'un ou de l'autre est différent (voir paragraphe suivant).
+%26. <http://frenchpro6.com/frenchpro/french/inputs/french/>.
+%8
+
+\indneg{\TeX\sl nique :} Par défaut, \LaTeX{} est chargé avec le codage d'entrée {\sc ascii} de la façon
+suivante :\indpos
+\begin{center}
+\fbox{\parbox{0.5\textwidth}
+{\texttt{$\backslash$usepackage[ascii]\{inputenc\}}}}
+\end{center}
+%\usepackage{inputenc}
+\begin{MAJ}
+
+Le codage \textsc{utf-8} est aujourd'hui présent pratiquement sur tous les systèmes.
+Afin de rendre vos fichiers compatibles sur plusieurs machines,
+c'est la meilleure solution.
+Vous choisissez alors pour vos sources \pgLapdTeX ce code :
+\begin{center}
+\fbox{\parbox{0.5\textwidth}
+{\texttt{$\backslash$usepackage[utf8]\{inputenc\}}}}
+\end{center}
+\end{MAJ}
+
+Si vous êtes sous Windows le codage par défaut est \texttt{ansinew} ; il vous
+faudra alors coder :
+\begin{center}
+\fbox{\parbox{0.5\textwidth}
+{\texttt{$\backslash$usepackage[ansinew]\{inputenc\}}}}
+\end{center}
+%\usepackage[ansinew]{inputenc}
+%%ou %\usepackage[ansinew]{keyboard}
+\begin{MAJ}
+Il faut aussi savoir que quelques caractères bien utiles au français
+ont été omis dans le codage \textsc{iso-latin-1}, comme le e dans l'o (œ, Œ),
+ce qui a été corrigé dans \textsc{iso-latin-9}.
+Malgré tout \textsc{utf-8} est préférable, maintenant que Windows
+le supporte aussi (de mieux en mieux). L'éditeur gratuit \textit{Notepad++}
+permet sous Windows de faire passer un texte d'un codage à l'autre très facilement.
+\end{MAJ}
+
+Si vous êtes sur un Macintosh, le codage Apple est acceptable en français ;
+codez alors :
+\begin{center}
+\fbox{\parbox{0.5\textwidth}
+{\texttt{$\backslash$usepackage[applemac]\{inputenc\}}}}
+\end{center}
+%\usepackage[applemac]{inputenc}
+%%ou %\usepackage[applemac]{keyboard}
+\begin{MAJ}
+Si enfin vous êtes sous \textsc{Unix} (ou \textsc{Linux}), le codage le plus adéquat est \textsc{utf-8}
+qui est le codage par défaut de ces plateformes.
+\end{MAJ}
+
+%celui qui répond
+%au nom de iso-latin-9 ; si vous ne l'avez pas avec \LaTeX{} vous pouvez utiliser
+%le codage decmulti qui est très proche ou sinon l'iso-latin1. Vous pouvez
+%alors coder comme suit :
+%soit %\usepackage[latin9]{inputenc}
+%soit %\usepackage[decmulti]{inputenc}
+%soit %\usepackage[latin1]{inputenc}
+%soit enfin %\usepackage[latin9]{keyboard}
+%Le codage
+%iso-latin-9 est proposé en standard avec l'extension keyboard (voir
+%paragr. 2.7) de FrenchPro.r
+%Un autre codage se généralise actuellement ; il devient progressivement le
+%codage par défaut dans les systèmes d'exploitation, il s'agit du codage utf8
+%issu d'unicode. Vous pouvez le coder comme suit :
+%soit %\usepackage[utf8]{inputenc}
+%soit enfin %\usepackage[utf8]{keyboard}
+%D'autres codages existent, reportez-vous à la documentation \LaTeX{} ou à
+%celle de FrenchPro (voir paragr. 2.11).
+%2.7 Faut-il utiliser l'extension keyboard à la place de
+%inputenc ?
+%\indneg{\sl \small En bref :} Il y a de nombreux avantages (et certainement des inconvénients) à
+%utiliser l'extension keyboard 27, cela est expliqué dans la documentation de
+%l'extension FrenchPro (voir paragr. 2.11). Vous pouvez sans crainte particuli`
+%ere remplacer inputenc par keyboard. Dans un environnement mltex6 elle
+%remplace à la fois inputenc et mltex. Cela étant dit, si votre format (voir
+%27. <http://frenchpro6.com/frenchpro/french/inputs/>.
+%9
+%paragr. 1.3) est entièrement francisé avec FrenchPro vous n'avez, a priori,
+%pas besoin de faire appel à cette extension tant que vous ne changez pasr de
+%codage d'entrée dans vos documents car FrenchPro fait déjà appel à l'extension
+%keyboard ou plutôt au configurateur kbconfig.tex28 à la création du
+%format (voir paragr. 1.3).
+\subsection{Peut-on avoir son propre codage d'entrée ?}
+\label{soncodent}
+\indneg{\sl \small En bref :} oui, mais cela est fortement déconseillé si vous devez transmettre votre
+document source à des tiers inconnus.
+
+\indneg{\TeX\sl nique :} Avec l'extension \textit{inputenc} (voir paragr. 2.6) il vous faudra définir
+un fichier personnel contenant la description des 256 caractères possibles de
+votre codage perso ; c'est un peu fastidieux si vous voulez changer beaucoup
+de caractères.
+\textit{FrenchPro} proposait l'extension \textit{keyboard}.
+
+\begin{MAJ}
+L'option \textit{keyboard} n'a pas été reprise par \textit{eFrench},
+ la prolifération des codages d'entrée pour le français s'étant
+drastiquement tassée et \textsc{utf-8} offrant une palette de caractères dépassant largement
+la limite de 256 imposée par un codage en 8 bits.
+\end{MAJ}
+%Grâce à l'extension keyboard (voir paragr. 2.7) de la distribution French-r
+%Pro (voir paragr. 2.11) vous pouvez déclarer votre propre codage d'entrée ; il
+%suffit d'éditer un fichier de configuration et d'entrer les caractères souhaités,
+%par exemple :
+%%------ Tableau des caracteres accentues de mo/
+%% \______________________________________/
+%% |___1__|___2__|___3__|___4__|___5__|___/
+%\ac[ \‘ | \' | \" | \^ | {\c} | ] /
+%\noms| gr | ac | um | hat | c | /
+%%---------------------------------------------/
+%[a | à | . | ¨a | â | . | ] /
+%\hex| ^^e0 | . | ^^e4 | ^^e2 | . | /
+%[A | à | . | ¨A | â | . | ] /
+%\hex| ^^c0 | . | ^^c4 | ^^c2 | . | /
+%%---------------------------------------------/
+%Cette extension keyboard est utilisable soit au chargement d'un document
+%soit au moment de la création du format (voir paragr. 1.3) ce qui revient à
+%appliquer, par défaut, un même codage à tous les documents. Il est, cependant,
+%toujours possible de changer de codage « à la volée » à l'intérieur d'unr
+%document :
+%%\usepackage{inputenc}1.3
+%ou %\usepackage{keyboard}
+%...
+%\inputencoding{nouveau_codage }
+%ou \kbencoding{nouveau_codage }
+%28. <http://frenchpro6.com/frenchpro/french/inputs/keyboard/>.
+%10
+\subsection{Quel codage de police employer avec \LaTeX{} ?}
+\indneg{\sl \small En bref :} Pour simplifier, il y a essentiellement deux codages de police utilisables
+en français avec \LaTeX: \texttt{T1} ou \texttt{OT1} (voir paragr. \ref{fontcoda}).\indpos
+
+Le codage \texttt{OT1} étant la valeur par défaut en \LaTeX, rien n'est à préciser
+dans le document. Mais il faut savoir que ce codage doit être employé
+conjointement avec un format Ml\TeX (voir paragr. \ref{qmltex}) pour bénéficier de la
+césure des mots accentués.
+{\em Mais cette méthode est aujourd'hui dépassée.}
+
+Lorsqu'on dispose de fontes codées \texttt{T1}, comme les \textit{ec} ou les \textit{lmodern}, il
+faut alors le préciser à \LaTeX, cf ci-dessous.
+
+\indneg{\TeX\sl nique :} Pour choisir un codage de fontes \texttt{T1} et utiliser les fontes associées par
+défaut on codera :
+
+\begin{center}
+\fbox{\parbox{0.5\textwidth}
+{\texttt{$\backslash$usepackage[T1]\{fontenc\}}}}
+\end{center}\indpos
+%%\usepackage[T1]{fontenc}
+
+On notera que toutes les polices PostScript Adobe de base sont utilisables
+en codage \texttt{T1} bien que des glyphes manquent pour certaines langues. Pour
+utiliser une fonte PostScript de base de chez Adobe (\textit{Times} par exemple)
+on fait appel, en général, à l'extension correspondante :
+
+\begin{center}
+\fbox{\parbox{0.4\textwidth}
+{\texttt{$\backslash$usepackage\{times\}}}}
+\end{center}\indpos
+
+selon Bernard \textsc{Gaulle} toutefois, il est préférable de coder :
+\begin{center}
+\fbox{\parbox{0.4\textwidth}
+{\texttt{$\backslash$usepackage\{pslatex\}}}} .
+\end{center}\indpos
+%%\usepackage{pslatex}
+
+Certaines extensions forcent un codage de fontes ; c'est, par exemple, le cas
+de l'extension
+\linkandfootnote{fourier-GUT}{fourier}{http://mirror.ctan.org/fonts/fourier-GUT}
+%fourier 16
+qui utilise les fontes fourier-GUT et exige le codage
+\texttt{T1}.
+
+\maj
+%LO1 est le codage employé, en interne, lorsque l'on fait appel à l'extension
+%MlTEX (voir paragr. 1.5) :
+%%\usepackage{mltex}
+%Si l'on dispose des fontes em (codées LY1) on fera appel à l'extension em :
+%%\usepackage{em}
+
+\subsection{{\TeX} parle anglais... irrémédiablement !}
+\indneg{\sl \small En bref :} L'essentiel des messages émis par \TeX{} réside dans un fichier spécifique
+et rien n'empêche l'installateur de traduire ces messages en français,
+même s'il est ensuite difficile de s'y retrouver dans la documentation de référence
+qui est en anglais. Par ailleurs, il restera toujours quelques messages
+en anglais qui font partie du programme \TeX{} lui-même. Ce qu'il faut aussi
+savoir, à ce niveau, c'est que \TeX{} n'est qu'un moteur fait pour véhiculer des
+programmes, des styles typographiques et des extensions ; toutes sortes de
+choses qui existent en grand nombre et sont toutes (ou presque) développées
+avec des messages en anglais. Par ailleurs, tous les messages de \LaTeX{} sont
+aussi en anglais. Dans ces conditions, une francisation du dialogue \TeX{} et de
+ses extensions semble donc totalement illusoire...
+%11
+
+\indneg{\TeX\sl nique :}\indpos Toutefois, Bernard Gaulle a créé une extension \LaTeX{} qui permet de fournir des messages
+dans la langue de son choix ; il s'agit de l'extension \emph{msg} (%
+\linkandfootnote{doctecmsg}{ documentation technique}
+{http://svn.tuxfamily.org/viewvc.cgi/efrench\_efrenchsources/trunk/doc/msg.pdf}%
+).
+%29. <http://svn.tuxfamily.org/viewvc.cgi/efrench_efrenchsources/trunk/doc/msg.pdf>29
+Ainsi, tout \LaTeX{} pourrait, en théorie, parler autre chose que
+l'anglais. La première application de ce système de localisation s'est faite,
+bien entendu, dans \textit{FrenchPro} qui ainsi « parle » plusieurs langues.
+Cette extension a été reprise dans \textit{eFrench}.
+
+\subsection{Qu'est-ce que \textit{FrenchPro (eFrench)} ?}\label{qeFrenchPro}
+
+\indneg{\sl \small En bref :} Au fur et à mesure du temps (depuis 1989) et aidés par les utilisateurs
+français de \TeX{} nous (Bernard Gaulle et al.) avons mis en œuvre divers ajustements des paramètres
+de \TeX{} de façon à obtenir un aspect typographique plus conforme à l'usage,
+en France et dans le monde francophone. Ces modifications, éparses et parfois
+divergentes, ont été collectées et normalisées par votre serviteur
+(Bernard Gaulle, voir page \pageref{prempage})
+pour en faire un style unique, robuste et de qualité, appelé à l'origine le
+{\it style french}\footnote{ Le \textit{style french} qui fonctionnait aussi très bien avec plainTEX et \LaTeX{} 2.09 ne fonctionne
+plus qu'avec \LaTeX{} 2$\epsilon$ depuis la version 4 de \textit{french}}
+% ; voir toutefois les explications au paragr. 5.5.}
+Il se décline maintenant en deux extensions :
+\begin{MAJ}
+ \textit{eFrench} (successeur de \textit{FrenchPro}) et
+\texttt{frenchle}\cite{frenchle} ; \textit{FrenchPro} était distribuée en \textit{shareware}, \textit{eFrench}
+et \texttt{frenchle} sont des logiciels libres (LPPL).\\[2ex]
+\end{MAJ}
+
+\noindent
+%\subsubsection*{frenchle}
+{\Large \it frenchle}\\[2ex]
+\indneg{\sl \small En bref :} cette extension a pour objectif de réaliser un maximum de francisation
+avec un minimum logiciel et sans connaissance particulière de la part de
+l'utilisateur (%
+\linkandfootnote{docfrenchle}{voir la documentation provisoire}
+{http://mirror.ctan.org/language/french/e-french/doc/manuels/frenchle.pdf}%
+%language/french/doc/frenchle.pdf}%
+).
+%voir la documentation 31
+\maj Cette extension supporte le français et l'anglais ;
+elle est utilisable seule ou en option de \textit{babel}. Une petite extension \textit{babelfr}
+est fournie avec \textit{frenchle} pour faciliter la francisation des autres extensions
+utilisées dans le document.\\[1ex]
+
+\indneg{\TeX\sl nique :} Pour charger l'extension \textit{frenchle} il faut procéder comme suit :
+\begin{center}
+\fbox{\parbox{0.9\textwidth}{
+\texttt{$\backslash$usepackage\{frenchle\}}
+\begin{flushright}
+ou ~ \texttt{$\backslash$usepackage[frenchle]\{babel\}}\\
+ou plutôt ~ \texttt{$\backslash$usepackage[frenchle]\{babelfr\}}
+\end{flushright}
+}}\\[0.5ex]
+\end{center}\indpos
+
+ou mieux lorsqu'on utilise \textit{babel} (voir paragr. \ref{forbabel}) :
+\begin{center}
+\fbox{\parbox{0.9\textwidth}{
+\texttt{$\backslash$documentclass[french]}\{\textit {classe\_de\_document} \}\\
+\rule{0.4\textwidth}{0pt} \vdots
+ \begin{flushright}
+\texttt{$\backslash$usepackage\{babelfr\}}
+\end{flushright}
+}}\\[4ex]
+\end{center}
+%\documentclass[french]{classe_de_document }
+%...
+%%\usepackage{babelfr}
+\noindent
+{\Large \it FrenchPro} ou plutôt son successeur {\Large \it eFrench}\\%[1ex]
+
+%30.
+%31. <http://mirror.ctan.org/language/french/frenchle/frenchle.pdf>.
+%32. <http://frenchle.free.fr/>.
+%33. <http://mirror.ctan.tug.org/language/french/>.
+%12
+\indneg{\sl \small En bref :} cette extension permet un francisation professionnelle de \LaTeX. Une
+distribution logicielle spécifique est associée à chaque système d'exploitation
+sur le serveur
+\linkandfootnote{distribefr}{efrench}
+{http://www.efrench.org/distributions/}
+%{http://mirror.ctan.org/language/french/frenchle/frenchle.pdf}%
+ ; elle réside aussi sur
+\linkandfootnote{ctanefr}{\tt ctan}
+{http://mirror.ctan.org/language/french/e-french/}.\indpos
+
+Le fichier \linkandfootnote{ctanmanuefr}{\tt efrench.pdf}
+{http://mirror.ctan.org/language/french/e-french/doc/manuels/efrench.pdf}
+ est à la fois un mode d'emploi et un manuel de référence.
+Vous y trouverez de nombreuses commandes (plus de 170) permettant
+une personnalisation maximum\cite{personnalis} de vos documents (voir à ce sujet un descriptif
+des fonctions de personnalisation dans le document
+\linkandfootnote{artET98pdf}{\tt\hbox{artET98.pdf}}
+{http://svn.tuxfamily.org/viewvc.cgi/efrench_efrenchsources/trunk/doc/artET98.pdf?view=co}
+).
+
+\textit{FrenchPro} comme désormais \textit{eFrench} jouent essentiellement 7 rôles :
+\begin{enumerate}
+\item coupure correcte des mots français ;
+\item traduction en français des différents libellés imprimés par \LaTeX;
+\item possibilité d'utiliser plusieurs langues dans un même document ;
+\item mise en page adaptée à l'usage français ;
+\item micro-typographie (essentiellement la ponctuation) adaptée au français ;
+\item apport d'un ensemble supplémentaire de macro-instructions généralement
+nécessaires dans un document français (dont une liste d'abréviations
+usuelles, des lettrines, etc.) ;
+\item affichage personnalisé des messages à l'écran.
+\end{enumerate}
+Ces rôles de l'extension \textit{eFrench} %FrenchPro
+ sont mis en oeuvre essentiellement par deux fichiers
+(\texttt{french.sty} et \texttt{fenglish.sty}) mais la distribution comprend de nombreux
+autres fichiers. Parmi ceux-ci il faut citer le fichier de césure français \texttt{frhyph.tex}
+ (voir paragr. \ref{motfrahup}). D'autres encore facilitent l'installation, la mise en place
+du mécanisme de césure, la définition du codage à la saisie, etc. Divers tests permettent
+de s'assurer du bon fonctionnement de l'ensemble.
+
+L'extension \textit{eFrench}\cite{frenchpro} est utilisable avec l'ensemble des compilateurs courants
+\TeX{} ou les
+\linkandfootnote{autres}{platesformes}
+{http://mirror.ctan.org/systems/}{ }
+%platesformes 20
+d'exploitation mais aussi avec les options
+Ml\TeX (voir paragr. \ref{qmltex}) et \texttt{TeX--XeT} (voir paragr. \ref{qtexxet}).
+
+\indneg{\TeX\sl nique :} \indpos Une fois installée dans le système, l'extension \textit{eFrench} peut être
+appelée de telle façon, suivant qu'elle est utilisée avec l'extension multilingue
+\textit{mlp} (voir paragr. \ref{latexmullin}) ou avec \textit{babel} :
+\begin{center}
+\fbox{\parbox{0.9\textwidth}{
+\texttt{$\backslash$usepackage[french]\{mlp\}}
+\begin{flushright}
+ou ~ \texttt{$\backslash$usepackage[french]\{babel\}}
+\end{flushright}
+}}\\[0.5ex]
+\end{center}
+
+Si l'on souhaite qu'un maximum d'extensions bénéficient de la francisation
+il est préférable de coder plutôt :
+\begin{center}
+\fbox{\parbox{0.9\textwidth}{
+\texttt{$\backslash$documentclass[french]}\{\textit {classe\_de\_document} \}\\
+\rule{0.4\textwidth}{0pt} \vdots \\
+ \texttt{$\backslash$usepackage\{mlp\}} \hfill
+ou ~ \texttt{$\backslash$usepackage\{babel\}}
+}}\\[4ex]
+\end{center}
+En conjugaison avec \textit{babel}, seuls quelques dispositifs
+sont actuellement inopérants (comme par exemple l'ordre
+\texttt{$\backslash$frhyphex}) mais
+dans ce cas \textit{eFrench} n'est plus une extension autonome mais seulement
+une option de l'extension \textit{babel}, ce qui témoigne de la différence de fonctionnement.
+Si on désire utiliser \textit{eFrench} entièrement de façon native, dans
+un environnement multilingue on fera plutôt appel à l'extension \textit{mlp}
+(voir paragr.\ref{latexmullin}).
+
+%\documentclass[french]{classe\_de\_document }
+%...
+%%\usepackage{mlp} ou %\usepackage{babel}
+%34. <http://frenchpro6.com/french.html>.efrench.org
+%35. <http://mirror.ctan.tug.org/language/french/frenchpro/>.
+%36. <http://frenchpro6.com/frenchpro/french/ALIRE.pdf>.
+%37. <http://frenchpro6.com/frenchpro/french/doc/artET98.pdf>.
+%13
+\subsection{ Y a-t-il d'autres extensions pour le français ?}
+L'extension \textit{babel}, qui permet d'utiliser une grande variété de langues
+dans un même document, propose une option de francisation «
+\linkandfootnote{frenchb}{\textit{french\textbf{b}}}
+{http://daniel.flipo.free.fr/frenchb/frenchb-doc.pdf} ».
+Cette option, développée par Daniel \textsc{Flipo}, apporte des facilités de microtypographie
+ainsi que, bien entendu, de traduction en français. Elle est en
+tout point, très comparable, à l'extension \texttt{frenchle} dont elle s'inspire\footnote{%
+« I have borrowed many ideas from Bernard's file. » (frenchb v1.1 revised
+1996/05/31)}.
+Il faut savoir que \hbox{\textit{french\textbf{b}}} n'est pas, pour des raisons historiques et de
+cohérence, l'option prédominante avec \textit{babel} dans \textit{eFrench} (ou avec \textit{babelfr}
+de \textit{frenchle}) quand on précise l'option \textit{french} au lieu de \textit{frenchb}. Par ordre
+de préférence, c'est \textit{eFrench} (\texttt{french.sty}) qui est chargé, à défaut ce sera \texttt{frenchle},
+%\texttt{frenchb} si aucune des précédentes n'est présente.
+ou \texttt{frenchb} sinon.
+
+\indneg{\TeX\sl nique :} Pour bien choisir l'extension de francisation que l'on désire employer
+avec \textit{babel}\/ il suffit que vous précisiez la bonne option :
+\begin{center}
+\fbox{\parbox{0.9\textwidth}{
+\begin{flushright}
+soit ~ \texttt{$\backslash$usepackage[frenchle]\{babel\}}\\
+mais plutôt ~ \texttt{$\backslash$usepackage[frenchle]\{babelfr\}}
+\end{flushright}
+soit ~ \texttt{$\backslash$usepackage[frenchb]\{babel\}}
+\begin{flushright}
+soit enfin ~ \texttt{$\backslash$usepackage[efrench]\{babel\}}
+\end{flushright}
+}}\\[4ex]
+\end{center}
+%FL soit %\usepackage[frenchle]{babel}
+%FL mais plutôt %\usepackage[frenchle]{babelfr}
+%soit %\usepackage[frenchb]{babel}
+%FL soit enfin %\usepackage[frenchpro]{babel}
+\section{ Autres outils français}
+\Subsubsection*{Guillemets aeguill}
+\indneg{\sl \small En bref :} Cette extension
+\linkandfootnote{aeguill}{\it aeguill}
+{http://mirror.ctan.org/macros/latex/contrib/aeguill}
+dûe à Denis {\sc Roegel} apporte un choix de
+fontes supplémentaire pour l'impression des guillemets français (fait appel à
+l'extension \texttt{ae})
+\Subsubsection*{Dictionnaire}
+\indneg{\sl \small En bref :} Réalisé par Christophe \textsc{Pythoud}, et nommé
+\linkandfootnote{dictfran}{francais-GUTenberg}
+{http://cahiers.gutenberg.eu.org/cg-bin/article/CG_1998___28-29_252_0.pdf} %41
+ ce dictionnaire élaboré, fonctionne avec le vérificateur d'orthographe {\sc ispell} (et donc
+ne peut être utilisé que sur les systèmes pour lesquels {\sc ispell} est disponible).
+\Subsubsection*{Classe lettre}
+\indneg{\sl \small En bref :} La classe
+\linkandfootnote{lettreobsgen}{\it lettre}
+%{http://www.pirbot.com/mirrors/ctan/macros/latex/contrib/lettre/lettre.pdf}%42
+{http://mirror.ctan.org/macros/latex/contrib/lettre/}
+, de Denis \textsc{Mégevand}, est une adaptation du style
+lettre développé à l'origine à l'Observatoire de Genève. Elle permet de composer
+avec \LaTeX{} des lettres ou des téléfax dont l'allure correspond mieux
+aux usages francophones.
+
+\begin{MAJ}
+Elle fonctionne parfaitement avec \textit{frenchb} (et \textit{babel}).
+Elle est désormais compatible avec le style \emph{french} de {\sc eFrench}.
+%Un défi supplémentaire pour notre équipe !
+
+\end{MAJ}
+\Subsubsection*{Bibliographie et index}
+%38. <>.
+%39.
+%40. <>.
+%41. <>.
+%42. <>.
+%14
+Il existe dans \textit{eFrench} un système de traduction des libellés utilisés pour
+une bibliographie. D'autres contributions à la typographie française existent\cite{lepetity} sur
+\linkandfootnote{bibctan}{\tt ctan}
+{http://mirror.ctan.org/biblio/bibtex/}.
+
+\indneg{\TeX\sl nique :} pour trier correctement les entrées bibliographiques on utilisera de
+préférence la version 8-bits de BiB\TeX{} : \textit{bibtex8}, et \textit{x\r{\i}ndy} pour l'index.
+\section{ \LaTeX{} multilingue}\label{latexmullin}
+\indneg{\sl \small En bref :} L'extension
+\linkandfootnote{babel}{\it babel}
+{http://mirror.ctan.org/macros/latex/required/babel/}
+ de \LaTeX{} permet de composer des documents faisant
+appel à de nombreuses langues de la planète, écrites ou imprimées.
+Il existe d'autres extensions multilingues, dont les extensions fournies avec \textit{eFrench}
+et \texttt{frenchle} qui sont conçues pour fonctionner dans un environnement multilingue
+(avec par défaut le français et l'anglais) mais aussi l'extension \textit{mlp}.\\
+
+{\Large\textit{L'extension mlp}}\\
+
+\indneg{\sl \small En bref :} Il s'agit d'une extension multilingue qui permet une cohabitation
+harmonieuse d’extensions linguistiques autonomes ; elle
+fait partie intégrante du paquet
+% est distribuée avec
+\hbox{\textit{eFrench}}.
+
+\indneg{\TeX\sl nique :} On peut faire appel à
+\linkandfootnote{mlp}{\it mlp}
+{http://svn.tuxfamily.org/viewvc.cgi/efrench\_efrenchsources/trunk/inputs/mlp/}
+de la façon suivante :
+\begin{center}
+\fbox{\parbox{0.75\textwidth}
+{\tt $\backslash$usepackage[english,german,french]\{mlp\}}}\\[2ex]
+\end{center}
+%%\usepackage[english,german,french]{mlp}
+ou alors ainsi :
+\begin{center}
+\fbox{\parbox{0.75\textwidth}
+{\tt $\backslash$usepackage[anglais,allemand,francais]\{mlp\}}}
+\end{center}
+%%\usepackage[anglais,allemand,francais]{mlp}\LaTeX
+et dans les deux cas les parties en anglais, en allemand ou en français seront
+composées selon ces styles. Pour passer d'une langue à une autre on code
+\texttt{$\backslash$french} ou \texttt{$\backslash$english} ou \texttt{$\backslash$german} selon le cas.\indpos
+
+\begin{MAJ}
+Remarquons toutefois que \textit{mlp} est nettement plus restreint que \textit{babel} dans
+la variété des langues disponibles, à moins de mettre la main à la pâte et de
+compléter la collection des fichier d'extension \texttt{.mlp} et des fichiers \texttt{mlp-*.sty}.
+En contrepartie, cet environnement laisse à \textit{eFrench} toutes ses possibilités.
+(voir vers la fin du paragr. \ref{qeFrenchPro})
+\end{MAJ}
+\section{Questions relatives à \textit{eFrench}}
+\subsection{Est-ce que \textit{eFrench} s'installe automatiquement ?}
+\begin{MAJ}
+\indneg{\sl \small En bref :} Si \textit{FrenchPro} oui, s'installait automatiquement, mais de manière différente
+suivant les systèmes d'exploitation, concernant \textit{eFrench} l'installation a été
+grandement simplifiée et il suffit de placer la structure du paquet au bon endroit
+dans la structure \textit{TDS}
+et de lancer un \texttt{texhash} (ou son équivalent dans Mik\TeX{},
+voir plus bas, fin du paragr. \ref{mikroot})
+concernant cet endroit et le but est atteint.
+%est
+%Avant toute chose, veuillez consulter
+%les informations concernant le moteur TEX47 que vous utilisez, pour
+%connaître les détails éventuels liés à votre compilateur.
+%43. <>.
+%45. <>.
+%46. <>.
+%47. <http://frenchpro6.com/frenchpro/french/engines/>.
+%15
+%\indneg{\TeX\\\sl nique :}
+%Avec Windows vous disposez de deux installateurs :
+%– l'un pour le moteur fpTEX48 qui est en fait un moteur teTEX49\LaTeX
+%adapté à win32.\texttt{frenchb}
+%Pour lancer l'installation placez-vous dans le répertoire french et
+%tapez :\LaTeX
+%install
+%Choisissez ensuite de préférence l'installation « à la unix » qui
+%est un peu plus longue mais beaucoup plus efficace (et surtout\indneg{\TeX\\\sl nique :}
+%complète).
+%– pour le moteur MikTEX50 vous pouvez procéder de la même mani`
+%ere ou sinon placez-vous dans le répertoire french et tapez :
+%mikinstall
+%Vous disposez, bien entendu, des procédures « uninstall » correspondantes.
+%Avec un unix le moteur de prédilection est celui de teTEX49. Pour installer
+%FrenchPro dans un environnement gnu il suffit de se placer dans le
+%répertoire french et de taper :
+%gmake -f GNUmakefile
+%Voir le fichier GNUmakefile51 pour une éventuelle personnalisation.
+%Dans un environnement non-gnu vous disposez d'un makefile.gen52
+%qu'il suffit d'adapter à votre configuration et de sauvegarder sous le
+%nom de makefile. Ensuite vous demandez simplement son exécution :
+%make\textsc{Unix}
+%Avec MacOS si vous utilisez une version de type unix (c'est-à-dire  10)\LaTeX
+%il suffit de vous reporter à la description précédente, sinon veuillez lire
+%la petite notice d'installation fournie qui vous expliquera ce qu'il reste
+%à faire 53.
+%5.2 Qu'est-ce qu'un format francisé pour FrenchPro ?
+%\indneg{\sl \small En bref :} Pour FrenchPro un format est entièrement francisé lorsque les motifs
+%de césure (voir paragr. 2.4) du français ont été installés et que le codage
+%\indneg{\TeX\\\sl nique :}
+%d'entrée (voir paragr. 2.5) du texte y a été défini.
+%48. <http://frenchpro6.com/frenchpro/french/engines/fptex.pdf>.1.3
+%49. <http://frenchpro6.com/frenchpro/french/engines/tetex.pdf>.
+%50. <http://frenchpro6.com/frenchpro/french/engines/miktex.pdf>.
+%51. <http://frenchpro6.com/frenchpro/french/GNUmakefile>.
+%52. <http://frenchpro6.com/frenchpro/french/makefile.gen>.
+%53. La distribution de FrenchPro pour MacOs 9 ou inférieur est définitivement gelée.
+%16
+%5.3 Peut-on mettre toute la francisation dans\textsc{Unix} le format?
+%\indneg{\sl \small En bref :} Qu'il s'agisse de FrenchPro ou de frenchle on utilise un format francis
+%é et on aurait envie de ne plus avoir à coder le %\usepackage{french...} ;
+%malheureusement cela n'est pas possible dans la version actuelle.
+%5.4 Pourquoi des distributions de FrenchPro pour Unix,
+%Mac et Windows?
+%\indneg{\sl \small En bref :} Il existe effectivement des distributions différentes, adaptées aux platesformes
+%d'exploitation, tout simplement parce que d'une part les codages d'entr1.3
+%ée (utilisés dans divers documents source) sont différents mais aussi parce
+%que les procédures d'installation et les configurations sont différentes.
+%5.5 FrenchPro fonctionne-t-il avec plainTEX
+%ou \LaTeX{} 2.09?
+%\indneg{\sl \small En bref :}
+%Non :
+%FrenchPro, depuis la version 4, n'est plus conçu pour fonctionner
+%avec plainTEX ni \LaTeX{} 2.09.
+%Oui :
+%il existe dans la distribution de FrenchPro (dossier obsolate) un
+%fichier frplain.sty gelé à la version V3,51 qui fonctionne avec\{mltex\}
+%plainTEX. Par ailleurs, à l'installation de FrenchPro le format
+%plain francisé est créé automatiquement.
+%Oui
+%Il y a aussi dans la distribution de FrenchPro (dossier obsolate)
+%un fichier frltx209.sty gelé à la version V3,51 qui fonctionne
+%encore avec le très, très, très ancien \LaTeX{} 2.09.
+%Ces deux derniers fichiers sont définitivement figés et ne seront plus mis
+%à jour. Ils sont destinés à aider les personnes qui ont encore des fichiers nonforbabel
+%convertis à \LaTeX. La distribution actuelle des fichiers de francisation permet
+%donc d'utiliser à la fois plainTEX, \LaTeX{} 2.09 et \LaTeX{} mais seules les extensions
+%pour \LaTeX, FrenchPro et frenchle, sont maintenues régulièrement à
+%jour.
+\subsection{Où installer \textit{eFrench} dans la hiérarchie \textit{TDS} ?}
+\indneg{\TeX\sl nique :} Les fichiers de la distribution \textit{eFrench} sont à déposer de
+préférence dans :\\
+ .../texmf-local/french, où \\
+ ... sera dépendant du système d'exploitation,
+sous \textsc{Unix} par exemple ce pourra être {\bf$\tilde{ }$} (dossier personnel),
+sous Windows on pourra simplement choisir C:$\backslash$.
+La structure finale sera : \\[1ex]
+\textit{user-space}/\texttt{texmf-local}/tex/french/...\\
+\textit{user-space}/\texttt{texmf-local}/tex/french/french.sty\\
+\textit{user-space}/\texttt{texmf-local}/tex/french/...\\
+\textit{user-space}/\texttt{texmf-local}/tex/french/french.msg\\
+\textit{user-space}/\texttt{texmf-local}/tex/french/...\\
+\textit{user-space}/\texttt{texmf-local}/tex/french/frenchle.sty\\
+%\textit{user-space}/\texttt{texmf-local}/tex/latex/...\\
+où \textit{user-space}/\texttt{texmf-local} est ~{\bf $\tilde{ }$}~/\texttt{texmf-local} sous \textsc{Unix} ; \texttt{C:$\backslash$texmf-local}
+ou un choix personnel sous Windows, du genre
+\texttt{C:$\backslash$Users$\backslash$}\textit{identificateur}\texttt{$\backslash$texmf-local}.
+En plus, sous Windows, les dossiers sont introduits par $\backslash$ et non par / .
+Sous Linux et \TeX Live, ne pas oublier l'annonce :
+\begin{center}
+\fbox{\parbox{0.4\textwidth}
+{\tt \$texhash texmf-local}}\\[1ex]
+\end{center}
+alors que sous Windows et Mik\TeX, il faut déclarer le dossier défini (\texttt{C:$\backslash$texmf-local} par exemple)
+sous {\sc Roots}\label{mikroot} et lancer {\sc Refresh FNDB}, qui sont des options d'administration de Mik\TeX.
+\end{MAJ}
+%L'installation proprement
+%dite de ces fichiers est automatique (avec le script adapté à votre système
+%17
+%d'exploitation) ; elle intervient à divers endroits de la hiérarchie tds (voir
+%paragr. 1.8) :
+%/texmf-local/doc/french/base/
+%/texmf-local/generic/hyphen/\{mltex\}
+%/texmf-local/[ml]\TeX/french/base/
+%/texmf-local/mkindex/french/
+%/texmf-local/bibtex/french/
+%/texmf-local/[ml]\TeX/french/config/
+%/texmf-local/\TeX/\LaTeX/frenchle/
+
+\indpos Pour \textit{eFrench}, vous effectuerez donc l'installation « à la main »,
+ en suivant scrupuleusement les emplacements que nous avons indiqués.
+%dans le fichier TDSfr.pdf 54 de la distribution.
+\subsection{Peut-on mettre des commandes \textit{eFrench} avant\\
+le $\backslash${\tt begin\{document\}} ?}
+\indneg{\sl \small En bref :} La documentation d'\textit{eFrench} précise
+que « le style \textit{eFrench} ne
+devient vraiment actif qu'après le $\backslash${\tt begin\{document\}} » ; on ne peut donc pas,
+en principe, exécuter de commande \textit{eFrench} avant le $\backslash${\tt begin\{document\}} ;
+sauf celles, en nombre très réduit qui peuvent agir sur tout le document.
+
+\indneg{\TeX\sl nique :} L'extension \textit{eFrench} déporte la définition même d'un grand nom\-bre
+de commandes au moment du $\backslash${\tt begin\{document\}}. Les commandes ainsi définies
+ne sont pas utilisables avant.\indpos
+
+Dans le cas d'\textit{eFrench}, quelques commandes très spécifiques peuvent
+être utilisées avant, car elles modifient son comportement au
+$\backslash${\tt begin\{document\}}.
+ Il en est ainsi de $\backslash${\tt frhyphex} pour charger un fichier de césures
+exceptionnelles ou $\backslash${\tt usersfrenchoptions} qui permet de changer les options
+par défaut de \textit{eFrench} comme dans cet exemple :
+\begin{center}
+\fbox{\parbox{0.9\textwidth}
+{\tt $\backslash$usersfrenchoptions\{$\backslash$guillemetsinallfonts\}}}\\[1ex]
+\end{center}
+%\usersfrenchoptions\{$\backslash$ guillemetsinallfonts\}
+où on a choisi une option différente pour les guillemets à la française. Grâce
+à ce mécanisme \texttt{$\backslash$usersfrenchoptions} l'activation d'options personnelles
+peut se faire à chaque changement de langue et donc initialement après le
+\texttt{$\backslash$begin{document}}. Toute règle ayant une exception, ceci fonctionne de façon
+différente avec \textit{babel} (voir paragr. \ref{forbabel}) ; consulter à ce sujet la
+\linkandfootnote{ctanmanuefr}{documentation d'eFrench}
+{http://mirror.ctan.org/language/french/e-french/doc/manuels/efrench.pdf}. %eFrench%\textit{eFrench}
+
+%54. <http://frenchpro6.com/frenchpro/french/TDSfr.pdf>.1.3
+%18
+\subsection{ Faut-il faire un format \textit{eFrench} ou un format \textit{babel} ?}
+\label{forbabel}
+\indneg{\sl \small En bref :} Que ce soit \textit{babel}
+ou \textit{eFrench} (\textit{FrenchPro}), ni l'un ni l'autre n'exige de format
+particulier mais chacun d'eux conseille de créer un format avec du matériel
+spécifique, d'où le dilemme tant de fois discuté sur les news, par exemple
+ (\texttt{fr.comp.text.tex})
+ ou sur la liste de discussion
+\linkandfootnote{GUTenberg}{GUTenberg}{http://www.gutenberg.eu.org}
+ (\texttt{gut@ens.fr}).
+%GUTenberg 12.
+Rappelons
+pour simplifier que les deux fonctionnent bien avec le matériel de l'autre,
+c.-à-d. un format construit avec les fichiers d'\textit{eFrench} n'empêchera pas
+d'utiliser \textit{babel} et réciproquement.
+\begin{MAJ}
+Il faut dire ici que l'insistance de Bernard \textsc{Gaulle},
+créateur de \textit{FrenchPro}, concernant les formats
+n'est plus de mise.
+Les installations récentes telles Mik\TeX{} ou \TeX Live offrent
+les formats de base et les moyens de créer les autres.
+\pgLapdTeX{} évolue dans le sens d'une simplification pour l'utilisateur et c'est tant mieux !
+\end{MAJ}
+%La question à se poser lorsque l'on crée son
+%format est donc : s'agit-il d'utiliser essentiellement babel ou FrenchPro ? et selon
+%le cas on crée le format le plus adapté mais rien n'empêche d'avoir aussi
+%plusieurs formats. Pour être complet, rappellons qu'il existe deux autres options
+%de francisation, l'une frenchle31 et l'autre frenchb (voir paragr. 2.12)
+%livrée en standard avec babel (et utilisable uniquement avec babel ).
+%Cela répond à la question : FrenchPro ou babel ? maintenant il faut répondre
+%à la question : FrenchPro et babel ?
+%\indneg{\TeX\\\sl nique :} On peut utiliser FrenchPro avec babel de la façon suivante :
+%%\usepackage[frenchpro]{babel}
+%ou mieux :
+%\documentclass[french]{classe_de_document }1.3
+%...
+%%\usepackage{babel}
+%sans perdre un poumon (comme disait quelqu'un), seuls quelques dispositifs
+%sont actuellement inopérants (comme par exemple l'ordre \frhyphex) mais
+%dans ce cas FrenchPro n'est plus une extension autonome mais seulement
+%une option de l'extension babel, ce qui témoigne de la différence de fonctionnement.
+%Si on désire utiliser FrenchPro entièrement de façon native dans\{mltex\}
+%un environnement multilingue on fera plutôt appel à l'extension mlp (voir
+%paragr. 4) :
+%\documentclass[french]{classe_de_document }
+%...
+%%\usepackage{mlp}% 40
+\subsection{Polices de caractères et guillemets français}
+\indneg{\sl \small En bref :} les guillemets saisis sous forme ascii (<\/<\/ ... >\/>) ou selon le code approprié
+ à votre clavier (« et »), sont utilisables avec l'extension \textit{eFrench}
+qui sait les gérer dans de nombreuses circonstances typographiques (premier
+et deuxième niveau, listes, lettrines, etc.). Concernant le choix de la police,
+\textit{eFrench} regarde quelle est la police par défaut ({\it cm}, {\it ec}, ...) pour déterminer
+%19
+quels codes de guillemets il faut imprimer. On obtiendra ainsi toujours de
+beaux guillemets français imprimés.
+
+\indneg{\TeX\sl nique :} Voici un descriptif rapide des méthodes employées :
+\begin{itemize}\item par défaut (c.-à-d. fontes {\it cm}), ces guillemets sont simulés à partir de
+glyphes venant de la police {\it lasy} (ce qui explique leur aspect légèrement
+arrondi) et, toujours par défaut, ce sont les seuls guillemets disponibles.
+Rappelons que l'utilisation de
+\texttt{$\backslash$usepackage[OT1]\{fontenc\}}
+ %\usepackage[OT1]{fontenc}
+force l'utilisation des fontes {\it cm}.
+\item avec le choix des fontes {\it ec} ou {\it lmodern} (c.-à-d. en demandant leur codage en utilisant
+\texttt{$\backslash$usepackage[T1]\{fontenc\}})
+%\usepackage[T1]{fontenc})
+les guillemets sont imprimés dans la police \texttt{$\backslash$rmdefault} et, toujours
+par défaut, ce sont les seuls glyphes de guillemets disponibles.
+
+L'ordre \texttt{$\backslash$guillemetsinallfonts }
+ permet d'utiliser les guillemets de la police
+en cours d'utilisation, quelque soit cette police ; cela permet donc de
+jouer avec les graisses, les styles et les familles de polices, (ce qui,
+selon le goût de Bernard Gaulle,
+n'est pas toujours optimum).
+\item lorsque les guillemets sont saisis en ascii (<\/< ... >\/>) les glyphes imprimés
+sont toujours des ligatures mais la manière diffère selon qu'il
+s'agit d'une police {\it lasy} ou d'une police {\it ec}. Dans le premier cas c'est
+une ligature fabriquée par l'extension {\it eFrench}, dans l'autre cas c'est
+une ligature « fondue » dans la police. En aucun cas {\pgLapdTeX} ne peut
+couper en deux un guillemet en bout de ligne.
+\item il est possible d'imprimer les guillemets avec d'autres polices ; on peut
+par exemple utiliser l'extension
+\linkandfootnote{aeguill}{\it aeguill}
+{http://mirror.ctan.org/macros/latex/contrib/aeguill}.
+%aeguill 40.% 40
+\end{itemize}
+\subsection{Comment personnaliser l'extension \textit{eFrench} ?}
+
+\indneg{\sl \small En bref :}\indpos L'extension \textit{eFrench} est entièrement configurable ; vous pouvez donc personnaliser vos documents à l'envi.
+
+\indneg{\TeX\sl nique :} Un article a été dédié à ce sujet, vous y trouverez plein de renseignements très utiles :
+\linkandfootnote{artET98pdf}{\hbox{artET98.pdf}}
+{http://svn.tuxfamily.org/viewvc.cgi/efrench_efrenchsources/trunk/doc/artET98.pdf?view=co}
+%artET98.pdf55
+en complément de la documentation d'
+\linkandfootnote{ctanmanuefr}{eFrench.}
+{http://mirror.ctan.org/language/french/e-french/doc/manuels/efrench.pdf}%eFrench.
+%Pro 36 .
+\vfill
+
+\indpos\textbf{Si vous souhaitez améliorer ce document} ce sera avec un grand
+plaisir que nous recevrions vos messages à : \indneg
+
+
+\href{mailto:efrench(at)lists.tuxfamily.org}{\texttt{efrench@lists.tuxfamily.org}}\hfill
+ou \hfill \href{mailto:raymond(at)juil.ch}{\texttt{raymond@juil.ch}}\hfill\rule{0pt}{1ex}
+ou encore \href{mailto:lb(at)laurentbloch.org}{\texttt{lb@laurentbloch.org}}
+\footnote{Attention, l'adresse m.él. fournie via les butineurs est
+piégée ; il faut la corriger à la main.}.\indpos
+%?—?
+%55. <http://frenchpro6.com/frenchpro/french/doc/artET98.pdf>.
+%20
+%\pagebreak
+\vfill
+\appendix
+
+
+
+\def\AvertO{\ \vfill%
+%%% Ceci était un extrait de la documentation de l'extension
+%%% \eFrench.
+
+ \begin{center}*---*\end{center}
+ \def\AvertO{}}
+
+\ifnoDOCinstall\par\medskip\AvertO\fi%
+\ifnoFINALS\par\medskip\AvertO\fi%
+
+\vfill
+%\newpage
+
+\bibliographystyle{plain}
+\ifx\Section\undefined\else\let\section\Section\fi% Restore \section.
+\def\refname{Références bibliographiques}
+\begin{drapeaufg}
+\begin{thebibliography}{9}
+\bibitem{lblochefr}{L. Bloch}
+ \textit{\linkandfootnote{rlblochefr}{Lancement du projet \textit{eFrench}}%
+{http://www.laurentbloch.org/MySpip3/spip.php?article166}}%http://www.laurentbloch.org/BlogLB/
+\bibitem{cesures} D. Flipo, B. Gaulle et K. Vancauwenberghe,\textit{
+\linkandfootnote{ rcesures}{Motifs de césure français}{http://cahiers.gutenberg.eu.org/cg-bin/article/CG_1994___18_35_0.pdf}},
+{\it in} Les Cahiers GUTenberg No 18, 1994.
+\bibitem{frenchle} B. Gaulle, R. Juillerat
+\textit{\linkandfootnote{reffrenchle}{%
+L'extension frenchle pour \LaTeX, notice d'utilisation 31}%
+{http://mirror.ctan.org/language/french/e-french/doc/manuels/frenchle.pdf}}, 2015
+\bibitem{frenchpro} B. Gaulle, R. Juillerat
+\textit{\linkandfootnote{ rfrenchpro}{Guide d'utilisation de l'extension \textit{eFrench}}%
+{http://mirror.ctan.org/language/french/e-french/doc/manuels/efrench.pdf}}, 2011
+\bibitem{personnalis} B. Gaulle, \textit{\linkandfootnote{commperso}{Comment peut-on personnaliser l'extension french de \LaTeX{} ?}{http://cahiers.gutenberg.eu.org/cg-bin/article/CG_1998___28-29_143_0.pdf}}
+ document {\it in} Les Cahiers GUTenberg No 28-29, 1998
+\bibitem{lepetity} E. Saudrais,
+ \textit{\linkandfootnote{rlepetity}{Le petit typographe rationel}{http://tex.loria.fr/typographie/saudrais-typo.pdf}}
+\end{thebibliography}
+
+\end{drapeaufg}
+\vfill
+\newpage
+\nooverfullhboxmark% Pourquoi faut-il le repréciser pour la versions screen?
+
+\def\footnote#1{}% nullify any footnote here.
+\tableofcontents
+
+\end{document}
diff --git a/language/french/e-french/texmf/doc/src/frabbrevlat9.tex b/language/french/e-french/texmf/doc/src/frabbrevlat9.tex
new file mode 100644
index 0000000000..ba7e433f1e
--- /dev/null
+++ b/language/french/e-french/texmf/doc/src/frabbrevlat9.tex
@@ -0,0 +1,297 @@
+% !TeX encoding = latin9
+% frabbrev.tex file (French typographic abbreviations)
+% should always be used in 8bit format (generated from
+% fxabbrev.tex which is full ASCII 7bit)
+%
+% After Bernard Gaulle's decease this work is now maintained as
+% the e-French project by a group of enthusiast users
+% under LPPL copyright as declared in http://www.efrench.org/
+%
+% Don't change this to a 7bits coding except if you are using 7bits input
+%
+% History of mods:
+% ===============
+% - Change \^i into î_ --bg 01/16/92
+% - Added shorten "cad" (remark coming from Jacques Andre) --bg 02/07/92
+% - paragraph sign (\S) followed by a tilde --bg 05/15/92
+% - recoded to 8bits --bg 08/24/92
+% - add second, seconds, premiers, premières, troisièmes...
+% numéros, Numéros and pages.
+% --bg 01/12/93
+% - strings containing a space must be within a group. --bg 98/05/15
+% - THE FIRST LETTER IS NO MORE TESTED except if the string is
+% within braces. Thus, any string beginning whith an uppercase
+% letter should be enclosed within braces. --bg 1999/11/08
+% - f8abbrev.tex and frabbrev.850 definitely removed.
+% f7abbrev.tex rename fxabbrev.tex --bg 2000/06/14
+% - few adds coming from Yves Perrousseaux' book on typo. --bg 2001/08/03
+% - corrections for second(s) and seconde(s). --bg 2001/09/20
+% - * facility added for plurals ==> 6 changes.
+% - legal units added and few other names.
+% HAPPY 10 YEARS ANNIVERSARY! --bg 2001/01/21
+% - abbrev. from Louis Guéry from CFPJ. --bg 2002/02/21
+%
+% New order : all expressions not UTF8 compatible at end -- rj 2017-04-20
+
+% Checked name Replacement
+% ============ ===========
+%
+% Notice that when the checked name is inside braces all that name
+% should be equal to "name" otherwise the first letter is not checked.
+% If checked name begins with "*" then "_name_" and "_name_s" will
+% be checked, the replacement name is the same in the two cases.
+%
+% NB: All macros have to be not expanded.
+
+premier 1\noexpand\ier%
+premiers 1\noexpand\iers%
+première 1\noexpand\iere%
+premières 1\noexpand\ieres%
+deuxième 2\noexpand\ieme%
+deuxièmes 2\noexpand\iemes%
+second 2\noexpand\fup{d}%
+seconds 2\noexpand\fup{ds}%
+seconde 2\noexpand\fup{de}%
+secondes 2\noexpand\fup{des}%
+troisième 3\noexpand\ieme%
+troisièmes 3\noexpand\iemes%
+quatrième 4\noexpand\ieme%
+quatrièmes 4\noexpand\iemes%
+
+primo \noexpand\quando{1}%
+secundo \noexpand\quando{2}%
+tertio \noexpand\quando{3}%
+quarto \noexpand\quando{4}%
+quinto \noexpand\quando{5}%
+sexto \noexpand\quando{6}%
+septuno \noexpand\quando{7}%
+octavo \noexpand\quando{8}%
+nono \noexpand\quando{9}%
+decimo \noexpand\quando{10}%
+
+{Numéro} \noexpand\Numero%
+{Numéros} \noexpand\Numeros%
+numéro \noexpand\numero%
+numéros \noexpand\numeros%
+
+monsieur M.%
+messieurs MM.%
+mademoiselle M\noexpand\fup{lle}%
+mesdemoiselles M\noexpand\fup{lles}%
+madame M\noexpand\fup{me}%
+mesdames M\noexpand\fup{mes}%
+maître M\noexpand\fup{e}%
+maîtres M\noexpand\fup{es}%
+
+{Compagnie} c\noexpand\fup{ie}%
+canton C\noexpand\fup{on}%
+docteur D\noexpand\fup{r}%
+folio f\noexpand\fup{o}%
+folios f\noexpand\fup{os}%
+monseigneur M\noexpand\fup{gr}%
+paragraphe \noexpand\S~% doit être suivi d'un numéro.
+recto r\noexpand\fup{o}%
+verso v\noexpand\fup{o}%
+
+{Académie} Acad.%
+adjectif adj.%
+{Administration} Admin.%
+ancien anc.%
+annexe ann.% from LG 2002/02/21
+{Antiquité} Antiq.%
+appendice append.%
+après apr.%
+archives arch.%
+archéologie archéol.%
+arithmétique arithm.%
+arrondissement arr.%
+article art.%
+astronomie astron.%
+avant av.%
+avenue av.% from LG 2002/02/21
+bibliographie bibliogr.%
+bibliothèque bibl.% from LG 2002/02/21
+biologie biol.%
+botanique bot.%
+boulevard bd%
+bulletin bull.%
+cad \noexpand\hbox{c.-à-d.}%
+chapitre chap.%
+chef-lieu ch.-l.%
+chronologie chronol.%
+circulaire circ.%
+circonscription circonscr.%
+{Code civil} C.civ.%
+{Code pénal} C.pén.%
+*collaborateur coll.%
+collection coll.%
+colonne col.% from LG 2002/02/21
+commandeur C.% from LG 2002/02/21
+département dép.%
+dictionnaire dict.%
+document doc.%
+{Est} E%
+*éditeur éd.% * from LG 2002/02/21
+*édition éd.% * from LG 2002/02/21
+environ env.%
+épitre ép.%
+épilogue épil.%
+établissements Éts%
+étymologie étym.%
+exemple ex.%
+expéditeur exp.% from LG 2002/02/21
+fascicule fasc.%
+faubourg fg%
+féminin fém.%
+feuillet f.%
+figure fig.%
+Frère F.% from LG 2002/02/21
+géographie géogr.%
+géologie géol.%
+géométrie géom.%
+graphique graph.%
+gravure grav.%
+habitants hab.%
+hauteur haut.%
+iconographie iconogr.%
+*illustrations illustr.% 21/01/2002
+inférieur inf.%
+introduction introd.%
+invariable invar.%
+italique ital.%
+juridique jur.%
+jurisprudence jur.%
+*ligne l.% 21/01/2002
+largeur larg.%
+latitude lat.%
+librairie libr.%
+livre liv.%
+locution loc.%
+longitude long.%
+longueur long.%
+manuscrit ms.%
+manuscrits mss.%
+masculin masc.%
+mathématiques math.%
+maximum max.% from LG 2002/02/21
+mécanique mécan.%
+mémoire mém.%
+musique mus.%
+mythologie myth.%
+{Nord} N%
+nouveau nouv.%
+nouvelle nouv.%
+numismatique numism.%
+officier O.% from LG 2002/02/21
+{Ouest} O% from LG 2002/02/21
+ouvrage ouvr.%
+*page p.% 21/01/2002
+partie part.%
+Père P.% from LG 2002/02/21
+photographie phot.%
+physique phys.%
+*planche pl.% 21/01/2002
+relié rel.% from LG 2002/02/21
+reliure rel.%
+rédaction réd.
+route rte% from LG 2002/02/21
+{Sud} S.%
+science sc.%
+scène sc.%
+section sect.%
+{Saint} St%
+{Saints} Sts%
+{Sainte} Ste%
+{Saintes} Stes%
+section sect.% from LG 2002/02/21
+siècle s.% from LG 2002/02/21
+{société} sté% 21/01/2002
+{Société} Sté% Yves Perrousseaux 2001/08/03
+substantif subst.%
+*suivant suiv.% 21/01/2002
+*suivante suiv.% 21/01/2002
+supèrieur sup.% from LG 2002/02/21
+supplément suppl.%
+téléphone tél.% Yves Perrousseaux 2001/08/03
+tome t.% from LG 2002/02/21
+traducteur trad.%
+traduction trad.%
+variante var% from LG 2002/02/21
+vers v.% from LG 2002/02/21
+voir V% from LG 2002/02/21
+volume vol.%
+
+% Unités légales :
+
+*ampère A%
+*are a%
+*bel B% from LG 2002/02/21
+*candela cd% from LG 2002/02/21
+centi c% from LG 2002/02/21
+*centiare ca%
+*centigramme cg%
+*centilitre cl%
+*centimètre cm%
+déca da% from LG 2002/02/21
+*décalitre dal%
+dècamètre dam%
+déci d% from LG 2002/02/21
+décibel dB%
+décigramme dg% from LG 2002/02/21
+décilitre dl% from LG 2002/02/21
+*franc F%
+giga G% from LG 2002/02/21
+*grade gr%
+*gramme g%
+*hectare ha%
+hect h% from LG 2002/02/21
+*hectogramme hg%
+*hectolitre hl%
+*hectomètre hm%
+*hertz Hz% from LG 2002/02/21
+*heure h%
+*jour j%
+*kelvin K% from LG 2002/02/21
+kilo k% from LG 2002/02/21
+*kilogramme kg%
+*kilohertz kHz% from LG 2002/02/21
+*kilomètre km%
+*kilovoltampère kVA% from LG 2002/02/21
+*kilowatt kW%
+kilowatt-heure kWh%
+kilowatts-heure kWh%
+*litre l%
+lux lx% from LG 2002/02/21
+méga M% from LG 2002/02/21
+*mégahertz MHz% from LG 2002/02/21
+*mètre m%
+% micro est a introduire qd on aura \mu en romain droit.
+milli m% from LG 2002/02/21
+*millibar mbar%
+*milligramme mg% from LG 2002/02/21
+*millilitre ml%
+*millimètre mm%
+*milliseconde ms% from LG 2002/02/21
+*minute min%
+*mole mol% from LG 2002/02/21
+nano n% from LG 2002/02/21
+*nanoseconde nc% from LG 2002/02/21
+*newton N% from LG 2002/02/21
+*pascal Pa% from LG 2002/02/21
+pico p% from LG 2002/02/21
+*picoseconde ps% from LG 2002/02/21
+quintal q% from LG 2002/02/21
+quintaux q% from LG 2002/02/21
+*radian rad% from LG 2002/02/21
+*seconde s%
+*stère st%
+téra T% from LG 2002/02/21
+*thermie th% from LG 2002/02/21
+*tonne t%
+*volt V%
+*watt W%
+*wattheure Wh% from LG 2002/02/21
+
+% Excerpt from ``Lexique des règles typographiques en usage a l'Imprimerie
+% nationale'', Abréviations, p7-11 and few additions.
+% plus other usual (referenced) names.
diff --git a/language/french/e-french/texmf/doc/src/frabbrevutf8.tex b/language/french/e-french/texmf/doc/src/frabbrevutf8.tex
new file mode 100644
index 0000000000..6e1655268e
--- /dev/null
+++ b/language/french/e-french/texmf/doc/src/frabbrevutf8.tex
@@ -0,0 +1,297 @@
+% frabbrev.tex file (French typographic abbreviations)
+% should always be used in 8bit format (generated from
+% fxabbrev.tex which is full ASCII 7bit)
+%
+% After Bernard Gaulle's decease this work is now maintained as
+% the e-French project by a group of enthusiast users
+% under LPPL copyright as declared in http://www.efrench.org/
+%
+% Don't change this to a 7bits coding except if you are using 7bits input
+%
+% History of mods:
+% ===============
+% - Change \^i into î_ --bg 01/16/92
+% - Added shorten "cad" (remark coming from Jacques Andre) --bg 02/07/92
+% - paragraph sign (\S) followed by a tilde --bg 05/15/92
+% - recoded to 8bits --bg 08/24/92
+% - add second, seconds, premiers, premières, troisièmes...
+% numéros, Numéros and pages.
+% --bg 01/12/93
+% - strings containing a space must be within a group. --bg 98/05/15
+% - THE FIRST LETTER IS NO MORE TESTED except if the string is
+% within braces. Thus, any string beginning whith an uppercase
+% letter should be enclosed within braces. --bg 1999/11/08
+% - f8abbrev.tex and frabbrev.850 definitely removed.
+% f7abbrev.tex rename fxabbrev.tex --bg 2000/06/14
+% - few adds coming from Yves Perrousseaux' book on typo. --bg 2001/08/03
+% - corrections for second(s) and seconde(s). --bg 2001/09/20
+% - * facility added for plurals ==> 6 changes.
+% - legal units added and few other names.
+% HAPPY 10 YEARS ANNIVERSARY! --bg 2001/01/21
+% - abbrev. from Louis Guéry from CFPJ. --bg 2002/02/21
+%%
+%% checksum = "20285 297 1013 10463"
+%%
+
+% Checked name Replacement
+% ============ ===========
+%
+% Notice that when the checked name is inside braces all that name
+% should be equal to "name" otherwise the first letter is not checked.
+% If checked name begins with "*" then "_name_" and "_name_s" will
+% be checked, the replacement name is the same in the two cases.
+%
+% NB: All macros have to be not expanded.
+
+premier 1\noexpand\ier%
+premiers 1\noexpand\iers%
+première 1\noexpand\iere%
+premières 1\noexpand\ieres%
+deuxième 2\noexpand\ieme%
+deuxièmes 2\noexpand\iemes%
+second 2\noexpand\fup{d}%
+seconds 2\noexpand\fup{ds}%
+seconde 2\noexpand\fup{de}%
+secondes 2\noexpand\fup{des}%
+troisième 3\noexpand\ieme%
+troisièmes 3\noexpand\iemes%
+quatrième 4\noexpand\ieme%
+quatrièmes 4\noexpand\iemes%
+
+primo \noexpand\quando{1}%
+secundo \noexpand\quando{2}%
+tertio \noexpand\quando{3}%
+quarto \noexpand\quando{4}%
+quinto \noexpand\quando{5}%
+sexto \noexpand\quando{6}%
+septuno \noexpand\quando{7}%
+octavo \noexpand\quando{8}%
+nono \noexpand\quando{9}%
+decimo \noexpand\quando{10}%
+
+{Numéro} \noexpand\Numero%
+{Numéros} \noexpand\Numeros%
+numéro \noexpand\numero%
+numéros \noexpand\numeros%
+
+monsieur M.%
+messieurs MM.%
+mademoiselle M\noexpand\fup{lle}%
+mesdemoiselles M\noexpand\fup{lles}%
+madame M\noexpand\fup{me}%
+mesdames M\noexpand\fup{mes}%
+maître M\noexpand\fup{e}%
+maîtres M\noexpand\fup{es}%
+
+{Compagnie} c\noexpand\fup{ie}%
+canton C\noexpand\fup{on}%
+docteur D\noexpand\fup{r}%
+folio f\noexpand\fup{o}%
+folios f\noexpand\fup{os}%
+monseigneur M\noexpand\fup{gr}%
+paragraphe \noexpand\S~% doit être suivi d'un numéro.
+recto r\noexpand\fup{o}%
+verso v\noexpand\fup{o}%
+
+{Académie} Acad.%
+adjectif adj.%
+{Administration} Admin.%
+ancien anc.%
+annexe ann.% from LG 2002/02/21
+{Antiquité} Antiq.%
+appendice append.%
+après apr.%
+archives arch.%
+archéologie archéol.%
+arithmétique arithm.%
+arrondissement arr.%
+article art.%
+astronomie astron.%
+avant av.%
+avenue av.% from LG 2002/02/21
+bibliographie bibliogr.%
+bibliothèque bibl.% from LG 2002/02/21
+biologie biol.%
+botanique bot.%
+boulevard bd%
+bulletin bull.%
+cad \noexpand\hbox{c.-à-d.}%
+chapitre chap.%
+chef-lieu ch.-l.%
+chronologie chronol.%
+circulaire circ.%
+circonscription circonscr.%
+{Code civil} C.civ.%
+{Code pénal} C.pén.%
+*collaborateur coll.%
+collection coll.%
+colonne col.% from LG 2002/02/21
+commandeur C.% from LG 2002/02/21
+département dép.%
+dictionnaire dict.%
+document doc.%
+{Est} E%
+*éditeur éd.% * from LG 2002/02/21
+*édition éd.% * from LG 2002/02/21
+environ env.%
+épitre ép.%
+épilogue épil.%
+établissements Éts%
+étymologie étym.%
+exemple ex.%
+expéditeur exp.% from LG 2002/02/21
+fascicule fasc.%
+faubourg fg%
+féminin fém.%
+feuillet f.%
+figure fig.%
+Frère F.% from LG 2002/02/21
+géographie géogr.%
+géologie géol.%
+géométrie géom.%
+graphique graph.%
+gravure grav.%
+habitants hab.%
+hauteur haut.%
+iconographie iconogr.%
+*illustrations illustr.% 21/01/2002
+inférieur inf.%
+introduction introd.%
+invariable invar.%
+italique ital.%
+juridique jur.%
+jurisprudence jur.%
+*ligne l.% 21/01/2002
+largeur larg.%
+latitude lat.%
+librairie libr.%
+livre liv.%
+locution loc.%
+longitude long.%
+longueur long.%
+manuscrit ms.%
+manuscrits mss.%
+masculin masc.%
+mathématiques math.%
+maximum max.% from LG 2002/02/21
+mécanique mécan.%
+mémoire mém.%
+musique mus.%
+mythologie myth.%
+{Nord} N%
+nouveau nouv.%
+nouvelle nouv.%
+numismatique numism.%
+officier O.% from LG 2002/02/21
+{Ouest} O% from LG 2002/02/21
+ouvrage ouvr.%
+*page p.% 21/01/2002
+partie part.%
+Père P.% from LG 2002/02/21
+photographie phot.%
+physique phys.%
+*planche pl.% 21/01/2002
+relié rel.% from LG 2002/02/21
+reliure rel.%
+rédaction réd.
+route rte% from LG 2002/02/21
+{Sud} S.%
+science sc.%
+scène sc.%
+section sect.%
+{Saint} St%
+{Saints} Sts%
+{Sainte} Ste%
+{Saintes} Stes%
+section sect.% from LG 2002/02/21
+siècle s.% from LG 2002/02/21
+{société} sté% 21/01/2002
+{Société} Sté% Yves Perrousseaux 2001/08/03
+substantif subst.%
+*suivant suiv.% 21/01/2002
+*suivante suiv.% 21/01/2002
+supèrieur sup.% from LG 2002/02/21
+supplément suppl.%
+téléphone tél.% Yves Perrousseaux 2001/08/03
+tome t.% from LG 2002/02/21
+traducteur trad.%
+traduction trad.%
+variante var% from LG 2002/02/21
+vers v.% from LG 2002/02/21
+voir V% from LG 2002/02/21
+volume vol.%
+
+% Unités légales :
+
+*ampère A%
+*are a%
+*bel B% from LG 2002/02/21
+*candela cd% from LG 2002/02/21
+centi c% from LG 2002/02/21
+*centiare ca%
+*centigramme cg%
+*centilitre cl%
+*centimètre cm%
+déca da% from LG 2002/02/21
+*décalitre dal%
+dècamètre dam%
+déci d% from LG 2002/02/21
+décibel dB%
+décigramme dg% from LG 2002/02/21
+décilitre dl% from LG 2002/02/21
+*franc F%
+giga G% from LG 2002/02/21
+*grade gr%
+*gramme g%
+*hectare ha%
+hect h% from LG 2002/02/21
+*hectogramme hg%
+*hectolitre hl%
+*hectomètre hm%
+*hertz Hz% from LG 2002/02/21
+*heure h%
+*jour j%
+*kelvin K% from LG 2002/02/21
+kilo k% from LG 2002/02/21
+*kilogramme kg%
+*kilohertz kHz% from LG 2002/02/21
+*kilomètre km%
+*kilovoltampère kVA% from LG 2002/02/21
+*kilowatt kW%
+kilowatt-heure kWh%
+kilowatts-heure kWh%
+*litre l%
+lux lx% from LG 2002/02/21
+méga M% from LG 2002/02/21
+*mégahertz MHz% from LG 2002/02/21
+*mètre m%
+% micro est a introduire qd on aura \mu en romain droit.
+milli m% from LG 2002/02/21
+*millibar mbar%
+*milligramme mg% from LG 2002/02/21
+*millilitre ml%
+*millimètre mm%
+*milliseconde ms% from LG 2002/02/21
+*minute min%
+*mole mol% from LG 2002/02/21
+nano n% from LG 2002/02/21
+*nanoseconde nc% from LG 2002/02/21
+*newton N% from LG 2002/02/21
+*pascal Pa% from LG 2002/02/21
+pico p% from LG 2002/02/21
+*picoseconde ps% from LG 2002/02/21
+quintal q% from LG 2002/02/21
+quintaux q% from LG 2002/02/21
+*radian rad% from LG 2002/02/21
+*seconde s%
+*stère st%
+téra T% from LG 2002/02/21
+*thermie th% from LG 2002/02/21
+*tonne t%
+*volt V%
+*watt W%
+*wattheure Wh% from LG 2002/02/21
+
+% Excerpt from ``Lexique des règles typographiques en usage a l'Imprimerie
+% nationale'', Abréviations, p7-11 and few additions.
+% plus other usual (referenced) names.
diff --git a/language/french/e-french/texmf/doc/src/french_doc.tex b/language/french/e-french/texmf/doc/src/french_doc.tex
new file mode 100644
index 0000000000..7767c3860a
--- /dev/null
+++ b/language/french/e-french/texmf/doc/src/french_doc.tex
@@ -0,0 +1,17 @@
+\documentclass{article}
+\setlength{\topmargin}{-35mm}
+\setlength{\textheight}{25.5cm}
+\setlength{\oddsidemargin}{-5mm}
+\addtolength{\textwidth}{40mm}
+\begin{document}
+%de verbatimfiles par Chris Rowley
+% ou de french.sty par Bernard Gaulle
+% ici par Raymond Juillerat
+ \makeatletter %
+ \def\verbatimfile#1{\begingroup
+ \@verbatim \frenchspacing \@vobeyspaces
+ \input#1 \endgroup
+ }
+\makeatother %
+\verbatimfile{french_doc.txt}
+\end{document} \ No newline at end of file
diff --git a/language/french/e-french/texmf/doc/src/french_doc.txt b/language/french/e-french/texmf/doc/src/french_doc.txt
new file mode 100644
index 0000000000..b0472c388a
--- /dev/null
+++ b/language/french/e-french/texmf/doc/src/french_doc.txt
@@ -0,0 +1,4334 @@
+% This is french_doc.pdf (informations en francais dans
+% efrench.pdf et faq.pdf)
+%
+% As e-French since 2010 under LPPL Copyright.
+%....................................................................
+% Copyright GUTenberg-Gaulle 1992-1998, Bernard Gaulle 1999-2007:
+% ==============================================================
+%
+% En tant qu'e-French sous Copypright LPPL depuis 2010.
+%....................................................................
+% Copyright Gaulle-GUTenberg 1992-1998, B. Gaulle 1999-2007.
+% =========================================================
+%.........................................................................V2.5
+%....................................................................
+% NOTICE that this work was done without any formal support.
+% Friendly helps, supports as well as sponsors are welcome!
+%....................................................................
+%\def\ds@le{\input frenchle.sty}%
+%
+% french.sty was developped by Bernard GAULLE for French-Speaking Users
+% This file is now a part of the e-French package.
+% For more details please read efrench.pdf
+%\expandafter\ifx\csname frenchTeXmods\endcsname\relax%
+%\else \endinput \fi%
+\def\frenchname{french}%
+\def\frenchpack{e-french}% eFrench
+\def\ds@french{}%
+\def\ds@pmfrench{\pmfrench}%
+{\catcode`\@=11{%
+ \ifx\@unexpandable@protect\undefined\let\protect\empty%
+ \else\let\protect\@unexpandable@protect%
+ \fi%
+ \xdef\FSfd{31 mai 2019}% eFrench
+ \xdef\FSfv{V6,101}%
+ \xdef\frenchstyleid{\FSfv\space-- \FSfd\space --}%
+}}%
+ \edef\FSfd{2019/05/31}%
+%
+% History as given by Bernard Gaulle:
+% I started this job years ago (in 1989) firstly
+% using ideas by Jacques DESARMENIEN, the French pioneer and also by
+% Eric PICHERAL (CICB, Rennes), Nicolas BROUARD (INED, Paris),
+% Marc SHAPIRO (INRIA, Rocquencourt), Raymond SEROUL (Lab Typo. Strasbourg),
+% Philippe LOUARN (IRISA, Rennes), Olivier NICOLE (INRA, Jouy),
+% Rainer SCH\"OPF (Uni. Mainz), Johannes BRAAMS (PTT, NL) and others.
+% I stopped to collect the names of the good guys in 1991 when i decided
+% to make a seriously enhanced & rewritten distribution i released as V3.0.
+%
+%% Free gift to GUTenberg (Frenchspeaking TeX Users Group)
+%% during 12 years. (Groupe francophone des Utilisateurs de TeX).
+%% Shareware since january 2001 (Version 5,00).
+%
+% Send suggestions/bug reports/corrections to the maintainer of e-French:
+% Laurent Bloch, lb@laurentbloch.org
+% (http://www.laurent-bloch.org/spip.php?article166)
+%
+% Canonical Archives server is: www.gutenberg.eu.org
+% (in /pub/GUTenberg/french)
+% where these files are archived.
+%
+% Running only with LaTeX2e, oldest format required:
+\NeedsTeXFormat{LaTeX2e}[1996/12/01]% -the latest one acceptable
+% > utf8 specialities
+% These specifications are here to facilitate the use of
+% french guillemets with a XeLaTex motor under utf8
+\newif\ifeF@NoEnc %No encoding (XeTex, LuaLaTex)
+\expandafter\expandafter
+\expandafter\ifx\csname XeTeXrevision\endcsname\relax
+\else
+ \eF@NoEnctrue
+\fi
+%
+\newif\ifeF@LuaTeX
+\expandafter\ifx\csname lualatexversion\endcsname\relax
+\else
+ \eF@LuaTeXtrue \eF@NoEnctrue
+\fi
+% this is in order having some accomodations with \XeTeXinterchartokenstate
+\newif\ifeFr@Typo\eFr@Typotrue
+% In order having no encoding by messages declare this :
+ \let\kbencoding\@gobble
+% < utf8 specialities
+\let\auxWARNINGi=\@gobble% -accept aux files produced by french
+% This style is using, at most:
+%%<
+%%> 577 strings out of 11731 (4.9%);
+%%> 4675 string characters out of 85497 (5.4%);
+%%> 11217 words of memory out of 262141 (4.2%);
+%%> 567 multiletter control sequences out of 9500 (5.9%).
+%
+% (I used usual teTeX with option mltex).
+%
+% Lastest updates (previous updates infos in history file)
+% ===============
+% V5,995
+% Released --bg 2005/04/18
+% \XeTeXinputencoding is no more running: supporting
+% XeTeX is now differed. Jonathan Kew informed. --bg 2005/12/25
+% V5,996 patch to allow \label to run in math mode. --bg 2005/09/09
+% Reported by Simon Pierre Desrosiers.
+%
+% \captionseparator is off with memoir.cls, --bg 2005/10/08
+% use \captiondelim.
+% Reported by Frederic Connes.
+%
+% Patch for relsize [2003/07/04 ver 3.1] to avoid messages when
+% the smallest size is less than de default of 6pt. --bg 2005/12/22
+% Reported by Frederic Connes.
+%
+% Patch for nomencl.sty which force \kbtypeout to be
+% called from \item in an unexpandable environment and
+% then producing an undefined \f@tempa break. So i add
+% \nofrenchwarnings in \printnomenclature. The problem
+% was reported by J.B. Moreau. --bg 2006/01/19
+%
+% Released 2006/03/25
+% V5,997 Emergency message added when frlicense.dat is empty.
+% Change in tabbing environnement: \tabbingaccents is
+% now the default in French since 8bits chars in T1
+% are always converted to 7bits chars "a la TeX".
+% \notabbingaccents added in \nofrenchtypography.
+% The pb was reported by Frederic Petit. 2006/04/25
+% V5,998 Released - new production scheme. 2006/07/04
+% V5,999 Patch for frenchle: ## illegal parameter in \@tempa (\') ?
+% issuing message with superfluous double \string (\@w@s). 2006/08/15
+% Natbib correction: bibitem macro was one oboslate of
+% jurabib. Jurabib bibitem macro obsolate and misplaced.
+% Full code revisited. 2006/08/18
+% Released 2006/08/25
+% V5,9991 When FrenchPro is called from babel(fr) all given options
+% should not be processed by the msg package, so we call msg
+% saying it's an \intern@lc@llfrom{FrenchPro} and it has to
+% use the French language.
+% But don't force French when calling from kernel. 2006/10/03
+% V5,9992 German localisation completed, thanks To Werner Struchmann.
+% 2006/10/13
+% V5,9993 Empty \caption was not processed correctly and thus the
+% the caption separator was erroneously printed. 2007/02/09
+% \texttt is now robust, avoiding wrong expansion in title
+% heads especially.
+% \MakeRobustCommand now creating \cmd_fp in place of
+% \cmd_. (a LaTeX robust command can be made robust for
+% FrenchPro too). 2007/02/11
+%
+% V5,9994 Correction for empty caption didn't run with hyperref. In
+% a first step i remove the modification and will try to
+% find the good mod to avoid the \captionseparator be
+% printed. 2007/06/28
+%
+% and also check if there is any frpatch.sty file available.
+% %%%%%%%%%%%%%%%%%%%%%%%
+% Distributed as eFrench under LPPL is same as version 5,9994
+% but without the test for a shareware licence
+% Changes made by Raymond Juillerat 2010/05/04
+%
+% V5,9995 Some changes because a problem arose with the language arabic
+% in that case, the language switch \arabic was in conflict with the
+% arabic format for numbers, also \arabic.
+% Therefore in this version, the switch is to be made with \arabicLang, but
+% the configuration file for the language arabic is as usual \arabicTeXmods.
+% These changes affect all languages <language> were \<language> already
+% exists and would enter in conflict with. Language switch is made with
+% \<language>Lang and the context is defined with \<language>TeXmods.
+% Same changes were made in frenchle
+% Changes made by Raymond Juillerat 2011/09/26
+%
+% V6,0 The reading of *languages.dat* has been reduced to french and
+% english suppressing the problem with \arabic. This reduction is
+% possible because eFrench is not compatible with babel but needs the
+% hyphenations rules for french and english. For german or ngerman,
+% the mlp module is responsible for finding the hyphenation.
+% This is possible because german or ngerman and french are the only
+% language style running without babel.
+% For babel there are other versions of these language packages.
+% Changes made by Raymond Juillerat 2015/10/30
+% V6,01
+% Correction of \originaloutput
+% Changes made by Raymond Juillerat 2017/02/24
+% \newcount, \newdimen, \newbox only not redefind if from eTeX
+% Changes made by Raymond Juillerat 2017/08/10
+% V6,02
+% some preparations for XeLaTeX and LuaLaTeX
+% New file efrenchu.tex in order having utf8 french guillemets
+% active.
+% This file corrects also the hyphenation problem with apostroph
+% Problems with LuaLaTex remain but by using msg.sty!
+% Changes made by Raymond Juillerat 2019/01/07
+% V6,1
+% Changes made necessary because of BibLaTeX and Interchartoks
+% Changes made by Raymond Juillerat 2019/03/08
+% V6,101
+% Two minor corrections by interchartoks
+% Changes made by Raymond Juillerat 2019/05/30
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Object: DOCUMENT CLASS OPTION for printing French texts with TeX or LaTeX
+% as well as english. (or multilingual texts in which French is the
+% main language).
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% It can be called:
+% via \usepackage{french} % french is alone
+% or \usepackage[french]{mlp} % using The Multi-Lingual Package
+% or as an option of \documentclass, when using mlp.
+%
+% Commands to be used by the end users:
+% ====================================
+% \frenchtest between \document.... and \end{document} will run
+% the LaTeX "Torture Test" (see french*.tex files).
+% \frenchdoc between \document..... and \end{document} will compose
+% the LaTeX documentation (see frenchlu.tex file).
+% \french Apply French conventions including hyphenation,
+% typography, page layout, titles inside documents and
+% few other things helping when typing a document.
+% This is the default language.
+% \begin{french}...\end{french} to bind the French text with LaTeX.
+% \french ... \endfrench with TeX.
+% \pmfrench (preambule command) ... the poor man way
+% (or \usepackage{pmfrench} vi pmfrench.sty)
+% to let the French style run even the TeX motor
+% (ie format) was not installed or configured in a way to
+% use the French language (hyphenation, language.dat,...)
+% Be aware that a lot of things might not provide their
+% usual featuring. Notice also that then the following
+% commands do nothing:
+% - \noeveryparguillemets
+% - \lettrine and \flettrine
+% - \abbreviations and "..."
+% - \frhyphex
+% \usersfrenchoptions{.. French options ..} to allow the user to change the
+% default options. All options given inside braces remain
+% active all along the document inside language French.
+% This command can be reused, provided arguments are
+% then cumulated.
+% \english for going back to "normal" English conventions
+% And if you have a language.dat config file defining
+% german languages, as it is normally the case.
+% \beginFWdirection switch to the first direction of writing when TeX--XeT.
+%--------------------
+% Commands for compatibility:
+%
+% \inferieura is the original less than sign (<)
+% \superieura is the original greater than sign (>)
+% \pointvirgule is the original ";"
+% \deuxpoints is the original ":"
+% \pointexclamation is the original "!"
+% \pointinterrogation is the original "?"
+% \lq and \rq stands for ` and '
+% ^\prime stands for ' in maths
+% \lqq and \rqq stands for `` and ''
+% \dittomark stands for "
+%
+% \originalinput{file_of_code} is supplied to input any code that might be
+% incompatible with the French style.
+% You can also disable the French style using:
+% \begin{nonfrench}...\end{nonfrench} with LaTeX
+% \nonfrench..........\endnonfrench with plain TeX
+% \originaloutput[file]{text} is supplied to output any text that would
+% otherwise generate expanded macros for activated chars
+% instead of original characters. "file" is a stream
+% number related to open file defined by \newwrite.
+% \def\encodingdefault{...} can be set to "T1" or "OT1" to change the default
+% font encoding that is normally set in the format
+% (with initex material and specially kbconfig.tex)
+%--------------------
+% \frhyphex Reload once French hyphenation exceptions file from
+% language.dat (give this order in the preambule)
+% Not usable with plain (or low level languages).
+% \frenchhyphenation Apply French rules on hyphenation:
+% - as stated in the patterns file
+% - with exceptions as established by \hyphenation
+% - of words starting with one upper case letter
+% and also allows accent macros in \hyphenation
+% or \showhyphens.
+% \nofrenchhyphenation Nullify former actions
+%
+% Other commands for hyphenation that remains unchanged over \french reinit.
+%
+% \allowhyphens allow the following word to be hyphenated (useful
+% sepcially in the second part of a compund word.
+% \allowuchyph allow hyphenation of words starting with a capital
+% letter (this is the default as in plain & lplain)
+% \allowfulluchyph allow it even if a \hbox would normally forbid it in
+% the present code.
+% \disallowuchyph forbid it (this is my own recommandation)
+% \tthyphenation allow hyphenation of words in the present \tt font
+% \notthyphenation disallow hyphenation of words in the present \tt font
+% (never saved; last value in a \par is that which works;
+% default value is that given by the main doc-style;
+% presumely the default -if not: tell me \tthyphenation;
+% this is the default in lplain.tex)
+%--------------------
+% \frenchtypography Apply French typography (spacing) on :
+% - double punctuation ! ? ; :
+% - guillemets (<< >>).Use \endguillemets instead of >>
+% for ending 2 levels of guill. at the same time or
+% when the ("everypar") open guillemets were ended in
+% a previous inner environnement.
+% Italic correction automatically added if necessary.
+% - footnote marks in the text and minipages.
+% - footnote references (\refmark).
+% - thanks in titles.
+% Print footnote number in the same font as the footnote
+% text followed by a dot and appropriate spacing. When
+% used in table environment footnote marks are typeset
+% as in a minipage.
+% Italicize the caption text (using \captionfont defaultly
+% set to \emph).
+% Change caption separator (":" replaced by value of
+% \captionseparator which default is "~--")
+% Suboption: \frenchmathcomma
+% Remove space after coma in math mode (default)
+% \regularmathcomma
+% to set space, as usual after comma in math mode.
+% (chosen option is used to print numbers with \nombre).
+% \originalmathcomma
+% to reset coma mathcode as before FrenchPro wass called.
+% Suboption: \unnumberedcaptions{figure/table} to remove headings in
+% caption tiltles. This is a global suboption.
+% It nullify the according \listof...(figures/tables).
+% It can be used only once. Can't be turned back later
+% in French.
+% Hyphenate correctly. (The lowest level of application
+% is the paragraph.)
+% Discourage page breaking after ``:''
+% Forbid line breaking before double punctuation and >>
+% and after <<.
+% Suboption: \noTeXdots will change them to 3 closed dots
+% \TeXdots leave \dots, \ldots as well known TeX dots (default)
+% Suboption: \nofrenchguillemets stops producing French guillemets.
+% \frenchguillemets starts producing French guillemets (default)
+% Suboption: \ancientguillemets start every paragraph of second level
+% guillemets with closing >> instead of <<.
+% \todayguillemets normal way at the present time (default)
+% Suboption: \noguillemetsinarrays will print << or >> in standard arrays
+% textual modes (depending of the font used).
+% \guillemetsinarrays is the usual default value.
+% Suboption: \guillemetsinallfonts allows to print them in any font but
+% \guillemetsinroman remains the usual default value.
+% Suboption: \guillemetsfont allows, when in a T1 font encoding running
+% scheme to choose the font for guillemets, just define or
+% redefine \guillemetsfont.
+% Command: \endguillemets ends levels 2 & 1 at the same time (i.e. >>>>)
+% Suboption: \noenglishquote replace TeX ` ' quotes AND apostrophes
+% by accents ` ' (to use only temporary).
+% Do nothing inside a tabbing environement.
+% \...code and \char become unusable asis.
+% \englishquote is the default
+% Suboption: \noenglishdoublequotes for replacing `` with << and '' with >>
+% Do nothing inside a tabbing environement.
+% \...code and \char become unusable asis.
+% \englishdoublequotes normal quoting ``...'' is the default
+% Suboption: \untypedspaces force a space where normally French people
+% type one (before ; : ? ! >> and after <<)
+% \typedspaces is the default value
+% Suboption: \tabbingaccents allow to put \` and \' diactrics on letters
+% when used in tabbing environment. \' and \` remain their
+% original tabbing usage if followed by a blank space.
+% Also usefull for 8bits chars ; this is the default.
+% \notabbingaccents is the usual LaTeX usage.
+% Suboption: \idotless suppress point on i when accented with ^ and "
+% \iwithdot is the default
+% Suboption: \EBCDICbrackets replace non-math mode < ... > by [ ... ]
+% (..IBM has no brackets so < and > are often used as brackets)
+% \normalbrackets is the default
+% Suboption: \letpunctutionactivefor to use allways with something else
+% (like \wrongtypedspaces), let punctuation (! : ; ?) active
+% after French style. Caution: it's extremly dangerous!
+% (specify the suboptions after \frenchtypography)
+% (sub-options are not saved/restored over a language switch)
+% \nofrenchtypography Nullify former actions
+% Suboption: \wrongtypedspaces suppress spaces before double punctuation
+% (! : ; ?) which was erroneously typed \`a la fran\c caise.
+% \text{...} Allows to typeset text in math mode (AmS like command).
+%--------------------
+% \ConstantLayout is a one time macro that disallow to change page layout
+% and any other typographic feature when switching to another
+% language. Once used in any language it is applied for the
+% whole document.
+% \frenchlayout Apply:
+% - indentation of all (first LaTeX) paragraphs:
+% Suboption: \indentfirst is the default or
+% \nonindentfirst which forces no indentation at all.
+% - set item markers as --. User can choose others
+% markers via the command
+% \frlabelitems{\renewcommand{\labelitemi}...}.
+% Look at documentation for more details and specially
+% for the use of \checkitemguillemets.
+% - reset section counter when starting a part.
+% Suboption: \noresetatpart nullify the former action.
+% Suboption: \noresetatchapter will not reset footnote counter at chapter
+% change.
+% Suboption: \frenchtrivsep sets (reduced) vertical spacing in lists, this
+% is the default. As this spacing is forced warning
+% message is issued when other spacing is user
+% expected. Look at \frenchwarnings part.
+% You can choose your own values by setting the lengths
+% with the command \frtrivseplengths{\setlength...}.
+% In that case no warning message is issued.
+% \nofrenchtrivsep resets the standard spacing in lists.
+% - special spacing with the experimental "order" list.
+% - print table footnotes as in minipages.
+% - print a coma between consecutive footnotes.
+% Suboption: \frenchpagestyle apply a French pagestyle when starting a
+% Part or a Chapter or an Index (provides \printindex)
+% \nofrenchpagestyle will not.
+% Suboption: \beginingfolio print the folio on theses pages (default)
+% \nobeginingfolio will not.
+% - modify thebibliography environnement to be referred
+% in toc and have a valid anchor in hyperref docs.
+% - with letter.sty: address placement, typeset \closing
+% as a paragraph and with \fclosing in place of
+% closing you can chose spacing between closing and
+% signature by saying \fclosing[n]{...} with n being
+% the number of \medskipamount (default is 9).
+% to typeset the date with \location{Paris, le ...}
+% \yourref{...} to refer to a received letter
+% \ourref{...} for your own reference
+% \object{...} to precise the object
+% \PS{...} for a post-scriptum
+% \email{...} for the email address
+% \def\formhead{...} for the odd page headings
+% (not operational with \nopagenumbers)
+% \def\formfoot{...} for the odd page footings
+% (not operational with \nopagenumbers)
+% \wideletter to enlarge the default linewidth.
+% - offer macros for starting paragraphs with a dropped
+% initial capital letter:
+% with \lettrine the first letter of the first
+% token will be dropped. (warning: in 7-bit
+% write {\c C} for example). Remaining part
+% of the token in printed in small caps.
+% with \flettrine a box will be printed around.
+% Generic syntax:
+% \lettrine{Begining of the paragraph}
+% \flettrine{Begining of the paragraph}
+% or \lettrine[<< {Begining} >>] (let spacing!)
+% \flettrine[<< {Begining} >>] (ending >> might
+% be given later in the text)
+% \lettrine or \flettrine START a paragraph! And
+% to avoid any problem the paragrpah must end with an
+% explicit \par. This is a fragile macro!
+% Suboption: \noautomaticlettrine (default) processing;
+% the lettrine uses a standard LaTeX font size.
+% You can use \lettrinefont to define the font you
+% want at the size you want. As default \lettrinefont
+% is set to \Huge.
+% Use \def\lettrinehang{n} to force hanging of n
+% lines (there is no default value).
+% \automaticlettrine processing: the lettrine uses a computed
+% font size.
+% You can use \lettrinefontname to set the font
+% (default is current font) and it will start the
+% \automaticlettrine feature that means a new value
+% of \lettrinefont is established (font-size).
+% \lettrinehang is defaultly set to 2 lines and
+% can be changed.
+% The \automaticlettrine feature can be stoped by
+% calling \noautomaticlettrine.
+% Suboption: \everyparguillemets open guillemets on every paragraph
+% until closing and do nothing at level 2.
+% This is the default.
+% \everyparguillemetsremoved switch off the previous feature.
+% \noeveryparguillemets don't start each par with guillemets
+% but start each level 2 line with them.
+% \guillemets is forbidden, use 7/8bit
+% guillemets chars.
+% (see documentation for further explanations)
+% Suboption: \overfullhboxmark print the TeX black box exactly where there
+% is an overfull hbox (as draft option do)
+% \nooverfullhboxmark is the default in LaTeX
+% Suboption: \labelsinmargin put labels in margin for debugging purposes
+% This option can be used anywhere (outside
+% \frenchlayout as well as \french environment)
+% \nolabelsinmargin is the default
+%
+% Propose the following environments:
+%
+% Environment \begin{drapeaufg}...\end{drapeaufg} to typeset raggedright
+% with hyphenation.
+% Environment \begin{drapeaufgIN}...\end{drapeaufgIN} to typeset raggedright
+% without hyphenation (rules of Imprimerie Nationale)
+% As text is never split and overfull can occur
+% you may have to split lines by hand.
+% Environment \begin{drapeaufd}...\end{drapeaufd} to typeset raggedleft
+% with hyphenation.
+% Environment \begin{drapeaufdIN}...\end{drapeaufdIN} to typeset raggedleft
+% without hyphenation (rules of Imprimerie Nationale)
+% Text printed past the line limit may occur.
+% Environment \begin{order}...\end{order} to enumerate items with
+% via \primo \secundo etc. and with sepcial spacing
+% Environment \begin{figurette}...\end{figurette} to place a (little)
+% figure EXACTLY here.
+% Environment \begin{versatim}...\end{versatim} to print verbatim
+% but with hyphenation typeset as in \verse and with
+% \noenglishquote and \noenglishdoublequotes available
+% Commands: \vers|...| the inline (or intext) vserion of "versatim"
+% \verbatimfile{filename} the filename is inputed in verbatim
+% BUGED!! (\nopagenumbers reintroduced if undefined)
+% \nofrenchlayout Nullify former actions
+%--------------------
+% \frenchtranslation . Translate all English titles used in LaTeX, to french
+% and generate French dates. This is the default.
+% All things should normally run with std LaTeX or Babel.
+% You can also create your own styles using these captions
+% A lot of captions are newly defined for letters.
+% You can also change the titles with your own definitions
+% by using \fraddto\captionsfrench{\..name}{title}.
+% Environment \begin{resume}...\end{resume} to print an abstract
+% . \resume has been defined for French abstracts (we often
+% need French and English abstracts together). You must
+% be in \french before using it. (like you are in \english
+% when you use \begin{abstract}...\end{abstract}).
+% Environment \begin{motsclef}...\end{motsclef} to print a keywords list.
+% . \motsclef has been defined for French keywords.
+% (Environment \begin{keywords}...\end{keywords} to print a keywords list)
+% (by the way i have defined \keywords \endkeywords)
+% . \sommaire is defined as a toc in front of a document.
+% \sommaire[1] don't print paragraphs entries and below.
+% \sommaire[2] don't print subsubsection entries and below
+% \sommaire[3] don't print subsection entries and below,
+% this is the default for \sommaire.
+% \sommaire[4] don't print section entries and below,
+% . \annexe and \annexes have been defined.
+% . \glossaire and \glossaires have been defined. If the
+% "theglossary" is undefined, allow:
+% \printglossary[filename] (default is jobname.gls
+% produced by pgm "makeindex -s gglo.ist")
+% NB: code preferably \glossary{[name :] explanation}
+% and: without makeindex allow to code jobname.glo
+% (instead of .gls) & print something acceptable.
+% . makeidx.sty is included and translated.
+% . \seealso is defined for indexes.
+% \nofrenchtranslation Nullify former actions.
+%--------------------
+% \frenchmacros Add a lot of macros to help in typographic process.
+% \ier for printing 1\ier (premier) (examples)
+% \iere for printing 1\iere (premiere)
+% \ieme for printing 2\ieme (deuxieme)
+% and their plurials \iers, \ieres and \iemes.
+% \FileName{file_name} for 8bit file names, then
+% use it by calling \theFileName (e.g with \input).
+% \WindowsUnits{name1=A,...,namen=N} to define macros
+% names to assign to Windows units which will be called
+% in any input file process (\name1: ... \nameN:)
+% protecting from the activated colon character.
+% \at for printing @ (at)
+% \vert for printing | (vertical bar)
+% \chap for printing ^ (hat or circonflexe)
+% \backslash for \ (backslash)
+% \tilde for printing ~ (tilde)
+% \nombre for printing large numbers and have the correct
+% spacing (p.ex. \nombre{123 456,789 012})
+% \numero for printing (no)
+% \Numero for printing (No)
+% as well as \numeros and \Numeros
+% \degres for printing (degrees)
+% \leftguillemets for << (unbalanced left guillemets)
+% \rightguillemets for >> (unbal. right guillemets)
+% \fup{X} to put X in a smaller size supscript
+% \primo \secundo \tertio \quarto \quando={n}
+% [or:\primo) \secundo) \tertio) \quarto) not recommanded]
+% \fsc{name} or \fsc{NAME} will print as \textsc{Name}
+% \fsc*{name} or \fsc*{NAME} forces use of \rmfamily
+% \lsc{name} or \lsc{NAME} will print as \textsc{name}
+% \lsc*{name} or \lsc*{NAME} forces use of \rmfamily
+% \refmark{X} stands for \footnotemark[\ref{X}]
+% \moretolerance will double each TeX tolerance within
+% any chosen grouping (useful in narrow situations).
+% \Sauter#Lignes will skip # lines (for specific usage)
+% \! (negative thin space) run in non math mode
+% \frenchalias\your_short_name\the_long_french_macro_name
+% to give a short name to a very long macro name.
+% Suboption: \abbreviations allowing to ask for: "name_to_be_abbreviated"
+% will print abbreviation if found otherwise will give a
+% warning and print the name asis. The first char. of
+% "name" is not compared, except if the abbreviation file
+% contains {Name}. Customisation is allowed like this:
+% \abbreviations[my_abbrev_file]
+% \noabbreviations is the default option
+% \nofrenchmacros Nullify former actions
+%
+% Some complemetary macros used in other parts:
+% \ordinal{counter} gives "premier", "deuxieme", ... "vingtieme"
+% \Ordinal{counter} gives "Premier", "deuxieme" ...
+% \ordinale{counter} gives "premi\`ere", ...
+% \Ordinale{counter} gives "Premi\`ere", ...
+%
+% Macros to output messages:
+% \kbtypeout{msg} issue msg on console, translating or not
+% the accent macros and not expanding the activated chars.
+% Under control of \@kbspecials for 8-bit output
+% translation possibility. Such package like
+% kbconfig/keyboard can translate to the
+% appropriate keyboard encoding. In fact \kbtypeout is
+% equivallent to \kbIO[\typeout].
+% \kbIO[output_macro]{msg_text} allows to output the message
+% either on log file (\wlog), or on console (\tyepout)
+% or even on any file (\immediate\write...)
+%
+%--------------------
+% \frenchwarnings let french issue its warnings, this is the default. This
+% part has the followings sub-options:
+% Suboption: \frenchtrivsepwarnings let french inform the user when
+% vertical spacing is not respected as requested in
+% a non-standard environment. This is the default
+% Suboption: \nofrenchtrivsepwarnings ask french not to issue any warning
+% regarding the vertical spacing requested by the
+% user and not applied. This is the default when user
+% choose his own values for spacing via \frtrivseplengths.
+% \nofrenchwarnings instruct french to stop to issue messages.
+% This syntax is probably not the final one.
+%--------------------
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ===============================
+% | About typing |
+% ===============================
+%% No code here, just an advice.
+%%
+%% Inputing French punctuation you must type a space:
+%% - before a double punctuation (! ? ; :)
+%% - before >>
+%% - after << ; :
+%% Double " or single quoting ` ' as well as single guillemets < > must not
+%% be used in french.
+%% Type ... normally (instead of \dots or \ldots).
+%% Respect French abbreviations like:
+%% \hbox{c.-\`a-d.} / \emph{i.e.} / p.ex. / \etc. / cf. / id. /
+%% p.i. / p.o. / doc. / chap. / part. / vol. / paragr. / R.S.V.P. / ...
+%%
+%% Please apply these allmost elementary (and historical) rules.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\def\@txt@msg#1{#1}% -Just get arg and remove {}.
+\def\@gobbleopt[#1]{}%
+\def\f@issue#1#2{#1{#2}\@ifnextchar[{\@gobbleopt}{}% -]
+ }%
+%#<
+% Firstly we add the material to use the "msg" package for localization.
+\def\@tempc{%
+\def\f@issue##1##2{\f@issue@[##1]##2\void}% -The local \issuemsg macro.
+ % -which will call the real one;
+ % -#1 is the macro message required.
+ % -#2 is the message header + msg number
+ % -such as "^^J -234-", just message
+ % -number (234) is kept.
+\def\f@issue@[##1]##2-##3-##4\void{\issuemsg[##1]##3(french)}%
+\PassOptionsToPackage{french}{msg}%
+\ifx\LdfInit\@undefined%
+ \RequirePackage{msg}% -Usually, load the msg package.
+\else% -But with Babel, dont use \usepackage or such,
+ \let\@GOfrench\@currname% -Save current package name.
+ \xdef\@currname{msg}% -Set package req.
+ \def\intern@lc@llfrom{\frenchpack}% -Say him it's an internal/kernel call.
+ \let\fp@languagename\languagename% -Save current language name.
+% -now we force French for the msg package.
+ \ifx\documentclass\@twoclasseserror% -When not a kernel case
+ \def\languagename{french}% - force French for the msg package.
+ \fi
+ \@@input msg.sty% -and input it now
+ \let\languagename\fp@languagename% -Reset current language name.
+ \let\fp@languagename\undefined%
+ \let\intern@lc@llfrom\undefined%
+ \let\@currname\@GOfrench% -Reset original package name.
+\fi%
+ }% -\@tempc
+\def\@tempd{\def\f@issue##1##2{\@ifnextchar[{\@gobbleopt}{}% -]
+ }%
+ }% -\@tempd
+% Prepare to compare \jobname and license file name.
+\edef\@tempa{\expandafter\noexpand\csname str-\jobname\endcsname}%
+\edef\@tempb{\expandafter\noexpand\csname str-frlicense\endcsname}%
+% FrenchPro requires msg.sty and *-msg.tex files
+\ifx\@tempa\@tempb% -but only for typesetting a document.
+\IfFileExists{msg.sty}{\@tempc}{\@tempd}\else%
+\IfFileExists{msg.sty}{\@tempc}{% -Avoid loading it if msg.sty doesn't exist.
+ \typeout{^^J -81- WARNING: "msg" package not found;%
+^^J\space\space\space\space\space\space continuing without message texts.}%
+ }%
+\fi%
+%#>
+\newif\ifECM%
+% Here come \if-switches codes in case of french.sty badly initiated
+\def\ErrFrench{\f@issue\@fW{-26- %
+%\@txt@msg{Erreur d\'etect\'ee dans \frenchname.sty !}%
+%\@txt@msg{(voir p.ex. le fichier language.dat)}%
+ }}%
+\def\ifFTY{\ErrFrench}\def\ifFTR{\ErrFrench}\def\ifFG{\ErrFrench}%
+\def\ifFLA{\ErrFrench}\def\ifFMA{\ErrFrench}\def\ifFH{\ErrFrench}%
+\def\ifArG{\ErrFrench}\def\ifFTSW{\ErrFrench}\def\ifFW{\ErrFrench}%
+%
+\edef\GOfrench{`\string @}% -temp def further correctly defined
+\ifnum\catcode\GOfrench=11% -mods of code proposed by DT that
+ \let\resetat\relax% -accepts also that @ were active
+ \else\edef\resetat{\noexpand\catcode\GOfrench=\the\catcode\GOfrench}%
+ \makeatletter\fi%
+%
+\let\@currnameORI\@currname% -save current package name
+\xdef\@currname{\frenchname}% -set pasckage req.
+{\def\'{\string\'}% -to avoid \accent@spacefactor=\undefined (in pr\'e-)
+ \ProvidesPackage{\frenchname}%
+ [\FSfd\space The \frenchpack\space package /\FSfv/]%
+}%
+\def\GOfrench{babel}\ifx\@currnameORI\GOfrench% -allow Babel to load me
+ \ifx\undefined\babel@core@loaded\input babel.def\relax\fi%
+ \ifx\undefined\babel@core@loaded% -still undefined (>3.5)?
+ \let\babel@core@loaded\main@language\fi%
+ \fi%
+%#<
+%\let\FSfd=\undefined% let it defined for possible patch test.
+\def\@tempa#1V#2,#3\@nil{\def\@FSfv{#2}}\expandafter\@tempa\FSfv\@nil%
+%#>
+\let\FSfv=\undefined% -return to the pool
+\IfFileExists{frpatch.sty}{\def\FSfd@patch{unknown}}{\let\FSfd@patch\FSfd}%
+%
+\if@compatibility% -provide error msg with 2.09 emulation
+ \f@issue\typeout{^^J -68-
+ %\@txt@msg{ERROR: \frenchpack\space is no more running }%
+ %\@txt@msg{with 2.09 emulation, sorry!}%
+ }\expandafter\stop%
+\fi%
+%
+\ifeF@LuaTeX\relax\else
+\ifx\l@french\undefined\f@issue\typeout{^^J -20-
+ %\@txt@msg{WARNING:}%
+ %\@txt@msg{the French language is undefined in your format.}%
+ }%
+\fi%
+%
+\fi%
+\fontencoding{\encodingdefault}\selectfont%
+ \def\@temp@{OT1}\ifx\@temp@\f@encoding%
+ \def\@temp@{\global\ECMfalse}%
+ \else\def\@temp@{LO1}\ifx\@temp@\f@encoding%
+ \def\@temp@{\global\ECMfalse}%
+ \else% -could be LY1
+ \def\@temp@{\global\ECMtrue}%
+ \fi%
+ \fi%
+\@temp@%
+\def\@tempa{\let\ifEightBitOutput\iffalse}%
+\ifx\EightBitOutputfalse\undefined\expandafter\@tempa\fi%
+\ifECM\else\ifx\charsubdef\undefined%
+ \def\@tempa{\noexpand\dGs}%
+ \ifx\@tempa\dGs\else%
+ \ifx\@kb@msgXXIX\relax\else% -Don't issue if already done.
+ \f@issue\typeout{^^J -29- %
+%\@txt@msg{***Warning***\string: TeX engine in use along with CM fonts }%
+%\@txt@msg{(as in current TeX format) isn't sufficient to hyphenate }%
+%\@txt@msg{words containing diacritics (like in French).}%
+ }%
+ \let\@kb@msgXXIX\relax%
+ \fi%
+ \fi%
+\fi\fi%
+\ifx\undefined\@dblarg% -....................................... \@dblarg
+\long\def\@dblarg#1{\@ifnextchar[{#1}{\@xdblarg{#1}}}}%
+\long\def\@xdblarg#1#2{#1[{#2}]{#2}}%
+\fi%
+\newdimen\@FrDimen% -general def for the style
+\def\usualmessages{\let\ifEightBitOutput\iftrue}%
+ \ifnum\inputlineno=-1\def\@o@l{.}% -may be negative
+ \else\def\@o@l{ (\`a la ligne \the\inputlineno).}\fi%
+ \expandafter\let\expandafter\@aiguORI\expandafter=%
+ \csname OT\string1\string\'\endcsname%
+ \expandafter\let\expandafter\@gravORI\expandafter=%
+ \csname OT\string1\string\`\endcsname%
+ \expandafter\let\expandafter\@acchORI\expandafter=%
+ \csname OT\string1\string\^\endcsname%
+ \expandafter\let\expandafter\@tremORI\expandafter=%
+ \csname OT\string1\string\"\endcsname%
+ \expandafter\let\expandafter\@cediORI\expandafter=%
+ \csname OT\string1\string\c\endcsname%
+%#< This is a little code to avoid braces to be striped when the token
+% is provided via a macro parameter.
+\def\@PreserveBraces[#1#2]% -................................... \@PreserveBraces
+ {\ifcat\noexpand#1$ #1#2\def\@temp@{}%
+ \else\def\@temp@{#2}%
+ \ifx\@temp@\empty\def\@temp@{#1}%
+ \else\def\@temp@{{#1#2}}\fi%
+ \fi\expandafter\@temp@}%
+%
+\def\@temp@{lplain-bilingual}% -E.P. wrong old def checking
+\ifx\fmtname\@temp@\f@issue\typeout{-64- %
+ \@txt@msg{ERROR: invalid \string\fmtname\space in lplain.tex}%
+ }\stop\fi%
+%% code to test the shareware licence suppressed eFrench
+\let\@tempc\relax% -AmS bug: \@tempc=\if.
+%
+\ifx\today\undefined\let\today\cejour\fi% -for lettre.cls
+\ifx\today\undefined\f@issue\typeout{^^J -52- %
+%\@txt@msg{Error: the \frenchpack\space package doesn't run in }%
+%\@txt@msg{such minimal document class, sorry!}%
+ }\expandafter\stop%
+\fi%
+{\def\GOfrench{\global\let\ifEightBitOutput\iffalse}% -force seven bits
+ \let\add@accent\@gobble\edef\@tempa{\`{}}%
+ \def\@tempb{{\setbox \@tempboxa \hbox {}\accent 18 }}%
+ \ifx\@tempa\@tempb% -hum, OT1 is just loaded, so no expand.
+ \expandafter%
+ \GOfrench% -and force seven bits for all \@fw messages.
+ \fi%
+}%
+% Macro to send a message without header:
+\def\@fW#1{{\let\@nobraces\@firstofone%
+ \ifEightBitOutput%
+ \setbox\@tempboxa\hbox{\`\space}% -For \add@accent expansion.
+ \ifx\charsubdef\undefined\else% -case MlTeX only
+ \let\add@accent\@gobble% -Avoid redef. by fontenc loading.
+ \def\'##1{\expandafter\@nobraces\@aiguORI##1}%
+ \def\`##1{\expandafter\@nobraces\@gravORI##1}%
+ \def\^##1{\expandafter\@nobraces\@acchORI##1}%
+ \fi%
+ \else%
+ \let\protect\string\let\add@accent\@gobble%
+ \fi%
+ \edef\@tempa{#1}\typeout{\@tempa}}}%
+{\def\ier{er}% -this is the French typographic abbreviation of "st"
+\f@issue%
+\@fW{^^J -23- %\@txt@msg{Extension \string : \frenchpack\space}%
+%\@txt@msg{\frenchstyleid\space(B.Gaulle)}%
+ }%
+}%
+%
+\let\ifFW\iftrue% -Start with (warning) messages
+\def\@fw#1{{\let\@NoFr\relax% -Avoid any loop inside \kbtypeout.
+ \ifFW\kbtypeout% -..................................... French warning
+ {^^J \frenchname.sty \string : #1\@o@l}%
+ \fi%
+ }}% -Notice: after \begin{document} there is no more need to
+% protect active characters against expansion.
+\ifx\kbtypeout\undefined%
+% Notice that \kbtypeout can be set to \relax\egroup by keyboard.sty.
+\def\@kbtypeout[#1]#2{\ifEightBitOutput\let\@typeset@protect\protect\fi%
+ \let\@inpenc@undefined@\@gobble% -To avoid loop.
+ \edef\f@tempa{#2\empty}% -Expand it now and type out.
+ #1{\f@tempa}\egroup}%
+\def\kbtypeout{\kbIO[\typeout]}% -.................................. \kbtypeout
+\def\kbIO{\bgroup% -................................................ \kbIO
+ \ifECM\fontencoding{OT1}\selectfont\fi% -Basic fontencoding needed.
+ %\nofrenchtypography% To apply only after \begin{document}.
+ \let\@nobraces\@firstofone% -could be provided separately,
+ \let\protect\string%
+ \ifEightBitOutput% -eg by kbconfig.
+ \def\'##1{\expandafter\@nobraces\@aiguORI##1}%
+ \def\`##1{\expandafter\@nobraces\@gravORI##1}%
+ \def\^##1{\expandafter\@nobraces\@acchORI##1}%
+ \def\"##1{\expandafter\@nobraces\@tremORI##1}%
+ \def\c##1{\expandafter\@nobraces\@cediORI##1}%
+ \csname @kbspecials\endcsname% -Translation settings.
+ \else% -7-bit output wanted.
+ \let\add@accent\@gobble%
+ \def\set@display@protect{\let\protect\noexpand}% -Have spaces!
+ \fi%
+ \@kbtypeout}%
+\fi%
+\ifx\@kbtypeout\undefined% -A default \@kbtypeout macro.
+ \def\@kbtypeout[#1]#2{#1{#2}\egroup}%
+\fi%
+\def\@tempb{\let\ifEightBitOutput\iffalse}%
+\ifx\kbtypeout\typeout% -If no kb output encoding then set a correct \@fw cs.
+ \long\def\@tempa{\add@accent{19}}% -Case standard OT1 (re)loaded
+ \ifx\@tempa\@aiguORI\expandafter\@tempb\fi% -then force 7-bit.
+\def\@fw#1{\ifFW\bgroup\let\@nobraces\@firstofone%
+ \ifEightBitOutput%
+ \ifx\charsubdef\undefined\else%
+ \def\'##1{\expandafter\@nobraces\@aiguORI##1}%
+ \def\`##1{\expandafter\@nobraces\@gravORI##1}%
+ \fi%
+ \else%
+ \let\protect\string\let\add@accent\@gobble%
+ \fi%
+ \@kbtypeout[\typeout]{^^J \frenchname.sty \string : #1\@o@l}%
+ \fi%
+ }% -Notice: after \begin{document} there is no more need to
+\fi
+%
+\def\@Ffnt#1{\f@issue\@fw{-2- %\@txt@msg{fichier #1 non trouv\'e}%
+ }[#1]}%
+\def\@finput#1{\InputIfFileExists{#1}{}{\@Ffnt{#1}}}%
+\def\@NoFr{\f@issue\@fw{-3- %
+ %\@txt@msg{\frenchpack\space n'est pas actif ici !}%
+ }}%
+\let\ifFrench\iffalse%
+%
+\ifx\addto\undefined% -............................................. \addto
+ \def\addto#1#2{\ifx#1\@undefined\def#1{#2}%
+ \else\ifx#1\relax\def #1{#2}%
+ \else{\toks@\expandafter{#1#2}%
+ \xdef#1{\the\toks@}}%
+ \fi%
+ \fi%
+ }%
+\fi%
+\def\fraddto#1#2{\addto{#1}{#2}% -.................................... \fraddto
+ \ifFrench\french\else\english\fi}%
+% The following macro designed to protect against expansion.
+\ifx\MakeRobustCommand\undefined% -.......................... \MakeRobustCommand
+\def\MakeRobustCommand#1{\expandafter\expandafter\expandafter%
+ \let\expandafter\expandafter\csname #1 fp\endcsname%
+ \csname #1\endcsname%
+ \expandafter%
+ \edef\csname #1\endcsname{\expandafter\protect%
+ \expandafter\noexpand\csname #1 fp\endcsname}
+ }%
+\fi%
+%
+\ifx\DocInput\undefined\else% -...................................... \DocInput
+ \let\fr@di\DocInput\def\DocInput#1{% -for ltxdoc.cls
+ \ifFrench\english\fr@di{#1}\french%
+ \else\fr@di{#1}%
+ \fi\relax}%
+\fi%
+\ifx\url\undefined\else% -................................................ \url
+ \let\fr@ul\url\def\url#1{% -for hyperref package
+ \ifFrench\english\fr@ul{#1}\french%
+ \else\fr@ul{#1}%
+ \fi\relax}%
+\fi%
+\ifx\xy\undefined\else% -.................................................. \xy
+ \let\fr@xy\xy\def\xy{% -for XY-pic and diagxy packages
+ \ifFrench\nofrenchguillemets\DFPdp\fi\fr@xy}%
+\fi%
+\ifx\hyper@n@rmalise\undefined\else% -.............................. \href
+ \let\fr@hne\hyper@n@rmalise\def\fr@hnr#1#2{\fr@hne{#1}{#2}}% -. \hyperref
+ \def\hyper@n@rmalise{\ifFrench\english\expandafter\fr@hnr% -.. \hyperimage
+ \else\expandafter\fr@hne\fi}%
+\fi%
+\ifx\PDFSCR@Info\undefined\else% -Remove last dot in sect. numbers of pdfscreen.
+ \def\@seccntformat#1{\protect\textcolor{section\thesection@level}%
+ {\expandafter\upshape\csname the#1\endcsname}\quad}%
+\fi%
+% The following should be obsolated:
+\ifx\listing\undefined\else% -........................................ \listing
+ \let\fr@li\listing% -Save current definition of \listing.
+%\newcommand\listing[2][1]{...} definition inside moreverb package, i.e.:
+\edef\listing{\noexpand\@protected@testopt\noexpand\listing%
+ \expandafter\noexpand\csname\string\listing\endcsname {1}}%
+%% Old moreverb def: \def\listing{\@ifnextchar[{\@listing}{\@listing[1]}}%
+ \ifx\fr@li\listing%
+ \def\listing{% -for moreverb package
+ \ifFrench\expandafter\english\expandafter\fr@li%
+ \else\expandafter\fr@li%
+ \fi}%
+ \else%
+ \long\def\listing{% -for listing package
+ \ifFrench\expandafter\english\expandafter\fr@li%
+ \else\expandafter\fr@li%
+ \fi\relax}%
+ \fi%
+\fi%
+\ifx\inputlisting\undefined\else% -.............................. \inputlisting
+ \let\fr@PL\lst@ProcessListing\def\lst@ProcessListing[#1]{%
+ \ifFrench\english\fr@PL[#1]\french%
+ \else\fr@PL[#1]%
+ \fi\relax}%
+\fi%
+% For listings package > (or equal to) V0.2000
+\ifx\lstlisting\undefined\else% -.................................. \lstlisting
+ \let\fr@lsi\lstlisting\long\def\lstlisting{% -for listings package
+ \ifFrench\expandafter\english\expandafter\fr@lsi%
+ \else\expandafter\fr@lsi%
+ \fi}%
+\fi%
+\ifx\lstinputlisting\undefined\else% -........................ \lstinputlisting
+ \let\fr@PL\lst@ProcessListing\def\lst@ProcessListing[#1]{%
+ \ifFrench\english\fr@PL[#1]\french%
+ \else\fr@PL[#1]%
+ \fi}%
+\fi%
+%#<
+\def\ifFrench#1\fi{\@NoFr}% -a temporary definition for error messages
+ %(\endnonfrench remains \undefined)
+\def\originalinput#1{\ifFrench\english\@finput{#1}\french% -..... \originalinput
+ \else\@finput{#1}\fi\relax}%
+\def\originaloutput[#1]{% -..................................... \originaloutput
+ \ifFrench\english\fi%
+ \def\@riginalout##1##2{\immediate\write##1{##2}}%
+ \@riginalout{#1}}%
+\let\ifFLA\iffalse% -We need \ifFLA now
+\@ifundefined{printindex}{% -makeidx.sty is included (as of 20-jan-87)
+ \def\see#1#2{\seename% -i assume this macro is defined in non-english sty.
+ \/ {#1}}% -.........................................\see
+ \def\printindex{\clearpage% -................................ \printindex
+ \ifx\hyper@refstepcounter\undefined\else%
+ \stepcounter{subparagraph}%
+ \hyper@refstepcounter{subparagraph}%
+ \fi%
+ \addcontentsline{toc}{chapter}%
+ {\protect\indexname}%
+ {\let\@ti\theindex% -........................ \theindex
+ \def\theindex{\@ti\ifFLA\thispagestyle{french}\fi}%
+ \@finput{\jobname.ind}}}}{}%
+\ifx\printnomenclature\undefined\else% -................... \printnomenclature
+\let\@pne\printnomenclature% -No French warnings with the nomenclature
+\def\printnomenclature{\nofrenchwarnings\@pne}% -package.
+\fi%
+\ifx\thebibliography\undefined\else%
+\let\@tbs\thebibliography%
+\let\fr@savebib\thebibliography%
+\long\def\thebibliography#1{% -..............USUAL........... \thebibliography
+ \ifFLA%
+ \ifx\hyper@refstepcounter\undefined\else%
+ \stepcounter{subparagraph}%
+ \hyper@refstepcounter{subparagraph}%
+ \fi%
+\ifx\bibname\undefined%
+ \addcontentsline{toc}{chapter}{\refname}%
+\else%
+ \addcontentsline{toc}{chapter}{\bibname}%
+\fi%
+ \fi%
+ \@tbs{#1}%
+ }%
+\ifx\bt@stepcnt\undefined%
+\else% -bibtopic mods adapted for jurabib too.
+% A specific recoding is made for ........BIBTOPIC......... \thebibliography
+% to allow bibtopic to extract de first three tokens which
+% begin \thebibliography (e.g. \section*{\refname}).
+\let\thebibliography\@tbs%
+\let\bt@saveitem\bibitem%
+\AtBeginDocument{\let\bt@savebib\fr@savebib}% -Give back thebibliography.
+\def\@tempd#1#2#3#4\void{\def\@tempa{\noexpand#1}\def\@tempb{\noexpand#2}%
+ \def\@tempc{\noexpand#3}\def\@@tbs##1{#4}}%
+\expandafter\@tempd\thebibliography{\string#1}\void%
+\edef\thebibliography#1{\@tempa\@tempb\@tempc%
+ \noexpand\@@tbs{#1}\noexpand\@tbs}%
+\def\@tbs{\ifFLA%
+ \ifx\hyper@refstepcounter\undefined\else%
+ \stepcounter{subparagraph}%
+ \hyper@refstepcounter{subparagraph}%
+ \fi%
+ \ifx\bibname\undefined%
+ \addcontentsline{toc}{chapter}{\refname}%
+ \else%
+ \addcontentsline{toc}{chapter}{\bibname}%
+ \fi%
+ \fi%
+ }%
+\fi% -bibtopic test.
+\fi% -\thebibliography defined?
+%
+\def\ifFLA{\ErrFrench}% -reset it to normal value here
+\@ifundefined{disableindex}{}% -Ok index.sty is not loaded;
+ {% -Otherwise we must redefine its \see
+ \def\see#1#2{\seename\/ {#1}}% -which contains \emph{\seename}.
+ }%
+\@ifundefined{seealso}{% -cf TUGboat V12#2 p290 and V13#1 p 95 .. \seealso
+ \def\subsee#1#2{\seealsoname% -i assume this macro is defined in non-engl.
+ \/ {#1}}% -the #2 consumes a comma or \dotfill
+ \let\nosee\@gobble% -consumes the page number
+ \def\seealso{\bgroup\edef\@temp@{}\@ifNextNB[{\see@@so}% -] case index.sty
+ {\see@lso}}%
+ \def\see@lso#1#2{\expandafter%
+ \index\@temp@{#1!zzzzz@\protect\subsee{#2}|nosee}\egroup}%
+ \def\see@@so[#1]{\edef\@temp@{[#1]}\see@lso}}{}%
+%#>
+% \if switches mechanism for french typography
+%
+ \def\@ifFTYfalse{\let\ifFTY\iffalse}%
+ \def\@ifFTYback{\let\ifFTY\if@Back}%
+ \let\if@PMF\iffalse% -PMF siwtch off for french light.
+%#<
+% Poor man defs
+%
+\newif\if@PMF\@PMFfalse%
+\def\pmfrench{\@PMFtrue\f@issue\@fw{-4- %
+%\@txt@msg{entering now "Poor-Man-French-Style" way}%
+ }%
+ \def\frenchname{pmfrench}}%
+%#>
+% Font processing
+%
+% look at \GOfrench for \footnotesize, \Huge, \sm@ller, \l@rger and co.
+%
+% information messages:
+\f@issue%
+\@fW{ -24- %
+%\@txt@msg{\frenchname.sty utilise dans ce document le codage de fonte }%
+%\@txt@msg{\f@encoding.^^J}%
+ }%
+ %
+\f@issue%
+\@fW{ -25- %\@txt@msg{\frenchname.sty affiche ici ses messages en }%
+%\@txt@msg{\ifEightBitOutput8-bits.\else7-bits << \string\`a la TeX >>.\fi}%
+%\@txt@msg{^^J^^J}%
+ }%
+%
+%For testing purposes ........................................ \CheckSevenBits
+\def\CheckSevenBits/#1{\def\@tempa##1##2/##3{\ifx##2\empty\else%
+ \f@issue%
+ \@fw{-51- %
+%\@txt@msg{ERREUR : ce document n'a pas \'et\'e converti en 8-bits...}%
+ }%
+ \expandafter ##3\fi}\expandafter\@tempa\noexpand#1}%
+%
+\@ifundefined{tt}{\def\tt{\fontfamily{\ttdefault}\selectfont}}{}% -........ \tt
+%#<
+% What font use for guillemets?
+% if \guillemetsinallfonts: the current font
+% if \guillemetsinroman: 1- try EC 2- or lasy 3- otherwise math simulation
+\let\ifGIAF\iftrue% -by now assume guillemets in all fonts
+\@ifundefined{ly}% -try to define \ly with NFSS ........................... \ly
+ {% -Allways load latexsym in case of any OT1 usage.
+ \ifx\symlasy\undefined% -if nfltxsym option not used
+ \ifx\undefined\babel@core@loaded%
+ \RequirePackage{latexsym}% -load LaTeX symbols defs
+ \else% -special case Babel (dont use \usepackage)
+ \xdef\@currname{latexsym}% -set package req.
+ \@@input latexsym.sty\@@input ulasy.fd%
+ \fi%
+ \fi%
+ \def\@ly{\fontencoding{U}\fontfamily{lasy}% -set encoding & family
+ \ifGIAF\else\fontseries{m}\fontshape{n}\fi\selectfont}%
+ \def\ly{\ifFG\ifECM\rm\else\@ly\fi\fi}% -default is rm otherwise lasy.
+ }{}%
+%
+\ifx\guillemetsfont\undefined%
+\def\guillemetsfont{\fontfamily{\rmdefault}% -................... \guillemetsfont
+ \fontseries{m}\fontshape{n}\selectfont}%
+\fi%
+\def\@gfnt{\guillemetsfont}% -Default guillemets' font is \rm.
+%#>
+% \string definitions and saved chars
+%
+\edef\lq{\string`}\edef\rq{\string'}% -as usual in LaTeX .............. \lq \rq
+\let\@cilq='% -this will be the catcode independent left quote
+\edef\lqq{\string`\string`}\edef\rqq{\string'\string'}% -.............. \lqq \rqq
+\edef\pointvirgule{\string;}% -.................................... \pointvirgule
+\edef\deuxpoints{\string:}% -........................................ \deuxpoints
+\let\@cidp=:% -this will be the catcode independent double point
+\edef\pointexclamation{\string!}% -........................... \pointexclamation
+\edef\pointinterrogation{\string?}% -....................... \pointinterrogation
+\edef\inferieura{\string<}% -....................................... \inferieura
+\edef\superieura{\string>}% -....................................... \superieura
+\edef\dittomark{\string"}% -......................................... \dittomark
+\let\f@par\par% -save it for \lettrine inside a list environment.
+\let\@SLQ\lq%
+\def\@SRQ@{^\bgroup\prim@s}%
+\def\@SRQ{\ifmmode\expandafter\@SRQ@\else\rq\fi}%
+%#<
+\let\@gotl\guillemotleft%
+\let\@gotr\guillemotright%
+\def\@temp@{LO1}\ifx\@temp@\f@encoding%
+ \else\edef\@temp@{OT1}\fi%
+\def\@tempa#1{\expandafter\relax% -define OT1-guillemets or LO1 ones
+ \expandafter\global%
+ \expandafter\def%
+ \csname\@temp@\string#1\endcsname}%
+\@tempa{\guillemotleft}{\let\ifECM\iffalse%
+ \ifFG\ly(\kern-0.20em(\else<<\fi}%
+\@tempa{\guillemotright}{\let\ifECM\iffalse%
+ \ifFG\unskip% -last kern was not in the correct font.
+ \ly\kern+0.20em)\kern-0.20em)%
+ \else>>%
+ \fi}%
+\let\@LSG\inferieura\def\@DOG{\inferieura\inferieura}%
+\let\@RSG\superieura\def\@DFG{\superieura\superieura}%
+\def\@SOC{\string[% -] emacs
+ }%
+\def\@SFC{% -[ emacs
+ \string]}%
+\edef\@LP{\ifECM023\else(\fi% -) emacs
+ }%
+\edef\@RP{% -( emacs
+ \ifECM024\else)\fi}%
+%#>
+% Define Options ............................ French style OPTIONS definitions
+%
+\newif\ifFH%
+\let\@noBDfr\@nodocument% -options can only be set after \begin{document}
+\def\frenchhyphenation{\@noBDfr}% -or in \usersfrenchoptions
+\def\nofrenchhyphenation{\@noBDfr}%
+\def\frenchtypography{\@noBDfr}%
+\def\regularmathcomma{\@noBDfr}%
+\def\frenchmathcomma{\@noBDfr}%
+\def\frenchwarnings{\@noBDfr}%
+\def\nofrenchwarnings{\@noBDfr}%
+\def\nofrenchtypography{\@noBDfr}%
+\def\nofrenchtranslation{\@noBDfr}%
+\def\frenchtranslation{\@noBDfr}%
+\ifx\RIfM@\undefined% -used before \begin{document} by AmS classes
+\def\nofrenchguillemets{\@noBDfr}%
+\def\frenchguillemets{\@noBDfr}%
+\def\nofrenchbguillemets{\@noBDfr}%
+\def\frenchbguillemets{\@noBDfr}%
+\fi%
+% Defaultly, layout is not constant from one language to another.
+\global\let\ifCLAfrench\iffalse% -No defaultly constant French page layout.
+\def\ConstantLayout{\@noBDfr}%
+%\def\nombre{\@noBDfr}%
+%\def\WindowsUnits{\@noBDfr}%
+%\def\FileName{\@noBDfr}%
+%\def\theFileName{\@noBDfr}%
+%#<
+\def\originalmathcomma{\@noBDfr}%
+\def\everyparguillemetsremoved{\@noBDfr}%
+\def\Numeros{\@noBDfr}%
+\def\order{\@noBDfr}%
+\def\endorder{\@noBDfr}%
+\def\sommairename{\@noBDfr}%
+\def\versatim{\@noBDfr}%
+\def\endversatim{\@noBDfr}%
+%#>
+\def\nofrenchmacros{\@noBDfr}%
+\def\frenchmacros{\@noBDfr}%
+\def\automaticlettrine{\@noBDfr}%
+\def\noautomaticlettrine{\@noBDfr}%
+\def\noeveryparguillemets{\@noBDfr}%
+\def\everyparguillemets{\@noBDfr}%
+\def\nofrenchlayout{\@noBDfr}%
+\def\frenchlayout{\@noBDfr}%
+\def\indentfirst{\@noBDfr}%
+\def\nonindentfirst{\@noBDfr}%
+\def\NouveauLangage{\@noBDfr}%
+\def\letpunctutionactivefor{\@noBDfr}%
+% This dirty hack to bypass ugly latex209 output routine of seminar slides.
+\def\@tempa{\let\ifarticle\iffalse}%
+\ifx\ifarticle\undefined\expandafter\@tempa\fi%
+\ifx\@seminarerr\undefined\else\ifarticle\else%
+\let\@soORI\shipout%
+\def\shipout#1#2{\def\@tempa{slide}\def\@tempb{slide*}%
+ {\ifx\@tempa\@currenvir\let\protect\noexpand%
+ \else\ifx\@tempb\@currenvir\let\protect\noexpand\fi%
+ \fi%
+ \@soORI#1#2}%
+ \global\let\shipout\@soORI% -just one time mod.
+ }%
+\fi\fi% -\@seminarerr
+% The new \hyphenation macro is used first at language.dat loading for frhyphex
+\let\h@yphenation\hyphenation% -save original \hyphenation
+\long\def\f@hyphenation#1{\bgroup%
+ \let\par\space% -For \h@yphenation.
+ \def\-{ }% -Stops compound words.
+ \let\allowhyphens\undefined% -but not \allowhyphens.
+ \csname accenthyphcodes\endcsname%
+ \lowercase{\edef\@tempa{#1}}%
+ \h@yphenation{\@tempa}\egroup}%
+%
+\def\@tempa{\let\iffrenchbibliography\iftrue}%
+\ifx\iffrenchbibliography\undefined\expandafter\@tempa\fi%
+%
+\ifx\nombre\undefined\else\let\@nomORI\nombre\fi%
+%
+\begingroup\obeyspaces%
+\gdef\@@nombre{\ifFTY\@mathcomma\obeyspaces\let =\,\fi}%
+\endgroup%
+\def\@nombre#1{\bgroup\let\ifFTY\iftrue\def\@tempa{#1}%
+ \def\,{\ifmmode\mskip\thinmuskip\fi}%
+ \if@filesw{\immediate\openout\@inputcheck=\jobname.tmp%
+ \let\protect\noexpand%
+ \ifmmode%
+ \immediate\write\@inputcheck{\protect\makeatletter%
+ \protect\@@nombre%
+ \@tempa\ignorespaces}%
+ \else%
+ \immediate\write\@inputcheck{\protect\makeatletter%
+ \protect\@@nombre%
+ $\@tempa$\ignorespaces}%
+ \fi%
+ \immediate\closeout\@inputcheck%
+ }%
+ \immediate\openin\@inputcheck=\jobname.tmp%
+ \immediate\read\@inputcheck to\@tempa%
+ \immediate\closein\@inputcheck%
+ \def\@tempa{{\input{\jobname.tmp}}}%
+ \fi%
+ \@tempa\egroup%
+ }%
+% French Lite defs:
+\ifx\nombre\undefined\DeclareRobustCommand*{\nombre}{\@nombre}\fi%
+\ifx\WindowsUnits\undefined% -.................................... \WindowsUnits
+ \def\WindowsUnits{\@wu}\fi%
+%
+\def\FileName{\bgroup% -.............................................. \FileName
+ \def\@FNenc@loop##1##2{\@tempcnta`##1\relax%
+ \loop\catcode\@tempcnta=11%
+ \ifnum\@tempcnta<`##2\relax%
+ \advance\@tempcnta\@ne%
+ \repeat}%
+ \@FNenc@loop\^^A\^^H%
+ \@FNenc@loop\^^K\^^K%
+ \@FNenc@loop\^^N\^^_%
+ \@FNenc@loop\^^?\^^ff% -128-255
+ \@FileName}%
+\def\@FileName#1{\gdef\theFileName{#1}\egroup}% -................... \theFileName
+%
+\let\og\empty\let\fg\empty% -Guillemets for French light:
+% Extrait de frenchb.ldf 2004/04/02 v1.6f on 2005/03/23:
+ \def\FrenchGuillemetsFrom#1#2#3#4{%
+ \DeclareFontEncoding{#1}{}{}%
+ \DeclareFontSubstitution{#1}{#2}{m}{n}%
+ \DeclareTextCommand{\guillemotleft}{OT1}{%
+ {\fontencoding{#1}\fontfamily{#2}\selectfont\char#3}}%
+ \DeclareTextCommand{\guillemotright}{OT1}{%
+ {\fontencoding{#1}\fontfamily{#2}\selectfont\char#4}}}
+ \def\CyrillicGuillemets{\FrenchGuillemetsFrom{OT2}{wncyr}{60}{62}}
+ \def\PolishGuillemets{\FrenchGuillemetsFrom{T1}{lmr}{19}{20}}
+ \def\LasyGuillemets{%
+ \DeclareTextCommand{\guillemotleft}{OT1}{\hbox{%
+ \fontencoding{U}\fontfamily{lasy}\selectfont(\kern-0.20em(}}%
+ \DeclareTextCommand{\guillemotright}{OT1}{\hbox{%
+ \fontencoding{U}\fontfamily{lasy}\selectfont)\kern-0.20em)}}}
+\ifeF@NoEnc\else
+ \IfFileExists{t1lmr.fd}{\PolishGuillemets}{\LasyGuillemets}
+\fi
+ \DeclareTextSymbolDefault{\guillemotleft}{OT1}
+ \DeclareTextSymbolDefault{\guillemotright}{OT1}
+ \def\guill@spacing{\penalty\@M\hskip.8\fontdimen2\font
+ plus.3\fontdimen3\font
+ minus.8\fontdimen4\font}
+ \DeclareRobustCommand*{\begin@guill}{\leavevmode
+ \guillemotleft\penalty\@M\guill@spacing}
+ \DeclareRobustCommand*{\end@guill}{\ifdim\lastskip>\z@\unskip\fi
+ \penalty\@M\guill@spacing\guillemotright\xspace}
+ \AtBeginDocument{\ifx\xspace\@undefined\let\xspace\relax\fi}
+ \def\bbl@frenchguillemets{\renewcommand{\og}{\begin@guill}%
+ \renewcommand{\fg}{\end@guill}}
+ \def\bbl@nonfrenchguillemets{\renewcommand{\og}{``}%
+ \renewcommand{\fg}{\ifdim\lastskip>\z@\unskip\fi ''}}
+%%%%%%%%%%%%%%%
+\def\@ifo{% -\GOfrench 1st part: options to be defined at \begin{document}
+\def\kbIO{\bgroup% -Is redefined at \begin{document}
+ \ifECM\fontencoding{OT1}\selectfont\fi% -Basic fontencoding needed.
+ \ifFTY\expandafter\nofrenchtypography\fi%
+ \let\@nobraces\@firstofone% -could be provided separately,
+ \let\protect\string%
+ \ifEightBitOutput% -eg by kbconfig.
+ \def\'####1{\expandafter\@nobraces\@aiguORI####1}%
+ \def\`####1{\expandafter\@nobraces\@gravORI####1}%
+ \def\^####1{\expandafter\@nobraces\@acchORI####1}%
+ \def\"####1{\expandafter\@nobraces\@tremORI####1}%
+ \def\c####1{\expandafter\@nobraces\@cediORI####1}%
+ \csname @kbspecials\endcsname% -Translation settings.
+ \else% -7-bit output wanted.
+ \let\add@accent\@gobble%
+ \def\set@display@protect{\let\protect\noexpand}% -Have spaces!
+ \fi%
+ \@kbtypeout}%
+\let\s@owhyphens\showhyphens%
+% Save original settings of \dospecials et \@sanitize
+\let\@dsORI\dospecials% -...........................\@dospecials.........original
+\@ifundefined{@sanitize}{\def\@sanitize{\relax}}{}%
+\let\@saORI\@sanitize% -............................\@sanitize...........original
+\def\frenchhyphenation{%
+ \ifFH\else\FHtrue% -....................\frenchhyphenation
+ \edef\@uchORI{\the\uchyph}% -save previous uchyph value
+ \def\@Hif{\ifFH}\let\@Hfi\fi%
+ \lccode `\'=`\'%
+ \ifx\flowercase\undefined\else\def\lowercase{\flowercase}\fi%
+ \@ifundefined{allowhyphens}{% -.............................. \allowhyphens
+ \def\allowhyphens{\ifhmode\nobreak\hskip\z@skip\fi}}{}%
+% % There is no need to change here left&right hyphenmin counts
+% % but other languages might have changed default values
+ \@ifundefined{lefthyphenmin}{}%
+ {\lefthyphenmin=2\righthyphenmin=3}% -disallow x- or -xx breaks
+ \@whatUCH% -set Upper Case Hyphenation whatsit
+ \def\@tempa####1{{\accenthyphcodes\h@yphenation{####1}}}%
+ \ifx\@tempa\hyphenation\f@issue%
+ \@fw{-41- %\@txt@msg{your format is out of date, }%
+ %\@txt@msg{please run initex again!}%
+ }\stop%
+ \fi%
+ \def\accenthyphcodes{% -Use fontencoding just
+ \let\@typeset@protect\protect% -in a
+ \ifx\protect\noexpand\else% -typesetting process.
+ \ifECM\else\fontencoding{T1}%
+ \let\pickup@font\@gobble%
+ \let\size@update\relax\selectfont%
+ \fi\fi}%
+ \let\hyphenation\f@hyphenation%
+ \def\showhyphens####1{\bgroup%
+ \csname accenthyphcodes\endcsname%
+ \protected@edef\@tempa{####1}%
+ \s@owhyphens{\@tempa}\egroup}%
+ \fi}% -\ifFH
+\def\nofrenchhyphenation{%
+ \ifFH\FHfalse% -....................\nofrenchhyphenation
+ \lccode`\'=0%
+ \let\hyphenation\h@yphenation% -restore original \hyphenation
+ \let\showhyphens\s@owhyphens%
+ \ifx\lowercaseORI\undefined\else\let\lowercase\lowercaseORI\fi%
+ \@ifundefined{lefthyphenmin}{}%
+ {\lefthyphenmin=2\righthyphenmin=3}% -disallow x- or -xx breaks
+ \uchyph=\@uchORI% -reset original hyph. on words starting with capitals
+ \fi}%
+%#<
+\edef\originalmathcomma% -.................................. \originalmathcomma
+ {\noexpand\mathcode`,=\the\mathcode`,}%
+%#>
+\@tempcnta=\the\mathcode`,\@tempcntb=\the\mathcode`,%
+\divide\@tempcnta by 4096\relax% -On r'ecup`ere la classe (demi octet poids fort)
+\multiply\@tempcnta by -4096\relax% -en 'eliminant les poids failbles.
+\advance\@tempcntb by \@tempcnta% -On garde le restant de poids faible.
+\edef\@tempb{\noexpand\mathcode`,=\the\@tempcntb}% -French is usually "013B.
+\advance\@tempcntb by 24576\relax%
+\edef\@tempa{\noexpand\mathcode`,=\the\@tempcntb}% -Regular is usually "613B.
+% Regular LaTeX math code for comma is usually "613B (ie 24891).
+\edef\regularmathcomma{% -.................................... \regularmathcomma
+ \noexpand\def\noexpand\@mathcomma{\@tempa}%
+ \noexpand\@mathcomma}%
+\def\@tempa{\if\space\next\else\mathord\fi\mathcomma}%
+\let\ifFTY\iftrue% -For the following definitions:
+\ifx\@tempa\sm@rtcomma% -In case icomma is in force we use:
+ \def\frenchmathcomma{% -...................................... \frenchmathcomma
+ \def\@mathcomma{\ifFTY\mathcode`\,="8000\fi}%
+ \@mathcomma}%
+\else% -otherwise:
+\edef\frenchmathcomma{% -French math code for comma is usually "013B (ie 315).
+ \noexpand\def\noexpand\@mathcomma%
+ {\noexpand\ifFTY\@tempb\noexpand\fi}%
+ \noexpand\@mathcomma}%
+\fi%
+\frenchmathcomma% -Is the default for french.
+\def\ifFTY{\ErrFrench}%
+%
+\def\nofrenchtypography{% -...................................\nofrenchtypography
+ \let\ifFTY\iffalse\let\if@Back\ifFTY%
+% Reset OT1 definition of \textbackslash to undefined.
+\expandafter\let\csname OT1\string\textbackslash \endcsname\undefined%
+%#<
+ \notabbingaccents% -usefull in T1 too with 8bits chars.
+%#>
+ \nofrenchguillemets% -reseting our guillemets
+ \nofrenchbguillemets% -and those as frenchb
+ \sloppy% -may extend line past the right hand
+ \nonfrenchspacing%
+ \regularmathcomma%
+% necessary to commute in case of \XeTeXinterchartokenstate
+ \eFr@Typofalse
+ }%
+\def\frenchtypography{% -.......................................\frenchtypography
+ \let\ifFTY\iftrue\let\if@Back\ifFTY%
+% Add OT1 definition of \textbackslash, missing inside \LaTeX.
+\expandafter\let\csname OT1\string\textbackslash \endcsname\@boiORI%
+ \let\ifLPA\iffalse% -default is clean...
+ \typedspaces%
+%#<
+ \nowrongtypedspaces%
+ \tabbingaccents% -usefull in T1 too with 8bits chars.
+ \englishquote\englishdoublequotes%
+ \nolabelsinmargin%
+ \frenchguillemets%
+%#>
+ \frenchbguillemets%
+%#<
+ \normalbrackets\todayguillemets%
+ \guillemetsinroman\guillemetsinarrays%
+%#>
+ \edef\@tempa{\the\vfuzz}% -AmS may have changed \vfuzz
+ \fussy% -must not extend line past the right hand
+ \vfuzz=\@tempa% -and should not change \vfuzz
+ \frenchspacing%
+ \frenchmathcomma%
+% \nooverfullhboxmark% std LaTeX default not plain
+% necessary to commute in case of \XeTeXinterchartokenstate
+ \eFr@Typotrue
+ }%
+\def\nofrenchtranslation{%
+ \let\ifFTR\iffalse\@cORI}% -........\nofrenchtranslation
+\def\frenchtranslation{%
+ \let\ifFTR\iftrue\captionsfrench}% -....\frenchtranslation
+\let\frenchguillemets\relax\let\nofrenchguillemets\relax%
+\let\frenchbguillemets\bbl@frenchguillemets% -............... \frenchbguillemets
+\let\nofrenchbguillemets\bbl@nonfrenchguillemets% -........ \nofrenchbguillemets
+%#<
+\def\frenchguillemets{%
+ \let\ifFG\iftrue% -..................... \frenchguillemets
+ \let\guillemets\@LG%
+ \let\endguillemets\RG@%
+ \let\guillemotleft\f@guillemets%
+ \let\guillemotright\endf@guillemets%
+ \AFPinfsup}%
+\def\nofrenchguillemets{%
+ \let\ifFG\iffalse% -.................. \nofrenchguillemets
+ \let\guillemotleft\@gotl%
+ \let\guillemotright\@gotr%
+ \let\guillemets\f@guillemets%
+ \let\endguillemets\endf@guillemets%
+ \DFPinfsup}%
+\def\noeveryparguillemets{\let\ifEPG\iffalse% -.............\noeveryparguillemets
+ \@desarm\let\@desarm\relax% -release memory
+ \def\guillemets{%%\leavevmode\unskip%
+ \f@issue%
+ \@fw{-53- %
+ %\@txt@msg{environnement guillemets }%
+ %\@txt@msg{ inutilisable avec l'option }%
+ %\@txt@msg{\string\noeveryparguillemets}%
+ }%
+ \bgroup\bgroup%
+ \def\guillemets{\bgroup%
+ \let\endguillemets\egroup}}%
+ }%
+\def\everyparguillemets{\let\ifEPGR\iffalse% -.............. \everyparguillemets
+ \let\ifEPG\iftrue%
+ \let\guillemets\@LG%
+ \let\endguillemets\RG@%
+ }%
+\def\everyparguillemetsremoved{%
+ \let\ifEPGR\iftrue}% -........ \everyparguillemetsremoved
+%#>
+\def\@tempa{\global\let\ifCLA\iffalse}% -If not already set, no defaultly
+\ifx\ifCLA\undefined\expandafter\@tempa\fi% -constant language layout.
+\def\ConstantLayout{\global\let\ifCLA\iftrue% -...................\ConstantLayout
+ \expandafter\let\csname ifCLA\languagename\endcsname\iftrue%
+ \def\@tempa{\let\ifbbbbfixlanguage\iftrue}%
+ \ifx\ifbbbbfixlanguage\undefined\@tempa\fi%
+ \def\@tempa{\ifbbbbfixlanguage\else%
+ \f@issue%
+ \@fw{-85- %\@txt@msg{Attention \string: l'option fixlanguage }%
+%\@txt@msg{n'a pas ete fournie a l'appel de babelbib}%
+ }\fi%
+ }%
+ \ifx\@nodocument\relax\@tempa%
+ \else\ifx\btxselectlanguage\undefined%
+ \PassOptionsToPackage{fixlanguage}{babelbib}%
+ \else\@tempa%
+ \fi%
+ \fi%
+ \let\ConstantLayout\relax}% -This is a one time macro.
+%
+\def\nofrenchlayout{\nofrenchtrivsep%
+ \let\ifFLA\iffalse\@EIM}% -...................\nofrenchlayout
+\def\frenchlayout{%
+ \let\ifFLA\iftrue\everyparguillemets% -...........\frenchlayout
+ \@FIM\@FL\let\@FL\empty\noautomaticlettrine%
+ \frenchtrivsep}%
+\def\frenchwarnings{\let\ifFW\iftrue% -......................... \frenchwarnings
+ \frenchtrivsepwarnings}%
+\def\nofrenchwarnings{\let\ifFW\iffalse% -..................... \nofrenchwarnings
+ }% -This code is not completed.
+%#<
+\def\nofrenchmacros{\let\ifFMA\iffalse}% -........................\nofrenchmacros
+\def\frenchmacros{\let\ifFMA\iftrue\@ifm% -.........................\frenchmacros
+ \let\@ifm\relax}% -release memory
+%#>
+}% -end of \@ifo {\GOfrench part 1}
+%#<
+\long\def\usersfrenchoptions% -............................. \usersfrenchoptions
+ {\bgroup\makeatletter%
+% \expandafter\makeatother%
+ \expandafter\egroup%
+ \g@addto@macro\@ufo}%
+%#>
+\ifx\@ufo\undefined%
+ \let\@ufo\empty% -necessary for babel when loading
+\fi%
+%
+%....................................................... Modified TeX macros
+%
+ \def\prim@s{\prime\futurelet\@let@token\pr@m@s}%
+ \def\pr@m@s{\ifx\@cilq\@let@token\expandafter\pr@@@s%
+ \else\ifx^\@let@token\expandafter\expandafter\expandafter\pr@@@t%
+ \else\egroup\fi%
+ \fi}%
+\let\@fsORI\frenchspacing% -modified for guillemets............. \frenchspacing
+\def\frenchspacing{\@fsORI\ifECM\sfcode`\(=0\sfcode`\)=1000\fi}%
+%%%%
+% let < ' : ` > active for the following macros and
+\catcode`<=\active\catcode`>=\active\catcode`'=\active%
+\catcode`:=\active\catcode``=\active%
+\let<=\inferieura\let>=\superieura% -define them for french light.
+\def\@Fstr{\def<{\@LSG}\def>{\@RSG}\def`{\@SLQ}\def'{\@SRQ}%
+ \def:{\deuxpoints}%
+ \let\dGs\empty}% -Nullify any \dGs macro from keyboard.sty.
+\def\@LiN{\let\@sogORI<\let\@sfgORI>\let\@lqORI`\let\@rqORI'%
+ \let\@dpORI:\@Fstr\@ifFTYfalse}%
+\def\@LiB{\let<\@sogORI\let>\@sfgORI\let`\@lqORI\let'\@rqORI%
+ \let:\@dpORI\@ifFTYback}%
+\catcode\lq:=12%
+\let\@s@ORI\special% -................................................. \special
+% done in \GOfrench:
+%\def\special#1{\@ifFTYfalse\bgroup\@Fstr\@s@ORI{#1}\egroup\@ifFTYback}%
+% \newcount, \newdimen, \newbox were \outer defs in plain.
+% but with eTeX these definitions are ok (rj, v 6,01)
+\ifx\eTeXversion\undefined% (rj)
+\def\newcount{\alloc@0\count\countdef\insc@unt}% -.................... \newcount
+\def\newdimen{\alloc@1\dimen\dimendef\insc@unt}% -.................... \newdimen
+\def\newbox{\alloc@4\box\chardef\insc@unt}% -......................... \newbox
+\fi% (rj)
+%
+%........................................ Modified package's & LaTeX macros
+%
+% Those defs which need to be set at \begin{document} are delayed.
+% Take in account the varioref package if present:
+\let\ifFTY\iffalse% -Temporary definition.
+\ifx\vref\undefined\else% -As \@ifpackageloaded is forbidden at
+\@ifpackageloaded{varioref}{\def\@vrfCode{% -\begin{document}, test it now.
+ \@gG{vr}{vref}{/}{1}% -................................... \vref
+ \@gG{vpr}{vpageref}{1}{1}% -...........................\vpageref
+ \@gG{vprr}{vpagerefrange}{1}{2}% -................\vpagerefrange
+ \def\reftextpagerange##1##2{% -...............\reftextpagerange
+ pages~\pageref{##1}\ifFTY -\else --\fi\pageref{##2}}%
+ }%
+ }{}%
+\fi%
+\def\ifFTY{\ErrFrench}% -Reset original value.
+% Take in account the beamer class (don't use \l@chapter)
+\@ifclassloaded{beamer}{\let\l@chapter\empty%
+ \def\beamer@captiontemplate{\small\structure%
+ {\insertcaptionname\captionseparator\space}%
+ \insertcaption}
+ }{}%
+%
+\def\GOfrench{% -this is the code to initiate the French style
+ \def\special##1{\@ifFTYfalse\bgroup\@Fstr\@s@ORI{##1}%
+ \egroup\@ifFTYback}%
+ \let\@noBDfr\relax% -release french options/commands now
+ {\catcode\lq\<=\active\ifx<\undefined\else\global%
+ \let\@mLSG<\global%
+ \def\@LSG{\ifmmode\@mLSG\else\inferieura\fi}\fi}%
+ {\catcode\lq\>=\active\ifx>\undefined\else\global%
+ \let\@mRSG>\global%
+ \def\@RSG{\ifmmode\@mRSG\else\superieura\fi}\fi}%
+\if@PMF\def\pmfrench{}\def\noeveryparguillemets{}\def\@stared{}%
+ \def\@desarm{}\def\@qquotes{}\def\@staring{}\def\@fniv2{}\fi%
+\def\sm@llerthree{\protect\sm@ller\protect\sm@ller\protect\sm@ller}
+\@ifundefined{smaller}{\def\sm@ller{\small}% -... you can use ...[smaller.sty]
+ \let\sm@llerthree\scriptsize%
+ \def\l@rger{\large}}%
+ {\def\RSsmallest{4pt}% -... you can use ...[relsize.sty]
+ \ifx\undefined\sm@ller%
+ \let\sm@ller\smaller\fi}%
+\@ifundefined{footnotesize}{% -.................................... \footnotesize
+ \def\footnotesize{\sm@ller\sm@ller}}{}%
+\@ifundefined{Huge}{% -.................................................... \Huge
+ \def\Huge{\l@rger\l@rger\l@rger\l@rger\l@rger}}{}%
+%#<
+\@ifundefined{lettrinefont}{\let\lettrinefont\Huge}{}% -........... \lettrinefont
+\let\sv@lf=\lettrinefont% -save it
+\ifx\@pdfcreator\undefined% -Complete pdf creator name.
+ \else\addto\@pdfcreator{, with \frenchpack\space package}\fi%
+%#>
+% Command to leave chapter counter asis.................... \noresetatpart
+\def\noresetatpart{\ifFLA\let\cl@part\empty\fi}%
+% Command to leave footnote counter asis over chapter change.
+\def\noresetatchapter{\ifFLA\let\cl@chapter\empty\fi}% -....... \noresetatchapter
+% Let \chapter be defined.
+\@ifundefined{chapter}{}{}% -.......................................... \chapter
+% Reset chapter counter when starting a part &
+\@ifundefined{c@chapter}{\newcounter{chapter}}{\@addtoreset{chapter}{part}}%
+\@ifundefined{quotation}{\def\quotation{}}{}% -...................... \quotation
+\ifx\tableofcontents\undefined%
+ \else\let\@tocORI\tableofcontents\fi% -permit toc normal processing
+\ifx\pdfstringdef\undefined% -Save orginal \contentsline for hyperref.
+ \else\let\contentslineORI\contentsline\fi%
+% Coding to bypass pb of duplicate in hyprref < 6,69f
+%\ifx\undefined\pdfstringdef\@tempa% Using pdfTeX hyperref should
+% \else\ifx\theHchapter\undefined% have no \thechapter otherwise
+% \else\@tempa% it complains arguing there is a duplicate section
+% \fi% #,
+%\fi% so we no more define \thechapter in that case.
+\@ifundefined{l@chapter}{% -...................................... \l@chapter
+\def\@tempa{%
+ \def\l@chapter####1####2{\addpenalty{-\@highpenalty}%
+ \vskip 1.0em plus\p@\@tempdima 1.5em% -numbering size
+ \begingroup%
+ \parindent \z@ \rightskip \@pnumwidth \parfillskip -\@pnumwidth%
+ \bfseries \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip%
+ ####1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss ####2}\par%
+ \penalty\@highpenalty%
+ \endgroup}}%
+\ifx\RIfM@\undefined\@tempa% -use l@chapter
+ \else% % -even with AmS styles
+ \ifx\fr@RIfM@cls\undefined\@tempa
+\fi% -but not for AmS classes
+\fi}{}% -undefined in article.sty
+% Due to resetting of chapter counter at part change we have to better
+\@ifundefined{theHchapter}{}% -qualify the chapter anchor names.
+ {\renewcommand{\theHchapter}{\arabic{part}.\arabic{chapter}}}%
+%
+% General code for generating replacement macros for \cite \nocite etc.
+% \@gG{a string "s" for letting \@"s"@ORI as the original macro}
+% {original macro name -without backslash}
+% {string "/" if original macro had no [optional arg] otherwise empty}
+% "1" if original macro has one req. [o.p. arg 1]
+% "2" if original macro has two req. [o.p.1][o.p.2]
+% "//"if no optional arg but more than one required arg:
+% {number of required args} % default is 1, maximum is 3.
+ \def\@gG##1##2##3##4{%
+ \def\@temp@{\expandafter\let\csname @##1@ORI\endcsname=}%
+ \expandafter\@temp@\csname ##2\endcsname%
+ \if##3\empty%
+ \if2##4%
+ \expandafter\def\csname ##2\endcsname####1####2%
+ {\protect\atgG{##1}{{####1}{####2}}}%
+ \else%
+ \if3##4%
+ \expandafter\def\csname ##2\endcsname####1####2####3%
+ {\protect\atgG{##1}{{####1}{####2}{####3}}}%
+ \else%
+ \expandafter\def\csname ##2\endcsname####1%
+ {\protect\atgG{##1}{{####1}}}%
+ \fi%
+ \fi%
+ \else% -Case of just one required argument, check optional args:
+ \if/##3\expandafter\def\csname ##2\endcsname{\protect\atgH{##1}}%
+ \else%
+ \if2##4\expandafter\def\csname ##2\endcsname{\protect\atgN{##1}}%
+ \else\expandafter\def\csname ##2\endcsname{\protect\atgM{##1}}%
+ \fi%
+ \fi%
+ \fi}%
+ \def\atgG##1##2{\bgroup\@ifFTYfalse\@Fstr%
+ \expandafter\csname @##1@ORI\endcsname##2\egroup}%
+ \def\atgH##1##2{\bgroup\@ifFTYfalse\@Fstr%
+ \expandafter\csname @##1@ORI\endcsname{##2}\egroup}%
+ \def\atgM##1{\@ifNextNB[{\@gM@@{##1}}{\@gM@@{##1}[\empty]}% -]emacs
+ }%
+ \def\atgN##1{\@ifNextNB[{\@gM@@@{##1}}{\@gM@@@{##1}[\empty]}% -]emacs
+ }%
+ \def\@gM@@##1[##2]##3{\@gM@@@{##1}[##2]{##3}{}}%
+ \def\@gM@@@##1[##2]##3##4{\bgroup\@ifFTYfalse\@Fstr%
+ \xdef\@temp@{\noexpand\@gG@{##3}{##4}}\egroup%
+ \ifx\empty##2\let\@gG@=\empty%
+ \else\protected@edef\@gG@{[##2]}\fi%
+ \let\@typeset@protect\protect%
+ \protected@edef\@temp@{\noexpand\expandafter%
+ \noexpand\expandafter%
+ \noexpand\csname @##1@ORI\noexpand\endcsname%
+ \@temp@}\@temp@}%
+% Nullify Babel mechanism which doesn't run correctly in its current version
+\ifx\babel@sanitize@arg\undefined\else%
+\def\babel@sanitize@arg##1{##1}%
+\wlog{\frenchname.sty\string: use of the babel package force me to nullify %
+ \noexpand\babel@sanitize@arg.}%
+\fi%
+\ifx\ifthenelse\undefined\else\let\@iTeORI\ifthenelse%
+ \long\def\ifthenelse##1##2##3{\@ifFTYfalse\@iTeORI{##1}%
+ {\@ifFTYback##2}{\@ifFTYback##3}}%
+\fi%
+\ifx\texttt\undefined\else\@gG{xt}{texttt}{/}{1}% -...................... \texttt
+ \MakeRobustCommand{texttt}\fi%
+\ifx\hyperbaseurl\undefined\else\@gG{hl}{hyperbaseurl}{/}{1}\fi% -. \hyperbaseurl
+\ifx\Ginclude@graphics\undefined\else\@gG{ig}% -.............. \Ginclude@graphics
+ {Ginclude@graphics}{/}{1}\fi% -. (\includegraphics)
+% As \citeyear is in various packages we check first for natbib.sty and
+\ifx\NAT@citex\undefined% -then modify all \cite... commands via \@citex.
+ \ifx\cite\undefined\else\@gG{c}{cite}{1}{1}\fi% -.................... \cite
+ \ifx\citeyear\undefined\else\@gG{cy}{citeyear}{/}{1}\fi% -........... \citeyear
+\else% -....................................................... Natbib \cite...
+ \let\@cxORI\@citex%
+ \def\@citex[##1][##2]##3{\@ifFTYfalse%
+ \let\mbox\mboxORI%
+ \@cxORI[##1][##2]{##3}\aftergroup\@ifFTYback}%
+%%%%%%%%%%%%%%%%%%%%%%%
+%Following code for Natbib and jurabib wrong, obsolate and misplaced.2006/08/15
+%\@gG{fc}{fullcite}{1}{1}%
+%\@gG{cin}{citation}{/}{1}%
+%\def\@lbibitem[##1]##2{\protected@edef\jb@key{##2}\def\jb@tempb{##1}}%
+\@gG{cin}{citation}{/}{1}% -............................................\citation
+ \ifx\ifjb@index@bib\undefined\let\ifjb@index@bib\iffalse\fi%
+ \ifx\jb@lbibitem\undefined\else% -............... JURABIB ........ \jb@lbibitem
+% Modify jurabib definition of \jb@lbibitem as of jurabib v0.6 (2004/01/25)
+% with a \protected@xdef for \jb@key.
+ \def\jb@lbibitem[##1]##2{%
+ \gdef\jb@tempb{##1}%
+ \protected@xdef\jb@key{##2}%\gdef\jb@key{##2}%
+ \ifjb@index@bib%
+ \jb@call@index{aut}{##2}%
+ \jb@call@index{ed}{##2}%
+ \jb@call@index{org}{##2}%
+ \fi%
+ \endgroup}%
+ \@gG{fc}{fullcite}{1}{1}% -.......................JURABIB.............\fullcite
+ \fi%
+\fi%
+\ifx\nocite\undefined\else\@gG{nc}{nocite}{/}{1}\fi% -................... \nocite
+% As \bibcite has not originally any argument the following definition
+% is remove and \@newl@bel is introduced in replacement of \newlabel.
+%\ifx\bibcite\undefined\else\@gG{bc}{bibcite}{1}{1}\fi%............... \bibcite
+\ifx\backcite\undefined\else\@gG{bkc}{backcite}{//}{2}\fi% -........... \backcite
+\ifx\bibitem\undefined\else\let\@biORI\bibitem% -...................... \bibitem
+ \def\bibitem{\@LiN\@ifNextNB[{\@bi@cb}{\@bi@ca}% -]emacs
+ }%
+ \def\@bi@ca##1{\@biORI{##1}\@LiB}%
+ \def\@bi@cb[##1]##2{\@biORI[##1]{##2}\@LiB}%
+\fi%
+\expandafter\ifx\string\bt@@item\undefined% -... bibtopic \\bt@@item
+ \else\@gG{bti}{\string\bt@@item}{1}{1}%
+ \fi%
+% Take in account varioref package if present at \begin{document}:
+\ifx\vref\undefined\else% -Nullify \@vrfCode if varioref is
+ \ifx\reftextvario\undefined\let\@vrfCode\undefined% -now loaded.
+\fi\fi%
+%
+\ifx\ref\undefined\else\@gG{r}{ref}{/}{1}\fi% -............................. \ref
+\ifx\tag\undefined\else\@gG{tG}{tag}{/}{1}\fi% -............................ \tag
+\ifx\pageref\undefined\else\let\pageref@ORI\pageref%
+ \let\f@pageref\pageref\@gG{fpr}{f@pageref}{/}{1}%
+ \def\pageref{\ifFTY\expandafter\f@pageref\else% -....................\pageref
+ \expandafter\pageref@ORI\fi}%
+\fi%
+\csname @vrfCode\endcsname% -load mods for varioref package \vref, \vpageref
+\xdef\@lim{}\let\ifMOVING\iffalse%
+% The label for the subfigure package ...........................\sf@@sub@label
+\ifx\sf@@sub@label\undefined\else\@gG{ss}{sf@@sub@label}{/}{1}\fi%
+% Set code for labels in margin.
+\def\@temp@{%
+ \def\label{\protect\@LabeL}% -needed to be protected for \thanks
+% Remove patch $\label$ for Simon Pierre DESROSIERS 9/09/05
+% \def\@LabeL{\ifmmode\expandafter\s@LabeL\else\expandafter\t@LabeL\fi}%
+% \def\s@LabeL####1{\gdef\r@LabeL{\label{####1}}\aftergroup\r@LabeL}%
+% New patch for \label en mode math. 4/07/2006 %
+\def\r@LabeL{\ifx\@lim\empty% -Special def to put labels in margin
+ \else\marginpar{\@lim@}\xdef\@lim{}% -at end of maths $$.
+ \fi}% -No need to nullify MOVING after group.
+\def\m@LabeL{\def\@setMGtrue{\let\ifMOVING\iftrue}%
+ \ifmmode\@setMGtrue% -If maths go like a moving block.
+ \aftergroup\r@LabeL% -Do final margin at end of maths group.
+ \fi%
+ \expandafter\t@LabeL}% -Go process \label as usual.
+\def\@LabeL{\ifMOVING\expandafter\t@LabeL% -If already moving process as usual
+ \else\m@LabeL% -else test for maths.
+ \fi}%
+%
+ \def\t@LabeL####1{\@ifFTYfalse\if@labelsinmargin\ifMOVING%
+ \xdef\@lim{\ifx\@lim\empty\else\@lim\@@par\relax\fi[####1]}%
+ \gdef\@lim@{\@ifFTYfalse\hbadness=\@M\tt\@lim\@ifFTYback}%
+ \else\marginpar{%
+ \@ifFTYfalse\hbadness=\@M\tt[####1]\@ifFTYback}\fi\fi%
+% how suppress Overful \hbox here?
+ \bgroup\@Fstr\@lORI{####1}\egroup\@ifFTYback}%
+ }%
+\ifx\fr@RIfM@cls\undefined\else% -isolate maketitle action with AmS classes.
+\let\@mtORI\maketitle% -............................................ \maketitle
+\def\maketitle{{\@mtORI}}% -avoid removing of keywords environement.
+\fi%
+\ifx\label\undefined\else\let\@lORI\label% -.............................. \label
+ \@temp@% -new def apply
+ \let\ltx@label\label% -for amsmath.sty
+\fi%
+%instead this coding, active chars in \label must be protected inside a \thanks
+% As the internal macro of \newlabel is \@newl@bel #1 the following
+% definition of \newlabel is removed and replace by \@newl@bel.
+%\ifx\newlabel\undefined\else\@gG{nl}{newlabel}{/}{1}\fi%............ \newlabel
+\ifx\@newl@bel\undefined\else\@gG{nl}{@newl@bel}{//}{3}\fi% -......... \@newl@bel
+\def\@temp@{%
+ \let\@aclORI\addcontentsline% -............................ \addcontentsline
+ \global\let\ifCG\iftrue% -Nullify if-guillemets on a new sectioning
+ \def\addcontentsline####1####2####3{\@ifFTYfalse\bgroup\@Fstr%
+ \@aclORI{####1}{####2}{####3}\egroup\@ifFTYback}%
+ }%
+\@ifundefined{addcontentsline}{\gdef\addcontentsline##1##2##3{}}% -dummy def
+ {\@temp@}%
+\let\ifFrench\iffalse% -let it be known now
+\def\@temp@{%
+ \def\index{\bgroup\ifFrench\@DFP\fi% -Is further redefined
+ \expandafter\egroup\@iORI}% -inside \footnote.
+ }%
+\ifx\index\undefined\else\let\@iORI\index% -.............................. \index
+ \@temp@% -new def apply
+\fi%
+%
+\ifx\list\undefined\else% -Mods to keep track
+ \let\@liORI\list% -that we are in a list environment ........ \list
+\fi%
+ \let\@topsepORI\topsep% -ans save original vertical
+ \let\@partopsepORI\partopsep% -spaces
+ \let\@itemsepORI\itemsep% -so that we could warn when
+ \let\@parsepORI\parsep% -user try to change them.
+%\def\GOfrench{continuation -emacs pb-
+\def\warn@seps{\def\topsep{\@w@s{\string\topsep}\@topsepORI}%
+ \def\partopsep{\@w@s{\string\partopsep}\@partopsepORI}%
+ \def\itemsep{\@w@s{\string\itemsep}\@itemsepORI}%
+ \def\parsep{\@w@s{\string\parsep}\@parsepORI}%
+ \def\@tempa{verse}\def\@tempb{quotation}%
+ \ifx\@tempa\@currenvir\let\@w@s\@gobble\else%
+ \ifx\@tempb\@currenvir\let\@w@s\@gobble\fi%
+ \fi%
+ }%
+\def\@w@s##1{\ifFTSW\f@issue%
+ \@fw{-58- %\@txt@msg{valeur de ##1 ignor\'ee}%
+% dans l\string'environnement \@currenvir%
+ }[##1]\fi}%
+\def\org@seps{\let\topsep\@topsepORI%
+ \let\partopsep\@partopsepORI%
+ \let\itemsep\@itemsepORI%
+ \let\parsep\@parsepORI%
+ }%
+\def\list##1##2{\def\@inAlist{}\@liORI{##1}{%
+ \ifx\@trivlist\@tlORI\else\warn@seps\fi%
+ ##2\org@seps}}%
+\ifx\@makecaption\undefined\else\let\@mcORI\@makecaption\fi% -.... \@makecaption
+%
+\ifx\captionseparator\undefined%
+ \def\captionseparator{~--}% -............................ \captionseparator
+\fi%
+\let\ifFTY\iffalse% -Let it be knwon temporary.
+% \captionseparator is off with memoir.cls, use \captiondelim.
+\ifx\@contdelim\undefined\else% -..............(ccaption/memoir) \@contdelim
+ \ifx\@memerror\undefined%
+ \let\@cdORI\@contdelim% -The definition for ccaption:
+ \def\@contdelim{\ifFTY\space\else\@cdORI\fi}%
+ \else%\let\@contdelim\@cdORI% -Don't modify \@contdelim for memoir.cls
+ \let\captionseparator\empty% -Suppress our \captionseparator for table/figure
+ \let\captionfont\@conttfont% -Apply requested memoir font.
+ \fi%
+\fi%
+\def\ifFTY{\ErrFrench}%
+\ifx\captionfont\undefined% -..................................... \captionfont
+ \let\captionfont\emph% -Std is italics.
+ \else\let\@cfORI\captionfont% -Might be Caption2, thus
+ \def\captionlabelfont{\upshape}% -set defaults.
+ \def\captionfont{\itshape\@cfORI}%
+ \ifx\captionlabeldelim\undefined\else% -Use Caption2 delimitor cs
+ \let\captionlabeldelim\captionseparator% -if any, and set our
+ \let\captionseparator\empty% -default value.
+ \fi%
+\fi%
+\def\@makecaption##1##2{\ifFTY%
+ \def\@secondofmany####1####2\void{####2}%
+% Removed mod for empty \caption (pb with hyperref) 2007/06/28
+% \protected@edef\@tempa{\@secondofmany##2\void}%
+% The previous coding don't remove the unusefull \captionseparator:
+ \def\@tempa{\@secondofmany##2\void}% -To debug.
+ \ifx\@tempa\empty%
+ \let\captionseparator\empty%
+ \fi%
+ \@mcORI{##1}{\relax% -for AmSLaTeX V1.2 96/11
+ \captionfont{##2}}%
+ \else\@mcORI{##1}{##2}\fi}%
+%
+%Leslie claims that "The footnotemarker is regarded as having zero width, which
+%is appropriate when it comes at the end of line"(p164) <== not a French habit.
+\def\@temp@{%
+ \def\thanks####1{\global\let\@makefntext\fr@makefntext% -........... \thanks
+ \bgroup%
+ \ifFTY\ifhmode\ifdim\lastskip>\z@\unskip\fi\nobreak\fi%
+ \def\@footnotemark{\hbox{\@textsuperscript{\normalfont\,\@thefnmark}}}%
+ \fi\let\ifFTY\iffalse\@thORI{####1}%
+ \egroup}%
+ }%
+\ifx\thanks\undefined\else\let\@thORI\thanks\@temp@\fi%
+\let\ifFTY\iffalse% -temp def for next processing
+\ifx\@makefnmark\undefined\else\let\@mfnmORI\@makefnmark% -........ \@makefnmark
+\def\@makefnmark{\ifFTY\hbox{\@textsuperscript{\normalfont%
+ \ifx\thefootnote\relax\else\,\fi%
+ \@thefnmark}}%
+ \else\@mfnmORI\fi}%
+\fi%
+\def\@temp@{\long\def\fr@makefntext####1{% footline starts here %
+ \bgroup%
+ \ifFTY\def\@tempa{footnote}\let\@tfnORI\@thefnmark%
+ \ifx\@tempa\@mpfn% -do it only for page footnotes not minipages ones
+ \def\@thefnmark{% -marker under the footline, no more in superscript.
+% two grouping levels in pure 2e.
+ \egroup\egroup% -no point when no marker
+ \long\def\@tempa{\fnsymbol{footnote}}%
+ \ifx\@tempa\thefootnote% -When using symbols put them
+ \expandafter\raise+0.55ex% -higher (cf Lexique IN p. 33)
+ \fi% -\thefootnote
+ \hbox\bgroup\textnormal\bgroup%
+ \def\@temp@{%
+\ifx\fr@RIfM@cls\undefined% -Remove space when \thanks and AmS classes.
+\ifx\thanks\relax\else\kern-1.1\parindent\fi% -.1 should be explained.
+\else \kern-\parindent% -otherwise remove superfluous spacing.
+\fi%
+%\@ifnextchar\relax{\def\@temp@{\,}}% Prefered:
+ \@ifnextchar\relax{\def\@temp@{\hphantom{.}\kern+0.25em}}%
+ {\def\@temp@{.\kern+0.25em}}%
+ }%
+ \expandafter\@temp@\@tfnORI\@temp@%
+ }%
+ \leavevmode\kern+0.5em% -add some spacing for at least 3 digits
+ \else\def\@thefnmark{\@tfnORI\,}\fi% -add thin space in mpfootmarks
+ \fi\@mfntORI{####1}\egroup}% -\@makefntext
+ }%
+ \let\@mfntORI\@makefntext\@temp@%
+ \let\@makefntext\fr@makefntext% -............................. \@makefntext
+\def\ifFTY{\ErrFrench}%
+\let\@fntORI\@footnotetext% -nullify marginpar in ................ \@footnotext
+\long\def\@footnotetext##1{\bgroup\let\if@labelsinmargin\iffalse%
+ \@fntORI{##1}\egroup}%
+% Why \footnote doesn't \unskip the previous space?
+% Allow hyphenation too with \nobreak (as suggested by Bernd Raichle)
+\let\@fnORI\footnote% -............................................... \footnote
+\def\footnote{\bgroup%
+ \def\index{\@ifnextchar[{\f@index}% -]
+ {\f@index@}%
+ }%
+ \def\f@index[####1]####2{\@ifFTYfalse\@iORI[####1]{####2}%
+ \@ifFTYback}%
+ \def\f@index@####1{\@ifFTYfalse\@iORI{####1}\@ifFTYback}%
+ \ifFTY\ifhmode\ifdim\lastskip>\z@\unskip\fi%
+ \nobreak\fi\fi%
+ \ifmmode\let\@fnORI\fr@footnote\fi%
+ \@ifNextNB[% -] for balancing
+ \@Footnote\@Fntnorm}%
+\long\def\@Footnote[##1]##2{\@fnORI[##1]{##2}%
+ \egroup\@ifNextNBc\footnote\refmark\@Fntcoma{}}%
+\long\def\@Fntnorm##1{\@fnORI{##1}%
+ \egroup\@ifNextNBc\footnote\refmark\@Fntcoma{}}%
+\def\@Fntcoma{\ifFLA\@textsuperscript{,}\nobreak\fi}%
+\def\@Fxloat##1[##2]{\@xfORI{##1}[##2]\csname @Fend\@currenvir\endcsname}%
+\let\@fgeORI\figure\let\@efgeORI\endfigure% -needed for figurette
+\def\@temp@{\let\@fgeORI\figure% -..................................... \figure
+ \def\figure{\let\ifMOVING\iftrue%
+ \let\if@minipage\iftrue%
+ \@set@fr@fn@%
+ \ifx\@xfORI\undefined%
+ \let\@xfORI\@xfloat\let\@xfloat\@Fxloat%
+ \fi%
+ \@fgeORI}}%
+\ifx\figure\undefined\let\@temp@\relax\fi\@temp@%
+\def\@Fendfigure{\let\@efgeORI\endfigure% -.......................... \endfigure
+ \def\endfigure{\@efgeORI%
+ \ifx\@lim\empty\else\marginpar{\@lim@}%
+ \xdef\@lim{}\fi\let\ifMOVING\iffalse}}%
+\ifx\endfigure\undefined\let\@Fendfigure\relax\fi%
+\let\@cnORI\caption% -\caption is redefined in the table environement :
+\def\@tablescaption{\@dblarg\@t@blescaption}% -footnote will be only
+\let\mboxORI\mbox% -save \mbox definition.
+\def\mbox##1{\leavevmode\hbox{\protect\@set@fr@fn@##1}}%% -.............. \mbox
+\def\@set@fr@fn@{\ifFrench\let\footnote\fr@footnote\fi}% -Footnote's text lost
+\def\fr@footnote{\@ifNextNB[\fr@fn@{\fr@fn@[]}% -] in tables
+ }% -caption.
+\def\fr@fn@[##1]##2{\footnotemark%
+ \f@issue%
+ \@fw{-8- % -\@txt@msg{\string\footnotetext{##2} perdu.}
+%\@txt@msg{Coder \'event. \string\protect\string\footnote}%
+ }[##2]% -\mbox
+ }%
+\def\@t@blescaption[##1]##2{\let\cur@fn\footnote% -footnote mark in tables
+ \let\footnote\fr@footnote% -caption and text
+ \@cnORI[##1]{##2}\let\footnote\cur@fn}% -will be lost.
+\def\@temp@{%
+ \let\@tbeORI\table% -footnotes made like in minipages ...... \table
+ \def\table{\let\ifMOVING\iftrue%
+ \let\if@minipage\iftrue%
+ \ifFLA\begingroup%
+ \def\@mpfn{mpfootnote}%
+ \def\thempfn{\thempfootnote}\c@mpfootnote\z@%
+ \ifx\@captype\undefined\def\@captype{table}\fi% -for ams classes
+ \let\caption\@tablescaption% -allow page footnote in \caption
+ \let\@footnotetext\@mpfootnotetext\fi%
+ \ifx\@xfORI\undefined%
+ \let\@xfORI\@xfloat\let\@xfloat\@Fxloat%
+ \fi%
+ \@tbeORI}%
+ \expandafter\let%
+ \expandafter\@dbtbeORI\csname table*\endcsname% -......... \table*
+ \expandafter\def\csname table*\endcsname{\let\ifMOVING\iftrue%
+ \let\if@minipage\iftrue%
+ \ifFLA\begingroup%
+ \def\@mpfn{mpfootnote}%
+ \def\thempfn{\thempfootnote}\c@mpfootnote\z@%
+ \ifx\@captype\undefined\def\@captype{table}\fi% -for amsbook
+ \let\caption\@tablescaption% -allow page footnote in \caption
+ \let\@footnotetext\@mpfootnotetext\fi%
+ \ifx\@xfORI\undefined%
+ \let\@xfORI\@xfloat\let\@xfloat\@Fxloat%
+ \fi%
+ \@dbtbeORI}%
+ }%
+\ifx\table\undefined\let\@temp@\relax\fi\@temp@%
+\def\@Fendtable{% -Will be called by \@Fxloat.
+ \let\@etORI\endtable% -................................... \endtable
+ \def\endtable{\ifFLA\par%
+ \vskip-\lastskip% -make footnotes here
+ \ifvoid\@mpfootins\else\vskip\skip\@mpfootins%
+ \footnoterule\unvbox\@mpfootins\fi%
+ \fi\@etORI\ifFLA\endgroup\fi%
+ \ifx\@lim\empty\else\marginpar{\@lim@}%
+ \xdef\@lim{}\fi\let\ifMOVING\iffalse}%
+ }%
+\ifx\endtable\undefined\let\@Fendtable\relax\fi%
+\def\@temp@{\def\endtable{\ifFLA\endgroup% -\endtable may be \relax
+ \expandafter\let\csname endtable*\endcsname\endtable% -as in endfloat
+ \fi}%
+ }%
+\ifx\endtable\relax\@temp@% -is also used in frenchll for testing purpose
+\fi%
+\expandafter\def\csname @Fendtable*\endcsname{% -Will be called by \@Fxloat.
+ \expandafter\let%
+ \expandafter\@dbetORI\csname endtable*\endcsname% -...... \endtable*
+ \expandafter\def%
+ \csname endtable*\endcsname{\ifFLA\par%
+ \vskip-\lastskip% -make footnotes here
+ \ifvoid\@mpfootins\else\vskip\skip\@mpfootins%
+ \footnoterule\unvbox\@mpfootins\fi%
+ \fi\@dbetORI\ifFLA\endgroup\fi%
+ \ifx\@lim\empty\else\marginpar{\@lim@}%
+ \xdef\@lim{}\fi\let\ifMOVING\iffalse}%
+ }%
+\expandafter\ifx\csname endtable*\endcsname\relax%
+ \expandafter\let\csname endtable*\endcsname\endtable%
+\fi% -for ams classes
+% The following code is for beamer which don't use float for figures/tables.
+\expandafter\ifx\csname\string\table\endcsname\undefined\else%
+ \expandafter\let\expandafter\BfigureORI\csname\string\figure\endcsname%
+ \expandafter\def\csname\string\figure\endcsname{\@Fendfigure\BfigureORI}%
+ \expandafter\let\expandafter\BtableORI\csname\string\table\endcsname%
+ \expandafter\def\csname\string\table\endcsname{\@Fendtable\BtableORI}%
+\fi%
+%#<
+\def\drapeaufg{\ifFLA% -........................................... \drapeaufg
+ \raggedright\hbadness=6000%
+ \rightskip=0.3em plus 0.75em\hfuzz=0.4em\relax%
+ \let\enddrapeaufg\par\fi}%
+\def\drapeaufgIN{\ifFLA% -................/........................ \drapeaufgIN
+ \raggedright\hbadness=6000%
+ \rightskip=0.3em plus 0.75em\hfuzz=6em%
+ \lefthyphenmin=12\righthyphenmin=10\relax%
+ \let\enddrapeaufgIN\par\fi}%
+\def\drapeaufd{\ifFLA\raggedleft% -................................ \drapeaufd
+ \let\enddrapeaufd\par\fi}%
+\def\drapeaufdIN{\ifFLA% -......................................... \drapeaufdIN
+ \raggedleft\hfuzz=6em%
+ \lefthyphenmin=12\righthyphenmin=10\relax%
+ \let\enddrapeaufdIN\par\fi}%
+%#>
+%\GOfrench{ -emacs pb-
+% continuing definition of \GOfrench
+\ifx\undefined\Hy@PDFDef\let\Hy@PDFDef\pdfstringdef\fi% -......... \pdfstringdef
+\ifx\undefined\Hy@PDFDef\else% -For the old hyperref package.
+ \let\@hpdORI\Hy@PDFDef%
+ \def\Hy@PDFDef##1##2{\@ifFTYfalse\afterassignment%
+ \@Fstr\@hpdORI{##1}{##2}\@ifFTYback}%
+\fi%
+\ifx\pdfstringdef\undefined\else%
+ \let\pdfstringdef\Hy@PDFDef%
+\fi%
+ \let\@lti\labelitemi\let\@ltii\labelitemii%
+ \let\@ltiii\labelitemiii\let\@ltiv\labelitemiv%
+ \@ifo% -define French options, GOfrench part 1
+ \let\@ifo\undefined% -now release memory
+ \@doFh% -process language.dat, GOfrench part 2
+ \let\@doFh\undefined% -release memory
+ \let\hyphex\undefined\let\frhyphex\undefined%
+ \let\@temp@\undefined%
+ \let\ifFTY\iffalse\let\ifFTR\iffalse% -if begin language isnt
+ \let\ifFLA\iffalse\let\ifFMA\iffalse\let\ifFH\iffalse% -french
+% Get original \everypar control command but not hebrew macro.
+\def\@tempa##1{\o@everypar{\rl@everypar##1}}%
+\ifx\@tempa\everypar\let\TeXeverypar\o@everypar%
+\else\let\TeXeverypar=\everypar%
+\fi%
+%
+% As eTeX is bugged (no respect of \csname beginL\endcsname=\relax when
+% TeX--XeT option disabled), Philip Taylor suggested the following code
+% to replace the test about \beginL:
+% %\ifx\beginL\undefined\else%
+ \ifx \TeXXeTstate \undefined%
+ \edef \next {\ifx \beginL \undefined 00\else 01\fi}%
+ \else%
+ \edef \next {\ifnum \TeXXeTstate = 0 00\else 01\fi}%
+ \fi%
+ \if \next\let\beginL\relax\let\beginR\relax% -patch eTeX.
+ \else%
+% assume Left to right for *the* document if TeX--XeT.
+ \edef\@fepORI{{\the\TeXeverypar}}%
+ \def\@SetBFWdirection{\csname begin%
+ \beginFWdirection\endcsname}%
+ \TeXeverypar={\@SetBFWdirection%
+ \let\@SetBFWdirection\relax%
+ {\let\@nodocument\relax% -In case hebrew.
+ \@fepORI}}%
+ \fi%
+ \let\ErrFrench\@Ffnt\def\@Ffnt##1{}%
+% insure files integrity
+\ifx\undefined\babel@core@loaded% -already done for Babel in .ldf
+\protected@write\@auxout{}{\protect%
+\csname auxWARNINGi\protect\endcsname{\protect\typeout%
+ {-34- this file and other auxiliary files require to %
+ use the following}}}%
+\protected@write\@auxout{}{\protect%
+\csname auxWARNINGi\protect\endcsname{\protect\typeout%
+ {-34- LaTeX packages: \frenchpack!}}}%
+\protected@write\@auxout{}{\protect%
+\csname auxWARNINGi\protect\endcsname{\protect\typeout%
+ {-34- check \protect\protect\protect\usepackage%
+ \protect\space or remove these files. %
+ Typesetting is aborted!}%
+ \protect\stop}}%
+%\let\auxWARNINGi=\@gobble% set in the preambule
+\fi%
+% for french guillemets with a XeLaTex motor under utf8
+% patch inclusion:
+\@finput{frpatch.sty}%
+ \ifx\FSfd@patch\FSfd\else
+ \f@issue%
+ \@fw{-42- %
+%\@txt@msg{The French patch file (frpatch.sty) is not suitable^^J}%
+%\@txt@msg{for this version of the "\frenchpack" package dated \FSfd}%
+ }%
+ \batchmode\@@end%
+ \fi%
+ \let\@Ffnt\ErrFrench\let\ErrFrench\undefined% -ditto
+%%% Since "msg" is in use, \InputIfFileExists no more input the file, why?
+%%% \InputIfFileExists{\frenchname.cfg}{% load site config file.
+%%% \f@issue%
+%%% \@fw{-48- %\@txt@msg{Lecture du fichier de }%
+%%% %\@txt@msg{configuration de \frenchpack}%
+%%% }}{}%
+%%% so we now call \IfFileExists ... \@finput
+ \IfFileExists{\frenchname.cfg}{% -load site config file.
+ \f@issue%
+ \@fw{-48- %\@txt@msg{Lecture du fichier de }%
+ %\@txt@msg{configuration de \frenchpack}%
+ }%
+ \@finput{\frenchname.cfg}}{}%
+ \beginlanguage}% -now the new language (end of \GOfrench)
+%
+ \let\@dORI\document% -................................... \begin{document}
+ \def\document{% -\slidesonly of seminar must not gobble me!
+ \ifx\noxcomment\undefined\else%
+ \global\let\@x@hk\xcomment@hook\global\noxcomment\fi%
+ \ifx\btxselectlanguage\undefined%
+ \else\ifx\babel@savevariable\undefined%
+ \f@issue\@fw{-87- %
+%\@txt@msg{ERREUR \string: }%
+%\@txt@msg{babelbib s'utilise uniquement avec babel}%
+ }%
+ \stop%
+ \fi%
+ \fi%
+ \ifx\@bglngpk\babel@savevariable%
+ \else% -Babel loaded after french.
+ \f@issue\@fw{-71- %
+%\@txt@msg{ATTENTION : }%
+%\@txt@msg{si babel est utilis\'e, mettre \frenchname\space en option}%
+ }%
+ \fi\let\@bglngpk\undefined%
+ \@dORI% -execute original \document
+ \GOfrench% -now initiate the style
+ \let\GOfrench\undefined% -release memory
+ \ifx\noxcomment\undefined\else\let\xcomment@hook\@x@hk%
+ \expandafter\xcomment@hook\fi}%
+% now reset < ` ' > as other chars
+\@makeother`\@makeother<\@makeother>\@makeother'%
+% ReRead of aux file at \end{document} may create problems.
+% As French things are already applied, so it's unuseful after \end{document}
+\let\enddocumentasusual\enddocument% -............................ \enddocument
+ \def\enddocument{\def\@tempa{\AtEndDocument{\french\f@clearpage%
+ \global\let\ifCLA\iffalse% -No more page, thus no layout.
+ \let\ifCLAfrench\iffalse%
+ \endfrench}}%
+%%% Notice we specially use \AtEndDocument to avoid AmS hook material
+%%% to print outside of the current (final) page the \@setaddresses.
+ \csname f@lastpage\endcsname% -Allow user mods here.
+ \@CGroup% -end any remaining opened << group
+ \ifFLA% -At the real end of document we should
+ \@tempa% -output last page in french.
+ \def\@tempa{empty}\ifx\@specialstyle\@tempa%
+ \else\gdef\@specialstyle{french}\fi%
+ \fi%
+ \let\GOfrench\relax% -Stop to generate \beginL.
+ \switchtolanguage\englishTeXmods%
+ \let\f@clearpage\clearpage% -Keep \clearpage for \AtEndDocument
+% Avoid the lastpage package do a \clearpage until last \french page
+\ifx\lastpage@putlabel\undefined% -and avoid any change of
+\else\let\clearpage\relax% -the page counter:
+ \let\lastpage@putlabelORI\lastpage@putlabel%
+ \def\lastpage@putlabel{\addtocounter{page}{+1}\lastpage@putlabelORI%
+ \addtocounter{page}{-1}}%
+\fi%
+% Redef of \@newl@bel due to Babel \select@language
+ \ifx\undefined\babel@core@loaded\else% -i.e. \@testdef:
+ \ifx\@testdef\undefined\else% -................ \newlabel
+ \@gG{@td}{@testdef}{//}{3}\fi% -............ \@testdef
+ \fi%
+% Let few stuff expand in \edef for TeX4ht.
+\ifx\ConfigureToc\undefined\else%
+ \let\@ifFTYfalse\relax\let\@ifFTYback\relax%
+ \@Fstr\let\@Fstr\relax%
+\fi%
+ \enddocumentasusual%
+ }%
+\let\@whatUCH\relax% -\@whatUCH is \relax with french light.
+%#<
+% ===============================
+% | Hyphenation |
+% ===============================
+%
+% Allow or not hyphenation of words starting with a capital letter
+\def\allowfulluchyph{\@noBDfr%
+ \uchyph=1\let\@whatUCH\allowfulluchyph% -.. \allowfulluchyph
+ \let\@uchbox\empty}%
+\def\allowuchyph{\@noBDfr%
+ \uchyph=1\let\@whatUCH\allowuchyph% -.............. \allowuchyph
+ \let\@uchbox\hbox}%
+\def\disallowuchyph{\@noBDfr%
+ \uchyph=-1% -................................ \disallowuchyph
+ \let\@whatUCH\disallowuchyph\let\@uchbox\hbox}%
+\def\notthyphenation{\@noBDfr%
+ {\tt\hyphenchar\font=-1}% -.................\notthyphenation
+ \let\ifTTH\iffalse}%
+\def\tthyphenation{\@noBDfr%
+ {\tt\hyphenchar\font=`\-}% -.................. \tthyphenation
+ \let\ifTTH\iftrue}%
+\let\@whatUCH\allowuchyph% -is normaly the TeX default
+\let\ifTTH\iffalse% -we presume that there no tt hyph. by default
+\let\ifFH\iffalse% -we assume we start with no French hyphenation (wrong!)
+%
+% A macro asking to load a language specific exceptions file.
+% Argument provides the language name. File name is in language.dat
+\def\hyphex#1{% -available before \begin{document}
+ \if#1\empty% -........................................... (\hyphex)
+ \else% -a general macro for other languages
+ \edef\@excn{#1}\fi%
+ \let\if@FE\iftrue}% -\hyphex{} before begin document will
+% % load exceptions files
+\def\frhyphex{% -available before \begin{document}
+ \if@PMF\else\hyphex{\frenchname}\fi}% -................. \frhyphex
+%#>
+% ===============================
+% | Translations |
+% ===============================
+%
+% The following is to ``repair'' default captions used in standard V2 styles
+% prior October 91 as "Figure n:" and "Table n:".
+\def\@eatDP{\@ifNextNB:{\@gobble}{}}%
+%\def\@eatP#1{\@ifNextNB.{\@gobble}{}}% for any AmS class
+\def\f@ffrench{\ifx\listoffigures\relax\else%
+ \figurename~\thefigure\ifFTY\captionseparator\fi\fi%
+ \ifFTY\expandafter\@eatDP\fi}%
+\def\f@tfrench{\ifx\listoftables\relax\else%
+ \tablename~\thetable\ifFTY\captionseparator\fi\fi%
+ \ifFTY\expandafter\@eatDP\fi}%
+\def\unnumberedcaptions#1{\@noBDfr%
+%............................... \unnumberedcaptions
+ \expandafter\let\csname listof#1s\endcsname\relax%
+ \ifx\listoffigures\relax\ifx\listoftables\relax%
+ \let\unnumberedcaptions\undefined%
+ \fi\fi%
+ }%
+%
+% Titles ....................................................... \captionsnames
+\@ifundefined{captionsnames}{\def\captionsnames{\relax}\let\@tempa\@currname%
+% load English captions but force language name for ...
+\xdef\@currname{fenglish}\@finput{fenglish.sty}\let\@currname\@tempa}{}%
+\def\languagename{french}% -... any further msg message with \kbencoding.
+\let\ifnonenglishheadings\iftrue% -Bypass to a LaTeX slight bug...
+%#<
+\def\tocreduite#1#2{}% -Reduce toc to a toc-summary for \sommaire.
+\def\@sEAT#1#2{\@sORI*{\sommairename}}% -Normally a \sommaire is short
+\def\@cEAT#1#2{\@chORI*{\sommairename}}% -and need no headings.
+\def\@smr[#1]{\let\@tempa\contentsname% -Save it for
+ \let\contentsname\sommairename% -memoir.cls.
+ \ifx\tableofcontents\undefined\else%
+ \begingroup\ifcase #1 0% -Process \sommaire[1-4]
+ \or \let\l@paragraph\tocreduite% -.....\sommaire[1]
+ \let\l@subparagraph\tocreduite%
+ \or \let\l@subsubsection\tocreduite% -.\sommaire[2]
+ \let\l@paragraph\tocreduite%
+ \let\l@subparagraph\tocreduite%
+ \or \let\l@subsection\tocreduite% -....\sommaire[3] DEFAULT
+ \let\l@subsubsection\tocreduite%
+ \let\l@paragraph\tocreduite%
+ \let\l@subparagraph\tocreduite%
+ \else \let\l@section\tocreduite% -.......\sommaire[4]
+ \let\l@subsection\tocreduite%
+ \let\l@subsubsection\tocreduite%
+ \let\l@paragraph\tocreduite%
+ \let\l@subparagraph\tocreduite%
+ \fi%
+ \let\@sORI\section\let\@chORI\chapter%
+ \let\section\@sEAT\let\chapter\@sEAT%
+ \let\@ToCisNOT\relax% -let it be a sommaire first ie there is no toc
+ \def\@starttoc##1{% -\@startoc locally redefined to let toc reusable
+ \ifx\fr@RIfM@cls\undefined% -special case AmS document class
+ \else\chapter*{\sommairename}% -print sommaire now
+ \fi%
+ \begingroup\makeatletter% -any case require a second pass
+ \immediate\openin\@inputcheck \jobname.##1 %
+ \if@filesw \expandafter\newwrite\csname tf@##1\endcsname\fi%
+ \ifeof\@inputcheck \@Ffnt{\jobname.##1}%
+ \if@filesw\immediate\openout \csname tf@##1\endcsname%
+ \jobname.##1\relax\fi%
+ \else\immediate\closein\@inputcheck \relax\@@input \jobname.##1 %
+ \@ifundefined{@ToCisNOT}{% -let a toc be defined further
+ \if@filesw\immediate\openout \csname tf@##1\endcsname%
+ \jobname.##1\relax\fi}{}%
+ \fi\global\@nobreakfalse \endgroup}%
+ \ifx\fr@RIfM@cls\undefined% -special case AmS document class
+ \else\def\contentsname{}% -dont print table of contents at all here!
+ \fi% -in usual cases (LaTeX document classes) we do
+ \tableofcontents\endgroup% -print the sommaire now.
+ \def\tableofcontents{% -new def that records there is a toc in the doc
+ \ifx\pdfstringdef\undefined% -Reset orginal \contentsline
+ \else\let\contentsline\contentslineORI\fi% -for hyperref.
+ \addtocontents{toc}{\protect%
+ \let% -just to be not
+ \protect\@ToCisNOT\protect\empty}% -as relax
+ \begingroup% -\@starttoc locally redefined to avoid pb with Atari
+ \def\@starttoc####1{\begingroup% -normal def without newdef of tf@
+ \makeatletter\@input{\jobname.####1}%
+ \if@filesw\immediate\openout \csname tf@####1\endcsname%
+ \jobname.####1\relax\fi%
+ \global\@nobreakfalse \endgroup}%
+ \@tocORI\endgroup}% -now the original toc command
+ \fi% -of \if\tableofcontents\undefined
+ \let\contentsname\@tempa% -Restore it for memoir.cls.
+ }% -\@smr
+\def\sommaire{\@ifNextNB[{\@smr}{\@smr[3]}% -]......................... \sommaire
+ }% -a Sommaire is a TOC in front of a document
+\def\@temp@{\let\if@twocolumn\iffalse}%
+\@ifundefined{if@twocolumn}{\@temp@}{}%
+\@ifundefined{abstract}{% -undefined in book
+ \def\abstract{\let\@w@s\@gobble%
+ \if@twocolumn\section*{\abstractname}%
+ \else\sm@ller\begin{center}%
+ \textbf{\abstractname\vspace*{-.5em}\vspace*{\z@}}%
+ \end{center}\quotation\fi}%
+ \def\endabstract{\if@twocolumn\else\endquotation\fi}}{}%
+\@ifundefined{resume}{% -there are styles already defining \resume
+\def\resume{% -.......................................................... \resume
+ \let\@w@s\@gobble% -no warning for \parsep mod.
+ \abstract}%
+\let\endresume\endabstract% -......................................... \endresume
+ }{}%
+%
+\def\@tempa{%
+\def\endkeywords{\@noBDfr}%
+\def\keywords{\@noBDfr% -.............................................. \keywords
+ \let\@w@s\@gobble% -no warning for \parsep mod.
+ \quotation\noindent\sm@ller{%
+ \ifx\fr@RIfM@cls\undefined%
+ \else\let\textbf\textsc\fi% -for AmS classes
+ \kwname}%
+ \let\endkeywords=\endquotation}% -.................... \endkeywords
+ }%
+\@ifundefined{keywords}{\@tempa}%
+ {\ifx\fr@RIfM@cls\undefined%
+ \else\@tempa% -do redefine AmS class keyords def
+ \fi%
+ }%
+\@ifundefined{endkeywords}{\let\endkeywords\relax}{}%
+%
+\def\motsclef{\keywords\relax% case any arg. % -....................... \motsclef
+ \def\endmotsclef{\endkeywords}}% -.................... \endmotsclef
+%
+\let\ifFTR\iftrue% -Default translation is on.
+\ifx\texteuro\undefined\else%
+ \let\textcurrencyORI\textcurrency% -.............................. \textcurrency
+ \def\textcurrency{\ifFTR\expandafter\texteuro%
+ \else\expandafter\textcurrencyORI%
+ \fi}%
+\fi%
+\def\annexe {\@ann{\appendixname}}% -................................... \annexe
+\def\annexes{\@ann{\appendixname s}}% -................................. \annexes
+\def\@ann#1{\@noBDfr\leavevmode%
+ \ifx\fr@RIfM@cls\undefined\else% -for AmS classes
+ \let\chaptername\appendixname% -forget Chapter
+ \fi%
+ \ifx\chapter\undefined\else%
+ \par\setcounter{chapter}{0}\setcounter{section}{0}%
+ \def\@chapapp{\appendixname}\def\thechapter{\Alph{chapter}}%
+ \addcontentsline{toc}{chapter}{\protect#1}%
+ \fi}%
+\@ifundefined{@restonecolfalse}{\def\@restonecolfalse{}%
+ \def\@restonecoltrue{}}{}% -dummy def
+\@ifundefined{@mkboth}{\def\@mkboth#1#2{}}{}% -idem
+\def\glossaire{\@glo{%\protect%
+ \glossaryname}}% -............................. \glossaire
+\def\glossaires{\@glo{%\protect%
+ \glossaryname s}}% -......................... \glossaires
+\def\@glo#1{\ifx\chapter\undefined\else%
+ \setcounter{chapter}{0}\setcounter{section}{0}%
+ \@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn\fi%
+ \hbox{}% -to simulate any text that will allow the writes
+ \clearpage% -to be done to the file instead of the terminal
+ \ifx\fr@RIfM@cls\undefined% -no need with AmS classes
+ \chapter*{#1%
+ \@mkboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}%
+ }%
+ \addcontentsline{toc}{chapter}{\protect#1}%
+ \else\chapter*{#1}% -just this for AmS classes
+ \fi%
+ \ifx\undefined\@glossaryfile\else%
+ \immediate\closeout\@glossaryfile%
+ \ifx\undefined\glossaryentry% -dummy def .... \glossaryentry
+ \long\def\glossaryentry##1##2{\noindent-- ##1\par}%
+ \fi%
+ \ifx\undefined\theglossary%
+% default glossary defs, type \glossary{[entry :] comments}
+% and use \printglossary[filename] default is jobname.gls ..... \printglossary
+ \let\theglossary\description%
+ \let\endtheglossary\enddescription%
+ \let\scan@allowedfalse\makeatother% -gglo.ist call this
+ \def\pfill##1 {}% -nullify page num. unneded
+ \def\@pgf[##1]{\@finput{##1}}%
+ \def\printglossary{\@ifNextNB[% -] emacs
+ {\@pgf}{\@pgf[\jobname.gls]}}%
+ \fi%
+ \fi\fi}% -\input \jobname.glo will typeset the glossary
+%#>
+\def\datefrench{%
+\def\todayfrench{\ifx\ier\undefined\def\ier{er}\fi%
+ \ifnum\day=1\relax 1\ier%
+ \else \number\day\fi%
+ \space\ifcase\month\or janvier\or f\'evrier\or mars\or %
+ avril\or mai\or juin\or juillet\or ao\^ut\or septembre\or %
+ octobre\or novembre\or d\'ecembre\fi \space\number\year}%
+}\datefrench%
+\if@filesw
+ \def\ordinalSecondNam{{s}econd}%
+ \def\ordinalSecondName{{s}econde}%
+\else%
+ \def\ordinalSecondNam{{d}euxi\`eme}%
+ \let\ordinalSecondName\ordinalSecondNam%
+\fi%
+ \def\@osn#1#2{\expandafter\ifx\csname#1osn\endcsname%
+ \relax#2\else\csname#1osn\endcsname\fi}%
+ \def\ordinal#1{\ifcase\value{#1}\or {p}remier%
+ \or\@osn{#1}{\ordinalSecondNam}\else\ordin@l{#1}\fi}%
+ \def\ordin@l#1{\ifcase\value{#1}\or\or\or %
+ {t}roisi\`eme\if@filesw{\protected@write\@auxout{}{%
+ \protect\expandafter%
+ \protect\gdef\protect\csname#1osn%
+ \protect\endcsname%
+ {{d}euxi\`eme}}}%
+ \fi%
+ \or {q}uatri\`eme\or {c}inqui\`eme\or {s}ixi\`eme\or %
+ {s}epti\`eme\or {h}uiti\`eme\or {n}euvi\`eme\or {d}ixi\`eme\or %
+ {o}nzi\`eme\or {d}ouzi\`eme\or {t}reizi\`eme\or {q}uatorzi\`eme\or %
+ {q}uinzi\`eme\or {s}eizi\`eme\or {d}ix-septi\`eme\or {d}ix-huiti\`eme\or %
+ {d}ix-neuvi\`eme\or {v}ingti\`eme\fi}%
+ \def\ordinale#1{\ifcase\value{#1}\or {p}remi\`ere%
+ \or\@osn{#1}{\ordinalSecondName}\else\ordin@l{#1}\fi}%
+ \def\Ordinal{\expandafter\uppercase\ordinal}%
+ \def\Ordinale{\expandafter\uppercase\ordinale}%
+%
+\def\captionsfrench{% -......................................... \captionsfrench
+ \ifFTR% -Is French translation allowed?
+ \ifx\captionsnames\captionsfrench\else%
+ \let\@tdORI\today% -................................................... \today
+ \let\f@fORI\fnum@figure% -......................................... \fnum@...
+ \let\f@tORI\fnum@table%
+ \let\@cnsORI\captionsnames%
+% The following for styles or classes: article, report and book
+ \def\pagename{page}%
+ \def\refname{R\'ef\'erences}%
+ \def\abstractname{R\'esum\'e}%
+\ifx\bibname\undefined\else%
+ \def\bibname{Bibliographie}%
+\fi%
+\ifx\btxselectlanguage\undefined% -Don't call \bibsfrench if babelbib loaded.
+ \csname bibsfrench\endcsname% -more bibs-names if any.
+\fi%
+ \def\contentsname{Table des mati\`eres}%
+ \def\listfigurename{Table des figures}%
+ \def\listtablename{Liste des tableaux}%
+\ifx\listalgorithmname\undefined\else%
+ \def\ALG@name{algorithme}%
+ \def\listalgorithmname{Liste des \ALG@name s}%
+\fi%
+ \def\indexname{Index}%
+ \def\seename{\emph{voir}}% -used normally in makeidx.sty
+ \def\seealsoname{\emph{voir aussi}}% -added macro \seealso
+ \def\figurename{\textsc{Fig.}}%
+ \def\tablename{\textsc{Tab.}}%
+ \def\sommairename{Sommaire}%
+ \def\partname{% -"Premi\`ere partie" instead of "Part I"
+ \ignorespaces\Ordinale{part}\space partie%
+ \@RPtNoInDoc\noexpand\@RPtNoInToc}%
+ \def\glossaryname{Glossaire}% -added
+ \def\kwname{\textbf{Mots-cl\'e} : }%
+ \def\draftname{- \noexpand\351preuve -}% -PostScript IsoLatin1 \'epreuve
+ \def\prefacename{Pr\'eface}%
+\ifx\proofname\undefined\else\def\proofname{D\'emonstration}\fi%
+%
+% Comment for further dev:
+% Next ones depend from the class of document in use, thus the translations
+% should apply _only_ when the corresponding class is loaded. Thus it should
+% be better to define these names when loading french, not dynamically at
+% run time when typesetting the document.
+%
+\ifx\fr@RIfM@cls\undefined% -figure and table captions modified
+ \let\fnum@figure\f@ffrench% -except for any AmSLaTeX V1.2 class
+ \let\fnum@table\f@tfrench% -for which it remains unsolved pbs.
+ \def\@RPtNoInToc{}%
+ \def\@RPtNoInDoc{\def\thepart{}}% -nullify \thepart
+ \else\def\@RPtNoInToc##1.{.}% -remove until dot
+ \def\@RPtNoInDoc##1\thepart{}% -remove until value
+% \let\@eatDP\@eatP%
+\fi%
+% The following is only for letter
+\ifx\opening\undefined\else%
+ \def\headtoname{}%
+ \def\ccname{c.c. }% -copie conforme
+ \def\enclname{P.j. }% -Pieces jointes
+ \def\PSname{P.-S. :}% -Post-Scriptum
+ \def\Objectname{Objet :}% -Object of the letter
+ \def\YourRefname{v/r\'ef. :}% -Your reference number
+ \def\OurRefname{n/r\'ef. :}% -Our reference number
+ \def\emailname{m.\'el. :}% -Email address
+\fi%
+% The following is for seminar
+\ifx\slidename\undefined\else%
+ \def\slidename{Transparent}%
+ \def\listslidename{Liste des transparents}%
+\fi%
+% The following is for endnotes 98/01
+\ifx\notesname\undefined\else%
+ \def\notesname{Notes}%
+\fi%
+% The following is only for report and book ...
+ \def\chaptername{Chapitre}%
+ \def\appendixname{Annexe}%
+ \let\captionsnames\captionsfrench%
+ \fi% \else of \ifx\captionsnames\captionsfrench%
+ \let\today\todayfrench%
+\def\@cORI{\@cnsORI% -Restore original caption names
+ \let\today\@tdORI%
+ \let\fnum@figure\f@fORI%
+ \let\fnum@table\f@tORI}%
+\fi% -\ifFTR
+}% -end of captionsfrench
+%#<
+\iffrenchbibliography%
+ \ifx\@rbibstyid\undefined%
+ \let\@rbibstyid\empty%
+ \ifx\jb@pkg@name\undefined\else%
+ \def\@rbibstyid{jb}%
+ \fi%
+ \fi%
+ \ifx\bibsfrench\undefined%
+ \edef\@tempa{fr\@rbibstyid bib.ldf}%
+ \IfFileExists{\@tempa}{%
+\f@issue%
+\@fW{ -65- %
+%\@txt@msg{\frenchname.sty charge }%
+%\@txt@msg{les traductions pour la bibliographie \string:}%
+ }\@finput{\@tempa}}{}%
+ \fi%
+ \ifx\bibsenglish\relax%
+ \edef\@tempa{en\@rbibstyid bib.ldf}%
+ \InputIfFileExists{\@tempa}{}{}%
+ \fi%
+\fi%
+%#>
+%%%%%%%%%%%%%%%%%%
+% ===============================
+% | Layout |
+% ===============================
+%
+% NB: See elsewhere in the code for appearance of \ifFLA, to find
+% all French layout coding.
+\let\@tlORI\@trivlist%
+\def\frenchtrivsepwarnings{\let\ifFTSW\iftrue}% -........ \frenchtrivsepwarnings
+\def\nofrenchtrivsepwarnings{\let\ifFTSW\iffalse}% -... \nofrenchtrivsepwarnings
+\long\def\frtrivseplengths#1{% -............................... \frtrivseplengths
+ \nofrenchtrivsepwarnings%
+ \long\def\fr@tsl{#1}%
+ }%
+\def\fr@tsl{\setlength{\parsep}{0.2ex plus 0.1ex minus 0.1ex}%
+ \setlength{\itemsep}{0.2ex plus 0.1ex minus 0.1ex}%
+ \setlength{\topsep}{0.4ex plus 0.2ex minus 0.2ex}%
+ \setlength{\partopsep}{1.6ex plus 0.8ex minus 0.8ex}%
+ }%
+\def\frenchtrivsep{\ifFLA\def\@trivlist{% -...................... \frenchtrivsep
+ \fr@tsl\@tlORI}%
+ \fi}
+\def\nofrenchtrivsep{\let\@trivlist\@tlORI}% -................. \nofrenchtrivsep
+\@ifundefined{@afterindenttrue}{\let\@afterindenttrue\relax%
+ \let\@afterindentfalse\relax}{}%
+\let\@aifORI\@afterindentfalse% -save first indent
+\edef\@piORI{\the\parindent}% -save \parindent
+\begingroup \catcode `| =0 \catcode `[ = 1 \catcode`] =2%
+ \catcode `\{=12 \catcode `\}=12 \catcode`\\=12%
+ |gdef|@xversatim#1\end{versatim}[#1|end[versatim]]%
+ |endgroup% -running macro for versatim
+%
+\let\@FIM@\relax% -Macro is relax with french light
+%#<
+\def\@FIM@{\ifCG\else\ifFLA\ifEPG\ifEPGR\else\leftguillemets\fi\fi\fi\fi}%
+\let\checkitemguillemets\@FIM@%
+%#>
+\def\fr@idf{\let\@afterindentfalse\@afterindenttrue\@afterindenttrue}%
+\def\fr@nidf{\let\@afterindentfalse\@aifORI\@afterindentfalse}%
+\ifx\titlespacing\undefined%
+ \let\which@indent\fr@idf% -French default is \indentfirst
+\else\let\which@indent\fr@nidf% -but let's titlesec package decide if loaded.
+\fi%
+\def\fr@lbi{\def\labelitemi{\@FIM@--}\def\labelitemii{\@FIM@--}%
+ \def\labelitemiii{\@FIM@--}\def\labelitemiv{\@FIM@--}%
+ }%
+\long\def\frlabelitems#1{\ifFLA\long\def\fr@lbi{#1}% -............. \frlabelitems
+ \fr@lbi\fi}%
+\def\@FIM{% -Correct labels in itemize environement .............. \labelitem..
+ \fr@lbi%
+ \def\indentfirst{\ifFLA\fr@idf\fi}% -.................... \indentfirst
+ \def\nonindentfirst{\ifFLA\fr@nidf\fi}% -............. \nonindentfirst
+ \which@indent% -Apply requested indent in first paragraph
+ %#<
+% The "order" list .................... \begin{order} & \end{order}
+ \def\labelfrenchenumi{\@FIM@\quando={\arabic{enumi}}}%
+ \def\labelfrenchenumii{\@FIM@\quando={\arabic{enumii}}}%
+ \def\labelfrenchenumiii{\@FIM@\quando={\arabic{enumiii}}}%
+ \def\labelfrenchenumiv{\@FIM@\quando={\arabic{enumiv}}}%
+ \def\order{\ifnum \@enumdepth >3 \@toodeep\else%
+ \advance\@enumdepth \@ne%
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}\list%
+ {\csname labelfrench\@enumctr\endcsname}%
+ {\usecounter{\@enumctr}%
+ \ifFLA% -French layout might be switched after the definition
+ \addtolength{\leftmargin}{0.9em}% -allow a second digit and <<
+ \fi%
+ \def\makelabel####1{\hss\llap{####1}}}\fi}% -\order
+ \let\endorder =\endlist%
+% The "versatim" environment .... \begin{versatim} & \end{versatim}
+% inapropriate for multi-level of indentation!
+ \def\versatim{\bgroup\let\@w@s\@gobble% -nullify warning 58
+ \ifFLA% -protect our new settings
+ \let\dospecials\@dsversa% -our specials for versatim
+ \def\@xobeysp{\leavevmode{}\space}% -allow hypenation at space
+ \ifx\verbatim@font\undefined\let\verbatim@font=\tt\fi%
+ \let\@ttORI\verbatim@font% -save the original \tt definition
+ \def\verbatim@font{\@ttORI% -execute it first to know the font
+ \verse% -now enter verse environment (\itemindent is negative)
+ \vskip-2\parskip% -remove vertical par skips
+ \vskip-1\partopsep\vskip-\topsep%
+ \leavevmode%
+ \leftskip=-2\itemindent% -the margin is increased
+ \parindent=2\itemindent% -each line will go in the margin
+ \parskip\z@% -no more interline (interpar) spacing
+ \pretolerance=\@M\tolerance=\@M\hbadness=\@M% -max tolerance
+ \hyphenchar\the\font=`\-}%
+ \let\tt=\verbatim@font% -useful outside NFSS
+ \fi% -ifFLA end of \verbatim@font new def
+ \let\@xverbatim\@xversatim% -define environment
+ \verbatim}% -now enter usual verbatim
+ \def\endversatim{\endverse%
+ \ifTTH\else\hyphenchar\the\font=-1\fi% -was a global def
+ \endverbatim\ifFLA\vskip+1\partopsep\fi\egroup}%
+ \@ifundefined{vers}{%
+ \def\@vers##1{\def\@tempa ####1##1{\leavevmode\null####1%
+ \endgroup}\@tempa}%
+ \def\vers{% -................................................ \vers
+ \begingroup% -protect local modifications
+ \def\@xobeysp{\ifFLA\else\penalty\@M\fi\space}% -allow
+ \catcode``=13 \@noligs \tt% -hyphenation at blank space
+% word hyphenation done only if \tthyphenation typed
+ \ifFLA\let\dospecials\@dsversa\fi%
+ \let\do\@makeother\dospecials\@vobeyspaces \frenchspacing%
+ \@vers}}{}%
+ \@ifundefined{verbatimfile}% -........................... \verbatimfile
+ {\def\verbatimfile##1{\begingroup\@verbatim\frenchspacing
+ \@vobeyspaces\input ##1\endgroup}}{}%
+%#>
+}% -end of \@FIM
+%===================== for the letter ...
+\def\@temp@{% -a temporary def of all material
+\let\@ps@fp\ps@firstpage%
+\def\@opening{%
+\let\@wideletter\relax% -Definitions for french light here.
+\let\emailadd\@empty\let\@yourref\@empty\let\@ourref\@empty%
+\let\@object\@empty%
+%#<
+ \@ifundefined{wideletter}{%
+ \def\@wideletter{}\def\wideletter{% -.............................. \wideletter
+ \def\@wideletter{\leftskip-0.25\indentedwidth}}}{}%
+ \@ifundefined{email}{%
+ \def\email####1{\def\emailadd{\texttt{####1}}}}{}% -.................... \email
+ \@ifundefined{emailadd}{\def\emailadd{}}{}%
+ \@ifundefined{yourref}{%
+ \def\yourref####1{\def\@yourref{####1}}}{}% -......................... \yourref
+ \@ifundefined{@yourref}{\def\@yourref{}}{}%
+ \@ifundefined{ourref}{%
+ \def\ourref####1{\def\@ourref{####1}}}{}% -............................ \ourref
+ \@ifundefined{@ourref}{\def\@ourref{}}{}%
+ \@ifundefined{object}{%
+ \def\object####1{\def\@object{####1}}}{}% -............................ \object
+ \@ifundefined{@object}{\def\@object{}}{}%
+ \@ifundefined{PS}{%
+ \def\PS####1{{\raggedright\PSname\space ####1}}}{}% -...................... \PS
+%#>
+ \def\ps@firstpage{\ifFLA%
+ \advance\topmargin by -20\p@% -I also suggest to add in
+% document preambule: \advance\textheight by 20\p@%
+ \def\@oddhead{\ifx\undefined\formhead\else%
+ \bgroup\hss\formhead\hss\egroup\fi}%
+ \def\@oddfoot{\raisebox{-45\p@}[\z@]%
+ {\hbox to \textwidth{%
+ \ifcase \@ptsize\relax%
+ \normalsize%
+ \or \sm@ller%
+ \or \footnotesize%
+ \fi%
+%\hspace*{100\p@}\fromlocation \hfill \telephonenum
+ \ifx\undefined\formfoot\hfill\else%
+ \bgroup\hss\formfoot\hss\egroup\fi%
+ }}\hss}%
+ \def\@evenhead{}\def\@evenfoot{}%
+ \else\@ps@fp\fi}%
+ \long\def\opening####1{% -.......................................... \opening
+ \ifFLA%%% -these 3 counts not saved for other languages (unnecessary)
+ \advance\indentedwidth by -0.25\longindentation%
+ \advance\longindentation by 0.22\textwidth%
+ \advance\parindent by 1.5em% -null in standard .....
+ %%%
+ \let\nopagenumbers\relax% -Avoid to switch to empty page style.
+ \thispagestyle{firstpage}% -set firstpage allowing the user to
+% use \@oddhead & \@oddfoot in \ps@firstpage
+ \raggedbottom% -force address to remain in the same place
+ \ifx\@empty\fromlocation\location{Le}\fi%
+ \ifx\@empty\fromaddress\let\fromaddress\space\fi% -make an blank box
+ {\raggedright\hspace*{-0.25\indentedwidth}%
+ \parbox[t]{0.5\textwidth}{\ignorespaces%
+ \vbox to 0\p@{\fromaddress\vss}}%
+ \\*[1.75\baselineskip]%
+% \\*[0.65in]% dont let the date appearing in the window
+% \vspace*{-5\baselineskip}\vspace*{60\p@}% error average
+ \par}%
+ \ifx\@empty\toname% -in fact \toname is never empty in LaTeX V2.09!
+% except if you code \begin{letter}{}
+ {\raggedleft\bgroup\fromlocation\space\@date\egroup\par}%
+ \else%
+ {\raggedleft\begin{tabular}{l}\ignorespaces%
+% \toname\\ \toaddress\\*[8\parskip]%
+ \toname\\ \toaddress\\*[6\parskip]%
+ \fromlocation\space\@date\end{tabular}\par}%
+ \fi%
+ \ifx\@empty\@ourref\else%
+ {\raggedright \hspace*{-0.25\indentedwidth}%
+ \OurRefname\space\@ourref \par}%
+ \fi%
+ \ifx\@empty\@yourref\else%
+ {\raggedright \hspace*{-0.25\indentedwidth}%
+ \YourRefname\space\@yourref \par}%
+ \fi%
+ \ifx\@empty\@object\else%
+ {\raggedright \hspace*{-0.25\indentedwidth}%
+ \textbf{\Objectname}\space\@object \par}%
+ \fi%
+ \par\vspace*{3\parskip}%
+ \noindent####1\hfill\vspace*{3\parskip}% no need of \linebreak%
+ \@wideletter%
+ \else\@oORI{####1}%
+ \fi}}%
+\def\@closing{%
+ \def\closing{\fclosing@[9]}% -...................................... \closing
+ \def\fclosing{\@ifNextNB[{\fclosing@}{\fclosing@[9]}% -]........... \fclosing
+ }%
+ \long\def\fclosing@[####1]####2{%
+ \ifFLA%
+ \par% -\nobreak
+ \vspace{\parskip}\stopbreaks%
+ \ignorespaces ####2\\[####1\medskipamount]%
+ \ifx\@empty\fromaddress\else%
+ \hspace*{-0.25\indentedwidth}%
+ \hspace*{\longindentation}\fi%
+ {\raggedright\begin{tabular}{l}\ignorespaces%
+ \ifx\@empty\fromsig%
+ \fromname%
+ \else \fromsig \fi%
+ \ifx\@empty\emailadd\else\\{\footnotesize%
+ \emph{\emailname} \emailadd}\fi%
+ \strut\end{tabular}}\par%
+ \vskip 0pt plus 1fil% -un peu d'elasticite
+ \else\@cloORI{####2}%
+ \fi}%
+ \def\endletter{\ifFLA\vskip 0pt plus 3fil\fi% -un peu d'elasticite
+ \@elORI}}% -@closing
+\@ifundefined{opening}{\def\@opening{}\def\@closing{}}%
+ {\let\@oORI\opening\let\@cloORI\closing%
+ \let\@elORI\endletter%
+ \@opening\@closing}%
+}% -\@temp@
+\ifx\opening\undefined\let\@temp@\relax\fi%
+\@temp@% -only if letter .....
+%=====================
+%#<
+%............................................................ \begin{figurette}
+\let\ifFLA\iffalse% -dummy def for next processing
+\def\@temp@{%
+\def\figurette{\@noBDfr%
+ \ifx\@fgeORI\undefined\figure\fi% -can't work without figure
+ \ifFLA\bgroup%
+ \def\@xfloat####1[h]{%
+ \expandafter\let\csname end####1\endcsname\endfigurette%
+ \vskip\intextsep\def\@captype{####1}\parindent\z@}%
+ \@fgeORI[h]\else\figure[h]\fi}%
+\def\endfigurette{\@noBDfr%
+%.......................................... \end{figurette}
+ \ifFLA\vskip\intextsep\egroup\else\@efgeORI\fi%
+ \ifx\@lim\empty\else\marginpar{\@lim@}\xdef\@lim{}\fi%
+ \let\ifMOVING\iffalse}%
+ }%
+\ifx\figure\undefined\def\@temp@{}\fi% -only when \figure is already defined
+\@temp@%
+%#>
+% Reset chapter counter when starting a part --> \GOfrench
+%
+% Check for AmS package's class
+\def\@tempa{\let\fr@RIfM@cls\undefined}% -will set the no AmS class loaded flag
+\let\fr@RIfM@cls\RIfM@% -if no AmS package, no class as well
+ \ifx\RIfM@\undefined\else%
+ \expandafter\ifx\csname @classname\endcsname\relax\@tempa%
+ \else\def\@tempb#1#2#3#4\@nil{%
+ \if#1a\if#2m\if#3s\else\@tempa\fi%
+ \else\@tempa\fi\else\@tempa\fi}%
+ \expandafter\@tempb\@classname\@nil%
+ \fi%
+ \fi% -\RIfM@\undefined
+%
+% This is the French pagestyle to use instead in place of plain wrongly
+% used by LaTeX in many situations. Quite simple one................ \ps@french
+\def\@temp@{\def\ps@french{\if@fancyplain\ps@plain@fancy\else\ps@plain\fi}}%
+\ifx\ps@fancyplain\undefined% -do nothing outside fancyheadings
+ \ifx\fr@RIfM@cls\undefined\def\ps@french{}% -in standard LaTeX, but not
+ \else\def\ps@french{\global\topskip\normaltopskip}% -with AmS classes.
+ \fi% \fr@RIfM@cls\undefined%
+\else\@temp@% -to avoid pb in case \if@fancy... undefined
+\fi%
+\let\ps@frenchORI\ps@french% -Save final french page style def.
+\let\@sdORI\secdef% -will be used at each new sectioning.
+\def\nofrenchpagestyle{\let\secdef\@sdORI}% -................. \nofrenchpagestyle
+\def\frenchpagestyle{% -........................................ \frenchpagestyle
+ \def\secdef{\ifFLA\thispagestyle{french}\fi\@sdORI}% -.............. (\secdef)
+ }%
+\frenchpagestyle% -Now run the french page style if \frenchlayout.
+\ifx\aliaspagestyle\undefined% -Is memoir.cls loaded? no:
+\def\nobeginingfolio{\let\ps@french\ps@empty}% -................ \nobeginingfolio
+\else%
+\def\nobeginingfolio{\let\ps@french\ps@empty% -yes:
+ \aliaspagestyle{chapter}{empty}%
+ }%
+\fi%
+\def\beginingfolio{\let\ps@french\ps@frenchORI% -................. \beginingfolio
+ \frenchpagestyle}% -This is the default value.
+%#<
+\@ifundefined{nopagenumbers}{% -don't run everywhere............ (\nopagenumbers)
+ \def\nopagenumbers{\ifFLA\pagestyle{empty}%
+ \thispagestyle{empty}\fi}%
+ }{}%
+\def\ifFLA{\ErrFrench}%
+%
+ \newif\ifnonvoid% -still an outer def.
+\def\@desarm{% -the \noeveryparguillemets processing
+ \newbox\@FrBoxi\newbox\@FrBoxii\newbox\@FrBoxiii%
+ \newbox\@FrBoxiiii\newbox\@FrBoxvi\newbox\@FrBoxvii\newbox\@FrBoxQuotes%
+ \ifx\@FrDimenS\undefined\newdimen\@FrDimenS\fi%
+ \def\@setpartozero{\widowpenalty=\z@\clubpenalty=\z@%
+ \interlinepenalty=\z@\brokenpenalty=\z@\displaywidowpenalty=\z@}%
+ \def\nonvoidtrue{\let\ifnonvoid\iftrue}%
+ \def\nonvoidfalse{\let\ifnonvoid\iffalse}%
+ \def\@transfervbox##1##2{\nonvoidtrue%
+ \loop%
+ \setbox\@FrBoxi=\vbox{\unvbox##1\global\setbox\@FrBoxiii=\lastbox%
+ \unskip}%
+ \ifvoid\@FrBoxiii\nonvoidfalse\fi%
+ \ifnonvoid%
+ \setbox\@FrBoxii=\vbox{\unvbox##2\box\@FrBoxiii}%
+ \setbox##1=\box\@FrBoxi\setbox##2=\box\@FrBoxii%
+ \repeat}%
+ \def\@transferaddvbox##1##2{\nonvoidtrue%
+ \setbox\@FrBoxi=\vbox{\unvbox##1\global\setbox\@FrBoxiii=\lastbox%
+ \unskip}%
+ \setbox##2=\vbox{\box\@FrBoxiii}%
+ \setbox##1=\box\@FrBoxi%
+ \loop%
+ \setbox\@FrBoxi=\vbox{\unvbox##1\global\setbox\@FrBoxiii=\lastbox%
+ \unskip}%
+ \ifvoid\@FrBoxiii\nonvoidfalse\setbox##1=\box\@FrBoxi\fi%
+ \ifnonvoid%
+ \setbox\@FrBoxii=\vbox{\unvbox##2%
+ \hbox to \@FrDimen{\copy\@FrBoxQuotes\unhbox\@FrBoxiii}}%
+ \setbox##1=\box\@FrBoxi\setbox##2=\box\@FrBoxii%
+ \repeat}%
+ \def\@sendtopage##1{\nonvoidtrue%
+ \loop%
+ \setbox\@FrBoxi=\vbox{\unvbox##1\global\setbox\@FrBoxiii=\lastbox%
+ \unskip}%
+ \ifvoid\@FrBoxiii\nonvoidfalse\setbox##1=\box\@FrBoxi\fi%
+ \ifnonvoid%
+ \unhbox\@FrBoxiii\unskip\break%
+ \setbox##1=\box\@FrBoxi%
+ \repeat}%
+ \def\@stared{\egroup%
+ \@transfervbox\@FrBoxvi\@FrBoxvii%
+ \@transferaddvbox\@FrBoxvii\@FrBoxvi%
+ \setbox\@FrBoxvii=\vbox{\unvbox\@FrBoxvi%
+ \global\setbox\@FrBoxiiii=\lastbox\unskip}%
+ \@transfervbox\@FrBoxvii\@FrBoxvi%
+ \noindent \@sendtopage\@FrBoxvi%
+ \unhbox\@FrBoxiiii\unskip\unskip\unpenalty}%
+ \def\@fniv2{\egroup%
+ \@transfervbox\@FrBoxvi\@FrBoxvii%
+ \@transferaddvbox\@FrBoxvii\@FrBoxvi%
+ \setbox\@FrBoxvii=\vbox{\unvbox\@FrBoxvi%
+ \global\setbox\@FrBoxiiii=\lastbox\unskip}%
+ \@transfervbox\@FrBoxvii\@FrBoxvi%
+ \noindent \@sendtopage\@FrBoxvi%
+ \setbox\@FrBoxvii=\vbox\bgroup\@setpartozero%
+ \noindent \unhbox\@FrBoxiiii\unskip\unskip\unpenalty}%
+ \def\@qqguill{\relax}%
+ \def\@staring{\global\setbox\@FrBoxQuotes=\hbox to 0.81em{\@qqguill}\egroup%
+ \setbox\@FrBoxvi=\vbox{\unvbox\@FrBoxvii%
+ \global\setbox\@FrBoxiiii=\lastbox\unskip}%
+ \@transfervbox\@FrBoxvi\@FrBoxvii%
+ \noindent\@sendtopage\@FrBoxvii%
+ \setbox\@FrBoxvi=\vbox\bgroup\@setpartozero%
+ \hangindent=\wd\@FrBoxQuotes\hangafter=1%
+ \setbox\@FrBoxvii=\hbox{\unhcopy\@FrBoxiiii\unskip\unskip%
+ \unpenalty}%
+ \@FrDimenS=\@FrDimen \advance\@FrDimenS by -2em%
+ \ifvoid\@FrBoxiiii\indent\copy\@FrBoxQuotes%
+ \else%
+ \parindent=\z@%
+ \ifdim \wd\@FrBoxvii>\@FrDimenS \unhbox\@FrBoxvii\break%
+ \else \unhbox\@FrBoxvii%
+ \fi\fi}%
+ \def\@qquotes{\setbox\@FrBoxvii=\vbox\bgroup\@setpartozero}%
+}% -end \@desarm
+%#>
+\def\@EIM{\def\labelitemi{\@lti}\def\labelitemii{\@ltii}%
+ \def\labelitemiii{\@ltiii}\def\labelitemiv{\@ltiv}%
+ \let\@afterindentfalse\@aifORI\@afterindentfalse%
+ \parindent\@piORI}% -restore \parindent
+\let\@FL\relax% -\@FL is \relax with french light.
+%#<
+{\catcode`.=12\catcode`p=12\catcode`t=12\gdef\auTo@gf#1.#2pt{#1}}%
+\def\@FL{% -LETTRINES defs
+\def\automaticlettrine{%
+ \ifx\lettrinefontname\undefined% -..... \automaticlettrine
+ \def\@tempa####1 ####2\@@{% -extract font name
+ \def\lettrinefontname{####1}}%
+ \edef\@tempb{ }%
+ \expandafter\@tempa\fontname%
+ \expandafter\font\@tempb\@@\fi%
+ \let\sv@lf=\lettrinefont}%
+\def\noautomaticlettrine{%
+ \let\lettrinefontname=\undefined% -.\noautomaticlettrine
+ \let\lettrinefont=\sv@lf}% -reset font
+\ifx\lettrine\undefined% -............................................. \lettrine
+\def\lettrine{\par%
+ \let\@tempa\relax%
+ \def\@tempa{\def\@fbr{\fboxrule=\z@}%
+ \protect\@lettrineS%
+ }%
+ \@tempa}%
+\if@PMF\def\@Ettrine[##1]{##1}\let\@ettrine\relax\else%
+ \def\@ettrine##1##2\par{\bgroup\parskip=\z@% -NFSS requires a
+ {\ly\xdef\bef@ly{\the\font}}% -global def!
+ \let\newpage=\relax\let\clearpage=\relax%
+ \let\cleardoublepage=\relax%
+ \edef\bef@fnt{\the\font}%
+ \ifCG\def\bef@let{}%
+ \else\def\bef@let{\bef@fnt\def\ly{\bef@ly}%
+ \leftguillemets\space}%
+ \fi\@@ttrine{##1}{##2}\egroup}%
+ \def\@@ttrine##1##2{\ifFLA\def\@@ttrnxt{\@@@trine##1\@@{##2}}%
+ \else\def\@@ttrnxt{##1\space\ignorespaces##2}%
+ \fi% -fol.hbox to start a new par after 1 line lett.
+ \@@ttrnxt\unskip\par% -First \par is for lineno package.
+ \f@par% -The second \par ends the \lettrine.
+ \@nobreakfalse}% -Allow breaks after that paragraph.
+ \def\@@@trine##1##2\@@##3{\@fbr\TeXeverypar{}%
+%%% start of automatic font calculation (a piece of code coming from Ronan)
+ \ifx\lettrinefontname\undefined\let\auTo@lh\undefined%
+ \else\let\auTo@lh\lettrinehang%
+ \ifx\auTo@lh\undefined\def\auTo@lh{2}\fi%
+ \bgroup%
+ \ifx\@htfreq\undefined\newdimen\@htfreq\newdimen\@htfbase\fi%
+ \setbox0=\hbox{M}\@htfreq=\ht0%
+ \def\dimentocount####1{\expandafter\auTo@gf\the####1}%
+ \font\@fontreq=\lettrinefontname%
+ \setbox0=\hbox{\@fontreq ##1}\@htfbase=\ht0%
+ \advance\@htfreq by \auTo@lh\baselineskip%
+ \advance\@htfreq by \lineskip% -inapropriate increment
+ \advance\@htfreq by -\baselineskip%
+ \multiply\@htfreq by 100 % -To be more precise
+ \multiply\@htfbase by 100 %
+ \divide\@htfreq by \dimentocount\@htfbase% -\relax
+ \multiply\@htfreq by \@m%
+\global\font\lettrinefont=\lettrinefontname\space scaled \dimentocount\@htfreq%
+ \egroup%
+ \fi%
+%%% end of automatic font calculation
+ \setbox0\hbox{% -\fbox is eliminated for that measuring
+ {\shortstack{\bef@let{\lettrinefont##1}\relax%
+ \ifdim\fontdimen\@ne\font>\z@\/\space\fi}}}%
+ \@FrDimenH=\ht0\advance\@FrDimenH by\dp0%
+ \@FrDimenS=\@FrDimenH\advance\@FrDimenS by\fboxsep%
+ \ifdim\baselineskip\superieura0pt%
+ \divide\@FrDimenS by\baselineskip%
+ \fi\@FrCount=\@FrDimenS%
+ \@FrDimen=\baselineskip\multiply\@FrDimen by-\@FrCount%
+ \advance\@FrDimen by\@FrDimenH%
+ \ifdim\@FrDimen>0.025\baselineskip \advance\@FrCount by 1\fi%
+ \ifx\auTo@lh\undefined\else\@FrCount=\auTo@lh\fi%
+ \ifx\lettrinehang\undefined\else\@FrCount=\lettrinehang\fi%
+ \@FrDimenI=\wd0%
+ \ifdim\fboxrule=\z@\else\advance\@FrDimenI by2\fboxrule%
+ \advance\@FrDimenI by2\fboxsep\fi%
+ \@FrDimenS=\fontdimen2\font\advance\@FrDimenI by+3\@FrDimenS%
+ \ifdim\fboxrule=\z@\advance\@FrDimenI by-0.30\@FrDimenS\fi%
+ \advance\@FrCount by -1%
+ \@FrDimen=\@FrCount\baselineskip%
+ \advance\@FrCount by 1%
+ \ifdim\fboxrule=\z@\else\advance\@FrDimen by -\fboxrule\fi%
+ \@FrDimenH=-\dp0% -to get baseline alignement
+ \setbox0\hbox{\ifdim\fboxrule=\z@\kern-\fboxsep\fi%
+ \fbox{\shortstack{{%
+ \def\@LSG{\f@issue\@fw{-5- %
+%\@txt@msg{d\'efinition de lettrine incorrecte}%
+ }}%
+ \let\@RSG=\@LSG\bef@let%
+ \lettrinefont\raise-\@FrDimen\hbox{##1}\relax%
+ \ifdim\fontdimen\@ne\font>\z@\/\space\fi}}}}%
+ \box0\@FrDimen=\@FrDimenH%
+ \advance\@FrDimenH by-\@FrCount\baselineskip%
+ \advance\@FrDimenH by \lineskip% -inapropriate action
+ \ifdim\fboxrule=\z@\else\advance\@FrDimenH by -\fboxrule\fi%
+ \vspace*{\@FrDimenH}% -where to write the rest of the line
+ \hangindent=\@FrDimenI%
+\ifx\lettrinehang\undefined% -hangafter change then allowed
+ \ifdim\@FrDimen<-0.025\baselineskip% -if dp0 > 25/1000 then
+ \advance\@FrCount by\@ne% -add one more line hangafter
+ \divide\@FrDimen by-\baselineskip% -and may be it could
+ \advance\@FrCount by\@FrDimen% -extend past a line.
+ \fi%
+\fi%
+ \ifnum\@FrCount=1\f@issue\@fw{-6- %\@txt@msg{lettrine \`a revoir}%
+ }\fi%
+ \hangafter=-\@FrCount%
+ \noindent\kern-2.5\@FrDimenS%
+ \def\@temp@{##2}%
+ \ifx\empty\@temp@\f@issue\@fw{-7- %
+ %\@txt@msg{lettrine r\'eduite \`a 1 seule lettre}%
+ }%
+ \else{\scshape ##2}\fi\def\@temp@{##3}%
+ \ifx\@temp@\empty\else\space\ignorespaces##3\fi%
+ }% -@@@trine
+ \def\@Ettrine[##1 ##2 ##3]##4\par{\bgroup\parskip=0pt% -NFSS requires a
+ {\ly\xdef\bef@ly{\the\font}}% -global def!
+ \let\newpage=\relax%
+ \edef\bef@fnt{\the\font}\@gN%
+ \ifFLA\def\bef@let{\bef@fnt\def\ly{\bef@ly}##1\space}%
+ \else ##1\space\fi%
+ \@@ttrine{##2}{{\def\@aft@let{##3}\ifx\@aft@let\empty%
+ \else##3\space\fi%
+ \ignorespaces ##4}}\egroup}%
+\fi% -\if@PMF
+\def\flettrine{\par% -................................................ \flettrine
+ \let\@tempa\relax%
+ \def\@tempa{\def\@fbr{}\protect\@lettrineS}%
+ \@tempa}%
+\def\@lettrineS{\ifx\@FrDimenH\undefined%
+ \newdimen\@FrDimenH\newdimen\@FrDimenI\fi%
+ \ifx\@FrDimenS\undefined\newdimen\@FrDimenS\fi%
+ \@ifNextNB[{\@Ettrine}{\@ettrine}% -] emacs
+ }%
+\fi% -\lettrine undefined
+ }% -end of \@FL
+%%%%%%%%%%%%%%%%%
+%#>
+% ===============================
+% | Typography |
+% ===============================
+%
+% Let the possibility to turn all off
+\def\nonfrench{\ifFrench\@DFP% -....................... \begin & \end{nonfrench}
+ \def\@temp@{\@AFP}% -\@AFP only for non LaTeX users
+ \else\@NoFr\def\@temp@{\relax}\fi%
+ \def\endnonfrench{\@temp@\ignorespaces}%
+ \ignorespaces}%
+%
+% Original settings of \dospecials et \@sanitize saved at \begin{document}
+% include ! ? ; : < > ` ' ^ " in dospecials and sanitize:
+\def\@dospecialsfrench{\do\`\do'\@dsversa}% -..................\@dospecialsfrench
+\def\@dsversa{% -specials reduced for versatim envir..........\@dsversa
+ \do\ \do\\\do\{\do\}\do\$\do\&\do\#\do\|\do\^^K\do\_\do\^^A\do\%\do\~% -$emacs
+ \do\!\do\?\do\;\do\:\do\<\do\>\do\^\do\"}%
+\def\@sanitizefrench{% -.........................................\@sanitizefrench
+% \@makeother\ \@makeother\\\@makeother\$\@makeother\&%$emacs
+% \@makeother\#\@makeother\|\@makeother\^^K\@makeother\_%
+% \@makeother\^^A\@makeother\%\@makeother\~%
+ \@saORI% -get original \@sanitize and add ours:
+ \@makeother\!\@makeother\?\@makeother\;\@makeother\:%
+ \@makeother\`\@makeother'\@makeother\<\@makeother\>%
+ \@makeother\^\@makeother\"}%
+%
+%\@ifNextNB X {YES} {NO} ... if next char is X then YES else NO ... \@ifNextNB
+\def\@ifNextNB#1#2#3{\let\@tempe=#1\def\@tempa{#2}\def\@tempb{#3}\futurelet%
+ \@tempc\@Fifnch}%
+ \def\@Fifnch{\ifx \@tempc \@tempe\let\@tempd\@tempa% -Next char may be an
+ \else\let\@tempd\@tempb\fi\@tempd}% -active space.
+%\ifNextNBc X or Y {YES} {NO} ... ... \@ifNextNBc
+\def\@ifNextNBc#1#2#3#4{\let\@tempe=#1\let\@tempf=#2%
+ \def\@tempa{#3}\def\@tempb{#4}\futurelet%
+ \@tempc\@Fifnchc}%
+ \def\@Fifnchc{\ifx\@tempc\@tempf\@tempa\else\@Fifnch\fi}%
+%
+\def\@skiplastspace{\ifdim\lastskip>\z@\unskip\penalty\@M\fi}% -..\@skiplastspace
+%
+\let\ifFrench\iftrue% -temporary setting
+\def\@AFP{% -................................ \@AFP = Activate French Punctuation
+ \let\dospecials\@dospecialsfrench%
+ \let\@sanitize\@sanitizefrench%
+ \AFPdp\AFPinfsup}%
+\def\AFPdp{\ifFrench\catcode`\!=\active\catcode`\?=\active%
+ \catcode`\;=\active\catcode`\:=\active\fi}%
+\let\AFPinfsup\relax%
+%#<
+\def\AFPinfsup{\ifFrench\ifFG\catcode`\<=\active\catcode`\>=\active\fi\fi}%
+%#>
+\def\AFPq{\ifFrench\catcode`'=\active\catcode``=\active\fi}%
+\def\AFPdq{\catcode`"=\active}%
+%
+\def\@DFP{% -............................ \@DFP = Desactivate French Punctuation
+ \DFPq\DFPinfsup\ifLPA\else\DFPdp%
+ \let\dospecials\@dsORI%
+ \let\@sanitize\@saORI\fi}%
+\def\DFPq{\ifFrench\catcode``=12\catcode`'=12\fi}%
+\let\DFPinfsup\relax%
+%#<
+\def\DFPinfsup{\ifFrench\catcode`<=12\catcode`>=12\fi}%
+%#>
+\def\DFPdp{\ifFrench\catcode`;=12\catcode`:=12%
+ \catcode`!=12\catcode`?=12\fi}%
+\def\DFPdq{\catcode`"=12}%
+%#<
+% Typographic process of dots (default is: let dots macros as usual)
+%
+\let\@doORI\dots\let\@ldoORI\ldots%
+\def\TeXdots{\@noBDfr%
+ \ifFTY\let\dots\@doORI\let\ldots\@ldoORI\fi}% -.............\TeXdots
+\def\noTeXdots{\@noBDfr%
+ \ifFTY\def\dots{...}\def\ldots{...}\fi}% -............ \noTeXdots
+%
+% i dotless (for those who haven't a good text editor)
+%
+\let\@hatORI\^\let\@treORI\"%
+\def\idotless{\@noBDfr%
+ \ifFTY% -............................................... \idotless
+ \def\^##1{{\expandafter\@hatORI\ifx ##1i\i\else##1\fi}}%
+ \def\"##1{{\expandafter\@treORI\ifx ##1i\i\else##1\fi}}%
+ \fi}%
+\def\iwithdot{\@noBDfr%
+ \let\^\@hatORI\let\"\@treORI}% -.....(no MlTeX command). \iwithdot
+%#>
+% Typographic process of double punctuation:
+%
+\let\ifLPA\iffalse% -\ifLPA must be initiated.
+\let\ifFG\iffalse% -\ifFG must be initiated.
+\def\@tempa#1{\f@issue%
+ \@fw{-13- %\@txt@msg{le caract\`ere "#1" est d\'ej\`a actif}%
+ }[#1]%
+ \let\@tempb\next\let\@tempc\empty}% -warning message
+\let\@tempb\empty%
+\AFPdp% -activate first part
+\let\ifWTS\iffalse% -set wrong typed spaces to false
+\def\@WTS{\relax\ifmmode\else\ifhmode% -skip wrong typed space
+ \ifdim\lastskip>\z@\unskip\fi%
+ \fi\fi}%
+% this part is necessary because some modules like biblatex ares conceived to
+% run only with babel or polyglossia and some definitions are necessary
+% because of \XeTeXinterchartokenstate
+% Necessary :
+% Add a thin space before punctuation ; : and ! in place of a space
+\def\intercharpunct{%
+% \lccode\lccode8217=8217
+ \XeTeXinterchartokenstate=1
+ \XeTeXcharclass `\! \french@punctthin
+ \XeTeXcharclass `\? \french@punctthin
+ \XeTeXcharclass `\; \french@punctthin
+ \XeTeXcharclass `\: \french@punctthick
+ \XeTeXinterchartoks \z@ \french@punctthin = {\nobreak\thinspace}%
+ \XeTeXinterchartoks \z@ \french@punctthick = {\nobreakspace}%
+ \XeTeXinterchartoks 4095 \french@punctthin = {\efr@unskip\nobreak\thinspace}%
+ \XeTeXinterchartoks 4095 \french@punctthick = {\efr@unskip\nobreakspace}%
+ }
+\def\nointercharpunct{%
+% \lccode8217=\z@
+ \XeTeXcharclass `\! \z@
+ \XeTeXcharclass `\? \z@
+ \XeTeXcharclass `\; \z@
+ \XeTeXcharclass `\: \z@
+ \XeTeXinterchartokenstate=0
+ }
+\newcount\eF@nonchar
+\newif\ifeF@active@punct % est pour la ponctuation
+\newif\ifeF@xetex@punct
+\ifdefined\XeTeXinterchartokenstate
+ \eF@xetex@puncttrue\eF@active@punctfalse
+ \ifdim\the\XeTeXversion\XeTeXrevision pt<0.99994pt
+ \eF@nonchar=255 \relax
+ \else
+ \eF@nonchar=4095 \relax
+ \fi
+\fi
+% ceci ou largeur fixe ? % insecable : space : \char160 fine : \char8239
+\ifeF@xetex@punct
+ \newXeTeXintercharclass\french@punctthin % ! ? ; et autres
+ \newXeTeXintercharclass\french@punctthick % :
+%
+ \def\efr@unskip{\ifhmode\ifdim\lastskip>\z@\unskip\fi\fi}
+ \def\xpg@nospace#1{#1}
+%
+ \ifeFr@Typo\protect\intercharpunct\else\nointercharpunct\fi
+\fi%
+% < for XeLaTex ******
+
+\ifeF@NoEnc
+ \@finput{efrenchu.tex}
+% and at begin should not use interchartoks
+ \AtBeginDocument{\nointercharpunct}
+\fi
+% now we come to the treatement of punctuation without \XeTeXinterchartokenstate
+% \XeTeXinterchartokenstate make inactive the following treatments
+\def\@tempc{%
+\def;{\ifFTY\protect\@PV%{}% -............................................... ";"
+ \else\ifWTS\@WTS\fi\string;\fi}%
+ }%
+\def\@tempd{\@tempa{\string;}}%
+\ifx;\undefined\def\@tempd{}\fi\@tempd\@tempc%
+\def\@PV{\relax\ifmmode\string;\else%
+ \ifhmode\ifUSP\unskip\space\fi%
+ \ifdim\lastskip>\z@\unskip\penalty\@M\,\fi%
+ \fi\string;\fi}%
+\def\@tempc{%
+\def:{\ifFTY\protect\@DP%{}% -............................................... ":"
+ \else\ifWTS\@WTS\fi\string:\fi}%
+ }%
+\def\@tempd{\@tempa{\string:}}%
+\ifx:\undefined\def\@tempd{}\fi\@tempd\@tempc%
+\@ifundefined{@beginparpenalty}{\def\@beginparpenalty=#1{\penalty#1}}{}%
+\def\@DP{\relax\ifmmode\string:\else%
+ \ifhmode\ifUSP\unskip\space\fi%
+ \ifdim\lastskip>\z@\unskip\penalty\@M\,\fi%
+ \fi%
+ \string:%
+ \@beginparpenalty=\@M\relax%
+% -Page break forbidden after ":"
+ \fi}% % -but remains not perfect...
+% Stuff for \WindowsUnits
+\def\@wu#1{\@@wu#1,\void}%
+\def\@@wu#1,#2{\ifx#1\empty\else\@@@wu #1\fi%
+ \def\@tempa{\@@wu#2}%
+ \ifx#2\void\else\expandafter\@tempa\fi%
+ }%
+\def\@@@wu#1=#2{\expandafter\edef\csname #1\endcsname:{#2\string:}}%
+% \hhline modification should be removed if the version
+% [1997/11/24 v3.x beta] is generally in use (and distributed).
+\ifx\hhline\undefined\else\let\@hhlORI\hhline% -......................... \hhline
+ \def\hhline{\omit\ifFrench\let:\@cidp\fi%
+ \expandafter\@gobble\@hhlORI}%
+\fi%
+\def\@tempc{%
+\def!{\ifFTY\protect\@PE%{}% -............................................... "!"
+ \else\ifWTS\@WTS\fi\string!\fi}%
+ }%
+\def\@tempd{\@tempa{\string!}}%
+\ifx!\undefined\def\@tempd{}\fi\@tempd\@tempc%
+\def\@PE{\ifmmode\string!\else%
+ \ifhmode\ifUSP\unskip\space\fi%
+ \ifdim\lastskip>\z@\unskip\penalty\@M\,\fi%
+ \fi%
+ \string!\fi}%
+\def\@tempc{%
+\def?{\ifFTY\protect\@PI%{}% -............................................... "?"
+ \else\ifWTS\@WTS\fi\string?\fi}%
+ }%
+\def\@tempd{\@tempa{\string?}}%
+\ifx?\undefined\def\@tempd{}\fi\@tempd\@tempc%
+\def\@PI{\relax\ifmmode\string?\else%
+ \ifhmode\ifUSP\unskip\space\fi%
+ \ifdim\lastskip>\z@\unskip\penalty\@M%
+ \hskip +0.09em plus 0.07667em% -max glue accepted
+ \fi%
+ \fi%
+ \string?\fi}%
+\ifx\@tempb\next\let\AFPdp\empty\f@issue%
+ \@fw{-13b- %
+ \@txt@msg{la double ponctuation est alors d\'esactiv\'ee}}\fi%
+\let\ifLPA\ErrFrench% -\ifLPA restored.
+\let\ifFG\ErrFrench% -\ifFG restored.
+\let\@aORI\@array% -........................................ \@array for \array
+\def\@array{}% -default noop, further defined.
+% 2e float placement correction
+\DFPdp\AFPdp% -normally a noop but in case of warning...
+\ifx\AFPdp\empty\else% -only for activated exclamation mark
+\def\@array{\let\noexpand\@tempa=\noexpand!%
+ \def\noexpand!{\noexpand\string\noexpand!}%
+ \edef\noexpand\@tempb{##1}% -asis substitution
+ \let\noexpand!=\noexpand\@tempa}%
+\fi%
+\catcode`<=13\catcode`>=13% -temporary activation
+\let\ifArG\iftrue% -by now assume guillemets are available in arrays.
+\edef\@array[#1]{\edef\noexpand\@tempb{#1}% -default substitution
+ \noexpand\ifArG\noexpand\else%
+ \noexpand\ifnum\catcode`\noexpand<=\active%
+ \noexpand\ifmmode\let\noexpand<\noexpand\inferieura%
+ \let\noexpand>\noexpand\superieura%
+ \noexpand\fi\noexpand\fi\@array%
+ \noexpand\fi%
+ \noexpand\@aORI[{\noexpand\@tempb}]}%
+\let\@eaORI\eqnarray% -.............................................. \eqnarray
+\def\eqnarray{\ifArG\else\ifnum\catcode`<=\active%
+ \let<\inferieura\let>\superieura%
+ \fi\fi\@eaORI}%
+\ifx\@@array\undefined\else% -When array package loaded we must ...... \@@array
+ \let\@@aORI\@@array% -protect it too
+\def\@@array{\ifArG\else\ifnum\catcode`<=\active%
+ \let<\inferieura\let>\superieura%
+ \fi\fi\@@aORI}% -as for eqnarray (and standard array).
+\fi%
+\catcode`<=12\catcode`>=12%
+\DFPdp% -desactivate first part
+\let\@CGroup\relax\let\@@FG\relax% -Should be relax for french light.
+\let\@LG\relax%
+%#<
+% Process of guillemets (typed << and >>)%.......................... Guillemets
+%
+% here is the oldest way to def. guillemets (still useful with plain}
+\def\@og{\leavevmode\ifdim\lastskip>\z@\unskip%
+ \penalty-9\hskip0.35em minus 0.35em\fi%
+ \raise0.27ex\hbox{$\scriptscriptstyle\ll$}\,\nobreak\ignorespaces}%
+\def\@cg{\@skiplastspace\nobreak\,\leavevmode\raise0.27ex%
+ \hbox{$\scriptscriptstyle\gg$}}%
+\let\ifFG\iftrue% -set the default
+\AFPinfsup% -activate for guillemets
+% special definition for \lettrine and \flettrine:
+\def\@gN{\def<##1{\ifx ##1<\leftguillemets\else\@LSG##1\fi}%
+ \def>##1{\ifx ##1>\rightguillemets\else\@RSG##1\fi}}%
+\let\@oldog\<\let\@oldcg\>% -let it run if previously defined
+\def\@ogx<{\ifFTY\@og\else\@DOG\fi}%
+\def\@cgx>{\ifFTY\@cg\else\@DFG\fi}%
+% Guillemets must not be typed \<< and \>>, the following is for compatibility
+%\def\<{\@ifNextNB<{\@ogx}{\@oldog}}%
+%\def\>{\@ifNextNB>{\@cgx}{\@oldcg}}%
+%
+%\def<{\ifnum\catcode`< =\active% look at \normalbrackets................. "<<
+% \expandafter\@genGL\else\@LSG\fi}% \EBCDICbrackets are different
+\def\@@LFG{\ifFTY\ifmmode\protect\@LSG\else%
+ \ifIEB\@SOC\else\@LSG\fi% -EBCDICbracket
+ \fi%
+ \else\@LSG\fi}%
+\global\let\ifCG\iftrue%
+\let\inside@an@expand\empty% -Stuff to expand in an usual \edef.
+\def\if@mid@expandable#1#2{\let\inside@an@expand\relax\relax%
+ \ifx\inside@an@expand\relax%
+ \let\inside@an@expand\empty%
+ \expandafter#2%
+ \else\expandafter#1%
+ \fi}%
+% A command to avoid wrong crash when expanding a macro which is not
+% fully expandable; usage: \edef\XX{\stop@mid@expandable}\XX
+\def\stop@mid@expandable{\if@mid@expandable{%
+ \errmessage{This macro is not expandable, please %
+ \string\protect \space it.}\stop}{}%
+ }%
+%%%\def\@LG{\relax\ifFTY\ifmmode\@DOG\else\@@@OG\fi\else\@DOG\fi}%
+\def\@LG{\relax\if@mid@expandable{\@@@LG}{\@@LG}}%
+\def\@@LG{\ifFTY\ifmmode\@DOG\else\@@@OG\fi\else\@DOG\fi}%
+\def\@@@LG{\relax\noexpand <<\relax}
+\def\@SifDOGon{\global\let\ifDOG\iftrue}% -set scnd level of guillemets flag
+\def\@SifDOGoff{\global\let\ifDOG\iffalse}\@SifDOGoff% -now set it off
+\def\@@@OG{\ifCG\ifFLA\ifEPG\else% -now be tolerant... in noeverypar
+ \hbadness=10000% -all this stuff is really dirty !
+ \ifhmode\newline\fi% -We force newline if any stuff already typeset.
+ \bgroup\def\par{}%
+ \@FrDimen=\textwidth% -line size on mono-column
+ \if@twocolumn\tolerance=5000\pretolerance=5000%
+ \advance\@FrDimen by -\columnsep%
+ \divide\@FrDimen by 2\fi% -for two-column
+ \@ifundefined{@inAlist}{}{% -revisite box size in a list environment
+ \advance\@FrDimen by -\leftmargin\advance\@FrDimen by -\rightmargin%
+ \advance\@FrDimen by -\listparindent\hsize=\@FrDimen}%
+ \@qquotes\fi\fi\fi%
+ \@oguills%
+ \ifFLA\ifEPG\bgroup\def\@currenvir{guillemets}% -simulate an environment
+ \let\@CGroup\egroup\fi\fi% -for error processing
+ \ifCG\ifFLA\ifEPG% -save the current \everypar and apply it first
+ \xdef\@epORI{{\the\TeXeverypar}}%
+ \TeXeverypar={\@epORI% -Original \everypar.
+ \ifEPGR\else% -If not allready done,
+ \@oguills% -insert guillemets and
+ \@ifundefined{@OuvOpen}{% -then according
+ \,% -kerning just after.
+ }{}%
+ \fi}%
+ \fi\fi%
+ \else\@SifDOGon\@AG% -ancient guillemets featuring
+ \ifFLA\ifEPG\else\def\@qqguill{\@oguills}\@staring\fi\fi\fi%
+%%% \protect\@CGfalse%
+ \global\let\ifCG\iffalse%
+ \ifUSP\kern+0.13em\penalty\@M\ignorespaces%
+ \else\kern-0.19em\relax\penalty\@M\fi}% -likely as \ignorespaces\fi
+\def\@AG{\ifAG\let\@LP\@RP\let\@gotl\@gotr%
+ \fi}% -Apply ancient guillemets if required
+\def\f@guillemets{<<}%
+\def\@oguills{%
+ \bgroup\@ifundefined{@OuvOpen}{\def\@OuvOpen{}% -avoid duplicate <<
+ \@ifundefined{ly}{\@og}%
+ {\leavevmode\ifECM\hbox{{\ifGIAF\else\@gfnt\fi%
+ \ifx\@gotl\undefined\char\rq\@LP%
+ \else\@gotl\fi\kern+0.20em}}%
+ \else\hbox{{\ly\@LP\kern-0.20em\@LP\kern+0.20em}}\fi%
+ \nobreak}}{}\egroup}%
+%\def>{\ifnum\catcode`> =\active% look at \normalbrackets................. ">>"
+% \expandafter\@genGR\else\@RSG\fi}% \EBCDICbrackets are different
+\def\@@RFG{\ifFTY\ifmmode\protect\@RSG\else%
+ \ifIEB\@SFC\else\@RSG\fi% -EBCDICbracket
+ \fi%
+ \else\@RSG\fi}%
+\def\@SifFTY{\let\ifFTY\iffalse}% -to turn of FTY temporary
+%%%\def\@RG{\relax\ifmmode\@SifFTY\fi\ifFTY\@@FG\else\@DFG\fi}%
+\def\@RG{\relax\if@mid@expandable{\@@@RG}{\@@RG}}%
+\def\@@RG{\ifmmode\@SifFTY\fi\ifFTY\@@FG\else\@DFG\fi}%
+\def\@@@RG{\relax\noexpand >>\relax}
+\def\endf@guillemets{>>}%
+\ifx\RIfM@\undefined\else% -For AmSTeX we force \nofrenchguillemets.
+ \edef\@emORI{\the\everymath\relax}% -Save original \everymath.
+ \edef\@edORI{\the\everydisplay\relax}% -Save original \everydisplay.
+ \f@issue\@fW{^^J -18- %
+ %\@txt@msg{\frenchname.sty force l'option }% New definition takes care
+ %\@txt@msg{\string\nofrenchguillemets\space en maths avec AmSLaTeX.}%
+ }% -that \nofrenchguillemets may
+ % be still undefined; expansion differed.
+ \everymath={\csname nofrenchguillemets\endcsname\@emORI}%
+ \everydisplay={\csname nofrenchguillemets\endcsname\@edORI}%
+\fi%
+\DFPinfsup% -desactivate for guillemets
+% The grammar environnement from syntax package...................... \grammar
+\ifx\grammar\undefined% -can't use French guillemets.
+ \else\let\@grORI\grammar\def\grammar{\nofrenchguillemets\@grORI}%
+\fi%
+
+\def\@@FG{\ifCG\f@issue%
+ \@fw{-14- %\@txt@msg{fermeture de guillemets non ouverts}%
+ }\fi%
+ \ifUSP\unskip\kern+0.13em\else%
+ \ifdim\lastskip>\z@\unskip% -skip previous space
+ \penalty\@M% -don't break here
+ \space% -better than \kern
+ \penalty\@M%
+ \fi%
+ \kern-0.19em%
+ \fi%
+ \xdef\@tempd{\@currenvir}\def\@tempe{guillemets}%
+ \ifx\@tempd\@tempe%
+ \@CGroup\@fguills% -end group if any and put closing guillemets
+ \else\ifEPG%
+ \@fguills% -typeset but no real closing (see \@@@FG)
+ \def\@CGroup{\egroup\@gobble}% -warning until \endguillemets:
+ \ifFLA% -Message issued only when french layout is active.
+ \f@issue%
+ \@fw{-49- %\@txt@msg{fermeture pr\'ematur\'ee de guillemets}%
+ }%
+ \fi%
+ \else\@CGroup\@fguills%
+ \fi%
+ \fi%
+% \edef\@currenvir{\@tempd}% generates error instead of just a warning.
+ \ifDOG\ifFLA\ifEPG\else\@fniv2\fi\fi%
+ \@SifDOGoff\else\@@@FG\fi% -reset secnd and first level
+% following code would be fine but doesn't run:
+% \@ifNextNB\space{\penalty-\@highpenalty}{}% allow break if space after
+ }%
+\let\guillemets\@LG% -................................. \begin & \end guillemets
+\def\RG@{\ifFTY\ifCG% -could be still closed in a prev. envir
+ \else\@RG% -Assume first closing >> and print it
+ \fi%
+ \@CGroup\@@@FG\relax\fi}% -end second level >>
+\let\endguillemets\RG@%
+\def\@@@FG{\ifFLA\ifEPG\ifx\@epORI\undefined\else% -\everypar is restored
+ \expandafter\TeXeverypar=\@epORI\fi%
+ \xdef\@epORI{{}}% -any way \xdef can be cleared
+ \else\@staring\@stared\egroup\fi\fi%
+ \global\let\ifCG\iftrue\let\@CGroup\relax}%
+\def\@fguills{\@ifundefined{ly}{\@cg}% -ECM
+ {\nobreak\leavevmode\ifECM\hbox{{\ifGIAF\else\@gfnt\fi\kern+0.20em%
+ \ifx\@gotr\undefined\char\rq\@RP%
+ \else\@gotr\fi}}%
+ \else\hbox{{\ly\kern+0.20em\@RP\kern-0.20em\@RP}}\fi}%
+\ifGIAF\else\ifdim\fontdimen\@ne\font>\z@\/\fi\fi% -italic correction simulated
+ }%
+%#>
+\def\@normalrq{\relax\ifmmode^\prime\else\@frq\fi}%
+\def\@frq{{\catcode`'=12{\ifNEQ\ifECM\char\rq001%
+ \else\char\rq023\hbox{}\fi%
+ \else\string'\fi}}}%
+\AFPq% -activate quoting
+\def`{\protect\@PLQ}% -..................................................... "``"
+ \let\@PLQ@\lq%
+ \def\@PLQ{\ifmmode\string`\let\@PLQ@\relax%
+ \else\ifNED\let\@PLQ@\@PLQn\fi% -may start a par.
+ \ifhmode\let\@PLQ@\@PLQn\fi%
+ \fi\@PLQ@}%
+ \def\@PLQn{\@ifNextNB`{\protect\@OQ}%
+ {\ifNEQ\ifECM\char\rq000\hbox{}%
+ \else\char\rq022\hbox{}\fi%
+ \else\string`\fi}%
+ }%
+ \def\@OQ`{\ifNED\protect\@LG\else\string``\fi}%
+\def'{\protect\@PRQ}% -..................................................... "''"
+ \let\@PRQ@\rq% -set the default
+ \def\@PRQ{\ifmmode\let\@PRQ@\@SRQ@%
+ \else\ifhmode\let\@PRQ@\@PRQn\fi%
+ \fi\@PRQ@}%
+ \def\@@FGp'{\@@FG}%
+ \def\@PRQn{\let\@PRQ@\rq% -reset the default
+ \@ifNextNB'{\ifNED\let\@PRQn@\@@FGp%
+ \else\let\@PRQn@\relax\string'\fi\@PRQn@}%
+ {\protect\@normalrq}}%
+%
+% SUBOPTIONS definitions............................................ SUBOPTIONS
+\let\ifNED\iffalse% -False for french light.
+\let\ifNEQ\iffalse% -False for french light.
+%#<
+\def\noenglishdoublequotes{\@noBDfr%
+ \AFPq\let\ifNED\iftrue% -...... \noenglishdoublequotes
+ \ifFrench\let\@cilq='\fi}%
+\def\noenglishquote{\@noBDfr%
+ \AFPq\let\ifNEQ\iftrue% -................... \noenglishquote
+ \ifFrench\let\@cilq='\fi}%
+%#>
+\DFPq% -disactivate quoting
+\def\untypedspaces{\@noBDfr%
+ \let\ifUSP\iftrue}% -......................... \untypedspaces
+\def\typedspaces{\@noBDfr%
+ \let\ifUSP\iffalse}% -............................ \typedspaces
+\let\if@labelsinmargin\iffalse% -Should be false for french light.
+%#<
+\def\englishdoublequotes{\@noBDfr%
+ \let\ifNED\iffalse% -.............. \englishdoublequotes
+ \DFPq\ifFrench\let\@cilq='\fi}%
+\def\englishquote{\@noBDfr%
+ \let\ifNEQ\iffalse\DFPq% -...................... \englishquote
+ \ifFrench\let\@cilq='\fi}%
+\def\labelsinmargin{\@noBDfr%
+ \let\if@labelsinmargin\iftrue}% -............ \labelsinmargin
+\def\nolabelsinmargin{\@noBDfr%
+ \let\if@labelsinmargin\iffalse}% -........\nolabelsinmargin
+\def\letpunctuationactivefor{\@noBDfr%
+%........................ \letpunctuationactivefor
+ \global\let\ifLPA\iftrue%
+ \def\wrongtypedspaces{\@noBDfr%
+ \global\let\ifWTS\iftrue}% -.............\wrongtypedspaces
+ }%
+\def\wrongtypedspaces{\f@issue\@fw{-17- %
+%\@txt@msg{\string\wrongtypedspaces\space est }%
+%\@txt@msg{inop\'erant dans ce contexte}%
+ }}%
+\def\nowrongtypedspaces{\@noBDfr%
+ \global\let\ifWTS\iffalse% -......... \nowrongtypedspaces
+ \ifLPA\DFPdp% -don't change \dospecials and \@sanitize
+ \fi\global\let\ifLPA\iffalse}% -it might be dangerous
+% With \tabbingaccents you can't put a diacritic (` or ') on a blank space
+% but it's okay for all accentuated letters. Usefull in full 8bits with
+% ECM too! because 8bits chars are firstly converted to 7bits "a la TeX".
+\def\tabbingaccents{\@noBDfr%
+ \let\@ifTA\iffalse}% -...................... \tabbingaccents
+\def\notabbingaccents{\@noBDfr%
+ \let\@ifTA\iftrue}% -................... \notabbingaccents
+\AFPq%
+% tabbing environment is modified to be able to put diacritics
+\def\@temp@{%
+ \def\tabbing{\def\@tempa{\let`=\lq\let'=\@normalrq}% -............ \tabbing
+% \noenglishquote and \noenglishdoublequotes will do nothing in \tabbing
+ \ifNED\@tempa\fi\ifNEQ\@tempa\fi%
+ \def\@tempa{\let\@ifTA\iftrue}%
+ \ifFTY\else\expandafter\@tempa\fi%
+ \ifFTY\@ifTA\else%
+ \let\@trjORI\@tabrj\let\@tlabORI\@tablab%
+ \let\@ORIrj=\`\let\@ORIlab=\'%
+ \def\@@tabrj{\ifcat\@tempc\space\let\@tempa=\@trjORI%
+ \else\let\@tempa=\@ORIrj\fi\@tempa}%
+ \def\@@tablab{\ifcat\@tempc\space\let\@tempa=\@tlabORI%
+ \else\let\@tempa=\@ORIlab\fi\@tempa}%
+ \def\@tabrj{\futurelet\@tempc\@@tabrj}%
+ \def\@tablab{\futurelet\@tempc\@@tablab}%
+ \fi\fi\@tgORI}%
+ }%
+\ifx\tabbing\undefined%
+ \else\let\@tgORI\tabbing% -put diacritics \` & \'
+ \@temp@% -new def apply
+\fi%
+\DFPq%
+\AFPinfsup% -activate < and >
+\def\EBCDICbrackets{\@noBDfr%
+ \let\ifIEB\iftrue% -......................... \EBCDICbrackets
+ \ifFG%
+ \def<{\protect\@LFG}% -old code generate \ifnum incompatibilty
+ \def\@LFG{\@ifNextNB<{\protect\@OG}{\@@LFG}}%
+ \def\@OG<{\ifnum\catcode`< =\active\expandafter\@LG%
+ \else\@@LFG\@@LFG\fi}%
+ \def>{\protect\@RFG}%
+ \def\@RFG{\@ifNextNB>{\protect\@FG}{\@@RFG}}%
+ \def\@FG>{\ifnum\catcode`> =\active\expandafter\@RG%
+ \else\@@RFG\@@RFG\fi}%
+ \fi}%
+\long\def\@BracesOrNot[#1]{\ifmmode\@PreserveBraces[#1]%
+ \else\expandafter#1\fi}%
+\let\@fobeyspaces\empty%
+\long\def\@genG#1#2#3{\@fobeyspaces%
+ \ifx#2#3\expandafter\protect\csname @#1G\endcsname%
+ \else\csname @@#1FG\endcsname\expandafter\@BracesOrNot%
+ \expandafter[\expandafter{%
+ \expandafter#3\expandafter}\expandafter]%
+ \fi}%
+\edef\@genGL{\noexpand\@genG{L}\noexpand<}%
+\edef\@genGR{\noexpand\@genG{R}\noexpand>}%
+% Hacking for blank space after "<" or ">" doesn't run in any \ifdim x > y
+% like in \footnote, so the code is nullified until...
+%\def\@bobeyspaces{\obeyspaces%
+% \def\@fobeyspaces{\catcode`\ =10\let\@fobeyspaces\relax}}%
+\let\@bobeyspaces\empty
+\def\normalbrackets{\@noBDfr%
+ \let\ifIEB\iffalse% -........................ \normalbrackets
+ \ifFG%
+ \def<{\ifnum\catcode`< =\active\@bobeyspaces\expandafter\expandafter%
+ \expandafter\@genGL\ifmmode\relax\fi%
+ \else\@LSG\fi}%
+ \def>{\ifnum\catcode`> =\active\@bobeyspaces\expandafter\expandafter%
+ \expandafter\@genGR\ifmmode\relax\fi%
+ \else\@RSG\fi}%
+ \fi}%
+\DFPinfsup% -desactivate < and >
+%#>
+\let\ifFG\iffalse% -default further choice
+%#<
+\def\ancientguillemets{\@noBDfr%
+ \let\ifAG\iftrue}% -................... \ancientguillemets
+\def\todayguillemets{\@noBDfr%
+ \let\ifAG\iffalse}% -...................... \todayguillemets
+\def\guillemetsinarrays{\@noBDfr%
+ \let\ifArG\iftrue}% -................ \guillemetsinarrays
+\def\noguillemetsinarrays{\@noBDfr%
+ \let\ifArG\iffalse}% -........... \noguillemetsinarrays
+\def\guillemetsinallfonts{\@noBDfr%
+ \let\ifGIAF\iftrue}% -........... \guillemetsinallfonts
+\def\guillemetsinroman{\@noBDfr%
+ \let\ifGIAF\iffalse}% -................ \guillemetsinroman
+\def\overfullhboxmark{\@noBDfr%
+ \ifFLA\overfullrule=5pt\fi}% -.......... \overfullhboxmark
+\def\nooverfullhboxmark{\@noBDfr%
+ \ifFLA\overfullrule=0pt\fi}% -....... \nooverfullhboxmark
+%#>
+\let\ifFrench\iffalse% -reset original value
+%
+% For compatibility with MlTeX docs but unneeded in this style%...\fhyph \ehyph
+{\def\@genMLhyph{\@ifundefined{french}{}{\gdef\fhyph{\french}}%
+ \@ifundefined{english}{}{\gdef\ehyph{\english}}}%
+\@ifundefined{fhyph}{\@genMLhyph}{}%
+}%
+%
+\gdef\frenchTeXmods{% -............................................\frenchTeXmods
+ \global\let\ifFrench\iftrue%
+\ifCLA%
+ \ifCLAfrench%
+ \@AFP% -activate French punctuation
+ \frenchtypography\frenchtranslation\frenchlayout%
+ \fi%
+\else%
+ \@AFP% -activate French punctuation
+ \frenchtypography\frenchtranslation\frenchlayout%
+\fi%
+ \frenchmacros\frenchwarnings%
+ \let\@HifORI\@Hif\let\@HfiORI\@Hfi%
+ \frenchhyphenation%
+ \csname @xtrasfrench\endcsname% -from other packages
+% (TeX-XeT first direction of writing will be set by the first \everypar)
+ \ifx\GOfrench\undefined% -When document is really started,
+ \csname beginL\endcsname% -set TeX--XeT direction of writing.
+ \fi%
+ \def\languagename{french}% -set it for mlp.
+ \@ufo% -user options
+ \let\switchtolanguage\endfrench%
+ \ignorespaces%
+ }% -end \frenchTeXmods
+% Declare Options, extras and even more extras
+\ifx\undefined\babel@core@loaded%
+ \edef\extrasfrench{}\def\@xtrasfrench{\extrasfrench}% -for other packages.
+ \DeclareOption{french}{\def\beginlanguage{%
+ \ifx\babel@savevariable% -selectlanguage
+ \undefined\french%
+ \else\endenglish\selectlanguage{french}\fi}%
+ }%
+ \DeclareOption{english}{\def\beginlanguage{%
+ \ifx\babel@savevariable% -selectlanguage
+ \undefined\english%
+ \else\selectlanguage{english}\fi}%
+ }%
+\else\let\extrasfrench\frenchTeXmods%
+ \AtBeginDocument{% -With babel, at begin document we should
+ \def\@tempa{\protect\@LabeL}% -test if our label def had
+ \ifx\@tempa\label\else% -been changed by any package such as hyperref
+ \let\@lORI\label\let\label\@tempa\fi% -and then reset it.
+ \def\@tempa{\protect\atgH{r}}% -Same test and action
+ \ifx\@tempa\ref\else\@gG{r}{ref}{/}{1}\fi% -for \ref.
+ }%
+\fi%
+%
+\@ifundefined{switchtolanguage}{%
+ \def\switchtolanguage#1{#1}}{}% -.(style depending)........ \switchtolanguage
+\let\@stlORI\switchtolanguage
+\def\@DFPtestANDset{% -Test if French was activated,
+ \ifx\ifFrench\iffalse% -if not \ifLPA will make French to crash
+ \f@issue\@fw{-71- %
+%\@txt@msg{ATTENTION : }% with message -26*-; better is that message. %
+%\@txt@msg{si babel est utilis\'e, mettre \frenchname\space en option}%
+ }%
+ \fi%
+ \let\@DFPtestANDset\@DFP%
+ \@DFP}%
+\def\endfrench{% -............................................. \endfrench
+%%% This \endL should be omitted otherwise it will be an extra for eTeX.
+%%% \ifx\undefined\GOfrench% When french document really started,
+%%% \csname endL\endcsname% stop any TeX--XeT french direction of writing.
+%%% \fi%
+\ifCLAfrench\else%
+ \@DFPtestANDset%
+ \nofrenchtypography\nofrenchtranslation\nofrenchlayout%
+\fi%
+ \nofrenchmacros%
+ \nofrenchhyphenation%
+ \let\@Hif\@HifORI\let\@Hfi\@HfiORI%
+ \let\switchtolanguage\@stlORI%
+ \let\ifFrench\iffalse\@stlORI%
+ \ignorespaces}% -end of \endfrench
+\let\noextrasfrench\endfrench%
+%#<
+\def\frenchtest{\@finput{french.tst}}% -The Torture Test ........... \frenchtest
+\def\frenchdoc{\@finput{frdoc.tex}}% -The Documentation ............. \frenchdoc
+%#>
+%%%%%%%%%%%%%%%%%%
+% ===============================
+% | Language switch mechanism |
+% ===============================
+% based on language.dat file
+%
+\@ifundefined{englishTeXmods}{\gdef\englishTeXmods{}}{}% -....... \englishTeXmods
+%
+\global\let\@Hif\empty\global\let\@Hfi\empty% -dflt \if...\fi hyphenation switch
+\global\let\if@FE\iffalse% -don't reload hyphenation exception if not required.
+\newif\if@more\@moretrue%
+\def\@doFh{% -define processing for reading language.dat at \begin{document}
+\def\f@ERRdat{\f@issue%
+ \errmessage{-9- %\@txt@msg{Corrupted/absent language.dat file.}%
+ }\global\let\french\@@end%
+ }%
+ \bgroup% -there is a marmelade here for a temporary usage.
+ \let\ORIGfrench\french%
+ \newcount\@FrCount%
+\def\tl@ng##1{}% -no need at this time to test if \<language>TeXmods is defined
+\def\@rhef##1/##2 /{\def\@tempa{##2}% -reloading of hyphenation exceptions files
+ \def\@tempb{##1}% -language name
+ \def\@tempc{\ifx\space\@tempa\else%
+ \expandafter\gdef\csname ##1@hefn\endcsname{##2\relax}%
+ \if@FE\expandafter\@@input##2\relax\fi\fi}%
+ \ifx\undefined\@excn\@tempc%
+ \else\ifx\@tempb\@excn\@tempc\fi\fi}%
+\gdef\NouveauLangage[##1]##2{%....................... \NouveauLangage[##]{name}
+%-- check for an anormal change in language.dat:
+ \expandafter\@ifundefined{l@##2}{}% do nothing, unused at initex
+ {% First accept babel definitions (\chardef) of languages.
+ \chardef\l@no##1\expandafter\if\csname l@##2\endcsname\l@no\else%
+ \edef\l@no{##1}\expandafter%
+% Secondly accept our own defs.
+ \ifx\csname l@##2\endcsname\l@no% OK
+ \else\f@issue\typeout{^^J \frenchname.sty \string: -27- %
+%\@txt@msg{language \l@no\space (##2) was initially }%
+%\@txt@msg{(at initex) numbered \csname l@##2\endcsname\space(ERROR!)}%
+ }[##2]\f@ERRdat%
+ \fi\fi}%
+%--
+ \expandafter\tl@ng\csname##2TeXmods\endcsname%
+ \expandafter\gdef\csname##2 \endcsname% The protected language cs.
+ {\expandafter\switchtolanguage\csname ##2TeXmods\endcsname%
+ \@Hif\language=##1\@Hfi\relax}%
+ \expandafter\gdef\csname##2\endcsname% The language cs.
+ {\protect\csname##2 \endcsname}%
+ }%\NouveauLangage
+% ============================================
+% begin definition of Nouveau@Langage
+\def\Nouveau@Langage[##1]##2{% -....................... \Nouveau@Langage[##]{name}
+
+%arabic as a language should not change the definition of \arabic V5,9995
+% the same is valid for future similar cases V5,9995
+ \expandafter\@ifundefined{##2}{\lang@defifalse}% V5,9995
+ {\lang@defitrue}% V5,9995
+%-- check for an anormal change in language.dat:
+ \expandafter\@ifundefined{mlp##2}{\langmlp@defifalse}%
+ {\langmlp@defitrue}%
+ \def\l@n@test{##2}
+% here only the choises french or english, excluding arabic as language V6,0
+ \ifx \l@n@fre\l@n@test\langok@defitrue\fi % french is accepted:\def\l@n@fre{french}%
+ \ifx \l@n@eng\l@n@test\langok@defitrue\fi % english accepted: \def\l@n@eng{english}%
+% \iflangok@defi \typeout{ ##1 : ##2}\fi%
+% < -- arabic prepare
+ \expandafter\@ifundefined{l@##2}{}%
+ \iflangok@defi
+ {%
+ \expandafter\tl@ng\csname##2TeXmods\endcsname%
+ \iflang@defi% ++ test same name existing?
+ \expandafter\gdef\csname##2Lang \endcsname%
+ {\expandafter\switchtolanguage\csname ##2TeXmods\endcsname%
+ \@Hif\language=##1\@Hfi\relax}%
+ \expandafter\gdef\csname##2Lang\endcsname%
+ {\protect\csname##2Lang \endcsname}%
+ \typeout{eFrench Info : %
+ \\##2Lang commute sur langue ##2 }%
+ \typeout{eFrench Info : %
+ et \\##2TeXmods pour ses extensions }%
+ \typeout{eFrench Info : %
+ avec \\ = une seule barre oblique inverse ===}%
+ \else% ** name not yet existing
+ \expandafter\gdef\csname##2 \endcsname%
+ {\expandafter\switchtolanguage\csname ##2TeXmods\endcsname%
+ \@Hif\language=##1\@Hfi\relax}%
+ \expandafter\gdef\csname##2\endcsname%
+ {\protect\csname##2 \endcsname}%
+ \fi% same name already existing ?
+ }%
+ \fi% -- french or english accepted
+ }% -\Nouveau@Langage
+% end definition of Nouveau@Langage
+% ============================================
+% using Nouveau@Langage also for dialects:
+% test if #1 equal ``='' that means same language hyphenation but a dialect.
+\edef\@temp@{=}%
+\def\@langue##1##2 ##3 ##4/##5{\def\@tempa{=}\def\@tempb{##1}%
+ \ifx\@tempa\@tempb%
+ \ifnum\@FrCount > 0 \advance\@FrCount by -1\fi%
+ \relax% -relax Max! Why is it absolutely needed?
+ \expandafter\Nouveau@Langage\expandafter[\the\@FrCount]{##2}%
+ \ifnum\@FrCount \@temp@ 0 \@FrCount= -1\fi%
+ \else\langok@defifalse\edef\@temp@{<}\@l@ngue##1##2 ##3 ##4/{##5}%
+ \fi}%
+\def\@l@ngue##1 ##2 ##3/##4{\Nouveau@Langage[##4]{##1}%
+%%%\typeout{La langue ##1 est utilis\'ee sous le num\'ero \the\@FrCount}
+%\expandafter\@@input##2\relax%% loading of patterns is done at initex
+%% % \if@FE
+ \@rhef##1/##3/% -Check if reload of exceptions file is needed.
+%%%\fi
+ }% -end of \Nouveau@Langage
+%
+\let\hyphenation\f@hyphenation% -use our new macro.
+%
+% Nouveau@Langage (as @l@ngue will be use to read language.dat :
+%
+\openin\@inputcheck = language.dat \def\@tempb{}%
+\ifeof\@inputcheck\@Ffnt{language.dat}%
+ \ifx\undefined\french % -language.dat is absent but \french might be def.
+ \else\xdef\@PrevF{\french}%
+ \gdef\french{\switchtolanguage\frenchTeXmods\@PrevF}%
+ {\@PrevF\f@issue\@fw{-15- %
+%\@txt@msg{le langage \frenchname\space porte le }%
+%\@txt@msg{num\'ero \the\language}%
+ }}%
+ \fi%
+ \ifx\undefined\l@english % -any default English language number?
+ \def\l@english{0}% -set it
+ \fi%
+ \ifx\undefined\english % -check English (fenglish.sty usally loaded)
+ \else\xdef\@PrevE{\language=\l@english}%
+ \gdef\english{\switchtolanguage\englishTeXmods\@PrevE}%
+ {\@PrevE\f@issue\@fw{-16 %
+ %\@txt@msg{the English language\space is numbered }%
+ %\@txt@msg{\the\language}%
+ }}%
+ \fi
+\else\@FrCount=-1%
+% ===============================
+% begin some indicators for language testing
+\newif\iflang@defi% V5,9995 RJ
+\newif\iflangmlp@defi% V5,9995 RJ
+\newif\iflangok@defi% V6,0 RJ
+\def\l@n@fre{french}% V6,0 RJ
+\def\l@n@eng{english}% V6,0 RJ
+\let\englishORI\english% V5,9995 RJ
+\let\english\undefined% V5,9995 RJ
+% end some indicators
+% ===============================
+\loop \endlinechar=-1 \read\@inputcheck to \@lineD \endlinechar`\^^M%
+ \ifx\@lineD\empty \else \advance\@FrCount by 1%
+ \edef\@lineD{\@lineD\space\space/{\the\@FrCount}}%
+ \expandafter\@langue\@lineD%
+ \fi%
+ \ifeof\@inputcheck \@morefalse \fi%
+ \if@more\repeat%
+\fi\closein\@inputcheck% < language.dat
+\ifx\undefined\english\let\english\englishORI\fi% V5,9995 !
+\let\hyphenation\@hyphenation% -reset original cs.
+%
+\def\@MLtst{\@ifundefined{fhyph}% -if French and \fhyph undef. (no language.dat)
+ {\if@PMF\gdef\french{\switchtolanguage\frenchTeXmods}%
+ \f@issue%
+ \@fw{-19- %
+%\@txt@msg{utilisation du langage interne num\'ero \the\language}%
+ }%
+ \else\f@issue%
+ \typeout{^^J \frenchname.sty: -20b-
+%\@txt@msg{the French language is undefined (ERROR!)}%
+ }\f@ERRdat\fi}%
+%if \fhyph defined as in MlTeX then :
+ {\gdef\french{\switchtolanguage\frenchTeXmods\fhyph}%
+ \gdef\english{\switchtolanguage\englishTeXmods\ehyph}%
+ }%
+ }% -@MLtst
+\@ifundefined{french}{\@MLtst}{}% -French might be still undefined!
+\@ifundefined{endenglish}{\global\let\endenglish\french}{}% -and \endenglish
+\gdef\tl@ng##1{\ifx ##1\relax\f@issue%
+ \@fw{-21- %\@txt@msg{##1 n'est pas d\'efini}%
+ }[##1]\fi}%
+\ifx\ORIGfrench\french\f@ERRdat\fi%
+ \egroup% -this is the end of the marmelade
+ }% -end of \@doFh (\GOfrench part 2)
+%%%%%%%%%%%%%%%%%% Insure AmSTeX will not be loaded later.
+\ifx\vert\undefined\else\let\@bvORI\vert\fi% -Already done before macros.
+\def\@fwVIIIII{\f@issue%
+ \kbtypeout{^^J -73- %\@txt@msg{ERREUR avec AmSTeX : }%
+%\@txt@msg{\frenchname.sty a \'et\'e charg\'e trop t\^ot !}%
+ }\stop}%
+\ifx\RIfM@\undefined%
+\def\vert{\ifx\RIfM@\undefined\expandafter\@bvORI\else\expandafter%
+ \@fwVIIIII\fi}%
+\else%
+\def\vert{\@bvORI}%
+\fi%
+%%%%%%%%%%%%%%%%%%
+%#<
+% ===============================
+% | Macros for help |
+% ===============================
+%
+% Abbreviations
+\def\@abbf[#1]{\def\abbrevfilename{#1}}%
+\AFPdq% -Activate " char for the following coding
+\def\abbreviations{\if@PMF\else\AFPdq\fi% -...................... \abbreviations
+ \@abbdefs\let\@abbdefs\relax%
+ \@ifNextNB[% -] emacs
+ {\@abbf}{\@abbf[frabbrev.tex]}}%
+% The following lines are excluded from high speed \if...\fi scan
+\def\f@protect{\ifx\protect\@typeset@protect%
+ \else\f@x@protect\fi}%
+\def\f@x@protect\fi#1{\fi\protect"}%
+\def\@eatprotect#1\protect#2\@nil{#1}%
+\if@PMF\let\f@protect\undefined\let\f@x@protect\undefined%
+ \let\@eatprotect\undefined%
+\fi% -\if@PMF
+\def\@abbdefs{% -the needed defs for abbrevs
+ \def\ABBfound{\global\let\ifABBfound\iftrue}%
+ \let\ifABBfound\iffalse%
+ \def\@abbrev##1##2 ##3##4 ##5/{%
+ \let\ifFMA\iftrue% -allways true here
+ \edef\@tempa{##1##2}%
+ \ifx##3*\edef\@tempb{##4}\edef\@tempc{##4s}%
+ \else\edef\@tempb{##3##4}\edef\@tempc{}%
+ \fi%
+ \ifx\@tempa\@tempb##5\ABBfound%
+ \else\ifx\@tempc\empty%
+ \else\ifx\@tempa\@tempc##5\ABBfound\fi%
+ \fi%
+ \fi%
+ \ifABBfound%
+ \else\edef\@tempa{##2}\edef\@tempb{##4}%
+ \ifx\@tempa\@tempb##5\ABBfound%
+ \else\ifx\@tempc\empty%
+ \else\ifx\@tempa\@tempc##5\ABBfound\fi%
+ \fi%
+ \fi%
+ \fi}%
+ \def\@openabbrev##1{\openin\@inputcheck=##1 %
+ \ifeof\@inputcheck\@Ffnt{##1}\fi}%
+ \def"{\f@protect\AbbrevName}% -"......................................... "xx"
+ \def\AbbrevName##1"{\def\@tempa{##1}\ifx\@tempa\space``\space''%
+ \else\@@bbrev##1"\fi}%
+ \def\@@bbrev##1{\expandafter\@@@bbrev\@eatprotect##1\protect\@nil}%
+ \def\@@@bbrev##1"{\begingroup%
+ \def\ABBMfalse{\global\let\ifABBM\iffalse}%
+ \let\ifABBM\iftrue\global\let\ifABBfound\iffalse%
+ \@openabbrev{\abbrevfilename}%
+ \ifeof\@inputcheck\else%
+ \loop\endlinechar=-1\read\@inputcheck to \@lineD\endlinechar`\^^M%
+ \ifx\@lineD\empty%
+ \else\edef\@lineD{##1 \@lineD/}\expandafter\@abbrev\@lineD\fi%
+ \ifABBfound\ABBMfalse\fi%
+ \ifeof\@inputcheck \ABBMfalse\ifABBfound\else%
+ \f@issue%
+ \@fw{-22- %
+ %\@txt@msg{abr\'eviation de \string"##1\string" non trouv\'ee}%
+ }[##1]%
+ \fi\fi%
+ \ifABBM\repeat%
+ \fi\closein\@inputcheck%
+ \ifABBfound\else``##1''\fi\endgroup}%
+ }% -end of \@abbdefs
+\if@PMF\let\@abbdefs\relax\fi% -No need with PMF.
+\DFPdq% -Deactivate " char
+\def\noabbreviations{\if@PMF\else\DFPdq\fi}% -................. \noabbreviations
+% Save original macros if they exist before the French option loading
+ \let\@atORI\at%
+% \let\@bvORI\vert% Already done before macros.
+ \let\@bsORI\backslash%
+\catcode`\/=0{\catcode`/\=12%
+/gdef/@boiORI{{/protect/string\}}}% -}emacs+TeX
+/catcode`/\=0\catcode`\/=12%
+ \let\@boi\textbackslash% -Should be ok with hyperref
+ \let\@chapORI\chap%
+ \let\@tildeORI\tilde%
+ \let\@etcORI\etc%
+ \let\@numORI\numero%
+ \let\@numsORI\numeros%
+ \let\@NumORI\Numero%
+ \let\@NumsORI\Numeros%
+ \let\@degreORI\degre%
+ \let\@degresORI\degres%
+ \let\@iemeORI\ieme%
+ \let\@iemesORI\iemes%
+ \let\@ierORI\ier%
+ \let\@iersORI\iers%
+ \let\@iereORI\iere%
+ \let\@ieresORI\ieres%
+ \let\@fscORI\fsc%
+ \let\@lscORI\lsc%
+ \let\@ntsORI\!%
+ \let\@hntscORI\halfnegthinspace%
+\def\@ifm{%\noabbreviations% -this is the default
+% original commands would be better preceeded by \expandafter
+ \def\at{\ifFMA\string @\else\@atORI\fi}% -at char ............. \at
+\ifx\RIfM@\undefined%
+ \def\vert{\ifx\RIfM@\undefined%
+ \ifmmode\expandafter\@bvORI%
+ \else\ifFMA\string |\else\@bvORI\fi\fi%
+ \else\expandafter\@fwVIIIII%
+ \fi}%
+\else%
+ \def\vert{\ifmmode\expandafter\@bvORI% -| .............. \vert
+ \else\ifFMA\string |\else\@bvORI\fi\fi}%
+\fi%
+ \def\backslash{\ifmmode\@bsORI% -(barre oblique inversee) ........ \backslash
+ \else\ifFMA%
+ \protect\@boi%
+ \else\@bsORI%
+ \fi%
+ \fi}%
+ \def\chap{\ifFMA\string ^\else\@chapORI\fi}% -hat char ........... \chap
+ \def\tilde{\relax\ifFMA\ifmmode\expandafter% -tilde char.......... \tilde
+ \expandafter\expandafter\@tildeORI%
+ \else\string~\fi\else\expandafter\@tildeORI\fi}%
+ \def\@Fsp##1{\ifFMA\ifmmode^{\mathrm{##1}}%
+ \else$^{\mathrm{##1}}$\fi%
+ \else##1\fi}%
+ \def\@umer##1{\protect\@Fsp{##1}\kern.2em\ignorespaces}%
+ \long\def\etc{\def\@tempa{}% -etc. ................ \etc
+ \ifFMA%
+ \ifhmode\ifUSP\unskip\space\fi%
+ \ifdim\lastskip>\z@\unskip\penalty\@M~\fi%
+ \fi%
+ etc\def\@tempa{\@ifNextNB.{}{%
+ \@fw{-60- %
+%\@txt@msg{point manquant apr\`es \string\etc}%
+ }}}%
+ \else\@etcORI%
+ \fi\@tempa}%
+\let\nombre\undefined% -To avoid redefinition info message of LaTeX.
+\DeclareRobustCommand*{\nombre}% -..................................... \nombre
+ {\ifFMA\expandafter\@nombre% -This control command designed
+ \else\expandafter\@nomORI% -to typeset french numbers
+ \fi}% -with correct spacing like in 123 456,789 012.
+ \def\numero{\ifFMA n\@umer{o}\else\@numORI\fi}% -n^o ........... \numero
+ \def\Numero{\ifFMA N\@umer{o}\else\@NumORI\fi}% -N^o ........... \Numero
+ \def\numeros{\ifFMA n\@umer{os}\else\@numsORI\fi}% -n^os ........... \numeros
+ \def\Numeros{\ifFMA N\@umer{os}\else\@NumsORI\fi}% -N^os ........... \Numeros
+ \def\degre{\ifFMA\r{}\space% -degree char....... \degre
+ \else\expandafter\@degreORI\fi}%
+ \def\degres{\ifFMA\@Fsp{o}\else\@degresORI\fi}% -degrees sign..... \degres
+ \def\leftguillemets{\@noBDfr%
+ \ifFMA\@oguills% -<< char...\leftguillemets
+ \else<<\fi}%
+ \def\rightguillemets{\@noBDfr%
+ \ifFMA\@fguills% ->> char..\rightguillemets
+ \else>>\fi}%
+ \def\fup{\@noBDfr\ifFTY% -.............................................. \fup
+ \expandafter\@fup\fi}\MakeRobustCommand{fup}%
+ \def\@fup{\@ifstar{\csname\string\!\endcsname\@@fup}{\@@fup}}%
+ \def\@@fup##1{\def\@tempa{\leavevmode\raise+0.80ex%
+ \hbox{\protect\sm@llerthree%
+ \MakeLowercase{##1}}%
+ \@ifNextNB\bgroup{\@@@fup}{\kern+.17em}}%
+ \ifFMA\expandafter\@tempa\else##1\fi%
+ }%
+ \def\@@@fup##1{\ifx\empty##1\else\kern+.17em{##1}\fi}%
+% \def\ieme{\ifFMA\protect\fup{e}\else\@iemeORI\fi}%
+% \def\iemes{\ifFMA\protect\fup{es}\else\@iemesORI\fi}%
+ \def\@tgifFMA##1##2{\ifFMA\expandafter\protect\expandafter##1%
+ \else\expandafter\protect\expandafter##2\fi%
+ }%
+ \def\ieme{\@tgifFMA\@Ieme\@iemeORI}% -............... ieme sign..... \ieme
+ \def\@Ieme{\@ifstar{\@ieme}{\@@eme}}%
+ \def\@ieme{\fup*{e}}%
+ \def\@@eme{\fup{e}}\MakeRobustCommand{ieme}%
+ \def\iemes{\@tgifFMA\@Iemes\@iemesORI}% -............ iemes sign..... \iemes
+ \def\@Iemes{\@ifstar{\@iemes}{\@@emes}}%
+ \def\@iemes{\fup*{es}}\MakeRobustCommand{iemes}%
+ \def\@@emes{\fup{es}}%
+ \def\ier{\@tgifFMA\@ier\@ierORI}% -.................. ier sign..... \ier
+ \def\@ier{\fup*{er}}\MakeRobustCommand{ier}%
+ \def\iers{\@tgifFMA\@iers\@iersORI}% -............... iers sign..... \iers
+ \def\iers{\fup*{ers}}\MakeRobustCommand{iers}%
+ \def\iere{\@tgifFMA\@iere\@iereORI}% -............... iere sign..... \iere
+ \def\iere{\fup*{re}}\MakeRobustCommand{iere}%
+ \def\ieres{\@tgifFMA\@ieres\@ieresORI}% -............ ieres sign..... \ieres
+ \def\@ieres{\fup*{res}}\MakeRobustCommand{ieres}%
+ \def\fsc{\@noBDfr\Fsc@@}% -....................... small caps for names \fsc
+ \MakeRobustCommand{fsc}%
+ \def\Fsc@@{\@ifNextNB*{\let\Fsc@F\@sc@F\FSC@}{\let\Fsc@F\relax\FSC@*}}%
+ \def\@sc@F{\rmfamily\mdseries}% -The star option forces cmr and m font.
+ \def\FSC@*##1{\fsc@##1\@@}%
+% Still bugged bec \fsc{{{...}}} generates a wrong output
+ \def\fsc@##1##2\@@{\ifFMA\leavevmode{\ifECM\Fsc@F\else\@sc@F\fi%
+ \textsc{%
+ \@uchbox{\let\protect\@empty%
+ \let\@typeset@protect\@empty%
+ \let\@changed@x\@changed@x@mouth%
+ \if\relax\noexpand##1\fsc@@@##1##2\@@%
+ \else\edef\@tempa{##1}%
+ \expandafter\fsc@@\@tempa##2\@@%
+ \fi}}}%
+ \else\@fscORI##1\fi}%
+ \def\fsc@@##1##2\@@{\MakeUppercase{##1}\lsc@*{##2}}% -remove surrounding {}
+ \def\fsc@@@##1##2##3\@@{\MakeUppercase{##1{##2}}\lsc@*{##3}}%
+%
+ \def\lsc{\@noBDfr\Lsc@@}% -............... allways lower case small caps \lsc
+ \MakeRobustCommand{lsc}%
+ \def\Lsc@@{\@ifNextNB*{\let\Fsc@F\@sc@F\lsc@}{\let\Fsc@F\relax\lsc@*}}%
+ \def\lsc@*##1{\ifFMA\leavevmode{\ifECM\Fsc@F\else\@sc@F\fi%
+ \textsc{\@uchbox{\MakeLowercase{##1}}}}%
+ \else\@lscORI##1\fi}%
+%......................................... \primo \secundo \tertio \quarto%
+%((((..................................... \primo) \secundo) \tertio) \quarto)
+ \def\@FE{\@noBDfr% -( emacs
+ \@ifNextNB){\@@FPE}{\@@FE}}%
+ \def\@@FE{\the\@FrCount$^{\mathrm o}$\kern+.29em}%
+% \def%( emacs
+% \@@FPE){\the\@FrCount\kern-.25em\lower.2ex\hbox{\degre}%
+% \kern-.55em%(emacs
+% )\kern+.3em}%
+ \def% -( emacs
+ \@@FPE){\setbox0=\hbox{\degre}\@FrDimen=\wd0\multiply\@FrDimen by 10%
+ \divide\@FrDimen by 45\leavevmode%
+ \the\@FrCount\kern-\@FrDimen%
+ \setbox0=\hbox{\the\@FrCount}\@tempdima=\ht0%
+ \setbox0=\hbox{\degre}\@tempdimb=\ht0%
+ \advance\@tempdimb by -\@tempdima%
+ \lower\@tempdimb\hbox{\degre}%
+ \multiply\@FrDimen by 45%
+ \divide\@FrDimen by 20%
+ \kern-\@FrDimen% -(emacs
+ )\kern+.3em}%
+ \def\quando=##1{\@FrCount=##1\@FE}% -(emacs.......... \quando=n or \quando=n)
+ \MakeRobustCommand{quando}%
+ \def\primo{\@FrCount=1\@FE}%
+ \def\secundo{\@FrCount=2\@FE}%
+ \def\tertio{\@FrCount=3\@FE}%
+ \def\quarto{\@FrCount=4\@FE}%
+\def\frenchalias##1##2{% -.......................................... \frenchalias
+ \ifx##1\undefined\let##1 ##2\relax%
+ \else\f@issue%
+ \@fw{-1- %\@txt@msg{la macro \string##1 existe d\'ej\`a}%
+ }[\string##1]%
+ \expandafter\stop%
+ \fi}%
+%
+% (Leslie says: "... counters are referencable, footnote counters are not.")
+% Now we do. A facility to be added in future LaTeX releases I hope.
+\@ifundefined{refmark}% -stands for \footnotemark[\ref{...}] .......... \refmark
+ {\def\refmark##1{\@noBDfr%
+ \ifFTY\ifhmode% -unskip last space
+ \ifdim\lastskip>\z@\unskip\fi\fi\fi%
+ \hbox{% -following patch due to NFSS2:
+%%%\ifx\DeclareFontShape\undefined\else\let\bf\mathbf\fi%\bf is used in \ref!
+ $^{\,% -\ref may force \itshape
+ \let\itshape\relax% -which don't run in math.
+\textrm{\scriptsize% -\textrm introduced to avoid \pdfannotlink (13d) to crash.
+ \ref{##1}%
+ }% -(Bypass to be removed when version 14 widely installed).
+ }$}}}{}%....}%
+\def\!{\relax\ifFMA\ifmmode%
+ \mskip-\thinmuskip\else\negthinspace\fi% -......... \!
+ \else\@ntsORI\fi}%
+\expandafter\def\csname\string\!\endcsname{\kern-.083335em}%
+\def\halfnegthinspace{\ifFMA\expandafter% -Not documented macro:
+ \csname\string\!\endcsname% -..... \halfnegthinspace
+ \else\expandafter\@hntsORI\fi}%
+\@ifundefined{moretolerance}{\def\moretolerance{% -.............. \moretolerance
+ \@noBDfr%
+ \advance\tolerance by \the\tolerance% -double each tolerance
+ \advance\pretolerance by \the\pretolerance}}{}%
+\@ifundefined{I}{\def\I{I}}{}% -to uppercase \i ........................... \I
+ \def\Sauter##1Lignes{\@noBDfr%
+ \vspace*{##1\baselineskip}}% -............ \Sauter#Lignes
+ }% -end of \@ifm
+%%%%% Logo symbolisant TeX, LaTeX et les autres
+\@ifundefined{AllTeX}{% -............................................... \AllTeX
+\def\AllTeX{(\kern-.075em L\kern-.36em{\sbox\z@ T\vbox to\ht\z@{\hbox{%
+ \check@mathfonts\fontsize\sf@size\z@\math@fontsfalse%
+ \selectfont A}\vss}}\kern-.15em)\kern-.075em\TeX}%
+\MakeRobustCommand{AllTeX}%
+ }{}%
+%#>
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\let\@currname\@currnameORI% -reset current package name
+\def\languagename{english}% -Let's go in english until \begin{document}
+\def\beginlanguage{% -.......\beginlanguage might be used after \begin{document}
+ \ifx\babel@savevariable% -selectlanguage
+ \undefined\french%
+ \else\endenglish\selectlanguage{french}\fi%
+ }%
+\let\@bglngpk\babel@savevariable% -Set it for further integrity tests.
+\ifx\pg@add@to\undefined\else% -polyglot is running
+\def\pg@begin{\begingroup}% -Javier Bezos <jbezos@mx3.redestb.es>
+\def\pg@end{\endgroup}% -as of 98/05/15
+\fi%
+%
+\edef\beginFWdirection{L}% -write Left to right
+\ifx\undefined\babel@core@loaded\ProcessOptions*% -Activate options
+ \else% -special case Babel
+ \PackageInfo{\frenchname}%
+ {Initialisation de l'option \frenchname\space pour Babel}%
+ \GOfrench\let\GOfrench\relax%
+\fi%
+\let\@FW\undefined% -No more used macro.
+% REMember that \french is equal to \frenchTeXmods PLUS hyphen. stuff.
+\resetat% -........................................................ reset @ char
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Let few other packages know that french is loaded.
+%
+\PassOptionsToPackage{french}{varioref}%
+\PassOptionsToPackage{french}{pdfscreen}%
+%
+\endinput%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/doc/src/frenchle.tex b/language/french/e-french/texmf/doc/src/frenchle.tex
new file mode 100644
index 0000000000..0e42ffcb93
--- /dev/null
+++ b/language/french/e-french/texmf/doc/src/frenchle.tex
@@ -0,0 +1,2584 @@
+% !TeX encoding = utf8
+%This is frenchle.tex : a light french style for LaTeX
+% LPPL Copyright by eFrench
+%
+%
+% = = = = = = = = = = = = = = = ATTENTION ! = = = = = = = = = = = = = = =
+%
+% Ce source devrait rester dans le dépôt subversion. Il ne faut le publier qu'en forme PDF
+% ou DVI. Le source en tant que tel pourrait perturber un utilisateur
+% moyen de LaTeX et frenchle
+% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
+\documentclass[a4paper,12pt,openright]{article}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{times}
+\usepackage{url}
+\usepackage{moreverb}
+\usepackage{relsize}
+\makeatletter\def\tempa{\let\if@screen\iffalse}\makeatother% 1.5in
+\tempa%
+\def\href#1#2{#2}
+\let\titcolor\relax
+\usepackage[print]{pdfscreen}
+\usepackage{mymaj, french}
+\usersfrenchoptions{%
+ \disallowuchyph
+ \overfullhboxmark
+}
+
+ \definecolor{section0}{rgb}{.722,.525,.431}
+ \definecolor{section1}{rgb}{.650,.350, 0 }
+ \definecolor{section2}{rgb}{.750,.250, 0}
+ \definecolor{section3}{rgb}{.950,.050,.0}
+ \definecolor{section4}{rgb}{.545,.271,.750}
+ \definecolor{section5}{rgb}{.627,.322,.176}
+ \definecolor{titcolor}{rgb}{.922,.725,.831}
+ \definecolor{bleu}{rgb}{.0,.0,.650}
+
+\hypersetup{
+ pdfwindowui=true, pdfnewwindow=true,
+ colorlinks=true, pdfmenubar=true, pdffitwindow=true,
+ anchorcolor=bleu, urlcolor=bleu,
+}
+
+\makeatletter
+\newcommand{\linkandfootnote}[3]{%
+ \href{#3}{#2}\bgroup%
+ \expandafter\ifx\csname r@tlf.#1\endcsname\relax%
+ \expandafter\global%
+ \expandafter\let\csname r@tlf.#1\endcsname\empty%
+ \footnote{\texttt{<}\url{#3}\texttt{>}.\label{lf.#1}}%
+ \else\refmark{lf.#1}%
+ \fi\egroup%
+ }%
+\makeatother
+
+\textwidth=168mm
+\textheight=240mm
+\voffset -1in
+\hoffset -1in
+\oddsidemargin=21mm
+\evensidemargin=21mm
+\topmargin=1cm
+\footskip=23mm
+\renewcommand{\ttdefault}{lmtt}
+\hypersetup{
+pdftitle={Le style frenchle },
+pdfauthor={Bernard Gaulle, Raymond Juillerat},
+pdfcreator={Bernard Gaulle},
+pdfsubject={TeX, LaTeX et la langue française},
+pdfkeywords={TeX, LaTeX, pdfLaTeX, efrench, frenchle.sty, french.sty},
+}
+\makeindex
+\begin{document}
+%\moretolerance
+\sloppy
+\newcommand{\fcefr}{{\relsize{-1}E}F{\relsize{-1}RENCH}}
+\DeclareRobustCommand{\cefr}{\fcefr}% maintenant dans french.cfg
+\newcommand{\fslefr}{\textsl{\fcefr}}
+\DeclareRobustCommand{\slefr}{\fslefr}
+\disallowuchyph% C'est ma devise... (inclus dans myfroptn)
+
+% Page de titre :
+\makeatletter
+\def\@fnsymbol#1{\ensuremath{\ifcase#1\or \star \or \diamond
+ \or \heartsuit \else\@ctrerr\fi}}
+\makeatother
+\title{\hbox{}%\vspace*{-3cm}
+ \Large
+ L'extension \textit{frenchle}
+ pour \LaTeX\\
+du paquetage \cefr.\\
+Notice d'utilisation}
+
+\author{Bernard \fsc{Gaulle}, repris par Raymond \fsc{Juillerat}\\
+pour le groupe \slefr \href{mailto:efrench(at)lists.tuxfamily.org}{\texttt{<efrench.org>}}%
+\thanks{Attention, l'adresse m.él. fournie via les butineurs est
+piégée ; il faut la corriger à la main.}\\%
+LPPL © \slefr (voir le fichier
+\linkandfootnote{copyright}{\texttt{Copyright.pdf}}
+{http://efrench.org/}%
+% ou \texttt{copyrigh.tex}
+).\\
+}
+\date{version \textit{le} \frenchstyleid}\label{prempage}
+\index{efrench@\slefr|(}
+\maketitle \index{Copyright}%\thispagestyle{empty}
+%\vfill
+\sommaire[3]
+\vfill\vfill
+\newcommand{\NNL}{\protect\let\\\relax}
+\makeatletter\def\HyPsd@CatcodeWarning#1{}\makeatother%
+%%
+\let\Subsubsection\subsubsection
+\def\subsubsection#1{\Subsubsection[\NNL#1]{\protect\color{section3}#1}}
+\let\Subsection\subsection
+\def\subsection#1{\Subsection[\NNL#1]{\protect\color{section2}#1}}
+\let\Section\section
+\def\section#1{\Section[\NNL#1]{\protect\color{section1}#1}}
+
+\pagebreak
+
+\section {Introduction}
+L’extension \textit{frenchle} pour \LaTeX{} est destinée à « franciser » les documents
+imprimés par \LaTeX{} selon les canons typographiques usuellement employés dans
+le monde de l’édition française. Elle est aussi appelée « french allégé » car il
+existe une version professionnelle , maintenue par le groupe \slefr{ }
+offrant plus de dispositifs actifs
+et notamment plus de possibilités de personnalisation. Cette dernière est
+\maj aussi sous licence LPPL et désormais distribuée par TeXLive et MikTeX,
+en tant qu'élément du paquet \maj e-french.
+\section {Objectifs}
+Cette extension a été conçue d’emblée comme sous-ensemble de \textsl{FrenchPro}\index{FrenchPro@\textsl{FrenchPro}aujourd'hui {\large\slefr}}
+(aujourd'hui {\cefr})
+avec les objectifs suivants :
+\begin{itemize}
+\item être un logiciel libre, ou du moins tout autant que peut l’être \LaTeX.
+Ainsi il peut être utilisé gratuitement, sans restriction ; être déposé dans
+le domaine public et être rediffusé par n’importe quel moyen.
+\item être le plus simple possible d’emploi ; ne pas nécessiter de connaissances
+particulières autres que celles de \LaTeX{} et fournir, par défaut, une francisation
+acceptable des documents de tous les jours tels que courriers,
+articles, notes et rapports. Pour les livres ou les thèses d’autres extensions
+peuvent s’avérer nécessaires et pour un niveau de satisfaction élevé,
+la version professionnelle \textsl{french.sty} peut être requise.
+\item permettre d’évoluer vers le style \textsl{french} de
+%\textsl{french} de
+la distribution \slefr{} (autrefois \textsl{FrenchPro}\index{FrenchPro@\textsl{FrenchPro}!aujourd'hui {\large\slefr}})
+sans aucune modificiation préalable
+du document source (à l’exception du changement de nom d’extension).
+\item être très facile d’installation ; ne nécessiter aucune modificiation de fichier
+de configuration ; utiliser très peu de fichiers et ainsi s’intégrer naturellement
+dans les environnements \LaTeX{} français.
+\end{itemize}
+Cette notice décrit de façon exhaustive ce que fait pour vous l’extension de
+façon automatique, comment vous pouvez l’utiliser et les nouvelles commandes
+mises à votre disposition. En outre, vous y trouverez des exemples de l’effet
+produit par \textit{frenchle} et ses commandes, sur le document résultant.
+En complément, vous pouvez vous reporter à la
+\linkandfootnote{lafaq}{FAQ french}{http://www.efrench.org/distributions/faq.pdf} qui répond à
+nombre de questions sur la francisation avec \TeX{} et \LaTeX.
+\section {Historique} \label{histo}
+Cet historique est en deux parties.
+\begin{itemize}
+\item D'abord, il s'agit d'une reprise intégrale de l'historique laissé par Bernard \textsc{Gaulle}
+créateur des extensions \textsl{french} et \textit{frenchle}. Sa denière mise au point datait
+du 23 mai 2007. Les seules modifications qui ont été nécessaires ont été de supprimer les
+références à des sites qui n'existaient plus sur la Toile, éventuellement d'en remplacer
+par un lien vers une adresse valable.
+\item Ensuite quelques courtes réflexions au sujet du contexte dans lequel cette histoire
+se déroule
+\end{itemize}
+\subsection{Historique repris de Bernard \textsc{Gaulle}}
+Avant \textit{frenchle}, existait l’extension \texttt{french} (version 0.1 à pré-V5) qui avait
+été développée pendant 12 ans (1988-2000) et avait traversé avec succès tous
+les grands changements de version de \TeX{} (v2, v3, tds) et de \LaTeX{} (2.09, nfss,
+2e, dc, ec) tout en restant toujours compatible avec la version précédente pour
+assurer la stabilité si chère aux utilisateurs de \TeX.
+
+Au début, l’installation de la francisation nécessitait parfois plusieurs jours
+de travail à un gourou \TeX{} et l’utilisateur final disposait de peu de fonctions de
+%1. <http://frenchpro.free.fr/FAQ.pdf>.
+personnalisation ; il était enfermé dans les limites du style, d’autant que toute
+modification nécessitait la connaissance de \LaTeX.
+
+De très gros efforts ont été réalisés pour que toute fonction/décision de
+\textsl{french} soit réversible et que l’utilisateur puisse y introduire ses propres améliorations.
+Un nombre important de commandes a été développé à cet effet.
+Dans le même temps, cette francisation s’adaptait tant bien que mal aux
+différentes plates-formes d’exploitation (DOS, Window, MacOs, Unix, ...) et
+aux différents moteurs \TeX{} (Personal \-\TeX, OzTEX, GTEX, Web2c, ...). La complexité
+de l’ensemble s’est alors accrue, ne serait-ce que par la multiplication
+du nombre de fichiers nécessaires à l’installation.
+
+Pour maîtriser cette expansion et en contrôler l’évolution j’ai choisi la méthode
+employée pars Donald \textsc{Knuth} pour \TeX{} à savoir : écoute des demandes des
+utilisateurs, discussion des améliorations proposées et intégration des fonctions
+d’intérêt général qui enrichissent l’extension et ne remettent pas en cause la
+compatibilité avec les versions précédentes. à cela j’avais souhaité que \textsl{french}
+n’entre pas dans un circuit commercial sans mon accord préalable. Pour ce faire,
+une notice de Copyright avait été élaborée et jointe à la distribution de l’ensemble
+des fichiers. Dédié aux francophones, le Copyright de \textsl{french} faisait naturellement
+mention de GUTenberg (association francophone des utilisateuers
+de \TeX) dont j’étais le président fondateur.
+
+Depuis l’origine, \textsl{french} était archivé sur Internet dans le domaine public.
+Aussi, lorsque l’initiative CTAN s’est mise en place avec pour objectif de contenir
+tout ce qui a été développé autour de \TeX, \textsl{french} y a été archivé tout
+naturellement.
+
+Plus tard, dans les années 1997-1998, le TUG ainsi que plusieurs éditeurs a
+souhaité pouvoir rediffuser le contenu de CTAN sur CD; certaines de ces distributions
+entrant dans un circuit commercial effectif. La distribution de \textsl{french} ne
+pouvait pas s’intégrer, par défaut, à ces dernières. Alors, pour simplifier la tâche
+des distributeurs, les archivistes du CTAN on créé en 1999 une zone « \textit{nonfree} »
+où \textsl{french} a été déposé, \textit{ex abrupto}, pour ne pas risquer d’être redistribué en
+violation du Copyright. Bien que ne ressemblant en rien à un \textit{shareware}, \textsl{french}
+s’est alors retrouvé archivé aux côtés des autres \textit{sharewares} du monde \TeX. Cet
+état de fait étant insupportable pour moi qui avais permis à quiconque d’utiliser
+\textsl{french} gratuitement pendant une bonne dizaine d’années, j’ai demandé son
+retrait de CTAN. Mes tentatives pour changer les choses au sein de CTAN et
+du TUG ayant échoué, j’ai choisi de m’adapter à la situation en développant
+\textit{frenchle} avec licence \LaTeX{} standard et \textsl{FrenchPro} \index{FrenchPro@\textsl{FrenchPro}!d'origine}
+sous licence \textit{shareware} ; le
+premier pouvant résider normalement sur CTAN et le second pouvant être mis
+dans la zone « \textit{nonfree} » aux côtés des autres \textit{sharewares}.
+
+L’extension \textit{frenchle} a été mise dans le domaine public pour la première
+fois en juin 2000. Six mois plus tard, \textsl{FrenchProV5} \index{FrenchPro@\textsl{FrenchPro}!d'origine} était disponible et six mois
+plus tard encore, les adhérents GUTenberg ayant participé au vote du nouveau
+conseil d’administration n’ont pas voulu renouveler leur confiance au président
+fondateur. C’est ainsi que l’extension \textit{frenchle} est arrivée dans le monde du
+logiciel libre.
+
+Depuis, le TUG (fin 2001) et les associations régionales d’utilisateurs de
+\TeX{} (GUTenberg, Dante, etc.) distribuent des CDs contenant l’intégralité des
+fichiers disponibles sur CTAN, y compris la zone « \textit{nonfree} » \index{FrenchPro@\textsl{FrenchPro}!d'origine}%
+\footnote{ Déplorons juste que \textsl{FrenchPro} y ait été oublié jusqu’à l’année 2003.}.
+Pour sa part, GUTenberg, documente \texttt{frenchb}\index{babel@\textit{babel}!frenchb@\texttt{frenchb}}
+ mais oublie curieusement
+\texttt{{\backslash}usepackage[frenchle]\{babel\} }\index{extension!babel@\verb'babel'}
+et ne connait pas \textsl{FrenchPro} comme l’atteste
+le Cahier hors-série numéro 2 de février 2003, page 24%
+\footnote{Quelques corrections ont toutefois été consenties dans une version en ligne
+(aujourd'hui [2012] disparue) }.
+Dans la liste des « \textit{malheurs} » infligés à mes outils de francisation de \LaTeX,
+GUTenberg a demandé à l’auteur du paquetage Babel (de Johannes \textsc{Braams})
+de réduire la francisation (option \texttt{french} de Babel) à la seule utilisation de
+l’option \texttt{frenchb}\index{babel@\textit{babel}!frenchb@\texttt{frenchb}} de Daniel \textsc{Flipo}.
+Cette mesure a pris effet avec la version
+de \LaTeX{} distribuée fin 2003. Ceci est la raison pour laquelle je propose l’extension
+\texttt{babelfr}\index{extension!babelfr@\texttt{babelfr}} en remplacement\index{extension!babel@\verb'babel'}
+de \texttt{babel} ce qui ne retire rien à Babel mais lui
+redonne les facilités antérieures.
+
+À suivre ... ?
+
+\subsection{Réflexions de Raymond Juillerat}
+\subsubsection{Babel et \textsl{mlp}}\label{refmlp}\index{mlp}
+Il est clair que les travaux de Daniel \textsc{Flipo} (\texttt{frenchb})
+\index{babel@\textit{babel}!frenchb@\texttt{frenchb}} et de Bernard \textsc{Gaulle} (\texttt{french})
+sont tous deux remarquables. L'extension \texttt{french.sty}
+(avec ses modules de \textsl{FrenchPro}\index{FrenchPro@\textsl{FrenchPro}!aujourd'hui {\large\slefr}})
+a toujours été pensée comme
+pouvant tourner sous \TeX{} et sous \LaTeX, l'extension \texttt{frenchb.ldf} est prévue comme
+fonctionnant uniquement sous \LaTeX{} avec \index{babel@\textit{babel}!options de francisation}
+Babel.
+\MAJ Pour l'allemand aussi, il y a un module pouvant tourner avec Babel et
+un autre indépendant.
+Pour l'allemand il y a \texttt{german.ldf} et \texttt{ngerman.ldf} ({Babel})
+en parallèle avec \texttt{german.sty} et \texttt{ngerman.sty}.
+En ce qui concerne la typographie française, on n'aura
+probablement pas non plus de solution unique pouvant tourner avec ou sans Babel. \endMAJ Je comprends une certaine
+déception de Bernard Gaulle de voir sa solution multilangage \textsl{mlp}\index{extension!mlp@\textsl{mlp}} dépassée par Babel.
+Mais il faudra suivre l'exemple de nos amis germains.
+
+\MAJ En fait, \textsl{mlp} permet à french de rester au niveau de nos amis germaniques qui incluent une possibilité
+interne de passage à l'anglais ou au français (utile pour les sommaires).
+ Car \textsl{mlp} dans son état actuel,
+ne permet que de passer à l'anglais ou à l'allemand. Pour l'allemand, il faut \textsl{mlp}.
+\endMAJ
+\subsubsection{Les formats et les césures}\label{lesformats}
+Bernard \textsc{Gaulle} a vécu l'époque où pour une césure\index{césure} correcte, il était très important de créer un
+\index{format}format. Cette initialisation n'est plus nécessaire\index{commande!frlatex@\verb'frlatex'} (depuis 1992 ou même plus tôt)
+et a été remplacée par des méthodes plus simples.
+
+\MAJ Avec les dernières versions de Mik\TeX{} et de \TeX{}live
+c'est aujourd'hui très simple.
+\TeX{}live charge le paquet \slefr{} par défaut et pour l'instant Mik\TeX{} ne le fait pas mais
+offre la possibilité de le charger au besoin.\endMAJ
+
+Pourrait-on mettre à disposition, en dehors de \texttt{french.sty} quelques éléments qui
+devraient aussi être parfaitement compatibles avec Babel, comme les lettrines, composition en drapeau ?
+Ou d'autres pièces parmi
+celles présentées dans le \linkandfootnote{tortures}{test de torture du dépôt \slefr}
+{http://svn.tuxfamily.org/viewvc.cgi/efrench_efrenchsources/trunk/test/frenchrf.dvi}
+ainsi que des macros comme versatim, vers, numero, ordinal, etc.
+Et, pourquoi pas, les intégrer à \texttt{frenchb} ?
+
+ \section{Maintenance et mises-à-jour}
+Cette section est divisée en deux sous-sections.
+\begin{itemize}
+\item D'abord, il s'agit la reprise intégrale de la section laissés par Bernard \textsc{Gaulle}
+au 23 mai 2007. Les seules modifications qui ont été nécessaires c'était de supprimer les
+références à des sites qui n'existent plus sur la Toile, éventuellement d'en remplacer
+par un lien vers une adresse valable.
+\item Enfin la suite de la maintenance, dès que le projet \slefr a été mis en place pour reprendre l'œuvre
+de son auteur originel afin qu'elle ne tombe pas dans l'oubli.
+\end{itemize}
+\subsection{Maintenance par Bernard \textsc{Gaulle}}
+Bénéficiant des nombreuses années de test dans le cadre du développement
+de l’ensemble des modules \textsl{FrenchPro}\index{FrenchPro@\textsl{FrenchPro}!aujourd'hui {\large\slefr}} puis \slefr,
+l’extension \textit{french allégée} est extrêmement
+solide et résistante aux différentes conditions d’utilisation.
+Des messages d’erreur ou d’avertissement sont fournis à l’utilisateur en cas
+de détection d’anomalie (cf paragr. \ref{messag} page \pageref{messag} ).
+à chaque fois qu’un correctif est appliqué à \textit{frenchle} il est immédiatement
+publié sur \linkandfootnote{svnfrench}{le serveur web}
+{http://svn.tuxfamily.org/viewvc.cgi/efrench_efrenchsources/trunk/inputs/french/frenchle.sty}
+%\footnote{disparu depuis}
+ puis recopié sur les serveurs CTAN.
+Avant de signaler une erreur éventuelle vous devez vous assurer de reproduire
+le problème avec le plus petit fichier source possible. Ensuite, vous pouvez
+envoyer votre rapport de bogue sur Internet (liste francophone gut@ens.fr ou
+les newsgroup tels que fr.comp.text.tex) où les gourous \LaTeX{} auront vite fait
+de trouver, sinon une solution, tout au moins un contournement. Et lorsque vous
+estimerez avoir obtenu une solution satisfaisante ou, à l’inverse, aucun début
+de solution, n’hésitez pas à nous contacter (voir les contacts, page \pageref{contact}).
+\subsection{\textsc{eFrench} et \textit{frenchle}}
+%\subsection{\slefr}
+Ici quelques explications pour indiquer ce que le groupe {\cefr} a apporté à frenchle.sty version 5,9993 pour en
+faire une version 6,0.
+\subsubsection{De FrenchPro à \textsc{eFrench}}
+Bernard Gaulle, l'auteur des modules de typographie française dénommés {\sl Frenchle} et {\sl FrenchPro} est décédé peu après
+avoir sorti les versions 5,9993 de ces extensions de francisation pour \LaTeX{} .
+Avec l'accord de l'épouse de l'auteur, héritière des droits sur l'œuvre, un groupe,
+lancé par Laurent \textsc{Bloch}
+a géré une nouvelle version qui succède à celle de Bernard Gaulle publiée désormais sous licence LPPL.
+ {\sl FrenchPro} est devenu dès lors \slefr.
+La version de \texttt{french.sty} a ainsi passé à 5,9994. La grande différence, c'est qu'elle n'est plus
+{\sl shareware}, et ne se bloque plus après un mois d'utilisation et beaucoup d'avertissements.
+Il n'était alors pas nécessaire de modifier {\sl Frenchle} déjà sous licence LPPL.
+
+Les responsables de la distribution \slefr{} et {\sl Frenchle} ont constaté qu'il y avait un nouveau
+problème au niveau de l'utilisation multilingue. Si bien qu'il a
+fallu une nouvelle correction de frenchle.sty et french.sty qui ont été portés tous deux à la version 5,9995.
+
+%\subsubsection{Essai d'utilisation multilingue}\label{multilingue}
+%\index{multilinguisme}\index{langues}\index{langages}%
+%\seealso{langages}{langues}
+%À chaque ou {\em langage}
+% indiqué dans le fichier\index{fichier!langage.dat@\texttt{language.dat}}
+%\verb|language.dat| l'extension \slefr{} définit une commande du
+%même nom. Si nous notons ce langage sous la forme :
+%\verb|<|{\em langage}\verb|>|,
+%la commande s'écrira alors \verb|\<|{\em langage}\verb|>|.
+%Cette nouvelle commande permet alors dans le cadre de \textsl{mlp} (§ \ref{refmlp}) de passer du français%
+%\footnote{Chaque commande \texttt{\backslash\string<}{\em langage}\texttt{\string>}
+%permet de passer en fait du langage actif à ce nouveau
+%\texttt{\string<}{\em langage}\texttt{\string>}.}
+% à ce \verb|<|{\em langage}\verb|>|.
+%
+%
+%Toutefois, il y a des exceptions. Un exemple, c'est le passage à la langue arabe qui, si \slefr{}
+%avait gardé ce schéma en toute occasion, entrerait en conflit avec le formatage de nombre
+%en notation arabe qui est défini par \verb|\arabic|. Dans tous les cas où la définition simple
+%mènerait à un conflit, il faut choisir \verb|\<|{\em langage}\verb|>Lang|
+%\index{langage@\texttt{\backslash<{}}{\em langage}{\tt>Lang{}}}. %
+%Dans ces cas, un message est envoyé au journal.
+%On passera alors à la
+%langue arabe par \verb|\arabicLang|.
+
+%En fonctionnement normal une option de style \verb|\<|{\em langage}\verb|>|
+%ou \verb|\<|{\em langage}{\tt>Lang{}}
+%(dont l'extension s'appelle %le code est dans le fichier
+%\index{fichier!langage.sty@{\tt<\em langage\tt>.sty}}%
+%\verb|<|{\em lan\-gage}\verb|>|\texttt{.sty})
+%définit une commande \verb|\<|{\em langage}\verb|>TeXmods|
+%\index{langage@\texttt{\backslash<{}}{\em langage}{\tt>{}}}%
+%\index{langageTeX@\texttt{\backslash<{}}{\em langage}{\tt>TeXmods}}%
+%pour compléter cette nouvelle langue (définir des commandes
+%ou faire des actions spécifiques)
+%et deux autres : \verb|\begin<|\emph{langage}\verb|>| pour y passer
+%et \verb|\end<|\emph{langage}\verb|>| pour
+%en sortir. \index{efrench@\slefr|)}
+%Pour l'arabe, on aura \verb|\begin{arabicLang}| et \verb|\end{arabicLang}|
+%en complément de \verb|\arabicLang|.
+%
+% et {\sl Frenchle} ont constaté qu'il y avait un nouveau
+%problème au niveau de l'utilisation multilingue. Si bien qu'il a
+%fallu une nouvelle correction de frenchle.sty et french.sty qui ont été portés tous deux à la version 5,9995.
+%
+%\subsubsection{Essai d'utilisation multilingue}\label{multilingue}
+%\index{multilinguisme}\index{langues}\index{langages}%
+%\seealso{langages}{langues}
+%À chaque ou {\em langage}
+% indiqué dans le fichier\index{fichier!langage.dat@\texttt{language.dat}}
+%\verb|language.dat| l'extension \slefr{} définit une commande du
+%même nom. Si nous notons ce langage sous la forme :
+%\verb|<|{\em langage}\verb|>|,
+%la commande s'écrira alors \verb|\<|{\em langage}\verb|>|.
+%Cette nouvelle commande permet alors dans le cadre de \textsl{mlp} (§ \ref{refmlp}) de passer du français%
+%\footnote{Chaque commande \texttt{\backslash\string<}{\em langage}\texttt{\string>}
+%permet de passer en fait du langage actif à ce nouveau
+%\texttt{\string<}{\em langage}\texttt{\string>}.}
+% à ce \verb|<|{\em langage}\verb|>|.
+%
+%
+%Toutefois, il y a des exceptions. Un exemple, c'est le passage à la langue arabe qui, si \slefr{}
+%avait gardé ce schéma en toute occasion, entrerait en conflit avec le formatage de nombre
+%en notation arabe qui est défini par \verb|\arabic|. Dans tous les cas où la définition simple
+%mènerait à un conflit, il faut choisir \verb|\<|{\em langage}\verb|>Lang|
+%\index{langage@\texttt{\backslash<{}}{\em langage}{\tt>Lang{}}}. %
+%Dans ces cas, un message est envoyé au journal.
+%On passera alors à la
+%langue arabe par \verb|\arabicLang|.
+
+%En fonctionnement normal une option de style \verb|\<|{\em langage}\verb|>|
+%ou \verb|\<|{\em langage}{\tt>Lang{}}
+%(dont l'extension s'appelle %le code est dans le fichier
+%\index{fichier!langage.sty@{\tt<\em langage\tt>.sty}}%
+%\verb|<|{\em lan\-gage}\verb|>|\texttt{.sty})
+%définit une commande \verb|\<|{\em langage}\verb|>TeXmods|
+%\index{langage@\texttt{\backslash<{}}{\em langage}{\tt>{}}}%
+%\index{langageTeX@\texttt{\backslash<{}}{\em langage}{\tt>TeXmods}}%
+%pour compléter cette nouvelle langue (définir des commandes
+%ou faire des actions spécifiques)
+%et deux autres : \verb|\begin<|\emph{langage}\verb|>| pour y passer
+%et \verb|\end<|\emph{langage}\verb|>| pour
+%en sortir. \index{efrench@\slefr|)}
+%Pour l'arabe, on aura \verb|\begin{arabicLang}| et \verb|\end{arabicLang}|
+%en complément de \verb|\arabicLang|.
+%
+%Comme ce mécanisme avait été introduit avec succès dans {\cefr}, nous l'avons aussi
+%introduit dans \textsl{frenchle}.
+%C'est l'arrivée à la version 5,9995.
+\subsubsection{Restrictions de l'option multilingue}
+
+\MAJ Il fallait alors résoudre un conflit entre la version 5,9995 et \textsl{mlp}.\index{mlp}
+Et comme de toute manière sans \textsl{mlp}, \slefr{} et {\sl Frenchle}
+ne peuvent être multilingues nous arrivons à la version 6,0 où sans \textsl{mlp},
+on ne peut choisir que l'anglais comme autre langue et avec \textsl{mlp}
+l'allemand en plus.
+Le mécanisme construisant une commande \verb|\<|{\em langage}\verb|>| qui avait été prévue
+par Bernard Gaulle dans le cadre de \textsl{babelfr}
+est désormais réduite aux langues \textsl{french} , \textsl{english} et avec \textsl{mlp} , \textsl{german} ou \textsl{ngerman}.%
+\endMAJ
+
+\section{ Conditions d’utilisation}
+Il n’y a pas de condition particulière d’utilisation de l’extension \textit{frenchle} ;
+toutefois il est conseillé de placer l’appel de \textit{frenchle} en dernière position dans
+%2. Déplorons juste que \textit{eFrench} y ait été oublié jusqu’à l’année 2003.
+%3. Quelques corrections ont toutefois été consenties dans une version en ligne à
+%http://math.univ-lille1.fr/~flipo/dfshort.pdf.
+%4. http://daniel.flipo.free.fr/frenchb/index.html
+%5. <http://frenchle.free.fr/>.
+%6. <frenchlebg -chez- free.fr>
+le chargement des extensions au sein du document \index{classe!de document}source :\\[.5em]
+\rule{0pt}{1em}\hfill\fbox{
+\begin{minipage}{90mm}
+ \backslash\texttt{documentclass}\{\textit{\texttt{classe\_de\_documents}}\}\\
+ \backslash\texttt{usepackage}[\textit{codage d’entrée} ]\{\texttt{inputenc}\}\\
+\rule{0.4\textwidth}{0pt} \vdots \\
+ \backslash\texttt{usepackage}\{\textit{extension n-2} \}\\
+ \backslash\texttt{usepackage}\{\textit{extension n-1} \}\\
+ \backslash\texttt{usepackage}\{\texttt{frenchle}\}\\
+ \backslash\texttt{begin\{document\}}
+\end{minipage}
+}\hfill\rule{0pt}{1em}\\[.5em]
+%\begin{decl}
+%\end{decl}
+en effet, il est tenu compte d’un certain nombre d’extensions afin d’en modifier
+légèrement le comportement ou bien d’éviter des conflits. Quelque soit le
+moteur \TeX, quelque soit l’installation (réalisée correctement) et quelque soit
+l’environnement (de bonne programmation) l’extension \textit{frenchle} doit fonctionner
+; n’hésitez pas à \linkandfootnote{noustux}{nous}{mailto:efrench@lists.tuxfamily.org}
+faire part d’anomalies flagrantes.
+Je rappelle que la gestion des caractères accentués est faite par l’extension
+\texttt{inputenc} ; il suffit juste que vous précisiez le codage de votre document (latin9,
+utf8, applemac, ansinew, ...).
+\maj Nous verrons plus loin (section \ref{multilin} ou page \pageref{peutfaire}) qu’il existe d’autres possibilités pour faire
+appel à \textit{frenchle}.
+\section{ Ce que fait l’extension}
+Nous arrivons maintenant au côté pratique des choses : je vais vous montrer
+ce que fait, par défaut, l’extension \textit{frenchle} sur le plan typographique et
+comment son comportement peut éventuellement être changé.
+\subsection{ La ponctuation}
+La virgule, le point-virgule, les deux-points, le point d’exclamation et le
+point d’interrogation sont activés afin de les espacer\index{ponctuation} correctement du texte
+précédent.
+\begin{minipage}{\textwidth}
+\begin{center}
+\textit{Texte source}\\[0.5ex]
+\begin{boxedverbatim}
+$\pi=3,14...$
+point-virgule ; le texte
+deux-points : le texte
+point d’exclamation ! La phrase
+point d’interrogation ? La phrase
+
+\end{boxedverbatim}
+\\[.5ex]
+\begin{minipage}{60mm}
+\begin{center}
+\textit{Composition standard}
+\fbox{\begin{minipage}{55mm}
+\nofrenchtypography
+$\pi=3,14...$\\
+point-virgule ; le texte\\
+deux-points : le texte\\
+point d’exclamation ! La phrase\\
+point d’interrogation ? La phrase
+\end{minipage}
+}
+\end{center}
+\end{minipage}
+\begin{minipage}{60mm}
+\begin{center}
+\textit{Composition avec frenchle}
+\fbox{\begin{minipage}{55mm}
+\frenchtypography
+$\pi=3,14...$\\
+point-virgule ; le texte\\
+deux-points : le texte\\
+point d’exclamation ! La phrase\\
+point d’interrogation ? La phrase
+\end{minipage}
+}
+\end{center}
+\end{minipage}
+\end{center}
+\end{minipage}
+\rule{0pt}{1em}
+
+L’espacement inséré par \textit{frenchle} devant la ponctuation est insécable, ce qui
+permet de ne jamais retrouver cette ponctuation en tout début de ligne ou de
+page. Une mesure spéciale, du même type, est appliquée aux deux-points afin
+de ne pas le retrouver seul en bas de page, coupé du texte qui suit.
+En standard, le traitement de la virgule par \LaTeX{} est différent en mode
+mathématique et en mode texte. Dans ce dernier mode, aucun espacement n’est
+inséré automatiquement par \LaTeX. En mode mathématique, grâce à \textit{frenchle}
+il en est maintenant de même (contrairement au fonctionnement standard).
+Ainsi, on se souviendra de la règle de base du mode mathématique : la barre
+d’espacement ne produit aucun effet ; tout espacement doit être indiqué par une
+commande ad hoc ( \backslash, \index{\,@\verb'\,'}
+ou \backslash\texttt{\textit{space}} \index{space,@\verb'\space'}
+ou \backslash\texttt{\textit{thinspace}} ou ...)\index{thinspace,@\verb'\thinspace'} .
+
+
+\begin{center}
+\textit{Texte source}\\[1ex]
+\begin{boxedverbatim}
+$\pi \simeq 3,14$
+$\textrm{PI vaut environ 3,14}$
+$f(x,y,z)$ saisi sans espacement
+$g(x, y, z)$ saisi avec espacement
+$h(x,\,y,\,z)$ avec commande ad hoc
+\end{boxedverbatim}
+\\[0.3ex]
+\begin{minipage}{70mm}
+\begin{center}
+\textit{Composition standard}
+\fbox{\begin{minipage}{65mm}
+\nofrenchtypography
+$\pi \simeq 3,14$\\
+$\textrm{PI vaut environ 3,14}$\\
+$f(x,y,z)$ saisi sans espacement\\
+$g(x, y, z)$ saisi avec espacement\\
+$h(x,\,y,\,z)$ avec commande ad hoc
+\end{minipage}
+}
+\end{center}
+\end{minipage}
+\begin{minipage}{65mm}
+\begin{center}
+\textit{Composition avec frenchle}
+\fbox{\begin{minipage}{60mm}
+\frenchtypography
+$\pi \simeq 3,14$\\
+$\textrm{PI vaut environ 3,14}$\\
+$f(x,y,z)$ saisi sans espacement\\
+$g(x, y, z)$ saisi avec espacement\\
+$h(x,\,y,\,z)$ avec commande ad hoc
+\end{minipage}
+}
+\end{center}
+\end{minipage}
+\end{center}
+\rule{0pt}{1em}
+
+
+Les commandes de \textit{frenchle} qui régissent l’espacement après la virgule sont\\
+\verb|\frenchmathcomma| \index{frenchmathcomma@\verb'\frenchmathcomma'}
+et \verb|\regularmathcomma|\index{regularmathcomma@\verb'\regularmathcomma'} :
+
+\begin{center} %=============================
+\textit{Texte source}\\[1ex]
+
+\begin{boxedverbatim}
+\regularmathcomma $3,14 \ f(x,y)$
+\frenchmathcomma $3,14 \ f(x,y)$
+\end{boxedverbatim}
+\\[.3ex]
+\begin{minipage}{60mm}
+\begin{center}
+\textit{Composition standard}
+\fbox{\begin{minipage}{55mm}
+\nofrenchtypography
+\regularmathcomma $3,14 \ f(x,y)$\\
+\frenchmathcomma $3,14 \ f(x,\,y)$
+\end{minipage}
+}
+\end{center}
+\end{minipage}
+\begin{minipage}{60mm}
+\begin{center}
+\textit{Composition avec frenchle}
+\fbox{\begin{minipage}{55mm}
+\frenchtypography
+\regularmathcomma $3,14 \ f(x,y)$\\
+\frenchmathcomma $3,14 \ f(x,\,y)$
+\end{minipage}
+}
+\end{center}
+\end{minipage}
+\end{center}
+\rule{0pt}{1em}
+L’espacement dans un nombre\index{nombre} (décimal ou non) se fait automatiquement
+avec l’ordre \verb|\nombre|\index{nombre@\verb'\nombre'} dès l’instant où un espace a été inséré avec la barre d’espacement,
+comme il se doit, après chaque millier ou millième :
+
+%\pagebreak
+\begin{center} %=============================
+\textit{Texte source}\\[1ex]
+\begin{boxedverbatim}
+$1 234,567 89$
+\nombre{1 234,567 89}
+\end{boxedverbatim}
+\\[.3ex]
+\begin{minipage}{60mm}
+\begin{center}
+\textit{Composition standard}
+\fbox{\begin{minipage}{55mm}
+\nofrenchtypography
+$1 234,567 89$\\
+\nombre{1 234,567 89}
+\end{minipage}
+}
+\end{center}
+\end{minipage}
+\begin{minipage}{60mm}
+\begin{center}
+\textit{Composition avec frenchle}
+\fbox{\begin{minipage}{55mm}
+\frenchtypography
+$1 234,567 89$\\
+\nombre{1 234,567 89}
+\end{minipage}
+}
+\end{center}
+\end{minipage}
+\end{center}
+%6
+%Composition standard
+%1234, 56789
+%1 234, 567 89
+%Composition avec \textit{frenchle}
+%1234,56789
+%1 234,567 89
+
+\pagebreak
+À l’exception de cet ordre \backslash\texttt{nombre}, \textit{frenchle} peut rajouter automatiquement
+les espaces que vous auriez oubliés à la saisie devant la double ponctuation :
+
+\begin{center} %=============================
+\textit{Texte source}\\
+\fbox{\begin{minipage}{130mm}
+\nofrenchtypography\tt
+\begin{tabular}{ll}
+&... fin; il s’ensuit: boum! quoi?\\
+\{{\backslash}untypedspaces&... fin; il s’ensuit: boum! quoi?\}\\
+&... fin ; il s’ensuit : boum ! quoi ?\\
+\end{tabular}
+\end{minipage}
+}\\[.5em]
+\begin{minipage}{60mm}
+\begin{center}
+\textit{Composition standard}
+\fbox{\begin{minipage}{55mm}
+\nofrenchtypography
+... fin; il s’ensuit: boum! quoi?\\
+{\untypedspaces... fin; il s’ensuit: boum! quoi?}\\
+... fin ; il s’ensuit : boum ! quoi ?
+\end{minipage}
+}
+\end{center}
+\end{minipage}
+\begin{minipage}{60mm}
+\begin{center}
+\textit{Composition avec frenchle}
+\fbox{\begin{minipage}{55mm}
+\frenchtypography
+... fin; il s’ensuit: boum! quoi?\\
+{\untypedspaces... fin; il s’ensuit: boum! quoi?}\\
+... fin ; il s’ensuit : boum ! quoi ?
+\end{minipage}
+}
+\end{center}
+\end{minipage}
+\end{center}
+% ====================================
+\rule{0pt}{1em}
+
+Vous l’avez compris, c’est l’option \verb|\typedspaces|\index{typedspaces@\verb'\typedspaces'} qui est active par défaut
+(c’est-à-dire que l’on saisit tous les espacements nécessaires).
+Tous les effets que l’on vient de voir sont contrôlables par les ordres \verb|\typedspaces|\index{typedspaces@\verb'\typedspaces'}
+\verb|\untypedspaces|\index{untypedspaces@\verb'\untypedspaces'},
+ \backslash\texttt{frenchtypography}\index{frenchtypography@\verb'\frenchtypography'}
+et \backslash\texttt{nofrenchtypography} ; voyons, sur l’exemple suivant, ce que
+\index{nofrenchtypography@\verb'\nofrenchtypography'}
+cela donne avec \backslash\texttt{nofrenchtypography}.
+\begin{center}
+\textit{Texte source}\\
+\begin{boxedverbatim}
+{\nofrenchtypography
+$\pi=3,14...$\\
+point-virgule ; le texte\\
+deux-points : le texte\\
+point d’exclamation ! La phrase\\
+point d’interrogation ? La phrase\\
+}
+\end{boxedverbatim}
+\\[.5em]
+\begin{minipage}{60mm}
+\begin{center}
+\textit{Composition standard}
+\fbox{\begin{minipage}{55mm}
+\nofrenchtypography
+$\pi=3,14...$\\
+point-virgule ; le texte\\
+deux-points : le texte\\
+point d’exclamation ! La phrase\\
+point d’interrogation ? La phrase
+\end{minipage}
+}
+\end{center}
+\end{minipage}
+\begin{minipage}{60mm}
+\begin{center}
+\textit{Composition avec frenchle}
+\fbox{\begin{minipage}{55mm}
+\nofrenchtypography
+$\pi=3,14...$\\
+point-virgule ; le texte\\
+deux-points : le texte\\
+point d’exclamation ! La phrase\\
+point d’interrogation ? La phrase
+\end{minipage}
+}
+\end{center}
+\end{minipage}
+\end{center}
+\rule{0pt}{1em}
+\frenchtypography\frenchlayout
+Vous voyez donc clairement qu’en plaçant l’ordre \index{nofrenchtypography@\verb'\nofrenchtypography'}
+ \backslash\texttt{nofrenchtypography} au
+bon endroit, on annule les effets micro-typographiques de \textit{frenchle}.
+
+\subsection{Les notes}\index{notes}
+Un petit exemple vaudra mieux qu’un long discours :
+%\let\oldrfootcounter\thefootnote %- - - - - - - - - - - - - - - - - - - - - - - - counter thefootnote
+\begin{center} %=============================
+\textit{Texte source}\\\index{footnote@\verb'\footnote'}
+\begin{boxedverbatim}
+\noindent Ici\footnote{Essai de note.}\\
+ Ici \footnote{Ceci est une note.}
+et là \footnote{Une autre note.}\footnote{Et
+ encore une autre note.}.
+\end{boxedverbatim}
+\setcounter{mpfootnote}{1} %- - - - - - - - - - - - - - - - - - - - - - - - counter mpfootnote
+\renewcommand{\thempfootnote}{\arabic{mpfootnote}}
+\parbox{60mm}{
+\begin{center}
+\textit{Composition standard} %-----------------------------------------standard
+\fbox{\begin{minipage}{55mm}
+\nofrenchtypography\nofrenchlayout{
+\noindent
+\large Ici\footnote{Essai de note.}\\
+\large Ici \footnote{Ceci est une note.}
+et là\footnote{Une autre note.}\footnote{Et
+encore une autre note.}.}
+\vspace{5ex}
+\end{minipage}
+}%
+\end{center}
+}%
+\parbox{65mm}{
+\begin{center}
+\textit{Composition avec frenchle} %-----------------------------------------frenchle
+\fbox{\frenchtypography\frenchlayout%
+\begin{tabular}{@{}lll}
+%\frenchtypography{
+%\renewcommand{\@makefntext}{\fr@makefntext}%
+\multicolumn{2}{@{}l}{\large Ici\footnotemark[1]}\\
+\multicolumn{2}{@{}l}{\large Ici\footnotemark[2]
+et là $^{3,}$\,$^4$.}\\
+\\
+\\\cline{1-2}%}
+\rule{0.5em}{0pt}&\footnotesize1. {Essai de note.}&\\[-.2em]
+&\multicolumn{2}{l}{\footnotesize2. {Ceci est une note.}}\\[-.2em]
+&\footnotesize3. {Une autre note.}\\[-.2em]
+&\multicolumn{2}{l}{\footnotesize4. {Et encore une autre note.\rule{10mm}{0pt}}}\\[-.03em]
+\end{tabular}%
+}%
+\end{center}
+}
+\end{center}
+% ====================================
+Comme on le voit, l’espacement devant l’ordre \texttt{{\backslash}footnote} %n’a aucune importance
+est sans importance
+avec \textit{frenchle}. Deux \texttt{{\backslash}footnotes} peuvent se suivre (sans espace cette fois-ci)
+et être composées selon l’usage. Vous aurez bien entendu noté la différence\index{notes!de bas de page}
+en bas de page.
+
+Dans la page de titre, \LaTeX{} exige que l’on utilise l’ordre \texttt{{\backslash}thanks} à la place
+de {\backslash}footnote :
+\begin{center} %=============================
+\textit{Texte source}\\[.3ex]
+\begin{boxedverbatim}
+\title{L’extension \textit{frenchle}
+\thanks{Merci à tous les contributeurs.} \\
+pour les documents en français
+\author{B. Gaulle}
+}
+\maketitle
+\end{boxedverbatim}
+\\[.5ex]
+\setcounter{mpfootnote}{1} %- - - - - - - - - - - - - - - - - - - - - - - - counter mpfootnote
+\renewcommand{\thempfootnote}{\arabic{mpfootnote}}
+\parbox{70mm}{
+\begin{center}
+\textit{Composition standard}
+\fbox{\begin{minipage}{65mm}
+\nofrenchtypography\nofrenchlayout{
+%\let{\@mpfootnotetext}{\@footnotetex}t%
+\noindent
+\hfill \large L'extension \textit{frenchle}\footnote {Merci à tous les contributeurs}\hfill\rule{0pt}{1pt}\\
+\large pour les documents en français}\\
+\rule{0pt}{2em}\hfill B. Gaulle\hfill\rule{0pt}{1pt}\\
+\rule{0pt}{2em}
+\end{minipage}
+}%
+\end{center}
+}%
+\parbox{70mm}{
+\begin{center}
+\textit{Composition avec frenchle}
+\fbox{\frenchtypography\frenchlayout%
+\begin{tabular}{@{}ll@{}l@{}}
+%\frenchtypography{
+%\renewcommand{\@makefntext}{\fr@makefntext}%
+\multicolumn{3}{@{}c}{\large L'extension \textit{frenchle}\footnotemark[1]}\\
+\multicolumn{3}{@{}c}{\large pour les documents en français}\\
+&\rule{5em}{0pt}\\
+\multicolumn{3}{@{}c}{\rule{0pt}{1em}B. Gaulle}\\
+\multicolumn{3}{@{}c}{\rule{0pt}{2em}}\\\cline{1-2}
+&\multicolumn{2}{l}{\rule{0pt}{1em}\footnotesize1. {Merci à tous les contributeurs}}\\
+\end{tabular}%
+}%
+\end{center}
+}
+\end{center}
+
+Des notes peuvent aussi être placées dans une figure\index{notes!dans les figures} mais en général le texte
+de la note est perdu par \LaTeX{} et \textit{frenchle} vous en avertit, il faut alors procéder
+comme suit : d'une part \index{footnotemark@\verb'\footnotemark'}
+saisir {\backslash}footnotemark à la place de \verb'\footnote' pour placer simplement \index{footnotetext@\verb'\footnotetext'}
+l’appel de note et ensuite, après la figure saisir\index{figures!notes dans les }
+ \verb'\footnotetext'\{texte de la note\}.\label{notesfigu}
+\begin{center} %=============================
+\begin{minipage}{\textwidth}
+\begin{center}
+\textit{Texte source}\\[1ex]
+\begin{boxedverbatim}
+\begin{figure}
+ \begin{tabular}{|c|}
+ \hline
+ \centerline{Peu importe la figure \footnotemark.} \\
+ \hline
+ \end{tabular}
+ \caption{Une figure explicative}
+ \end{figure}
+ \footnotetext{Une explication peut en amener une autre
+ en bas de page}
+\end{boxedverbatim}
+\end{center}
+\end{minipage}
+\setcounter{mpfootnote}{1} %- - - - - - - - - - - - - - - - - - - - - - - - counter mpfootnote
+\renewcommand{\thempfootnote}{\arabic{mpfootnote}}
+\parbox{70mm}{
+\begin{center}
+\textit{Composition standard}
+\fbox{\begin{minipage}{65mm}
+\nofrenchtypography\nofrenchlayout{
+\noindent
+\rule{0pt}{1pt}\hfill \fbox{
+\large Peu importe la figure\footnote{%
+Une explication peut en amener une autre en bas de page}.}\hfill\rule{0pt}{1pt}\\
+}
+\rule{0pt}{1pt}\hfill\rule{0pt}{1.5em} Figure 1: Une figure explicative\hfill\rule{0pt}{1pt}\\
+\vspace{4em}
+\end{minipage}
+}%
+\end{center}
+}%
+\parbox{70mm}{
+\begin{center}
+\textit{Composition avec frenchle}
+
+\fbox{
+\begin{minipage}{65mm}
+\hfill\fbox{\large Peu importe la figure\footnotemark[1].}\hfill\rule{0pt}{1pt}\\[1em]
+\centerline{\textsc{Fig.} 1 -- \textit{Une figure explicative}}
+\begin{tabular}{lll}
+&\rule{4.3em}{0pt}\\[1.9em]
+\multicolumn{3}{@{}c}{\rule{0pt}{2em}}\\\cline{1-2}
+&\multicolumn{2}{l}{\rule{0pt}{1em}\footnotesize1. {Une explication peut en amener une}}\\[-.3em]
+\multicolumn{3}{l}{\footnotesize{}autre en bas de page}\\
+\end{tabular}
+\end{minipage}}
+\end{center}
+}
+%
+\end{center} % ===========================
+
+Comme vous le savez les figures \index{figures} et tableaux sont flottants avec \LaTeX{} c’est
+à dire qu’il sont placés au mieux par \LaTeX{} en fonction des options que vous
+choisissez ; il est donc parfois délicat de faire résider sur la même page la figure
+et le texte de la note en bas de page.
+
+Pour les tableaux\index{tableaux}, par contre, les notes ne sont pas perdues en français car
+elles sont composées juste en dessous du tableau\index{tableaux!notes dans les}
+ (comme dans le cas d’une minipage
+\LaTeX) :
+\begin{center} %=============================
+\textit{Texte source}\\[1ex]
+
+\begin{boxedverbatim}
+\begin{table}
+Il est toujours possible de placer une
+note dans un tableau en français :
+\bigskip
+\begin{tabular}{|c|}
+ \hline
+ Peu importe le tableau
+ \footnote{Une explication en
+ dessous (perdue ?).}. \\
+ \hline
+ \end{tabular}
+ \end{table}
+\end{boxedverbatim}
+
+\setcounter{mpfootnote}{1} %- - - - - - - - - - - - - - - - - - - - - - - - counter mpfootnote
+\renewcommand{\thempfootnote}{\alph{mpfootnote}}
+\parbox[t]{70mm}{
+\begin{center}
+\textit{Composition standard}
+{\nofrenchtypography\nofrenchlayout
+\fbox{
+\begin{minipage}{65mm}
+Il est toujours possible de placer une\\
+note dans un tableau en français :\\
+\bigskip
+\begin{tabular}{|c|}
+\hline
+\rule{0pt}{1.2em}Peu importe le tableau
+\footnotemark[1].\\
+\hline
+\end{tabular}
+\end{minipage}
+}}
+\end{center}
+}%
+\parbox[t]{70mm}{
+\begin{center}
+\textit{Composition avec frenchle}
+\fbox{
+\begin{minipage}{65mm}
+Il est toujours possible de placer une\\
+note dans un tableau en français :\\
+\bigskip
+\begin{tabular}{|c|}
+\hline
+\rule{0pt}{1.2em}Peu importe le tableau
+\footnote{Une explication en
+dessous (perdue ?).}.\\
+\hline
+\end{tabular}
+\end{minipage}
+}
+
+\end{center}
+}
+%
+\end{center}
+
+\frenchtypography\frenchlayout
+%\pagebreak
+Tous les effets que l’on vient de voir pour les notes sont contrôlables par
+les ordres \texttt{{\backslash}french\-typography}\index{frenchtypography@\verb'\frenchtypography'}
+ et \verb|\frenchlayout|\index{frenchlayout@\verb'\frenchlayout'}, l’un gérant l’espacement et
+l’autre la mise-en-page. Pour les désactiver vous pouvez coder
+\texttt{{\backslash}nofrenchtypography}\index{nofrenchtypography@\verb'\nofrenchtypography'}
+et \texttt{{\backslash}nofrenchlayout}\index{nofrenchlayout@\verb'\nofrenchlayout'} ;
+essayons-les pour voir ce que cela donne :
+%\pagebreak
+\begin{center} %=============================
+\textit{Texte source}\\
+\begin{boxedverbatim}
+{ \nofrenchtypography
+ \nofrenchlayout
+ \begin{table}
+ Peu importe le tableau
+ \footnote{Une note perdue.}.\\
+ \hline
+ \end{tabular}
+ \end{table}
+}
+\end{boxedverbatim}
+\\[.5em]
+\setcounter{mpfootnote}{1} %- - - - - - - - - - - - - - - - - - - - - - - - counter mpfootnote
+\renewcommand{\thempfootnote}{\arabic{mpfootnote}}
+\parbox[t]{70mm}{
+\begin{center}
+\textit{Composition standard}
+{\nofrenchtypography\nofrenchlayout
+\begin{minipage}{65mm}
+\begin{tabular}{|c|}
+\hline
+\rule{0pt}{1.6em}\Large Peu importe le tableau
+\footnotemark[1].\\
+\hline
+\end{tabular}
+\end{minipage}
+}
+\end{center}
+}%
+\parbox[t]{70mm}{
+\begin{center}
+\textit{Composition avec frenchle}
+
+\begin{minipage}{65mm}
+\begin{tabular}{|c|}
+\hline
+\rule{0pt}{1.6em}\Large Peu importe le tableau
+\footnotemark[1].\\
+\hline
+\end{tabular}
+\end{minipage}
+
+\end{center}
+}
+%
+\end{center}
+
+Ainsi, la composition par \textit{frenchle} est redevenue tout à fait au standard
+\LaTeX.
+\pagebreak
+\subsection{ Le titrage}
+L’extension \textit{frenchle} traduit et compose les différents éléments servant au
+titrage\index{titrage} dans le document comme vous le trouverez ci-après. Une exception
+toutefois concerne l’ordre \verb|\chaptername|\index{chaptername@\verb'\chaptername'} qui, pour des raisons de conception
+des hauts de pages de \LaTeX, ne peut pas disposer, pour la plupart du temps,
+d’une traduction anglaise.\\[1em]
+
+\begin{tabular}{|l|l|l|}\hline
+\rule{0pt}{1.1em}\textit{Composition en anglais}&\textit{Texte source}&\textit{Composition en français}\\\hline
+\rule{0pt}{1em}References &\tt{\backslash}refname &Références \index{refname@\verb'\refname '} \\
+Abstract &\tt{\backslash}abstractname &Résumé \index{abstractname@\verb'\abstractname '} \\
+Table of Contents &\tt{\backslash}contentsname &Table des matières \index{contentsname@\verb'\contentsname'}\\
+List of Figures &\tt{\backslash}listfigurename &Table des figures \index{listfigurename@\verb'\listfigurename'}\\
+List of Tables &\tt{\backslash}listtablename &Liste des tableaux\index{listtablename@\verb'\listtablename'} \\
+Index &\tt{\backslash}indexname &Index \index{indexname@\verb'\indexname'} \\
+Figure &\tt{\backslash}figurename &Fig. \index{figurename@\verb'\figurename'} \\
+Table &\tt{\backslash}tablename &Tab. \index{tablename@\verb'\tablename'} \\
+Part &\tt{\backslash}partname &partie \index{partname@\verb'\partname'} \\
+\hline
+\end{tabular}
+
+\bigskip
+\pagebreak
+Il s’agit là de quelques commandes standard de \LaTeX{} mais \textit{frenchle} en
+introduit d’autres dans certains environnements de classe ou d’extensions :
+
+\bigskip
+\begin{tabular}{|l|l|l|}\hline
+\rule{0pt}{1.1em}\textit{Composition en anglais}&\textit{Texte source}&\textit{Composition en français}\\\hline
+\rule{0pt}{1em}see &\tt{\backslash}seename &voir \index{seename@\verb'\seename'} \\
+see also &\tt{\backslash}seealsoname &voir aussi \index{seealsoname @\verb'\seealsoname '}\\
+Glossary &\tt{\backslash}glossaryname &Glossaire \index{glossaryname@\verb'\glossaryname'} \\
+Keywords: &\tt{\backslash}kwname &Mots-clé : \index{kwname@\verb'\kwname'}\\
+DRAFT &\tt{\backslash}draftname &- épreuve - \index{draftname@\verb'\draftname'}\\
+Preface &\tt{\backslash}prefacename &Préface \index{prefacename@\verb'\prefacename'} \\
+Proof &\tt{\backslash}proofname &Démonstration\index{proofname@\verb'\proofname'} \\
+To &\tt{\backslash}headtoname\verb|\mbox{}|& \index{headtoname@\verb'\headtoname'}\\
+cc &\tt{\backslash}ccname &c.c. \index{ccname@\verb'\ccname'}\\
+Encl &\tt{\backslash}enclname &P.j. \index{enclname@\verb'\enclname'} \\
+PS: &\tt{\backslash}PSname &P.-S. : \index{PSname@\verb'\PSname'} \\
+Subject: &\tt{\backslash}Objectname &Objet : \index{Objectname@\verb'\Objectname'} \\
+Your Ref: &\tt{\backslash}YourRefname &v/réf. : \index{YourRefname@\verb'\YourRefname'} \\
+Our Ref: &\tt{\backslash}OurRefname &n/réf. : \index{OurRefname@\verb'\OurRefname'} \\
+email: &\tt{\backslash}emailname &m.él. : \index{emailname@\verb'\emailname'}\\
+Slide &\tt{\backslash}slidename &Transparent \index{slidename@\verb'\slidename'} \\
+Notes &\tt{\backslash}notesname &Notes \index{notesname@\verb'\notesname'}\\
+Appendix &\tt{\backslash}appendixname &Annexe \index{appendixname@\verb'\appendixname'} \\
+\hline %
+\end{tabular}\\[1em]
+(Le libellé {\tt{\backslash}draftname} est destiné à une utilisation en PostScript)
+
+D’autres libellés peuvent être employés dans d’autres extensions ; leur traduction
+dépendra de l’interaction de celle-ci avec \textit{frenchle}. Pour être garanti
+d’obtenir l’interaction maximum il est souhaitable de coder l’option \textsl{french}
+dans {\tt{\backslash}documentclass}\index{classe!de document}
+ (voir les autres possibilités au paragr. \ref{peutfaire} page \pageref{peutfaire}) :\\[1em]
+\rule{0pt}{1em}\hfill\fbox{
+\begin{minipage}{90mm}
+ \backslash\texttt{documentclass[french]}\{\textit{classe\_de\_documents}\}\\
+ \backslash\texttt{usepackage}\{\textit{extension 1}\}\\
+\rule{0.4\textwidth}{0pt} \vdots \\
+ \backslash\texttt{usepackage}\{\textit{extension n-1} \}\\
+ \backslash\texttt{usepackage}\{\texttt{frenchle}\}\\
+ \backslash\texttt{begin\{document\}}
+\end{minipage}
+}\hfill\rule{0pt}{1em}\\[.5em]
+
+Cette simple option sera alors passée à toutes les extensions qui ont prévu
+une traduction en français ; la première de ces extensions étant \textit{frenchle}
+elle-même .
+Vous pouvez, bien sûr, à tout moment modifier la traduction des libellés de
+votre choix en redéfinissant les macros-instructions mais il est préférable de le
+faire avant le \texttt{{\backslash}begin\{document\}}.
+
+\noindent
+\begin{minipage}{\textwidth}
+\begin{center} %=============================
+\textit{Texte source}\\[.5ex]
+{\large
+\begin{boxedverbatim}
+\fraddto\captionsfrench{\def\figurename{Figurine}}
+\begin{figure}
+ \begin{tabular}{|c|}
+ \hline
+ \centerline{Peu importe la figurine.}\\
+ \hline
+\end{tabular}
+\caption{Une nouvelle figurine}
+\end{figure}
+\end{boxedverbatim}
+}\\[.5em]
+\end{center}
+\end{minipage}
+\begin{center}
+\setcounter{mpfootnote}{1} %- - - - - - - - - - - - - - - - - - - - - - - - counter mpfootnote
+\renewcommand{\thempfootnote}{\arabic{mpfootnote}}
+\parbox{60mm}{
+\begin{center}
+\textit{Composition standard}
+\fbox{\begin{minipage}{55mm}
+\nofrenchtypography\nofrenchlayout{
+\noindent
+\rule{0pt}{1pt}\hfill \fbox{
+\large Peu importe la figurine}\hfill\rule{0pt}{1pt}\\
+}
+\rule{0pt}{1pt}\hfill\rule{0pt}{1.5em} Figure 1: Une nouvelle figurine\hfill\rule{0pt}{1pt}\\
+\end{minipage}
+}%
+\end{center}
+}%
+\parbox{65mm}{
+\begin{center}
+\textit{Composition avec frenchle}
+\fbox{
+\begin{minipage}{60mm}
+\hfill\fbox{\large Peu importe la figurine}\hfill\rule{0pt}{1pt}\\[1em]
+\centerline{{Figurine} 1 -- \textit{Une nouvelle figurine }}\\
+\end{minipage}}
+\end{center}
+}
+%
+\end{center} % ===========================
+
+On notera que les définitions sont introduites simplement à la façon \TeX{} pour
+s’appliquer dans toutes les circonstances.
+
+Les titres des figures et des tableaux sont précisés avec l’ordre \texttt{{\backslash}caption} (au
+dessus dans le cas d’un tableau ; en dessous dans le cas d’une figure) comme
+dans l’exemple ci-après.
+\begin{center} %=============================
+\begin{minipage}{\textwidth}
+\begin{center}
+\textit{Texte source}\\[.5em]
+{%\large
+\begin{boxedverbatim}
+\begin{figure}
+ \begin{tabular}{|c|}
+ \hline
+ \centerline{Peu importe la figure.}\\
+ \hline
+ \end{tabular}
+\caption{Une figure explicative}
+\end{figure}
+
+\begin{table}
+\caption{Exemple de tableau}\medskip
+ \begin{tabular}{|c|}
+ \hline
+ \centerline{Peu importe le tableau.}\\
+ \hline
+ \end{tabular}
+\end{table}
+\end{boxedverbatim}
+}
+\\[.5em]
+\end{center}
+\end{minipage}%{\textwidth}
+\setcounter{mpfootnote}{1} %- - - - - - - - - - - - - - - - - - - - - - - - counter mpfootnote
+\renewcommand{\thempfootnote}{\arabic{mpfootnote}}
+\parbox{70mm}{
+\begin{center}
+\textit{Composition standard}
+\fbox{\begin{minipage}{65mm}
+\nofrenchtypography\nofrenchlayout{
+\noindent
+\rule{0pt}{1pt}\hfill \fbox{
+ \hspace{2em}Peu importe la figure\hspace{2em}}\hfill\rule{0pt}{1pt}\\
+}
+\rule{0pt}{1pt}\hfill\rule{0pt}{1.5em} Figure 1: Une figure explicative\hfill\rule{0pt}{1pt}\\[3em]
+\rule{0pt}{1pt}\hfill\rule{0pt}{1.5em} Table 1: Exemple de tableau\hfill\rule{0pt}{1pt}\\
+\rule{0pt}{1pt}\hfill \fbox{
+ \hspace{2em}Peu importe le tableau.\hspace{2em}}\hfill\rule{0pt}{1pt}
+\end{minipage}
+}%
+\end{center}
+}%
+\parbox{70mm}{
+\begin{center}
+\textit{Composition avec frenchle}
+\fbox{
+\begin{minipage}{65mm}
+\hfill\fbox{\hspace{1em}Peu importe la figure\hspace{1em}}\hfill\rule{0pt}{1pt}\\[.75em]
+\centerline{\textsc{Fig.} 1 -- \textit{Une figure explicative }}\\[3.65em]
+\centerline{\textsc{Tab.} 1 -- \textit{Exemple de tableau }}\\[.05em]
+\rule{0pt}{1pt}\hfill\fbox{\hspace{2em}Peu importe le tableau\hspace{2em}}\hfill\rule{0pt}{1pt}
+\end{minipage}}
+\end{center}
+}
+%
+\end{center} % ===========================
+
+La composition de ces titres est contrôlée avec l’aide des ordres
+\texttt{{\backslash}captionfont}\index{captionfont@\verb'\captionfont'}
+et\\ \texttt{{\backslash}captionseparator}\index{captionseparator@\verb'\captionseparator'} :
+
+\begin{center} %=============================
+\textit{Texte source}\\[1ex]
+\begin{boxedverbatim}
+\renewcommand{\captionfont}{\upshape
+ \bfseries\selectfont}
+\renewcommand{\captionseparator}{$\Rightarrow$}
+
+\begin{figure}
+\begin{tabular}{|c|}
+\hline
+\centerline{Peu importe la figure.}\\
+\hline
+\end{tabular}
+\caption{Une figure explicative}
+\end{figure}
+\end{boxedverbatim}
+\\[.5em]
+\setcounter{mpfootnote}{1} %- - - - - - - - - - - - - - - - - - - - - - - - counter mpfootnote
+\renewcommand{\thempfootnote}{\arabic{mpfootnote}}
+\parbox{70mm}{
+\begin{center}
+\textit{Composition standard}
+\fbox{\begin{minipage}{65mm}
+\nofrenchtypography\nofrenchlayout{
+\noindent
+\rule{0pt}{1pt}\hfill \fbox{
+\hspace{2em}Peu importe la figure.\hspace{2em}}\hfill\rule{0pt}{1pt}\\
+}
+\rule{0pt}{1pt}\hfill\rule{0pt}{1.5em} Figure 1: Une figure explicative\hfill\rule{0pt}{1pt}\\
+\end{minipage}
+}%
+\end{center}
+}%
+\parbox{70mm}{
+\begin{center}
+\textit{Composition avec frenchle}
+\fbox{
+\begin{minipage}{65mm}
+\hfill\fbox{\hspace{2em}Peu importe la figure\hspace{2em}}\hfill\rule{0pt}{1pt}\\[1em]
+\centerline{\textsc{Fig.} 1$\Rightarrow$ \textbf{Une figure explicative }}\\
+\end{minipage}}
+\end{center}
+}
+%
+\end{center} % ===========================
+
+\pagebreak
+Tous les effets précédents sont contrôlés par les ordres
+\texttt{{\backslash}frenchtypography}\index{frenchtypography@\verb'\frenchtypography'}
+et \texttt{{\backslash}frenchtrans\-lation} \index{frenchtranslation@\verb'\frenchtranslation'}
+( et leurs inverses \texttt{{\backslash}nofrenchtypography}
+\index{nofrenchtypography@\verb'\nofrenchtypography'}
+et \texttt{{\backslash}nofrench\-translation)} ; \index{nofrenchtranslation@\verb'\nofrenchtranslation'}
+faisons un essai avec \texttt{{\backslash}nofrenchtranslation} :
+\begin{center} %=============================
+\begin{minipage}{\textwidth}
+\begin{center} %=============================
+\textit{Texte source}\\
+\begin{boxedverbatim}
+{\nofrenchtranslation
+ \begin{table}
+ \caption{Titres divers}\medskip
+ \begin{tabular}{|c|c|}
+ \hline
+ \verb|\tablename| & \tablename \\
+ \verb|\appendixname| & \appendixname \\
+ \verb|\figurename| & \figurename \\
+ \verb|\abstractname| & \abstractname \\
+ \verb|\contentsname| & \contentsname \\
+ \hline
+ \end{tabular}
+ \end{table}
+}
+\end{boxedverbatim}
+\end{center}
+\end{minipage}
+\\[.5em]
+\setcounter{mpfootnote}{1} %- - - - - - - - - - - - - - - - - - - - - - - - counter mpfootnote
+\renewcommand{\thempfootnote}{\arabic{mpfootnote}}
+
+\noindent
+\parbox{70mm}{
+\begin{center}
+\textit{Composition standard} \small \nofrenchtranslation
+\begin{tabular}{|@{}c|c|c|@{}c|}\hline
+\multicolumn{4}{|c|} {\rule{0pt}{1.2em}Table 1: Titres divers}\\[.2em]\cline{2 - 3}
+\rule{0pt}{1.2em}&\tt{\backslash}tablename & \tablename&\\
+&\tt{\backslash}appendixname & \appendixname& \\
+&\tt{\backslash}figurename& \figurename&\\
+&\tt{\backslash}abstractname&\abstractname&\\
+&\tt{\backslash}contentsname&\contentsname&\\\cline{2 - 3}
+\multicolumn{4}{|c|}{}\\\hline
+\end{tabular}
+\end{center}
+}%
+\parbox{70mm}{
+\begin{center}
+\textit{Composition avec frenchle} \small \nofrenchtranslation
+\begin{tabular}{|@{}c|c|c|@{}c|}\hline
+\multicolumn{4}{|c|} {\rule{0pt}{1.2em}Table 1: \textit{Titres divers}}\\[.2em]\cline{2 - 3}
+\rule{0pt}{1.2em}&\tt{\backslash}tablename & \tablename&\\
+&\tt{\backslash}appendixname & \appendixname& \\
+&\tt{\backslash}figurename& \figurename&\\
+&\tt{\backslash}abstractname&\abstractname&\\
+&\tt{\backslash}contentsname&\contentsname&\\\cline{2 - 3}
+\multicolumn{4}{|c|}{}\\\hline
+\end{tabular}\end{center}
+}
+%
+\end{center} % ===========================
+
+et maintenant mettons simplement \verb'\nofrenchtypography'\index{nofrenchtypography@\verb'\nofrenchtypography'}
+pour voir quel effet
+cela produit sur le même tableau ; il va falloir ouvrir l’œil !
+\begin{center} %=============================
+\begin{minipage}{\textwidth}
+\begin{center}
+\textit{Texte source}\\
+\begin{boxedverbatim}
+{\nofrenchtypography
+ \begin{table}
+ \caption{Titres divers}\medskip
+ \begin{tabular}{|c|c|}
+ \hline
+ \verb|\tablename| & \tablename \\
+ \verb|\appendixname| & \appendixname \\
+ \verb|\figurename| & \figurename \\
+ \verb|\abstractname| & \abstractname \\
+ \verb|\contentsname| & \contentsname \\
+ \hline
+ \end{tabular}
+ \end{table}
+}
+\end{boxedverbatim}
+\\[.5em]
+\end{center}
+\end{minipage}%{\textwith}
+\setcounter{mpfootnote}{1} %- - - - - - - - - - - - - - - - - - - - - - - - counter mpfootnote
+\renewcommand{\thempfootnote}{\arabic{mpfootnote}}
+
+\noindent
+\parbox{70mm}{
+\begin{center} \nofrenchtypography
+\textit{Composition standard} \small \nofrenchtranslation
+\begin{tabular}{|@{}c|c|c|c@{}|}\hline
+\multicolumn{4}{|c|} {\rule{0pt}{1.2em}Table 1: Titres divers}\\[.2em]\cline{2 - 3}
+\rule{0pt}{1.2em}&\tt{\backslash}tablename & \tablename&\\
+&\tt{\backslash}appendixname & \appendixname& \\
+&\tt{\backslash}figurename& \figurename&\\
+&\tt{\backslash}abstractname&\abstractname&\\
+&\tt{\backslash}contentsname&\contentsname&\\\cline{2 - 3}
+\multicolumn{4}{|c|}{}\\\hline
+\end{tabular}
+\end{center}
+}%
+\parbox{70mm}{
+\begin{center} \nofrenchtypography
+\textit{Composition avec frenchle} \small
+\begin{tabular}{|@{}c|c|c|c@{}|}\hline
+\multicolumn{4}{|c|} {\rule{0pt}{1.2em}\textsc{Tab.} %Table
+1: {Titres divers}}\\[.2em]\cline{2 - 3}
+\rule{0pt}{1.2em}&\tt{\backslash}tablename & \tablename&\\
+&\tt{\backslash}appendixname & \appendixname& \\
+&\tt{\backslash}figurename& \figurename&\\
+&\tt{\backslash}abstractname&\abstractname&\\
+&\tt{\backslash}contentsname&\contentsname&\\\cline{2 - 3}
+\multicolumn{4}{|c|}{}\\\hline
+\end{tabular}\end{center}
+}
+%
+\end{center} % ===========================
+%\subparagraph
+{\textbf{ Remarque de B. \textsc{Gaulle}}} Avez-vous trouvé où la
+\texttt{{\backslash}frenchtypography}\index{frenchtypography@\verb'\frenchtypography'}
+n’est pas appliquée ici ?
+ Bravo !
+
+{\footnotesize Je vous le dis en passant : il
+\maj s'agit du deux-points après le numéro (1:) de la table. (\textsc{Tab.} 1:)}
+\subsection{La mise en page}
+L’extension \textit{frenchle} modifie la mise en page de \LaTeX.\index{mise en page} Premier exemple :
+avec \LaTeX, par défaut, tous les débuts de paragraphes sont mis en retrait de
+la marge, sauf pour les premiers paragraphes de partie, chapitre, section, etc.
+L’extension \textit{frenchle} corrige ce problème :\\[1em]
+\begin{center} %=============================
+\begin{minipage}{\textwidth}
+\begin{center}
+\textit{Texte source}\\
+\begin{boxedverbatim}
+\section{Nouvelle section}
+Le premier paragraphe débute ainsi.
+Ceci est un texte de remplissage sans
+intérêt.
+
+Le second paragraphe débute ainsi.
+Ceci est un texte de remplissage sans
+intérêt.
+\end{boxedverbatim}
+\\[.5em]
+\end{center}
+\end{minipage}
+\setcounter{mpfootnote}{1} %- - - - - - - - - - - - - - - - - - - - - - - - counter mpfootnote
+\renewcommand{\thempfootnote}{\arabic{mpfootnote}}
+\noindent
+\parbox{70mm}{
+\begin{center} \nofrenchtypography
+\textit{Composition standard} \small
+\end{center}
+\fbox{
+\begin{minipage}{60mm}
+{\Large \bf 1\hspace{.5em} Nouvelle section}\\
+\rule{0pt}{2.1em}Le premier paragraphe débute ainsi.
+Ceci est un texte de remplissage sans
+intérêt.
+
+\hspace*{1.5em}Le second paragraphe débute ainsi.
+Ceci est un texte de remplissage sans
+intérêt.
+\end{minipage}
+}
+}%
+\parbox{70mm}{
+\begin{center} \frenchtypography \frenchlayout
+\textit{Composition avec frenchle} \small
+\end{center}
+\fbox{
+\begin{minipage}{60mm}
+{\Large \bf 1\hspace{.5em} Nouvelle section}\\
+\hspace*{1.5em\rule{0pt}{2.1em}}Le premier paragraphe débute ainsi.
+Ceci est un texte de remplissage sans
+intérêt.
+
+\hspace*{1.5em}Le second paragraphe débute ainsi.
+Ceci est un texte de remplissage sans
+intérêt.
+\end{minipage}
+}
+}\\[1.5em]
+%
+\end{center} % ===========================
+
+Si vous souhaitez, pour d’autres besoins, utiliser l’extension \texttt{titlesec}, alors
+\textit{frenchle} adoptera les options (\texttt{indentfirst}\index{indentfirst@\verb'\indentfirst'}
+ou \texttt{nonindentfirst}\index{nonindentfirst@\verb'\nonindentfirst'}) par défaut ou
+précisées au chargement de l’extension.
+
+Avec l’extension \textit{frenchle} la mise en page des listes est différente au niveau
+des marqueurs et des espacements verticaux :
+\begin{center} %=============================
+\begin{minipage}{\textwidth}
+\begin{center} %=============================
+\textit{Texte source}\\[.5ex]
+\begin{boxedverbatim}
+La liste se compose de :
+\begin{itemize}
+\item premier élément de la liste ;
+\item deuxième élément ;
+ \begin{itemize}
+ \item sous-élément ...
+ \end{itemize}
+\item dernier élément.
+\end{itemize}
+\end{boxedverbatim}
+\\[.5em]
+\end{center}
+\end{minipage}
+\setcounter{mpfootnote}{1} %- - - - - - - - - - - - - - - - - - - - - - - - counter mpfootnote
+\renewcommand{\thempfootnote}{\arabic{mpfootnote}}
+\noindent
+\frlabelitems{\renewcommand{\labelitemi}{--}%
+\renewcommand{\labelitemii}{--}%
+\renewcommand{\labelitemiii}{--}%
+}
+\parbox[t]{65mm}{
+\begin{center} \nofrenchtypography \nofrenchlayout \english
+\textit{Composition standard} \small
+\end{center}
+\fbox{ \nofrenchtrivsep
+\begin{minipage}{55mm}
+La liste se compose de :
+\begin{itemize}
+\item [\textbullet]premier élément de la liste ;
+\item [$\bullet$]deuxième élément ;
+\begin{itemize}
+\item [--]sous-élément ...
+\end{itemize}
+\item [$\bullet$]dernier élément.
+\end{itemize}
+\end{minipage}
+}
+}%
+%\renewcommand{\FrenchLabelItem}{\textemdash}
+%\frlabelitems{\renewcommand{\labelitemi}{--}%
+%\renewcommand{\labelitemii}{--}%
+%\renewcommand{\labelitemiii}{--}}%
+\parbox[t]{65mm}{
+\begin{center} \frenchtypography \frenchlayout
+\textit{Composition avec frenchle} \small
+\end{center}
+\fbox{
+\begin{minipage}{55mm}
+La liste se compose de :
+\begin{itemize}
+\item premier élément de la liste ;
+\item deuxième élément ;
+\begin{itemize}
+\item sous-élément ...
+\end{itemize}
+\item dernier élément.
+\end{itemize}
+
+\end{minipage}
+}
+}\\[1.5em]
+%
+\end{center} % ===========================
+
+Les espacements verticaux sont gérés par les ordres \\
+\texttt{\backslash{}frenchtrivsep}\index{frenchtrivsep@\verb'\frenchtrivsep'} et
+\texttt{\backslash{}nofrenchtrivsep}\index{nofrenchtrivsep@\verb'\nofrenchtrivsep'} :
+
+\begin{center} %=============================
+\textit{Texte source}\\[1ex]
+\begin{boxedverbatim}
+{\nofrenchtrivsep
+
+La liste se compose de :
+\begin{itemize}
+\item premier élément de la liste ;
+\item deuxième élément ;
+\item dernier élément.
+\end{itemize}
+}
+\end{boxedverbatim}
+\\[.5em]\setcounter{mpfootnote}{1} %- - - - - - - - - - - - - - - - - - - - - - - - counter mpfootnote
+\renewcommand{\thempfootnote}{\arabic{mpfootnote}}
+\noindent
+\frlabelitems{\renewcommand{\labelitemi}{--}%
+\renewcommand{\labelitemii}{--}%
+\renewcommand{\labelitemiii}{--}%
+}
+\parbox[t]{65mm}{
+\begin{center} \nofrenchtypography \nofrenchlayout \english
+\textit{Composition standard} \small
+\end{center}
+\fbox{ \nofrenchtrivsep
+\begin{minipage}{55mm}
+La liste se compose de :
+\begin{itemize}
+\item [$\bullet$]premier élément de la liste ;
+\item [$\bullet$]deuxième élément ;
+%\begin{itemize}
+%\item [--]sous-élément ...
+%\end{itemize}
+\item [$\bullet$]dernier élément.
+\end{itemize}
+\end{minipage}
+}
+}%
+%\renewcommand{\FrenchLabelItem}{\textemdash}
+%\frlabelitems{\renewcommand{\labelitemi}{--}%
+%\renewcommand{\labelitemii}{--}%
+%\renewcommand{\labelitemiii}{--}}%
+\parbox[t]{65mm}{
+\begin{center} \frenchtypography \frenchlayout
+\textit{Composition avec frenchle} \small
+\end{center}
+\fbox{\nofrenchtrivsep
+\begin{minipage}{55mm}
+La liste se compose de :
+\begin{itemize}
+\item premier élément de la liste ;
+\item deuxième élément ;
+%\begin{itemize}
+%\item sous-élément ...
+%\end{itemize}
+\item dernier élément.
+\end{itemize}
+
+\end{minipage}
+}
+}\\[1.5em]
+%
+\end{center} % ===========================
+
+Les valeurs d’espacement sont appliqués par \textit{frenchle} à tous les environnements
+de liste, de façon homogène. À chaque fois que vous essaierez de modifier
+la valeur de ces dimensions (ou qu’une extension le fera à votre place) vous serez
+pévenu par \textit{frenchle} que celà n’est pas possible de la sorte. L’affichage de ces
+messages\index{messages} d’avertissement est contôlé par les ordres
+\verb|\frenchtrivsepwarnings|\index{frenchtrivsepwarnings@\verb'\frenchtrivsepwarnings'}
+et \verb|\nofrenchtrivsepwarnings|\index{nofrenchtrivsepwarnings@\verb'\nofrenchtrivsepwarnings'}.
+
+Vous pouvez choisir vos propres valeurs d’espacement dans les listes en
+utilisant l’ordre \\\verb|\frtrivseplengths| et dans ce cas les messages d’avertisssement
+précités ne sont plus émis (sauf à
+rajouter \verb|\frenchtrivsepwarnings|\index{frenchtrivsepwarnings@\verb'\frenchtrivsepwarnings'}
+dans \verb|\frtrivseplengths|)\index{frtrivseplengths@\verb'\frtrivseplengths'}
+ ; l’exemple suivant vous le démontre.
+
+\begin{center} %=============================
+\textit{Texte source}\\[1ex]
+\begin{boxedverbatim}
+\frtrivseplengths{%
+ \setlength{\parsep}{0.1ex plus 0.1ex minus 0.1ex}%
+ \setlength{\itemsep}{0.1ex plus 0.1ex minus 0.1ex}%
+ \setlength{\topsep}{0.2ex plus 0.2ex minus 0.2ex}%
+ \setlength{\partopsep}{0.8ex plus 0.8ex minus 0.8ex}%
+ }
+
+La liste se compose de :
+\begin{itemize}
+\item premier élément de la liste ;
+\item deuxième élément ;
+\item dernier élément.
+\end{itemize}
+\end{boxedverbatim}
+\setcounter{mpfootnote}{1} %- - - - - - - - - - - - - - - - - - - - - - - - counter mpfootnote
+\renewcommand{\thempfootnote}{\arabic{mpfootnote}}
+\noindent
+\frlabelitems{\renewcommand{\labelitemi}{--}%
+\renewcommand{\labelitemii}{--}%
+\renewcommand{\labelitemiii}{--}%
+}
+\parbox[t]{65mm}{
+\begin{center} \nofrenchtypography \nofrenchlayout \english
+\textit{Composition standard} \small
+\end{center}
+\fbox{ \nofrenchtrivsep
+\begin{minipage}{55mm}
+La liste se compose de :
+\begin{itemize}
+\item [$\bullet$]premier élément de la liste ;
+\item [$\bullet$]deuxième élément ;
+%\begin{itemize}
+%\item [--]sous-élément ...
+%\end{itemize}
+\item [$\bullet$]dernier élément.
+\end{itemize}
+\end{minipage}
+}
+}%
+%\renewcommand{\FrenchLabelItem}{\textemdash}
+%\frlabelitems{\renewcommand{\labelitemi}{--}%
+%\renewcommand{\labelitemii}{--}%
+%\renewcommand{\labelitemiii}{--}}%
+\parbox[t]{65mm}{
+\begin{center} \frenchtypography \frenchlayout
+\textit{Composition avec frenchle} \small
+\end{center}
+\fbox{%\nofrenchtrivsep
+\begin{minipage}{55mm}
+\frtrivseplengths{%
+\setlength{\parsep}{0.1ex plus 0.1ex minus 0.1ex}%
+\setlength{\itemsep}{0.1ex plus 0.1ex minus 0.1ex}%
+\setlength{\topsep}{0.2ex plus 0.2ex minus 0.2ex}%
+\setlength{\partopsep}{0.8ex plus 0.8ex minus 0.8ex}%
+}
+
+La liste se compose de :
+\begin{itemize}
+\item premier élément de la liste ;
+\item deuxième élément ;
+%\begin{itemize}
+%\item sous-élément ...
+%\end{itemize}
+\item dernier élément.
+\end{itemize}
+
+\end{minipage}
+}
+}\\[1.5em]
+%
+\end{center} % ===========================
+
+Vous pouvez aussi changer les marqueurs de liste en faisant appel à la
+commande spéciale \verb|\frlabelitems|\index{frlabelitems@\verb'\frlabelitems'} comme dans l’exemple (sans aucun intérêt typographique)
+suivant :
+
+\begin{center} %=============================
+\begin{minipage}{\textwidth}
+\begin{center} %=============================
+\textit{Texte source}\\\index{labelitemi@\verb'\labelitemi'}\index{labelitemii@\verb'\labelitemii'}\index{labelitemiii@\verb'\labelitemiii'}
+\begin{boxedverbatim}
+\frlabelitems{\renewcommand{\labelitemi}{*}%
+ \renewcommand{\labelitemii}{**}%
+ \renewcommand{\labelitemiii}{***}%
+ }
+La liste se compose de :
+\begin{itemize}
+\item premier élément de la liste ;
+ \begin{itemize}
+ \item sous-élément ...
+ \end{itemize}
+\item dernier élément.
+\end{itemize}
+\end{boxedverbatim}
+\end{center}
+\end{minipage}
+\setcounter{mpfootnote}{1} %- - - - - - - - - - - - - - - - - - - - - - - - counter mpfootnote
+\renewcommand{\thempfootnote}{\arabic{mpfootnote}}
+\noindent
+\parbox[t]{65mm}{
+\begin{center} \nofrenchtypography \nofrenchlayout \english
+\textit{Composition standard} \small
+\end{center}
+\fbox{ \nofrenchtrivsep
+\begin{minipage}{55mm}
+\frlabelitems{\renewcommand{\labelitemi}{*}%
+\renewcommand{\labelitemii}{**}%
+\renewcommand{\labelitemiii}{***}%
+ }
+La liste se compose de :
+\begin{itemize}
+\item [\textbullet]premier élément de la liste ;
+\item [$\bullet$]deuxième élément ;
+\begin{itemize}
+\item [--]sous-élément ...
+\end{itemize}
+\item [$\bullet$]dernier élément.
+\end{itemize}
+\end{minipage}
+}
+}%
+\parbox[t]{65mm}{
+\begin{center} \frenchtypography \frenchlayout
+\textit{Composition avec frenchle} \small
+\end{center}
+\fbox{
+\begin{minipage}{55mm}
+\frlabelitems{\renewcommand{\labelitemi}{*}%
+\renewcommand{\labelitemii}{**}%
+\renewcommand{\labelitemiii}{***}%
+}
+La liste se compose de :
+\begin{itemize}
+\item premier élément de la liste ;
+\item deuxième élément ;
+\begin{itemize}
+\item sous-élément ...
+\end{itemize}
+\item dernier élément.
+\end{itemize}
+
+\end{minipage}
+}
+}\\[1.5em]
+%
+\end{center} % ===========================
+\frlabelitems{\renewcommand{\labelitemi}{--}%
+\renewcommand{\labelitemii}{--}%
+\renewcommand{\labelitemiii}{--}%
+}
+
+
+L’extension \textit{frenchle} s’adapte à la classe de document demandée ; la mise
+en page peut donc être extrêmement différente, voici un exemple avec la classe
+\texttt{letter}\index{classe!letter@\texttt{letter}} :
+\begin{center} %=============================
+\textit{Texte source}\\[1ex]
+\begin{boxedverbatim}
+\address{B. \textsc{Gaulle}\\ Mon adresse}
+\begin{letter}
+ {M. Dupond\\
+ 17, rue St. \’Eloi\\
+ 24140 La Monzie Montastruc}
+
+ \opening{Cher Monsieur X,}
+
+ La documentation est là !
+
+ \closing{Bonne lecture.}
+ \cc{Monsieur le directeur Y}
+ \encl{lettre du ministre Z}
+\end{letter}
+\end{boxedverbatim}
+
+\noindent
+\parbox[t]{66mm}{
+\begin{center} \nofrenchtypography \nofrenchlayout \english
+\textit{Composition standard}
+\end{center}
+\fbox{ \nofrenchtrivsep
+\begin{minipage}{61mm} \scriptsize
+\begin{flushright}
+\begin{tabular}{l@{}}
+B. \textsc{Gaulle}\\
+ Mon adresse\\[2ex]
+April 28, 2012
+\end{tabular}
+\end{flushright}
+{M. Dupond\\
+17, rue St.Éloi\\
+24140 La Monzie Montastruc}\\[1.5ex]
+
+{Cher Monsieur X,}\\[-.5ex]
+
+La documentation est là !\\[1ex]
+%\rule{0pt}{1pt}\hfill\hfill{Bonne lecture.}\hfill\rule{0pt}{1pt}\\
+\centerline{\phantom{Bonne lecture.}Bonne lecture.}\\[11ex]
+cc: Monsieur le directeur Y\\[.5ex]
+encl: lettre du ministre Z
+\end{minipage}
+}
+}%
+\parbox[t]{66mm}{
+\begin{center} \frenchtypography \frenchlayout
+\textit{Composition avec frenchle}
+\end{center}
+\fbox{
+\begin{minipage}{61mm}\scriptsize
+B. \textsc{Gaulle}\\
+ Mon adresse\\[-2.5ex]
+\begin{flushright}
+\begin{tabular}{l@{}}
+M. Dupond\\
+17, rue St.Éloi\\
+24140 La Monzie Montastruc\\[6ex]
+Le 28 avril 2012\\[3.5ex]
+\end{tabular}
+\end{flushright}
+\rule{3em}{0pt}Cher Monsieur X,\\[5ex]
+\rule{5em}{0pt}La documentation est là !\\[2ex]
+\rule{5em}{0pt}Bonne lecture.\\[15ex]
+c.c. : Monsieur le directeur Y\\
+P. j. : lettre du ministre Z
+\end{minipage}
+}
+}\\[1.5em]
+%
+\end{center} % ===========================
+
+Bien entendu, l’adresse de l’expéditeur doit se retrouver dans la fenêtre de
+l’enveloppe.\\
+
+\MAJ Remarque d'un utilisateur suisse : la région alémanique qui utilisait
+ dans le passé le même format que
+ la France suit de plus en plus la norme DIN (allemande) qui resssemble à la composition standard.
+ Malheureusement, nous nous sentons peu à peu envahis du côté francophone par cette norme peu habituelle
+pour nous.\endMAJ
+
+Avec la classe \texttt{book}\index{classe!book@\texttt{book}} \textit{frenchle} s’efforce de maintenir la numérotation des
+pages au même endroit tout au long du document (contrairement à \LaTeX) ; par
+ailleurs la mise en page du titre courant et des débuts de partie sont différentes :
+
+\begin{center} %=============================
+\textit{Texte source}\\[1ex]
+\begin{boxedverbatim}
+\chapter{Nouveau chapitre}
+
+\section{Nouvelle section}
+
+Il était une fois dans la villle de Foix un ...
+\end{boxedverbatim}
+
+\noindent
+\parbox[t]{66mm}{
+\begin{center} \frenchtypography \frenchlayout
+\textit{Composition standard}
+\end{center}
+\fbox{
+\begin{minipage}{61mm} %\scriptsize
+\vspace{7ex}
+{\large\textbf{Chapter 2\\[1ex]
+Nouveau chapitre}}\\[3ex]
+\textbf{2.1.\hspace{1em} Nouvelle section}\\[1ex]
+{\tiny Il était une fois dans la villle de Foix un ...}\\[5.5ex]
+\begin{center}
+{\tiny {3}}
+\end{center}
+\end{minipage}
+}
+}%
+\parbox[t]{66mm}{
+\begin{center}
+\textit{Composition avec frenchle}
+\end{center}
+\fbox{
+\begin{minipage}{61mm}%\scriptsize
+%\centerline{\tiny \textsc{CHAPITRE 2\hspace{2em}NOUVEAU CHAPITRE}}
+{\tiny \rule{1em}{0pt}\hfill 3\rule{1em}{0pt}}\\[6ex]
+{\large\textbf{Chapitre 2\\[1ex]
+Nouveau chapitre}}\\[3ex]
+\textbf{2.1.\hspace{1em} Nouvelle section}\\[1ex]
+\rule{2ex}{0pt}{\tiny Il était une fois dans la villle de Foix un ...}\\[8ex]
+\rule{1em}{0pt}
+\end{minipage}%\\[1.5em]
+}
+}
+\end{center} % ===========================
+
+À chaque changement de partie la numérotation des chapitres est remise à
+zéro ; si vous ne le souhaitez pas il suffit de coder \verb|\noresetatpart|\index{noresetatpart@\verb'\noresetatpart'}.
+
+Dans le même registre, \LaTeX{} remet à zéro le compteur de notes de bas de
+page à chaque chapitre ; si vous ne le souhaitez pas il suffit alors de coder l’ordre
+\verb|\noresetatchapter|\index{noresetatchapter@\verb'\noresetatchapter'}.\\
+
+L’extension \textit{frenchle} tient compte aussi des styles ou classes de documents
+de l’AMS\index{classe!amsbook@\texttt{amsbook}} :
+
+\begin{center} %=============================
+\textit{Texte source}\\[1ex]
+\begin{boxedverbatim}
+\chapter{Nouveau chapitre avec amsbook}
+
+\section{Nouvelle section}
+
+Il était une fois un livre que
+j’avais composé avec amour ...
+\end{boxedverbatim}
+
+\noindent
+\parbox[t]{66mm}{
+\begin{center} \frenchtypography \frenchlayout
+\textit{Composition standard}
+\end{center}
+\fbox{
+\begin{minipage}{61mm} %\scriptsize \tinySMALL
+\begin{center}
+{\scriptsize \textsc CHAPTER 2}\\[5ex]
+\textbf{Nouveau chapitre avec amsbook}\\[3ex]
+\textbf{\small 1.\hspace{1em} Nouvelle section}\\[.5ex]
+\end{center}
+{\scriptsize Il était une fois un livre que
+j’avais composé avec amour ...}\\[9ex]
+\centerline{\tiny 3}
+\end{minipage}
+}
+}%
+\parbox[t]{66mm}{
+\begin{center}
+\textit{Composition avec frenchle}
+\end{center}
+\fbox{
+\begin{minipage}{61mm}%\scriptsize
+{\tiny \hfill 1.\hspace{1em}NOUVELLE SECTION\hfill{3}}\\[7ex]
+\begin{center}
+CHAPITRE 2\\[3ex]
+\textbf{Nouveau chapitre avec amsbook}\\[1ex]
+\textbf{\small 1.\hspace{1em} Nouvelle section}\\[1ex]
+\end{center}
+{\scriptsize Il était une fois un livre que
+j’avais composé avec amour ...}
+\end{minipage}
+}
+}%\\[1.5em]
+%
+\end{center} % ===========================
+\vspace{1ex}
+
+Toute la mise en page et différentes choses dont on a déjà parlé (comme les
+notes dans les tables et les notes consécutives) sont en fait contrôlées par les
+ordres \verb|\frenchlayout| (qui est l’option par défaut)\index{frenchlayout@\verb'\frenchlayout'}
+ et \verb|\nofrenchlayout| ; \index{nofrenchlayout@\verb'\nofrenchlayout'}
+voici à nouveau l’exemple avec la classe \texttt{letter}\index{classe!letter@\texttt{letter}} :
+\begin{center} %=============================
+\begin{minipage}{\textwidth}
+\begin{center}
+\textit{Texte source}\\[1ex]
+\begin{boxedverbatim}
+\nofrenchlayout
+\address{B. \textsc{Gaulle}}
+\begin{letter}
+{M. Dupond\\
+17, rue St. \’Eloi\\
+24140 La Monzie Montastruc}
+
+\opening{Cher Monsieur X,}
+
+La documentation est là !
+
+\closing{Bonne lecture.}
+\cc{Monsieur le directeur Y}
+\encl{lettre du ministre Z}
+\end{letter}
+\end{boxedverbatim}
+\end{center}
+\end{minipage}
+
+\noindent
+\parbox[t]{66mm}{
+\begin{center} \nofrenchtypography \nofrenchlayout \english
+\textit{Composition standard}
+\end{center}
+\fbox{ \nofrenchtrivsep
+\begin{minipage}{61mm} \scriptsize
+\begin{flushright}
+\begin{tabular}{l@{}}
+B. \textsc{Gaulle}\\
+ \\[2ex]
+April 28, 2012
+\end{tabular}
+\end{flushright}
+{M. Dupond\\
+17, rue St.Éloi\\
+24140 La Monzie Montastruc}\\[1.5ex]
+
+{Cher Monsieur X,}\\[-.5ex]
+
+La documentation est là !\\[1ex]
+%\rule{0pt}{1pt}\hfill\hfill{Bonne lecture.}\hfill\rule{0pt}{1pt}\\
+\centerline{\phantom{Bonne lecture.}Bonne lecture.}\\[11ex]
+cc: Monsieur le directeur Y\\[.5ex]
+encl: lettre du ministre Z
+\end{minipage}
+}
+}%
+\parbox[t]{66mm}{
+\begin{center} \frenchtypography \frenchlayout
+\textit{Composition avec frenchle}
+\end{center}
+\fbox{
+\begin{minipage}{61mm}\scriptsize
+\begin{flushright}
+\begin{tabular}{l@{}}
+B. \textsc{Gaulle}\\
+ \\[2ex]
+28 avril 2012
+\end{tabular}
+\end{flushright}
+{M. Dupond\\
+17, rue St.Éloi\\
+24140 La Monzie Montastruc}\\[1.5ex]
+
+{Cher Monsieur X,}\\[-.5ex]
+
+La documentation est là !\\[1ex]
+%\rule{0pt}{1pt}\hfill\hfill{Bonne lecture.}\hfill\rule{0pt}{1pt}\\
+\centerline{\phantom{Bonne lecture.}Bonne lecture.}\\[11ex]
+c.c. : Monsieur le directeur Y\\[.5ex]
+P. j. : lettre du ministre Z
+\end{minipage}
+}
+}\\[1.5em]
+%
+\end{center} % ===========================
+ \frenchtypography \frenchlayout
+
+\subsection{Le multilinguisme}\label{multilin}\label{multilingue}
+Par défaut, \textit{frenchle} est bilingue français-anglais, c’est-à-dire que vous pouvez
+composer des parties du document selon les habitudes typographiques
+françaises et d’autres à l’anglaise (ou plutôt à l’américaine). Il existe plusieurs
+méthodes pour réaliser cela :
+\begin{description}
+\item[1\iere méthode :] dès que vous souhaitez passer en anglais vous saisissez l’ordre
+\verb|\english|\index{english@\verb'\english'} et lorsque vous désirez revenir au français vous
+saisissez \verb|\french|\index{french@\verb'\french'}.
+\begin{center}
+\fbox{
+\begin{minipage}{65mm}
+\centerline{\texttt{\backslash{}english} \textit{texte en anglais} \texttt{\backslash{}french}}
+\end{minipage}
+}
+\end{center}
+\item[2\ieme méthode :] puisque le document, par défaut, est en français vous pouvez
+limiter la partie anglaise à un seul bloc \LaTeX{}:
+\begin{center}
+\fbox{
+\begin{minipage}{50mm}
+\centerline{\texttt{\{\backslash{}english} \textit{texte en anglais} \}}
+\end{minipage}
+}
+\end{center}
+%{\english texte en anglais }
+\item[3\ieme méthode :] consiste à appliquer la méthode \LaTeX{} c’est-à-dire à utiliser
+l’environnement \texttt{english} :
+\begin{center}
+\fbox{
+\begin{minipage}{40mm}
+\texttt{\backslash{}begin\{english\}}\\
+\textit{partie à l’anglaise}\\
+\texttt{\backslash{}end\{english\}}
+\end{minipage}
+}
+\end{center}
+\item[4\ieme méthode :] passer à d'autres langues.
+Ceci n'est possible qu'en utilisant \textsl{mlp}\label{meth4}
+\index{mlp}et se limitant à l'allemand :
+\begin{center}
+\fbox{
+\begin{minipage}{80mm}
+\texttt{\backslash{}documentclass[german, frenchle, ...}\\
+\texttt{\backslash{}usepackage\{{mlp}\}}\\
+\texttt{\backslash{}begin\{document\}}\\
+\vdots\\
+\texttt{\backslash{}english}\\
+\textit{partie à l’anglaise}\\
+\texttt{\backslash{}german}\\
+\textit{partie à l’allemande}\\
+\texttt{\backslash{}french}\\
+\textit{suite en français}
+\end{minipage}
+}\\[1ex]
+\end{center}
+\end{description}
+
+%\paragraph*{Méthodes 1 à 3}
+Bien entendu, tout ce que l’on vient de dire est réversible ; je veux dire que
+vous pouvez remplacer \texttt{english} par \texttt{french} si votre objectif est de composer
+seulement quelques morceaux en français.
+\paragraph*{Babel-french}\MAJ
+Il reste la possibilité d'utiliser \texttt{babel}
+(\texttt{frenchb}\index{babel@\textit{babel}!frenchb@\texttt{frenchb}} de Daniel \textsc{Flipo} pour le français)
+qui couvre sinon un très grand nombre \index{extension!babel@\verb'babel'}
+de langages .
+
+On pourrait argumenter que \texttt{frenchle} (et sa grande sœur \texttt{french}) du paquet \cefr{}
+sont concurrents de \texttt{french} pour \texttt{babel}.
+Toutefois, le but recherché n'est pas le même et la plupart des autres paquets de langues se déclinèrent sous deux versions,
+l'une indépendante et l'autre pour \texttt{babel}. C'est n'est plus aujourd'hui que le cas de l'allemand, qui d'ailleurs de
+manière semblable \texttt{frenchle} peut commuter sur l'anglais ou le français sans \texttt{babel}.
+
+\endMAJ
+
+\section{Ce que ne fait pas l'extension}
+Les versions antérieures à \LaTeXe{} ne peuvent pas être utilisées avec \textit{frenchle}.
+De même, le mode de compatibilité avec \LaTeX{} 2.09 n’est pas accepté par
+\textit{frenchle}.
+
+L’extension \textit{frenchle} ne gère pas la coupure des mots (ou césure) ; cela est\index{césure}
+un dispositif intégré à \LaTeX{} par un dispositif dérivé de \texttt{babel}\index{extension!babel@\verb'babel'}.
+Celui-ci est normalement totalement contrôlé par la gestion des langues intégrée
+à votre système (\TeX{}live ou Mik\TeX, voir aussi sous \ref{multilingue} à la page \pageref{multilingue}).
+C'est pour cette raison que la méthode 4 ci-dessus %(§ \ref{meth4})
+fonctionne.
+
+Les classes de document non standard (et a fortiori les classes « maison ») \index{classe!non standard@\textit{non standard}} %!frabbrev@\texttt{frabbrev.tex}
+ne sont pas supportées par \textit{frenchle}. En dehors de ce principe il y a la pratique
+qui est bien différente car toutes les classes de document sont en général
+« calquées » sur les classes standard de \LaTeX{} et donc respectent les méthodes
+de programmation et les structures \LaTeX{} qui sont nécessaires à \textit{frenchle}. Donc,
+beaucoup de classes de document fonctionnent bien avec l’extension \textit{frenchle}.
+
+L’extension \textit{frenchle} ne corrige pas les erreurs de \LaTeX, cela va de soi,
+quoique ... quand cela est possible nous essayons d’améliorer la situation. Ainsi, par
+exemple, \LaTeX{} a la fâcheuse habitude de perdre les notes de bas de page dans
+certaines situations (cf page \pageref{notesfigu}). Avec \textit{frenchle} vous serez prévenu en général que
+le texte de votre note n’a pas été imprimé et un message vous donne même la méthode
+pour vous en sortir. Aussi vaut-il mieux ne jamais supprimer les messages\index{messages} de
+\textit{frenchle}.
+
+L’extension \textit{frenchle} ne cherche pas à remplacer les extensions ou autres dispositifs
+efficaces qui existent par ailleurs ; citons, par exemple, l’extension \texttt{aeguill}\index{extension!aeguill@\verb'aeguill'}
+pour obtenir des guillemets francais ou l’extension \texttt{lettrine}\index{extension!lettrine@\verb'lettrine'} pour obtenir des
+grosses lettres en début de paragraphe. Notons que ces deux sujets sont traités
+entièrement par \slefr .
+Raison de plus de faire le pas vers \slefr .\index{efrench@\slefr}
+Pour faciliter le passage de \texttt{frenchb} à \textit{frenchle} le traitement des guillemets\index{guillemets}
+de \texttt{frenchb} a été introduit dans \textit{frenchle} ; on dispose ainsi des commandes \verb|\og|
+et \verb|\fg| ; voici un exemple d’utilisation :
+
+\begin{center}
+\fbox{
+\begin{minipage}{60mm}
+\texttt{\backslash{}usepackage[cm]\{aeguill\}}\\
+\vdots\\
+\texttt{\backslash{}usepackage\{frenchle\}}\\
+\texttt{\backslash{}begin\{document\}}\\
+\end{minipage}
+}
+\end{center}
+\textbf{Remarque} :
+l'appel de l'extension \texttt{\backslash{}usepackage[cm]\{aeguill\}}\index{extension!aeguill@\verb'aeguill'}
+ n'est \index{efrench@\slefr} pas nécessaire si vous utilisez le codage T1\index{codage!T1}
+de fontes (\texttt{\backslash{}usepackage[T1]\{fontenc\}}).\\
+\begin{center}
+\begin{tabular}{l|l|}
+\multicolumn{1}{c}{\textit{Texte source}}&\multicolumn{1}{c}{\textit{Composition avec frenchle}}\\\hline
+\verb|frenchle est destiné à|&\rule{0pt}{2.5ex}frenchle est destiné à\\
+\verb|\og franciser \fg\ les|&\og franciser \fg\ les\\
+\verb|documents.|&documents\\
+\verb|Les classes [...] sont|&Les classes [...] sont\\
+\verb|\og calquées \fg\ |&\og calquées \fg\ \\
+\verb|sur les classes|&sur les classes\\
+\verb|standard. [...] Les classes|&standard. [...] Les classes\rule{1em}{0pt}\\
+\verb|non-standard (et \emph{a|&non-standard (et \emph{a}\\
+\texttt{fortiori\} les classes}&\emph{fortiori} les classes\\
+\verb|\og \emph{maison} \fg)|&\og \emph{maison} \fg)\\
+\verb|etc.|&etc.\\\cline{2-2}
+\end{tabular}\\[2ex]
+\end{center}
+Ceci est une des mille et une façons d’accéder aux guillemets français. On
+notera que dans le cas présent il me faut saisir un \texttt{\backslash\textvisiblespace} après le \texttt{\backslash{}fg} s’il doit y
+avoir effectivement un espace après le guillemet fermant.
+
+\section{Ce que pourrait faire l'extension}\label{peutfaire}
+Bien d’autres choses pourraient être ajoutées à \textit{frenchle} n’hésitez pas à faire
+part de vos améliorations. Pour tester facilement ces améliorations vous pouvez
+les inclure dans le fichier de configuration appelé \textit{frenchle}.cfg. Voici un
+exemple permettant de saisir les guillemets (8bits, non utf-8) directement au clavier :
+\begin{center}
+\begin{boxedverbatim}
+% Pour utiliser les guillemets 8-bits :
+\catcode‘\« =\active\catcode‘\ »=\active
+\def« {\og\ignorespaces}\def »{\fg}
+\end{boxedverbatim}
+\rule{0pt}{1ex}\\[2ex]
+\begin{tabular}{l|l|}
+\multicolumn{1}{c}{\textit{Texte source}}&\multicolumn{1}{c}{\textit{Composition avec frenchle}}\\\hline
+\verb|frenchle est destiné à|&\rule{0pt}{2.5ex}frenchle est destiné à\\
+\texttt{« franciser » les}&« franciser » les\\
+\verb|documents.|&documents\\
+\verb|Les classes [...] sont|&Les classes [...] sont\\
+\texttt{« calquées » }&« calquées » \\
+\verb|sur les classes|&sur les classes\\
+\verb|standard. [...] Les classes|&standard. [...] Les classes\rule{1em}{0pt}\\
+\verb|non-standard (et \emph{a|&non-standard (et \emph{a}\\
+\texttt{fortiori\} les classes}&\emph{fortiori} les classes\\
+\texttt{«}\verb| \emph{maison}| \texttt{»})&\og \emph{maison} \fg)\\
+\verb|etc.|&etc.\\\cline{2-2}
+\end{tabular}\\[2ex]
+\end{center}
+
+L’avantage du fichier de configuration est que je n’ai rien à coder dans le
+préambule du document et que ces modifications s’appliqueront automatiquement
+à tous les documents utilisant \textit{frenchle} (avec une réserve dépendant de
+l’emplacement exact du fichier \texttt{frenchle.cfg}\index{fichier!frenchle.cfg@\texttt{frenchle.cfg}}).
+
+Cette action n'est pas possible dans le codage d'entrée UTF-8, mais \textsl{frenchle} et
+\textsl{french} du paquet \slefr comprennnent correctement les guillemets
+« et » sans devoir les définir dans un fichier accesoire.
+
+\section{Comment appeler \textit{frenchle} ?}
+Plusieurs méthodes existent pour faire appel à \textit{frenchle}, en voici les trois
+principales :
+\begin{description}
+\item[1\iere méthode :] demander le chargement de l’extension par l’ordre \verb|\usepackage| ;
+dans ce cas placer cet ordre le plus près de l’ordre \verb|\begin{document}|\index{classe!de document} :\\[.5em]
+\rule{0pt}{1em}\hfill\fbox{
+\begin{minipage}{90mm}
+ \backslash\texttt{documentclass}\{\textit{classe\_de\_documents}\}\\
+ \backslash\texttt{usepackage}\{\textit{extension 1} \}\\
+\rule{0.4\textwidth}{0pt} \vdots \\
+ \backslash\texttt{usepackage}\{\textit{extension n-1} \}\\
+ \backslash\texttt{usepackage}\{\texttt{frenchle}\}\\
+ \backslash\texttt{begin\{document\}}
+\end{minipage}
+}\hfill\rule{0pt}{1em}\\[.5em]
+\item[2\ieme méthode :] demander à ce que toutes les extensions puissent éventuellement
+bénéficier\\ de \textit{frenchle} :\\[.5em]
+\rule{0pt}{1em}\hfill\fbox{
+\begin{minipage}{100mm}
+ \backslash\texttt{documentclass[frenchle]}\{\textit{classe\_de\_documents}\}\\
+ \backslash\texttt{usepackage}\{\textit{extension 1} \}\\
+\rule{0.4\textwidth}{0pt} \vdots \\
+ \backslash\texttt{usepackage}\{\textit{extension n-1} \}\\
+ \backslash\texttt{begin\{document\}}
+\end{minipage}
+}\hfill\rule{0pt}{1em}\\[.5em]
+
+\item \MAJ Une méthode multilingue appelant \textsl{mlp} est présentée en page \pageref{meth4}, méthode 4.
+L'option \textsl{mlp} permet d'appeller un paquet de langue allemande.
+Sans \textsl{mlp} on ne peut que passer à l'anglais.\endMAJ
+\end{description}
+
+%\pagebreak
+\section{Messages}\label{messag}
+Voici l’ensemble des messages\index{messages} émis par \textit{frenchle} avec leurs explications. Pour
+aborder cette partie il est fortement conseillé d’avoir lu, au moins une fois, la
+\linkandfootnote{lafaq}{FAQ}{http://www.efrench.org/distributions/faq.pdf}
+sur la francisation de \LaTeX.\\
+\begin{verbatim}
+-8a- \footnotetext{...} perdu.
+-8b- Coder event. \protect\footnote.
+\end{verbatim}
+Signifie en général que vous avez utilisé une \backslash{}footnote dans un \backslash{}caption
+de tableau. L’extension \textit{frenchle} ne pouvant mettre correctement le texte
+de la note en bas de page (défaut actuel de \LaTeX), vous devez, vous
+même, insérer la commande \texttt{\backslash{}footnotetext{...}}
+après le tableau.\\
+\begin{verbatim}
+-9- Corrupted/absent language.dat file.
+\end{verbatim}
+L’extension \textit{frenchle} vérifie à chaque exécution que le fichier
+ \index{fichier!langage.dat@\texttt{language.dat}}\vers'language.dat'
+ soit accessible et non-corrompu. Il est désormais chargé par \LaTeX automatiquement.\\
+\begin{verbatim}
+-13- le caractère "..." est déjà actif
+ la double ponctuation est alors désactivée.
+\end{verbatim}
+Vous utilisez très probablement un style ou une extension qui fait déjà
+usage de ce ou ces caractères. Pour éviter toute anomalie de fonctionnement,
+l’extension \textit{frenchle} désactive alors l’effet de la double ponctuation
+! : ; ? pour tout votre document. Si ce n’est pas ce que vous voulez,
+essayez de charger l’extension en question, soit après le chargement de
+l’extension \textit{frenchle} soit dans un environnement \texttt{english}.\\
+\begin{verbatim}
+-15- le langage frenchle porte le numéro ...
+\end{verbatim}
+L’extension \textit{frenchle} vous indique le numéro interne employé pour le langage
+\textsl{french}. \\
+\begin{verbatim}
+-16- the English language is numbered ...
+\end{verbatim}
+Même explication que pour le message précédent mais portant ici sur
+l’anglais.\\
+\begin{verbatim}
+-19- utilisation du langage interne numéro...
+\end{verbatim}
+Aucun langage \textsl{french} n’a été trouvé dans le fichier \texttt{language.dat}\index{fichier!langage.dat@\texttt{language.dat}},
+dans ces conditions le
+style \textit{frenchle} vous indique le numéro de langue interne qu’il va utiliser.
+
+À vous de voir si ce numéro est acceptable pour la mise en page de votre
+texte français.
+
+Mais ceci ne devrait plus arriver avec les versions récentes de \LaTeX.\\
+\begin{verbatim}
+-20- WARNING: the french language is undefined in your format
+ the french language is undefined (ERROR!)
+\end{verbatim}
+Vous ne pouvez utiliser \textit{frenchle} sans que votre moteur \LaTeX{} soit un minimum
+francisé, c.-à-d. dispose par exemple de motifs de césure adaptés\index{césure}.
+Le premier message n’est qu’un avertissement si le fichier de configuration
+\texttt{language.dat}\index{fichier!langage.dat@\texttt{language.dat}} définit le français ; si ce n’est pas le cas le deuxième
+message est émis.\\[2ex]
+\texttt{-21-\backslash\textit{xxx}TeXmods n’est pas défini}.
+Une demande a été faite pour travailler avec la langue \textit{xxx} mais celle-ci est
+inconnue ou, tout au moins, la commande \backslash\textit{xxx}TeXmods n’est pas définie.
+Probablement une erreur interne...\\
+\begin{verbatim}
+-23- Extension : style frenchle V... -- date -- (B.Gaulle)
+\end{verbatim}
+Ceci est la bannière du style \textit{frenchle}. Pensez à vous mettre à jour régulièrement.\\
+\begin{verbatim}
+-24- frenchle.sty utilise dans ce document le codage de fonte (O)T1.
+\end{verbatim}
+Ceci est un message d’information permettant de voir quel
+codage\index{OT1 (codage)@\verb'OT1' (codage)}\index{T1 (codage)@\verb'T1' (codage)} de
+fonte a été détecté par \textit{frenchle} et sera utilisé pour tout le document\index{codage!utilisé}.
+Vous avez toujours le loisir de changer de \index{codage!changement de}codage avant le chargement
+initial de \textit{frenchle} de façon qu’il détecte celui qui convient à l’ensemble
+des parties françaises du document.\\
+\begin{verbatim}
+-25- frenchle.sty affiche ici ses messages en 7-bits (à la TeX).
+\end{verbatim}
+Le format \LaTeX{} qui a été créé ne supporte pas le 8-bits en sortie. Cela
+peut effectivement venir du moteur \TeX{} car tous ne disposent pas de cette
+facilité. Si vous souhaitez toutefois afficher les messages en 8-bits, forcez
+l’option \verb|\usualmessages|\index{usualmessages@\verb'\usualmessages'}.\\
+\begin{verbatim}
+-25- frenchle.sty affiche ici ses messages en 8-bits.
+\end{verbatim}
+Ceci est l’option normale si le moteur \TeX{} est capable de produire du 8-bits
+ en sortie, à la place des caractères hexadécimaux sous la forme \chap\chap{}xx.
+Cette option peut avoir été forcée par la commande \backslash{}usualmessages.\\
+\begin{verbatim}
+-27- frenchle.sty language x (y) was initially
+(at initex) numbered z (ERROR!)
+\end{verbatim}
+Signifie que l’ordre des langues a été probablement modifié dans le fichier
+\texttt{language.dat} ou qu’il ne s’agit pas du bon fichier.
+Ceci ne devrait plus arriver avec les versions récentes de \LaTeX,
+puisqu'il n'est plus nécessaire de créer le format fr\LaTeX qui pourrrait entrer en conflit
+avec les définitions déjà inscrites dans \texttt{langage.dat}.\\
+\begin{verbatim}
+-29a- ****Warning****: your TeX V3 engine + CM
+ fonts (your format default) isn’t sufficient
+ to hyphenate words containing diacritics (like in french).
+\end{verbatim}
+Ce que l’on appelle communément la césure des mots ne pourra jamais\index{césure}
+être effective, dans ces conditions, sur des mots comportant des lettres
+accentuées. Il s’agit là du plus grave défaut de francisation que vous obtiendrez
+mais il y en a d’autres... Il serait peut-être bon de considérer
+l’installation d’un moteur \TeX{} avec option Ml\TeX{} ou la mise en place,
+par défaut dans le format\index{fontes!cm@\textit{cm}}, de polices de caractères 8-bits.
+Quoique le fomat ne soit plus une solution à l'heure actuelle, voir le paragraphe \ref{lesformats}.\\
+\begin{verbatim}
+-34- this file and other auxiliary files require to
+ use the following LaTeX packages: frenchle ...!
+ check \usepackage or remove these files.
+ Typesetting is aborted!
+\end{verbatim}
+Vous avez dans un passage \LaTeX{} précédent utilisé une (ou plusieurs)
+extension qui n’est plus demandée actuellement. Peut-être est-ce volontaire?
+Dans ce cas il est préférable d’effacer les fichiers auxiliaires pouvant
+contenir des informations relatives à cette extension. Sinon, il suffit de demander
+le chargement de l’extension ad hoc.\\
+\begin{verbatim}
+-41- Format is out of date, please run initex again.
+\end{verbatim}
+Ce message ne devrait pas apparaître avec les {\em récentes} versions de \LaTeX.
+
+L’extension \textit{frenchle} s’est aperçue d’une incohérence au niveau des commandes
+de césure. Ces dernières correspondent à une installation ancienne\index{césure}
+de la francisation qui les plaçait dans le format. Il était {\em auparavant} impératif de refaire
+un format correct.\\
+\begin{verbatim}
+-42- The french patch file (frlpatch.sty) is not suitable
+ for this version of the "frenchle" package dated YY/MM/DD.
+\end{verbatim}
+Signifie qu’un fichier de \textit{patch}\index{fichier!frlpatch.sty@\texttt{frlpatch.sty}} a été trouvé dans le système mais qu’il ne
+convient pas à la version de l’extension \textit{frenchle} que vous utilisez. Il est
+nécessaire d’accorder l’un avec l’autre. Dans le doute vous pouvez toujours
+renommer le fichier de patch pour qu’il ne soit pas trouvé.\\
+\begin{verbatim}
+-48- Lecture du fichier de configuration de frenchle.
+\end{verbatim}
+Un fichier de configuration \texttt{frenchle.cfg} a été détecté sur l’installation.
+Il est lu et les ordres exécutables sont appliqués.\\
+\begin{verbatim}
+-51- ERREUR : ce document n’a pas été converti en 8-bits.
+\end{verbatim}
+Certains documents doivent être convertis en 8-bits avant utilisation. Selon
+le type de document, la composition est arrêtée temporairement ou
+définitivement. Ce message est réservé à des tests ; il ne devrait jamais
+être émis à votre intention. Dans l'état de cette version et sous codage UTF8, ce test doit être supprimé.\\
+\begin{verbatim}
+-52- Error: the frenchle package doesn’t run in
+ such minimal document class, sorry!
+\end{verbatim}
+L’extension \textit{frenchle} ne peut fonctionner avec une classe de document
+réduite, et en particulier avec la classe\index{classe!minimal@\verb'minimal'}%
+\index{minimal@\verb'minimal'} \texttt{minimal}.\\
+\begin{verbatim}
+-58- Valeur de ... ignorée.
+\end{verbatim}%\tthyphenation
+Un environnement de liste est utilisé avec modification d’espacement,
+(\verb|\topsep, \partosep,| \verb|\itemsep|\index{itemsep@\verb'\itemsep'} ou \verb|\parsep|) alors que les espacement
+verticaux sont imposés par \textit{frenchle}. Vous avez plusieurs solutions :
+soit vous abandonnez l’idée de les modifier (si cela vient de
+vous) soit vous pouvez revenir aux espacements standard de \LaTeX{} avec\index{nofrenchtrivsep@\verb'\nofrenchtrivsep'}
+\texttt{\backslash{}nofrenchtrivsep} soit enfin vous pouvez supprimer ce message avec
+l’ordre \texttt{\backslash{}nofrenchtrivsepwarnings}\index{nofrenchtrivsepwarnings@\verb'\nofrenchtrivsepwarnings'}.\\
+\begin{verbatim}
+-68- ERROR: frenchle is no more running with 2.09 emulation, sorry!
+\end{verbatim}
+Vous utilisez probablement un très vieux document qui n’a pas été entièrement
+reconverti pour \LaTeXe ; cette version de \textit{frenchle} ne peut être utilisée
+dans ce cas.\\
+\begin{verbatim}
+-71- ATTENTION : si babel est utilisé, mettre french en option
+\end{verbatim}
+Vous avez probablement fait appel à babel\index{babel@\textit{babel}!french en@frenchle en option de}
+ par une commande du genre\index{extension!babel@\verb'babel'}
+\backslash{}usepackage[...]\{babel\} puis vous avez demandé à charger une extension
+\textsl{french} (\texttt{efrench.ldf} ou \texttt{frenchle.ldf}), ce qui est incompatible. Soit
+vous utilisez babel avec l’option \textit{efrench} ou \textit{frenchle} soit vous utilisez
+une extension \textsl{french} toute seule. Il est probable que la composition du
+document n’ira pas bien loin...\\
+\begin{verbatim}
+-73- ERREUR avec AmS\TeX{} : frenchle.sty a été chargé trop tôt.
+\end{verbatim}
+Il est indispensable de charger l’extension de francisation après AmS\TeX{}
+de façon à ce qu’elle s’adapte au contexte.\\
+\begin{verbatim}
+-93- you are using two french options for
+Babel, please choose one...
+\end{verbatim}
+Il se peut que vous ayez demandé le chargement de \textit{frenchle} par Babel
+et en même temps que vous ayez donné à Babel l’option \textsl{french} (dans le
+\backslash{}documentclass par exemple). Il vous faut alors soit éliminer une option
+soit utiliser l’extension \texttt{babelfr}\index{extension!babelfr@\texttt{babelfr}}
+à la place de \texttt{babel}\index{extension!babel@\verb'babel'}.
+\pagebreak
+\section{Remerciements et contacts}
+\paragraph*{Remerciements de Bernard \fsc{gaulle}}Ce document serait incomplet sans les
+remerciements\index{remerciements} aux nombreux contributeurs
+(dont une liste exhaustive serait bien impossible à réaliser) qui ont
+apporté leurs problèmes, leurs solutions ou leurs corrections ; c’est aussi grâce
+à eux que \textit{frenchle} est maintenu à jour et enrichi régulièrement, je les en remercie
+vivement et avec moi toute la communauté francophone des utilisateurs de
+\LaTeX.
+
+\paragraph*{Contacts}\label{contact}
+En cas de problème, prière de \linkandfootnote{rayj}{me}
+{mailto:raymond@juill.ch} contacter\index{contacts} (qui ai mis à jour ces pages)
+ou \linkandfootnote{noustux}{<l'équipe eFrench>}{mailto:efrench@lists.tuxfamily.org}
+Nous ferons de notre mieux pour vous aider.
+
+\bibliographystyle{plain}
+\ifx\Section\undefined\else\let\section\Section\fi% Restore \section.
+\def\refname{Références bibliographiques}\index{références}
+\begin{drapeaufg}
+\begin{thebibliography}{9}\index{bibliographie}
+\bibitem{ hautsdecasse}J. André \& J. Grimault, \textit{\linkandfootnote{rhautsdecasse}
+{Emploi des capitales (première partie)}{http://cahiers.gutenberg.eu.org/cg-bin/article/CG_1990___6_42_0.pdf}},
+\textit{in} Les Cahiers GUTenberg \Numero{} 6, 1990.
+\bibitem{ codetypo}\textit{Code typographique}, Fédération de la communication , 17\ieme édition, 1995.
+\bibitem{ division} J. Désarménien, \textit{La division par ordinateur des mots français : application
+à \TeX}, {\it in} TSI vol. 5 {\Numero} 4, 1986.
+%[4] D. Flipo, B. Gaulle et K. Vancauwenberghe,Motifs de césure français,
+%in Les Cahiers GUTenberg N18, 1994.
+%(http://www.gutenberg.eu.org/pub/GUTenberg/publicationsPDF/
+%18-motifs.pdf)
+\bibitem{cesures} D. Flipo, B. Gaulle et K. Vancauwenberghe,\textit{
+\linkandfootnote{ rcesures}{Motifs de césure français}{http://cahiers.gutenberg.eu.org/cg-bin/article/CG_1994___18_35_0.pdf}},
+{\it in} Les Cahiers GUTenberg \Numero 18, 1994\index{césure}.
+%[5] B. Gaulle, FAQ \textsl{french}, foire aux questions à propos de \LaTeX{} en français,
+%2007
+%(http://frenchpro.free.fr/screen.pdf/FAQscreen.pdf)
+\bibitem{faq} B. Gaulle, eFrench
+\textit{\linkandfootnote{lafaq}{%
+Foire aux questions à propos de \LaTeX{} en français}%
+{http://www.efrench.org/distributions/faq.pdf}}, 2007
+\bibitem{compagnon} M. Goossens, F. Mittelbach et A. Samarin, \textit{The \LaTeX{} companion},
+Addison-Wesley, 1993.
+\bibitem{guidrom} \textit{Guide du typographe romand}, Association suisse des compositeurs à la machine,
+6\ieme~édition, 2000.
+\bibitem{lamptex} L. Lamport, \textit{\LaTeX, A document preparation system}, Addison-Wesley, 1994.
+\bibitem{lampndx} L. Lamport, \textit{An Index Processor For \LaTeX}, 1987.
+\bibitem{imprnat} \textit{Lexique des règles typographiques en usage à l’Imprimerie nationale},
+4\ieme~édition, 1991, ISBN 2-11-081075-0.
+\bibitem{perrousmanu} Y. Perrousseaux, \textit{Manuel de typographie française élémentaire}, Atelier
+Perrousseaux, 4\ieme~édition,1995, ISBN 2-911220-00-5.
+\bibitem{perrousmepa} Y. Perrousseaux, \textit{Mise en page et impression}, Atelier Perrousseaux,
+1996, ISBN 2-911220-01-3.
+%[13] E. Saudrais, Le petit typographe rationnel, document électronique, 2007
+%(http://perso.wanadoo.fr/eddie.saudrais/prepa/typo.pdf)
+\bibitem{lepetity} E. Saudrais,
+ \textit{\linkandfootnote{rlepetity}{Le petit typographe rationel}{http://tex.loria.fr/typographie/saudrais-typo.pdf}}
+\end{thebibliography}
+\end{drapeaufg}
+\vfill
+\newpage
+\nooverfullhboxmark% Pourquoi faut-il le repréciser pour la versions screen?
+\printindex
+\def\footnote#1{}% nullify any footnote here.
+\tableofcontents
+\end{document}
diff --git a/language/french/e-french/texmf/doc/src/myfroptn.sty b/language/french/e-french/texmf/doc/src/myfroptn.sty
new file mode 100644
index 0000000000..388f18b205
--- /dev/null
+++ b/language/french/e-french/texmf/doc/src/myfroptn.sty
@@ -0,0 +1,17 @@
+% This is a test of a personal style file defining the french options
+% i want to use usually in my documents. 2000/03/03
+% Copyright Bernard Gaulle as in french_doc.pdf
+
+\usersfrenchoptions{% voici mes options %%%%%%%%%%%%%%%%%%%%%%%%%
+ \disallowuchyph % C'est ma devise... %
+ \overfullhboxmark % devrait pas y en avoir%
+ }% %
+% En plain TeX il faut retirer le % de debut de ligne suivante %
+%\@ufo% car il n'y a pas de \begin{document} %%%%%%%%%%%%%%%%%%%%
+
+%\message{Activation des options personnelles du style french}
+\endinput
+%%
+%% checksum = "12795 17 93 776"
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/doc/src/mymaj.sty b/language/french/e-french/texmf/doc/src/mymaj.sty
new file mode 100644
index 0000000000..a74e72fae6
--- /dev/null
+++ b/language/french/e-french/texmf/doc/src/mymaj.sty
@@ -0,0 +1,181 @@
+% ----------- mymaj.sty
+% Permet de mettre un trait vertical dans la marge.
+%
+% Appel :
+% \maj ................... pour marquer une ligne seule
+% \begin{MAJ}...\end{MAJ} pour une entite plus grande
+%
+% Les trois variables suivantes permettent de parametrer la macro.
+% majwidth epaisseur du trait
+% majhskip espace entre le trait et le paragraphe
+%
+% Bugs connues :
+% 1- ne pas utiliser dans une \footnote
+% 2- ne pas mettre \maj dans \begin{MAJ} ... \end{MAJ}
+% 3- les barres de mise a jour peuvent se retrouver anormalement en haut
+% ou bas de page.
+%%
+%% checksum = "65193 181 669 6726"
+%%
+%///////////////////////////////////////////
+% Change bar document-style option for LaTeX.
+%
+% Copyright (C) 1990 by David B. Johnson (dbj@titan.rice.edu).
+%
+% These macros draw a solid bar down the right margin of the output,
+% covering a range of the input file that has been declared to be changed.
+%
+% The beginning and end of a change bar in the text are marked with
+% \chgbarbegin and \chgbarend, respectively. For example,
+%
+% Here is some sample text \chgbarbegin that was
+% changed\chgbarend{} and some that wasn't changed.
+%
+% The change bar is drawn continuously between the line of output
+% containing the \chgbarbegin and the line of output containing the
+% \chgbarend. These lines can end up on separate pages, and the
+% division at page boundaries is handled automatically.
+%
+% Two dimensions control the size and placement of the change bars:
+% \chgbarwidth The width of a change bar
+% \chgbarsep The distance between the text and the change bar
+%
+% Warning: it does not appear to be possible to do this completely
+% correctly, due to the time at which the verticle glue on a page is
+% finally set, and the way that page breaks are decided. With
+% \raggedbottom, this normally works fine. It hasn't been tested with
+% \flushbottom, but will probably behave worse. In strange rare
+% situations, a change bar might be drawn from the first line of a page
+% up off the top of a page; this can usually be fixed by slightly moving
+% the \chngbarend around, or by breaking a single change bar range
+% into two ranges.
+%
+\newdimen\chgbarwidth \newdimen\chgbarsep
+\chgbarwidth 4pt
+\chgbarsep .25in
+%
+\def\chgbarbegin{\ifhmode\@chgbar{-2}\else\@chgbar{-3}\fi}
+\def\chgbarend{\@chgbar{-4}}
+%
+\marginparpush 0pt
+%
+% The remainder of this is hacked up based on the LaTeX 2.09 latex.tex.
+%
+% copied from \marginpar
+\def\@chgbar#1{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
+ \@floatpenalty-\@Miii\fi\ifinner
+ \@parmoderr\@floatpenalty\z@
+ \else\@next\@currbox\@freelist{\global
+ \count\@currbox#1}{\@floatpenalty\z@ \@fltovf
+ \def\@currbox{\@tempboxa}}\fi
+ \setbox\@tempboxa\color@vbox\vbox
+ \bgroup\end@float\@esphack}
+%
+\newdimen\@chgbarbegin
+\newif\if@inchgbar \@inchgbarfalse
+%
+\def\@addmarginpar{%
+\ifnum\count\@currbox = -2 % change bar begin from hmode
+ \global\@chgbarbegin\@pageht \global\advance\@chgbarbegin -\baselineskip
+ \global\@inchgbartrue
+ \@cons\@freelist\@currbox
+\else
+\ifnum\count\@currbox = -3 % change bar begin not from hmode
+ \global\@chgbarbegin\@pageht
+ \global\@inchgbartrue
+ \@cons\@freelist\@currbox
+\else
+\ifnum\count\@currbox = -4 % change bar end
+ \if@inchgbar\else\@latexbug\fi
+ \@tempdima\@pageht \advance\@tempdima -\@chgbarbegin
+ \nointerlineskip
+ \@tempcnta\@ne
+ \if@twocolumn
+ \if@firstcolumn \@tempcnta\m@ne \fi
+ \else
+ \if@mparswitch
+ \ifodd\c@page \else\@tempcnta\m@ne \fi
+ \fi
+ \if@reversemargin \@tempcnta -\@tempcnta \fi
+ \fi
+ \hbox to\columnwidth
+ {\ifnum \@tempcnta >\z@
+ \hskip\columnwidth \hskip\chgbarsep
+ \else \hskip -\chgbarsep \fi
+\hbox{\vbox to 0pt{\vss
+ \hrule \@height\@tempdima \@width\chgbarwidth \@depth\z@
+}}
+\hss}
+ \nointerlineskip
+ \global\@inchgbarfalse
+ \@cons\@freelist\@currbox
+\else
+ \@next\@marbox\@currlist{\@cons\@freelist\@marbox
+ \@cons\@freelist\@currbox}\@latexbug\@tempcnta\@ne
+ \if@twocolumn
+ \if@firstcolumn \@tempcnta\m@ne \fi
+ \else
+ \if@mparswitch
+ \ifodd\c@page \else\@tempcnta\m@ne \fi
+ \fi
+ \if@reversemargin \@tempcnta -\@tempcnta \fi
+ \fi
+ \ifnum\@tempcnta <\z@ \global\setbox\@marbox\box\@currbox \fi
+ \@tempdima\@mparbottom \advance\@tempdima -\@pageht
+ \advance\@tempdima\ht\@marbox \ifdim\@tempdima >\z@
+ \@warning{Marginpar on page \thepage\space moved}\else\@tempdima\z@ \fi
+ \global\@mparbottom\@pageht \global\advance\@mparbottom\@tempdima
+ \global\advance\@mparbottom\dp\@marbox
+ \global\advance\@mparbottom\marginparpush
+ \advance\@tempdima -\ht\@marbox
+ \global\ht\@marbox\z@ \global\dp\@marbox\z@
+ \vskip -\@pagedp \vskip\@tempdima\nointerlineskip
+ \hbox to\columnwidth
+ {\ifnum \@tempcnta >\z@
+ \hskip\columnwidth \hskip\marginparsep
+ \else \hskip -\marginparsep \hskip -\marginparwidth \fi
+ \box\@marbox \hss}
+ \vskip -\@tempdima
+ \nointerlineskip
+ \hbox{\vrule \@height\z@ \@width\z@ \@depth\@pagedp}
+\fi\fi\fi}
+%
+\def\@makecol{\setbox\@outputbox\box\@cclv
+ \if@inchgbar
+ \@tempcnta\@ne
+ \if@twocolumn
+ \if@firstcolumn \@tempcnta\m@ne \fi
+ \else
+ \if@mparswitch
+ \ifodd\c@page \else\@tempcnta\m@ne \fi
+ \fi
+ \if@reversemargin \@tempcnta -\@tempcnta \fi
+ \fi
+ \@tempdima\ht\@outputbox \advance\@tempdima -\@chgbarbegin
+ \advance\@tempdima -\baselineskip
+ \setbox\@outputbox
+ \vbox{\boxmaxdepth \maxdepth
+ \unvbox\@outputbox \nointerlineskip \hbox to\columnwidth
+ {\ifnum \@tempcnta >\z@
+ \hskip\columnwidth \hskip\chgbarsep
+ \else \hskip -\chgbarsep \fi
+ \hbox{\vbox to 0pt{\vss
+ \hrule \@height\@tempdima \@width\chgbarwidth \@depth\z@}}\hss}}
+ \global\@chgbarbegin 0pt
+\fi
+ \ifvoid\footins\else\setbox\@outputbox
+ \vbox{\boxmaxdepth \maxdepth
+ \unvbox\@outputbox\vskip\skip\footins\footnoterule\unvbox\footins}\fi
+ \xdef\@freelist{\@freelist\@midlist}\gdef\@midlist{}\@combinefloats
+ \setbox\@outputbox\vbox to\@colht{\boxmaxdepth\maxdepth
+ \@texttop\dimen128=\dp\@outputbox\unvbox\@outputbox
+ \vskip-\dimen128\@textbottom}
+ \global\maxdepth\@maxdepth}
+%///////////////////////////////////////////
+\let\majwidth\chgbarwidth% The width of a change bar
+\majwidth=0.5pt%
+\let\majhskip\chgbarsep% The distance between the text and the change bar
+\let\MAJ\chgbarbegin\let\endMAJ\chgbarend%
+\def\maj{\chgbarbegin\hbox to 0pt{}\chgbarend}%
+\if@twoside\else\reversemarginpar\fi% a little more french ?
+\endinput%
diff --git a/language/french/e-french/texmf/doc/test/README b/language/french/e-french/texmf/doc/test/README
new file mode 100644
index 0000000000..149f9ac9ed
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/README
@@ -0,0 +1,51 @@
+% README of the french style distribution (tst sub-directory) 2003/02/17
+% author Bernard Gaulle, adapted Raymond Juillerat
+%
+
+This material was designed to help (La)TeX users to test the french style
+files installation.
+
+Quick description of contents:
+
+README.test : the file you are reading.
+
+fxench.tst : this file has to be converted to 8-bit and renamed french.tst;
+ this is the bi-lingual torture test basic file used to
+ typeset the following documents:
+frenchlb.tex : a french LaTeX book (to be compared at printing level
+ with frenchrf.pdf).
+texxetlb.tex : the same to be run with any TeXXeT engine.
+frenchab.tex : the same with AmsLaTeX.
+
+frenchln.tex : the same, loading the french style before \documentstyle.
+ and testing the "poor man french style" option.
+frenchlr.tex : a french LaTeX report
+frenchla.tex : a french LaTeX article
+frenchll.tex : a french LaTeX letter (just a test)
+
+The previous files require:
+myfigure.eps : an EPS face (not mine)
+mygglo.ist : the file is use with Makeindex to produce my glossary
+mylist.sty : a verbatim style
+frenchlb.ind : for those who don't have makeindex, this is the index produced.
+frenchlb.glo : for those who don't have makeindex, this is the glossary too.
+
+For comparison after installation:
+frenchrf.pdf : the Torture test (frenchlb) document composed by the author.
+ (The program makeindex was used to produce the index
+ i.e. the .ind file and the glossary i.e. the .glo file)
+
+Your "TO DO" list:
+=================
+
+1- Convert the file french.tst to 8-bit.
+2- Ensure your TEXINPUT path pointing to the inputs directory first.
+ For LaTeX users: LaTeX frenchlb.tex
+ For TeX users: TeX frencht.tex
+3- Print the first 45 pages of frenchlb.pdf.
+4- Print the first 45 pages of frenchrf.pdf and then compare the outputs
+5- Go back to the main directory.
+
+Optional tests are provided, look at the files.
+==============================================================================
+
diff --git a/language/french/e-french/texmf/doc/test/XeLaTeX/frenT1xe.pdf b/language/french/e-french/texmf/doc/test/XeLaTeX/frenT1xe.pdf
new file mode 100644
index 0000000000..8bcda89644
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/XeLaTeX/frenT1xe.pdf
Binary files differ
diff --git a/language/french/e-french/texmf/doc/test/XeLaTeX/frenT1xe.tex b/language/french/e-french/texmf/doc/test/XeLaTeX/frenT1xe.tex
new file mode 100644
index 0000000000..8727598e05
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/XeLaTeX/frenT1xe.tex
@@ -0,0 +1,85 @@
+% !TeX program =XeLatex
+% This is frenT1lb.tex
+%
+% French Torture Test with LaTeX (main style: book)
+% Copyright Bernard Gaulle as in french.doc
+%
+% last mods 2006/04/25
+%
+\advance\hoffset by -10pt% marge droite (chez moi) pas totalement imprimee
+\documentclass[twocolumn,a4paper]{book}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%% si vous n'avez pas utilise kbconfig, probablement avez-vous besoin de :
+%\usepackage[T1]{fontenc}% pour utiliser les fontes a la norme Cork (DC,...)
+%\usepackage[utf8]{inputenc}% pour le codage d'entree, ici utf8, XeLaTex s'en passe
+\usepackage{eurosym} % pour euro
+\usepackage{xltxtra}% pour le logo de XeTeX
+\usepackage{fontspec}
+\fontencoding{T1}
+%\DeclareUnicodeCharacter{20AC}\euro de ceci aussi, XeLaTex s'en passe
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\usepackage{mysmall,mylist}
+%\usepackage{epstopdf} %converting to PDF
+%\usepackage{french}% Maintenant on peut utiliser cette syntaxe:
+\usepackage[anglais,francais]{mlp}
+\setlength{\textheight}{225mm}% a4paper is a little shorter...than a4.sty
+\advance\hoffset by 40pt% for better placement
+\listfiles
+
+\setlength{\textwidth}{415pt}%%
+\catcode`\@=11
+\let\Stop\undefined\ifx\@@end\undefined\let\@@end\end\fi
+% Localisation code for numbered \typeout: "\kbAissue% localise it."
+% For debugging one can remove "msg" access, just uncomment
+%\let\kbAissue\relax% this line.
+ \ifx\kbAissue\undefined%
+% Firstly we add the material to use the "msg" package for localization.
+ \def\kb@issue#1#2{\kb@issue@[#1]#2\void}% The local \issuemsg macro.
+ % which will call the real one;
+ % #1 is the macro message required.
+ % #2 is the message header + msg number
+ % such as "^^J -234-", just message
+ % number (234) is kept.
+ \let\kbAissue\kb@issue%
+ \def\kb@issue@[#1]#2-#3-#4\void{\issuemsg[#1]#3(french)}%
+ \ifx\issuemsg\undefined\let\kbAissue\relax\let\typeouA\typeout\fi%
+ \fi%
+%
+\ifx\endfrench\switchtolanguage
+\kbAissue% localise it.
+ \typeout{-37a- ANOMALIE : extension french active ici.}\Stop
+\@@end
+\fi
+\def\LPLAIN{lplain}
+\ifx\fmtname\LPLAIN\else\relax
+ \def\LPLAIN{LaTeX2e}
+ \ifx\fmtname\LPLAIN\else\relax
+ \typeout{**********************************************}
+\kbAissue% localise it.
+ \typeout{-36- ANOMALIE \string: nom de format LaTeX (\fmtname) invalide.}
+ \typeouA{CORRIGER pour avoir \fmtname=\LPLAIN\space ou ancien nom.}
+\Stop% Vous devez avoir dans ltvers.dtx : \def\fmtname{LaTeX2e} !
+\@@end
+ \fi
+\fi
+\catcode`\@=12
+\let\iflatex\iftrue
+\def\SmsG{\typeout%
+ {\string<\string<--------------------------------------------------------}}
+\def\FmsG{\typeout%
+ {--------------------------------------------------------\string>\string>}}
+{\SmsG\obeyspaces
+\typeout{( Test de torture du style \frenchname}
+\typeout{(Ce test genere deliberement quelques messages d'erreur. )}
+\typeout{(Pour vous permettre de distinguer les messages d'erreur )}
+\typeout{(normaux de ceux qui sont anormaux, j'ai encadre, comme )}
+\typeout{(ici, ces messages ; ne vous en preoccupez pas. --bg )}
+\FmsG}%
+\frenchtest
+\ifx\endfrench\switchtolanguage\else
+\kbAissue% localise it.
+ \typeout{-37b- ANOMALIE \string: extension french inactive ici.}\Stop\fi
+\end{document}
+%%
+%% checksum = "56133 79 312 3522"
+%%
diff --git a/language/french/e-french/texmf/doc/test/XeLaTeX/french.tst b/language/french/e-french/texmf/doc/test/XeLaTeX/french.tst
new file mode 100644
index 0000000000..eae5a989f2
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/XeLaTeX/french.tst
@@ -0,0 +1,3684 @@
+% !TeX encoding = utf8
+% This is the french torture file for all formats.
+% Copyright Bernard Gaulle as in french.doc
+%
+% À passer en 8 bits conformément à votre système
+%
+%% checksum = "25011 3750 14847 120214"
+%%
+%
+% For localisation:
+%
+\makeatletter%
+\ifx\documentclass\undefined\let\kbAissue\relax\let\typeouA\typeout%
+\else%
+ \let\typeouA\@gobble%
+% For debugging one can remove "msg" access, just uncomment
+%\let\kbAissue\relax% this line.
+ \ifx\kbAissue\undefined%
+% Firstly we add the material to use the "msg" package for localization.
+ \def\kb@issue#1#2{\kb@issue@[#1]#2\void}% The local \issuemsg macro.
+ % which will call the real one;
+ % #1 is the macro message required.
+ % #2 is the message header + msg number
+ % such as "^^J -234-", just message
+ % number (234) is kept.
+ \let\kbAissue\kb@issue%
+ \def\kb@issue@[#1]#2-#3-#4\void{\issuemsg[#1]#3(french)}%
+ \ifx\issuemsg\undefined\let\kbAissue\relax\let\typeouA\typeout\fi%
+ \fi%
+\fi%
+\makeatother%
+%
+% For better debugging:
+%\ifx\IeC\undefined code dont XeLaTex se passe
+%\kbAissue% localise it.
+%\typeout{^^J-66- ERROR! This file can't be typeset without any input}
+% \typeouA{-66- encoding declaration (look at keyboard or inputenc packages.)}
+%\expandafter\stop% \usepackage[latin1]{keyboard} should be fine.
+%\fi
+\let\FP\frenchpack\hyphenation{e-french} % anciennement French-Pro
+\wlog{Formating \jobname\space with\space\FP\space(\frenchstyleid)}
+%
+%
+\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi%
+\ProvidesFile{french.tst}%
+ [2005/05/11 The torture test file for the package \FP]% **last mods**
+\ifx\undefined\FmsG\def\FmsG{}\def\SmsG{}\fi
+%
+{\catcode`\<=\active\catcode`\>=\active%
+% Je veux :
+%\global\def<{\left\langle}\global\def>{\right\rangle}
+% Et pour ne pas pouvoir avoir l'effet que localement,
+% je fais :
+\gdef<{\myinf}\gdef>{\mysup}
+}
+\label{nulllabel}% null \label for AmSTeX test \ref within a \ref
+\iflatex\makeindex \makeglossary
+ \csname frhyphex\endcsname% load (again) the exceptions, outside babel
+ \def\NL#1{\Sauter#1Lignes}
+ \begin{document}
+ \makeatletter
+ \ifx\babel@savevariable\undefined%
+ \let\FRENCH\frenchTeXmods%
+ \else\def\FRENCH{\selectlanguage{french}}% pour babel
+ \fi%
+ \makeatother
+ \csname onecolumn\endcsname % avoid writting \onecolumn
+ % (special effect in frencht.tex)
+ \renewcommand{\thepage}{\roman{page}}%
+ \ifx\documentclass\undefined\else% for 2e
+ % As 2e doesn't accept \verb in arguments:
+ \gdef\myverb|#1|{%\nonfrench
+ \texttt{#1}%
+ %\endnonfrench
+ \relax}%
+ \fi
+\else
+ \let\FRENCH\frenchTeXmods%
+ \def\NL#1{\par}
+\fi
+\ifx\myverb\undefined\let\myverb=\verb\fi%
+% global here is just req. for TeX--XeT tests.
+\global\let\myinf\inferieura% A no-op def
+\global\let\mysup\superieura% for a temporary action
+\ifx\undefined\english\let\english\relax\fi%
+% Les \ldots sont $\ldots$ a cause de AmSLaTeX V1.1
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\HyphDiff#1#2{{\setbox0=\vbox{%
+ \pretolerance=-1 \hyphenpenalty=-10000
+ \hsize=0pt \leftskip=0pt \rightskip=0pt \parfillskip=0pt
+ \parindent=0pt \hfuzz=\maxdimen \interlinepenalty=0
+ \clubpenalty=0 \widowpenalty=0 \brokenpenalty=0
+ \hskip 0pt #1}%
+ \setbox2=\hbox{}%
+ \setbox9=\vbox{\unvbox 0 \loop \unskip \setbox1=\lastbox
+ \ifhbox 1
+ \global\setbox 2 = \hbox{%
+ \unhbox 1 \discretionary{}{}{}%
+ \unhbox 2}%
+ \repeat}%
+\setbox3\hbox{#2}\ifnum\wd2=\wd3\else
+\kbAissue% localise it.
+\typeout{-31- Wrong French Hyphenation\string!
+ Are you sure to run with a format ***********}
+\typeouA{-31- in which the french patterns were
+ installed at initex time\string? ***********}
+\ifECM\else%
+\kbAissue% localise it.
+\typeout{-32- if yes try to switch to T1 font
+ encoding (\noexpand\usepackage[T1]{fontenc})***}
+\fi%
+\showhyphens{#1}\typeout{(should be\string: #2)
+ \string<\string<======== *********************************}
+\fi}}
+\HyphDiff{éventualité}{éven-tua-lité}
+\HyphDiff{dégazonnage}{dé-ga-zon-nage}
+\HyphDiff{chromosomique}{chro-mo-so-mique}
+%%%%
+\SmsG%
+\typeout{V\'%
+ erification de la sortie de caract\`%
+ eres 8-bits \string:}
+\message{L'\'% \typeout ne transforme pas en 8bits pour l'instant.
+ et\'%
+ e est l\`%
+ a en ao\^%
+ ut \string!}
+\typeout{Et si les caractères sont en utf8 \string:}
+\message{L'été est en août \string!}
+\typeout{Ce n'est pas mieux}
+\iflatex%
+\typeout{Essai de macro d'accentuation dans un ordre \string\showhyphens %
+ \string:}
+\showhyphens{Faut-il croire \`%
+ a l'\'%
+ ETERNIT\'%
+ E ? \'%
+ eludons ...}
+\showhyphens{Ao\^%
+ ut 2001 ou l'autre \`%
+ ere ...}
+\fi%
+\FmsG%
+%
+\english% Title page is in english
+\ifx\documentclass\undefined % Still Plain! so no \DeclareFontFamily
+\else%
+% To avoid "No file OMScmtt.fd" message 2004/10/29
+\DeclareFontFamily{OMS}{cmtt}{\skewchar\font48 }
+\DeclareFontShape{OMS}{cmtt}{m}{n}%
+ {<->ssub*cmsy/m/n}{}
+\DeclareFontShape{OMS}{cmtt}{m}{it}%
+ {<->ssub*cmsy/m/n}{}
+\DeclareFontShape{OMS}{cmtt}{m}{sl}%
+ {<->ssub*cmsy/m/n}{}
+\DeclareFontShape{OMS}{cmtt}{m}{sc}%
+ {<->ssub*cmsy/m/n}{}
+\DeclareFontShape{OMS}{cmtt}{bx}{n}%
+ {<->ssub*cmsy/b/n}{}
+\DeclareFontShape{OMS}{cmtt}{bx}{it}%
+ {<->ssub*cmsy/b/n}{}
+\DeclareFontShape{OMS}{cmtt}{bx}{sl}%
+ {<->ssub*cmsy/b/n}{}
+\DeclareFontShape{OMS}{cmtt}{bx}{sc}%
+ {<->ssub*cmsy/b/n}{}
+%%%%%%%%%%%%%%%%%%%%%%%
+\fi%
+\makeatletter% for \f@encoding
+\french
+\title{\fbox{ \FP\ avec \XeLaTeX%
+% \thanks{We are here in english, notice the problem when we use,
+% like in \texttt{frenchla}, a
+% {\mdseries\texttt{\textbackslash fnsymbol}}
+% in a box.\newline%
+% \indent \hspace*{0.5em}
+% Notice also that
+% {\mdseries\texttt{\textbackslash backslash}}
+% can't be used.%
+% }%
+ }\\ \ \\%
+ Version \frenchstyleid\\ \ \\
+ ``Torture'' Test (\jobname) \\ with
+ \ifx\encodingdefault\undefined Unknown
+ \else\ifx\f@encoding\undefined\encodingdefault{}
+ \else\f@encoding{} \fi
+ \fi Font Encoding\\\ }
+ \author{Bernard {\sc Gaulle}%
+ \thanks{Thanks to those good guys who helped me.\newline%
+ \indent\hspace*{0.5em}
+ This test note is also referred by a
+ {\mdseries\texttt{\textbackslash refmark}} call.
+ \label{title:thanks}%
+ }%
+ \\ \ \\ et...\refmark{title:thanks}\\[2em]%
+Revisited 2018 by Raymond Juillerat for \XeLaTeX
+ }%
+% AmS \normalparindent no more exists 2000/06/15, so the code is removed.
+%\makeatletter% Don't let AMS change \parindent
+%\ifx\RIfM@\undefined\else\normalparindent=1em\parindent=\normalparindent\fi%
+%\makeatother
+\makeatother%
+\date{Printed on \today}
+% As the titlepage is in English but the date in French we let \ier defined:
+{\def\ier{ier}\maketitle}
+\setcounter{page}{2}\thispagestyle{empty}
+\cleardoublepage\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\onecolumn
+\sommaire[4]
+\bigskip
+\begin{center}
+\noindent\fbox{%
+\begin{minipage}[t]{0.5\textwidth}
+\begin{center} \fbox{\parbox{5cm}{{\bf Remarque} : \\ la commande
+\texttt{\backslash som\-maire}\label{pbverb}%
+\footnote{Cette note a été demandée depuis une minipage.}%
+\footnote{Cette deuxième note aussi.}
+%%%%NB : \verb|\sommaire| ou \verb|\tableofcontents| produisent des HORREURS,
+%%%% lorsqu'ils ont utilises dans un \fbox, BUG LATEX !
+ est un apport de \FP.\hfill}}
+\end{center}
+\end{minipage}
+}
+\end{center}
+
+{% Not a LaTeX redefinition : \def\thefootnote{\fnsymbol{footnote}}
+\renewcommand{\thefootnote}{\fnsymbol{footnote}}%
+Essai de note avec \verb|\fnsymbol|
+\footnote{Note avec une étoile.}.
+
+\def\thefootnote{\relax}
+Essai de note de bas de page non numérotée
+\footnote{Note non numérotée.}.
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\cleardoublepage
+\chapter*{\prefacename}
+
+{\em Certains croient qu'une préface peut apporter de la valeur au livre,
+moi je pense plutôt que cela apporte de la {\em valeur}
+à l'auteur...} (dans
+tous les sens du terme).
+
+\cleardoublepage
+
+\twocolumn
+\renewcommand{\thepage}{\arabic{page}}\setcounter{page}{1}%
+\chapter*{Introduction}
+
+\begin{motsclef}
+french, style, francisation, francophonie, multilingue,
+english, option, extension.
+\end{motsclef}
+
+\begin{resume}
+Ce document a été conçu
+uniquement pour tester intensivement \FP\ (anciennement appelé
+option de style%
+ \glossary{<< : ; style ? ! >>}\index{<< : ; style ? >>}%
+ \footnote{Cette note a pour but de faire appel à une macro
+ \texttt{\backslash index} contenant des caractères actifs.%
+ \index{<< : ; depuis la note de bas de page ? >>}%
+ }
+\index{french!Le point d'exclamation est un caractère spécial de Makeindex}%
+\index{<@{\tt\protect\inferieura} ({\tt\protect\backslash inferieura})}%
+\index{>@{\tt\protect\superieura} ({\tt\protect\backslash superieura})}%
+\index{Magic di N'Konga (auteur célèbre)}%
+ \texttt{FrenchPro}).
+\end{resume}
+
+\bigskip Notez que les deux environnements \verb|resume| et \verb|motsclef|
+(ainsi que \verb|keywords|)
+sont des apports de \FP.
+
+\bigskip Si le libellé << Résumé >> apparaît dans la partie
+ anglaise, cela
+signifie que \FP\ ne possédait pas de définition
+d'\verb|\abstract| et donc l'a remplacé par \verb|\resume|. Cela signifie
+aussi que les libellés anglais n'ont pas été définis
+%(\verb|\captionnames|%
+%\footnote{Une extension {\tt fenglish} est fournie conjointement avec
+%\FP\ ; {\tt\backslash captionnames} y est défini.
+%Cette extension {\tt
+%fenglish} est automatiquement appelée par \FP\ dans le
+%cas que nous avons cité.}
+% n'était pas défini par les extensions appelées avant
+% \FP).
+Rappelez-vous aussi que \verb|\abstract| ne fait pas partie de la classe
+de document \verb|book|.
+
+Remarquez les différences entre les numéros de notes de bas de page en
+français et en anglais, ainsi que l'impression de ce même numéro en
+bas de la page.
+
+\english\newpage
+\begin{keywords} %???\relax% for AMS which has its own macro with #1
+French, Style, Option, Package, French-Speaking usage, English, Multilingual.
+\end{keywords}
+
+\begin{abstract} The object of this paper is to test intensively \FP.
+\end{abstract}
+\NL1
+
+\bigskip Notice that the three environments
+\verb|resume|, \verb|keywords| and \verb|motsclef|
+are all introduced by \FP.
+
+\bigskip Notice that if the abstract name printed here is not ``Abstract'' you
+are using packages that have no \verb|\abstractname| defined for eng\-lish.
+ The english package defining such captions is loaded only
+if \verb|\captionsnames|%
+\footnote{The {\tt fenglish} package is given with \FP,
+so {\tt$\backslash$captionnames} are normally defined because
+\FP\ is calling automatically the {\tt fenglish} package in the
+pre\-viously cited case.} was
+previously undefined. (Remember also that as \verb|\abstract| is not defined
+in the \verb|book| document class the \FP\ assumes it is a
+\verb|\resume|.)
+
+Notice the different typesetting of the footnote numbers in French and English
+as well as the printing of that numbers before the footnote text.\vfill
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%\pagebreak
+\french
+\part{Ce qui marche est ici...}
+\disallowuchyph% ce que je prefere...
+
+\chapter{Avertissements}
+
+Seul le document authentique qui est fourni par l'auteur
+ sous une forme composée
+constitue la référence. Cela veut dire que l'installateur de \FP\
+sur un système doit comparer son résultat
+(sous forme papier ou
+fichier \verb|.pdf|) avec la forme authentique fournie par l'auteur.
+
+\bigskip
+
+\bigskip \FP\ a été conçu pour fonctionner
+avec la majorité des formats basés sur \LaTeX{}
+\footnote{Au siècle dernier (XX\ieme), \FP\ était appelé << style
+\texttt{french} >> et pouvait fonctionner en dehors de \LaTeX\ mais
+l'effort pour assurer cette facilité dans de trop nombreux formats
+exotiques était totalement disproportionné ; ceci a donc été
+abandonné (au moment de la sortie de \LaTeXe).}%
+.
+
+\bigskip \AllTeX{} est mon logo ; il symbolise {\em tous les \TeX{}} ; on peut
+l'imprimer correctement dans toutes les polices ({\em \AllTeX}, {\bf \AllTeX},
+{\sf \AllTeX}, {\tt \AllTeX}, ...) grâce à la partie NFSS de \LaTeXe%
+\footnote{Le document de référence ({\tt frenchrf})
+a été produit avec NFSS. Ce document-ci a été composé avec le format
+{\tt \fmtname}.}
+.
+
+\newpage\english Only the authentic author's document in a composed form is
+the reference. That means that the on site \FP\ installator must
+compare his result (paper or \verb|.pdf| file) with the authentic form
+provided by the author.
+\NL2
+
+\bigskip \FP\ was designed to work with all {\em formats\/}
+based on \LaTeX.
+
+\bigskip \AllTeX{} is my logo ; it's a symbol for expressing
+{\em all \TeX{}} ; one can print it correctly in all shapes
+({\em \AllTeX}, {\bf \AllTeX},
+{\sf \AllTeX}, {\tt \AllTeX}, etc.) due to the NFSS part of \LaTeXe%
+\footnote{The
+reference document was produced with NFSS of {\tt \fmtname}.}%
+.
+
+\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{La torture}
+
+\section{Le saviez-vous ?} Nos journaux, livres, revues,
+articles scientifiques ou autres ont été (en gros) durant les trente
+dernières années du vingtième siècle imprimés
+par des machines d'origine
+américaine. Ainsi, petit à petit, nous perdîmes
+l'habitude de lire des
+majuscules accentuées parce que tout simplement les polices
+ de caractères
+utilisables sur ces machines n'en comportaient pas.
+
+L'usage de plus en plus généralisé de l'infor\-ma\-tique
+{\em américaine} fit ainsi disparaître pendant un temps tous
+ les accents de notre langue écrite.
+
+De la même manière un certain nombre de
+{\em mauvaises habitudes} furent
+prises quasiment inconsciemment tout simplement parce que les programmes
+informatiques ne pouvaient pas faire autrement. Ainsi de nombreuses {\it
+coquetteries} de notre typographie sont tombées dans l'oubli.
+
+Saviez-vous par exemple qu'on n'imprime pas des guillemets comme ceci `` '' ni
+même ` ' mais ainsi << >> ? Nous nous autoriserons toutefois
+ à utiliser dans
+ce document ces guillemets %\noenglishquote
+(` ') que nous considérons comme
+{\em techniques}.
+
+\newpage\english \section{Did you know that?}
+Our (french)
+newspapers, books, magazines, scientific articles and other things have
+been printed the last thirty years (roughly)
+of the twentiest century with american machines. So our
+habits to read accented uppercase letters declined because they simply were
+not included in the machinery.\NL2
+
+Together with American computer usage growth, all french
+diacritics disappeared from our french written language.\NL1
+
+In a same way {\em bad
+habits} took place, inconsciously, for the only reason that computer programs
+could not do otherwise. So, a lot of french typographic {\em coquetteries\/}
+are largely forgotten.\NL1
+
+ Did you know for example that we never typeset french
+guillemets like this `` '' neither ` ' but%
+{\makeatletter\def\GOfrench{T1}\ifx\GOfrench\f@encoding\else%
+\footnote{We switched to \emph{French} here to be able %
+ to print valid glyphs.}%
+\fi} %
+\begin{french}<< and >>\end{french}? Instead, we will
+authorised ourselves to use (` ') in this document
+because we consider they are {\em technical} guillemets.
+\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+*** Cet espace est laissé intentionellement à blanc ***
+\NL3
+\section{Typographie française}
+%\noenglishquote
+La typographie française est spécifique en ce qui concerne
+l'utilisation des signes sui\-vants :
+`\verb|.| \verb|:| \verb|;| \verb|!| \verb|?| \verb|<<| \verb|>>|'.
+
+La répartition des espaces dans une ligne se fait de façon
+équitable entre les
+mots (jamais à l'intérieur des mots) et après
+la ponctuation (c'est le
+\verb|\frenchspacing| de \TeX{}) contrairement à la
+ typographie anglaise.
+
+Les `\verb|; ! ?|' doivent être précédés d'une espace fine
+insécable. C'est
+ce que nous avons appliqué dans \FP.
+Le cas du `\verb|?|'
+a été traité spécialement car l'espace fine ayant
+été jugée trop grande (par
+des spécialistes), a été réduite tout en adjoignant une peu de
+{\em glue} d'extensibilité.
+
+En ce qui concerne le `\verb|:|', le code typogra\-phi\-que%
+\footnote{Nous
+avons choisi d'adopter les recommandations de l'imprimerie nationale
+française.} précise qu'il est précédé
+d'une espace {\em mot\/}
+insécable.
+D'autres ont jugé que c'était inesthétique et cela a été
+remplacé par une espace fine.
+
+Les guillemets français << doivent être suivis d'une espace mot
+insécable qui
+a été remplacée ici par une espace moindre.
+Les guillemets fermants >>
+sont, eux, précédés de la même espace.
+
+\SmsG%
+Lorsque la ligne n'est pas assez remplie et qu'il existe un `:', les
+typographes ont --~semble-\hbox{t-il}~-- l'habitude
+de répartir largement les espaces autour
+des deux points. C'est ce qui a été fait dans \FP\ qui
+pourra éventuellement produire une ligne : peu remplie\footnote{Le cas présenté ici a été
+créé artificiellement et peut donc apparaître exagéré dans
+certaines mises-en-pages.}%
+\penalty-10000%
+ ou aussi bien une ligne se terminant ainsi : << {\em com\-me % \- pour fourier
+font les pros\/} >>
+lorsqu'ils ne trouvent pas d'autre moyen mais il devrait s'agir que de cas
+extrêmes. À noter que cela a pour avantage de réduire les
+\verb|over/under-full hbox| de façon significative.
+
+Paragraphe de remplissage...\\ ...\\... pour vérifier que le `:' ne
+termine ni la page ni la colonne. Ainsi :
+
+%\englishquote
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{itemize}
+\item %qu'il s'agisse de verbatim ou d'une liste d'éléments
+les deux points et le texte qui suit
+sont tous deux sur la même page.
+\end{itemize}
+%\newpage % already done with the previous list
+\FmsG%
+\english
+
+\smallskip
+
+\section{French printing}
+
+French printing use specific typographic rules specially in concern with
+the following: `. : ; ! ?' and french guillemets.
+
+Interword spacing in a line is allways equal (and never modified inside a
+word). It's the same way after punctuation (standard \verb|\frenchspacing|) as
+opposed to the english typography.\NL1
+
+All `; ! ?' are preceeded by a thin and uncuttable space. We apply this
+automatically in \FP. (We have added few stretching {\em glue} to
+the question mark).\NL2
+
+Regarding the `:' we have not inserted an inter-word space but a thin space
+and also have added some glue.\NL2
+
+\smallskip
+French guillemets are processed the same way. \NL3
+
+In an {\em underfull\/} line containing a `:' man has habits to share spaces
+around the double points. This way used in \FP\ can also produce a
+line with a ragged right, as shown in the french column. This technique
+ reduce a lot of {\em overfull} and {\em underfull} {\tt hboxes}
+produced by \TeX{}.
+\NL3
+
+As shown also, \FP\ is reluctant to print a double point at the
+end of a page or a column.\french%\noenglishquote
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\section[Dactylographie française]{Rappels concernant la \newline
+dactylographie}
+
+Les habitudes de saisie c.-à-d. les habitudes dactylographiques,
+ veulent que les signes suivants
+`\verb|:| \verb|;| \verb|!| \verb|?| \verb|>>|'
+soient toujours précédés d'un blanc
+(barre d'espace sur les claviers) et les \verb|<<| toujours
+suivis d'un blanc. \FP\ remplacera
+automatiquement ce blanc (à la composition) par l'espace appropriée.
+
+{\moretolerance\moretolerance\moretolerance
+Les guillemets français << (et respectivement >>)...
+\footnote{\tthyphenation Avec les options fournies
+telles \vers|A4| et \vers|double|\-\vers|column| on obtient
+ là un \vers|overfull| \vers|hbox| difficilement réductible
+de façon automatique mais je l'ai réduit
+avec 3 \texttt{\backslash moretolerance}%
+\notthyphenation.}
+\par}
+%\nooverfullhboxmark
+
+Les vrais guillemets français << (et respectivement >>)
+s'utilisent toujours doublés (\verb|<<| et respectivement
+\verb|>>|). Ainsi $<$ et $>$ ne
+sont que des signes mathématiques et n'ont pas
+d'autre sens en français que : {\em inférieur à} et
+{\em supérieur à}.
+
+Il est fortement conseillé de poursuivre
+ces habitudes dactylographiques qui
+contribuent aussi à éclaircir le texte
+saisi et donc ainsi à faciliter les
+corrections ultérieures.
+\NL1
+
+\subsection[Test de la ponctuation française
+ \mdseries`\protect\myverb|. : ; ! ?|']
+{Test de la ponctuation \newline française
+ \mdseries`\protect\myverb|. : ; ! ?|'}
+
+Le deux points s'imprime comme ceci : s'il est précédé d'un blanc
+(au moins un) sinon rien n'est changé (par ex. 11:33). Notez
+l'espace après le point terminant la phrase ; le point virgule
+est aussi précédé d'une espace fine s'il n'est pas collé
+au mot le précédant (comme dans cet exemple dû à une faute
+de frappe; assez fréquente).\\
+{\moretolerance
+Oh ! Quoi-donc ? Notez ici l'espacement utilisé
+devant le `!' et le `?'. Il ne faut
+pas oublier aussi de taper le blanc avant, sinon? tout est
+%terriblement
+ collé! Voyez-vous la différence ? Bravo !
+}
+
+Mais pour les documents {\em mal\/} saisis (c.-à-d. sans blanc) il est
+toujours possible de spécifier la sous-option \verb|\untypedspaces|
+\untypedspaces pour obtenir une insertion automatique des espaces
+manquants comme ici! où il avait été saisi `\verb|ici!|'.
+Vérifions pour les autres ponctuations :;? \typedspaces que nous
+n'obtenons pas :;? serrées comme ici.
+
+Vérification de l'espacement :
+
+\noindent
+\verb| \typedspaces X~; Y ; Z;| = \typedspaces X~; Y ; Z;
+
+\noindent
+\verb|\untypedspaces X~; Y ; Z;| = \untypedspaces X~; Y ; Z; \typedspaces
+
+\newpage\english
+\section{French typing}
+French typists have some habits. For example they type a space before `: ; ! ?
+\verb|>>|' and after \verb|<<|. \FP\ replace automatically this
+blank space by the appropriate spacing.
+
+There is only one kind of quoting in French by the mean of guillemets which
+are allways typed \verb|<<| and \verb|>>|. Usual english simple and double
+quotes must be prohibited.
+
+\subsection{\mdseries%
+ \texttt{\textbackslash untypedspaces}}%
+This control command offers the ability to repair automatically a document
+badly typed i.e. in which spaces were not typed before french punctuation.
+This bypass can help but is not the good way to use daily because there are
+many cases where, for example, a double point must never be preceeded
+by a space.
+
+Now we verify that the spacing is unchanged in English:
+
+\noindent
+\verb| \typedspaces X~; Y ; Z;| = \typedspaces X~; Y ; Z;
+
+\noindent
+\verb|\untypedspaces X~; Y ; Z;| = \untypedspaces X~; Y ; Z; \typedspaces
+
+\subsection{\mdseries%
+ \texttt{\textbackslash wrongtypedspaces}}
+A french typist may input spaces before
+punctuation as it is usual in French. These unfortunate space
+ can be removed by simply letting \FP\ do it with* the control
+sequence:
+
+\begin{verbatim}
+\letpunctuationactivefor
+ \wrongtypedspaces
+\end{verbatim}
+
+\FRENCH% pour ne pas dire \french
+\letpunctuationactivefor\wrongtypedspaces
+\english
+Let's try the previous example:\par
+\noindent
+\verb| X~; Y ; Z;| = X~; Y ; Z;
+
+Now we say \verb|\nowrongtypedspaces|
+\nowrongtypedspaces to come back to the normal
+situation.
+
+\vfill
+\french
+\nowrongtypedspaces% to be sure it is set when english text is skipped
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\csname StopFrenchLbT\endcsname% special case, temporary.
+
+\section[Test des guillemets français 7-bits (<< >>)
+et utf8 (« »)
+]%
+{Test des guillemets \newline français (<< >>)}
+\hyphenation{nor-ma-le-ment}
+
+Les guillemets français s'écrivent et se saisissent
+<< normalement >> comme ceci :
+\verb|<< |{\tt nor}\-%
+{\tt male}\-{\tt ment }\verb|>>|
+ ou éventuellement en italiques mais toujours
+\bgroup% for frenchle
+<< \em normalement\/ >> %
+\egroup% for frenchle
+; ici nous avons tapé au clavier :
+\verb|<< \em| {\tt normalement}\verb| >>|.
+Et en tapant par contre :\\ \verb|<<\em|
+ {\tt anormale\-ment (sans espace)}\verb|>>| \ on obtient...
+\bgroup% for frenchle
+<<\em anormale\-ment (sans espace)\/>>.
+\egroup% for frenchle
+Re\-mar\-quez que les guillemets font office d'acco\-lades \TeX{} et que donc
+les changements de polices sont restaurés en sortant de la citation.
+
+Pour les documents déjà saisis {\em sans espace} << \FP\ >>
+insérera systématiquement un espace à l'endroit
+désiré si l'on a donné la sous-option \verb|\untypedspaces|.
+\untypedspaces
+Et en tapant à nouveau
+\verb|<<\em| {\tt anormale\-ment (sans espace)}\verb|>>| on obtient
+\bgroup% for frenchle
+<<\em anormalement (sans espace)\/>>.
+\egroup% for frenchle
+\typedspaces
+
+Parfois on désirera remplacer systématiquement tous les
+guillemets anglais (`` et '') d'un texte par de vrais guillemets
+français, il
+suffira alors de fournir l'étrange option :\\
+\texttt{\backslash noenglishdoublequotes}\\
+\noenglishdoublequotes pour obtenir : `` ''.
+
+`` '' (même test en début de paragraphe).\englishdoublequotes
+
+Lorsqu'une citation est faite dans un texte, celle-ci commence
+toujours par des guillemets. << Cette citation peut se poursuivre sur
+plusieurs paragraphes.
+
+Dans ce cas, le style %\verb|french|
+insérera systématiquement les guillemets nécessaires
+en début de
+chaque paragraphe. >>
+
+Mais une citation peut aussi en contenir une autre. << Dans ce cas l'imprimerie
+ nationale précise dans ses {\em Règles typographiques} :
+\ancientguillemets
+ << Lors\-que la première citation est
+elle-même placée entre
+guillemets, chaque ligne de la seconde débutera par un
+guillemet ouvrant. >>
+Ce dispositif, comme on le voit, n'est pas mis en Å“uvre ici
+ (voir son application au paragraphe \ref{noeveryparguillemets}).
+ << La deuxième citation peut aussi...
+
+se poursuivre sur un ou
+plusieurs paragra\-phes. >> Notez bien qu'avant cette citation nous avons
+demandé les \verb|\ancientguillemets|
+pour produire ces guillemets fermants
+en début de ligne. Le \verb|\todayguillemets| rétablit la
+situation une fois
+le deuxième niveau terminé. \todayguillemets
+
+{\makeatletter\def\GOfrench{T1}\ifx\GOfrench\f@encoding
+\enlargethispage{10pt}% increase probably due to EC fonts metrics?
+\fi}
+Il arrive que la fin d'une citation de deux\-ième niveau
+coïncide avec celle
+du premier niveau. << Dans ce cas il faudra coder, comme ici :\\
+\verb|\endguillemets|
+à la place de ``\verb|>>|'' \endguillemets.
+
+Deux tests : \fbox{\begin{guillemets} XXX \end{guillemets}}
+et \fbox{X \begin{guillemets} XXX \end{guillemets} X} servant à
+vérifier l'espacement quand on utilise \verb|\begin| et \verb|\end|.
+
+Le paragraphe suivant va alors démarrer de façon
+tout à fait normale...
+
+On peut aussi coder :
+\begin{verbatim}
+\begin{guillemets}
+Une citation...
+\end{guillemets}
+\end{verbatim}
+ce qui donnera :
+\begin{guillemets}
+Une citation...
+\end{guillemets}
+et en tapant {\em à la \TeX} : \verb|\guillemets{}| \verb|Une citation...|
+\verb|\en|\vers|d|\-\vers|guillemets{}| nous devons obtenir absolument la même chose :
+\guillemets{} Une citation... \endguillemets{}
+
+Vérifions maintenant l'espacement dans les différents cas :
+
+\noindent
+\fbox{\parbox{2cm}{<<X\dotfill X>>}} \%\texttt{\backslash typedspaces}
+ {\em sans blanc}
+
+\noindent
+\fbox{\parbox{2cm}{<< X\dotfill X >>}} \%\texttt{\backslash typedspaces}
+{\em normal}
+
+\noindent\untypedspaces
+\fbox{\parbox{2cm}{<< X\dotfill X >>}} \%\texttt{\backslash untypedspaces}
+{\em avec blanc}
+
+\noindent
+\fbox{\parbox{2cm}{<<X\dotfill X>>}} \%\texttt{\backslash untypedspaces}
+{\em sans blanc}
+\typedspaces
+
+\noindent
+\fbox{\parbox{3cm}{A blabla bla blabla : <<
+Ceci est mon test de césure >>}} <<...>> reste possible.
+
+\begin{flushleft}
+ Ceci est << un test avec \verb|\raggedright| >> qui
+--~théoriquement~-- ne devrait plus nous poser de problème.
+\end{flushleft}
+
+\subsection{{\mdseries%
+\texttt{\textbackslash noeveryparguillemets}}}\label{noeveryparguillemets}
+Cette option permet de gérer correctement les citations de second
+rang mais elle est tout à fait contraire
+ au processus \verb|\everypar| cité précédemment grâce auquel
+ les guillemets sont générés automatiquement à chaque
+début de paragraphe.
+Voici ce que produit l'option {\em normale\/}
+\texttt{\backslash every\-par\-guil\-lemets} sur le paragraphe suivant :
+
+<< Tout le monde s'accorde à trouver légitime la division :
+{\tt extra-ordinaire}. Le cas des mots com\-posés est le seul
+à rencontrer
+cette unanimité. Dans les autres, les opinions sont très partagées.
+ Frey est le plus catégorique : il n'admet de division selon la formation
+que pour des mots de composition complètement française, et la rejette
+sinon... Le {\em Code typographique}, tout en adoptant ce même point
+ de vue << ... [reconnaît] néanmoins que certains auteurs de travaux
+scientifiques préfèrent la division éty\-mologique
+qui fait ressortir
+ la racine grecque ou latine. >> Quant à Gouriou, il avait écrit :
+<< On préfèrera cependant garder la coupure étymologique
+ chaque fois que les composants sont {\em aisément} reconnaissables. >>
+(L'italique est de Gouriou.)
+\marginpar{{\footnotesize Ici on a triché avec des} \texttt{\backslash!}}
+\!Telle \!est aussi \!l'opinion \!de \!Girodet >>.
+
+Et voici l'effet de \verb|\noeveryparguillemets| :
+\noeveryparguillemets
+
+<< Tout le monde s'accorde à trouver légitime la division :
+{\tt extra-ordinaire}. Le cas des mots com\-posés est le seul
+à rencontrer
+cette unanimité. Dans les autres, les opinions sont très partagées.
+ Frey est le plus catégorique : il n'admet de division selon la formation
+que pour des mots de composition complètement française, et la rejette
+sinon... Le {\em Code typo\-graphique}, tout en adoptant ce même point
+ de vue << ... [reconnaît] néanmoins que certains auteurs de travaux
+scientifiques préfèrent la division éty\-mologique
+qui fait ressortir
+ la racine grecque ou latine. >> Quant à Gouriou, il avait écrit :
+<< On préfèrera cependant garder la coupure étymologique
+ chaque fois que les composants sont {\em aisément} re\-connaissables. >>
+(L'itali\-que est de Gouriou.)
+Telle est aussi l'opinion de Girodet >>.
+\everyparguillemets
+
+Il faut noter que cette option impose que le paragraphe commence et se
+termine par des guillemets. % sinon code \guillpar et \parguill
+C'est pour cela que nous n'avons pas mis cette option par défaut.
+
+\subsubsection{Un test assez méchant}
+Voici un exemple d'utilisation dans un environement \verb|quotation|%
+\footnote{Nous avons introduit \texttt{\backslash moretolerance}
+pour obtenir une composition correcte.} :
+\begin{quotation}
+\moretolerance\moretolerance\moretolerance
+<< Je ne peux mieux faire que de citer la définition qu'a donnée
+de la gravure un de nos maîtres fondeurs, Fournier le Jeune :
+
+<< La scien\-ce du graveur, dit-il, consiste à connaître la figure
+la plus parfaite que l'on puisse donner aux caractères, les dimensions
+qu'ils doivent avoir et à les représenter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perpétuent des lettres
+à l'infini par la fonte. \endguillemets
+\end{quotation}
+
+Le même exemple sans \verb|quotation| :
+
+<< Je ne peux mieux faire que de citer la définition qu'a donnée
+de la gravure un de nos maîtres fondeurs, Fournier le Jeune :
+
+<< La scien\-ce du graveur, dit-il, consiste à con\-naître la figure
+la plus parfaite que l'on puisse donner aux caractères, les dimensions
+qu'ils doivent avoir et à les représenter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perpétuent des lettres
+à l'infini par la fonte. \endguillemets
+\bigskip
+
+\noeveryparguillemets
+Puis avec \verb|\noeveryparguillemets| (c.-à-d. sans \verb|quotation|) :
+
+<< Je ne peux mieux faire que de citer la définition qu'a donnée
+de la gravure un de nos maîtres fondeurs, Fournier le Jeune :
+
+<< La scien\-ce du graveur, dit-il, consiste à connaî\-tre la figure
+la plus parfaite que l'on puisse donner aux caractères, les dimensions
+qu'ils doivent avoir et à les représenter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perpétuent des lettres
+à l'infini par la % En cas d'arrêt à cet endroit : le format
+fonte. \endguillemets%.fmt utilisé n'est prob. pas ds le bon codage !
+\bigskip
+
+Et enfin avec \verb|quotation|, voilà
+ce que cela peut donner\label{quotation} :
+%%% La \marginpar suivante pose un pb de ``Lost Float'' qd elle est
+%%% placee plus loin, pourquoi ?
+\marginpar{{\footnotesize Il y a ici un problème à étudier en 2 colonnes !}}
+\begin{quotation}
+<< Je ne peux mieux faire que de citer la définition qu'a donnée
+de la gravure un de nos maîtres fondeurs, Fournier le Jeune :
+
+<< La scien\-ce du graveur, dit-il, consis\-te à connaître la figure
+la plus parfaite que l'on puisse donner aux caractères, les dimensions
+qu'ils doivent avoir et à les représenter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perpétuent des lettres
+à l'infini par la fonte.
+ \endguillemets
+\end{quotation}
+\everyparguillemets
+On notera ici les espaces inter-mots beaucoup plus {\em tolérants}. C'est
+la seule solution trouvée pour arriver à imprimer
+quelque chose d'à peu
+près correct en double colonnage.
+
+Essayons les \verb|\og| et \verb|\fg| ainsi :\\
+\verb|Ceci \og est entre guillemets \fg.|\\
+Ceci \og est entre guillemets \fg.
+
+
+\vfill
+Terminons la page en anglais pour tester le haut de page. Les guillemets
+doivent être bons avec le codage T1.
+
+\english
+Let's complete the page with english text in order to test and show
+how will be printed the header.
+\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\onecolumn
+\subsubsection{Même test en \mdseries\texttt{\textbackslash onecolumn}}
+Voici un exemple en environement \verb|quotation| :
+\begin{quotation}
+<< Je ne peux mieux faire que de citer la définition qu'a donnée
+de la gravure un de nos maîtres fondeurs, Fournier le Jeune :
+
+<< La scien\-ce du graveur, dit-il, consiste à connaître la figure
+la plus parfaite que l'on puisse donner aux caractères, les dimensions
+qu'ils doivent avoir et à les représenter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perpétuent des lettres
+à l'infini par la fonte. \endguillemets
+\end{quotation}
+
+Le même exemple sans \verb|quotation| :
+
+<< Je ne peux mieux faire que de citer la définition qu'a donnée
+de la gravure un de nos maîtres fondeurs, Fournier le Jeune :
+
+<< La scien\-ce du graveur, dit-il, consiste à connaître la figure
+la plus parfaite que l'on puisse donner aux caractères, les dimensions
+qu'ils doivent avoir et à les représenter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perpétuent des lettres
+à l'infini par la fonte. \endguillemets
+\bigskip
+
+\noeveryparguillemets
+Puis avec \verb|\noeveryparguillemets| (sans \verb|quotation|) :
+
+<< Je ne peux mieux faire que de citer la définition qu'a donnée
+de la gravure un de nos maîtres fondeurs, Fournier le Jeune :
+
+<< La scien\-ce du graveur, dit-il, consiste à connaître la figure
+la plus parfaite que l'on puisse donner aux caractères, les dimensions
+qu'ils doivent avoir et à les représenter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perpétuent des lettres
+à l'infini par la fonte. \endguillemets
+\bigskip
+
+Et enfin avec \verb|quotation| :
+\begin{quotation}
+ \let\bkORI\break
+ %\def\break{\bkORI\hbox to 0pt{/}}% for debug
+ %\ancientguillemets% for debug
+<< Je ne peux mieux faire que de citer la définition qu'a donné
+de la gravure un de nos maîtres fondeurs, Fournier le Jeune :
+
+<< La scien\-ce du graveur, dit-il, consiste à connaître la figure
+la plus parfaite que l'on puisse donner aux caractères, les dimensions
+qu'ils doivent avoir et à les représenter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perpétuent des lettres
+à l'infini par la fonte. \endguillemets
+\end{quotation}
+\everyparguillemets
+
+\subsubsection{Test de << stretchability >>}
+
+Les espaces doivent être également répartis sur la ligne :
+
+\medskip
+\hbox to \hsize{etiord-gauche\footnote{En plain \TeX{} l'espacement est ici
+\label{etiord}
+ curieusement incorrect ! ...}
+ << centre-ertnec >> \hbox{}\footnote{... alors qu'il faudrait
+la même répartition
+ de l'espace.}%
+ ehcuag-droite}
+\medskip
+
+\subsection{Test des commandes \mdseries\texttt{\textbackslash ifnum}}
+
+\ifnum 1 < 3 1\verb| < |3 est VRAI, bien sûr !
+ \else 1\verb| < |3 est FAUX ! \fi
+comme
+\ifnum 3 > 1 3\verb| > |1 est aussi VRAI, bien sûr !
+ \else 3\verb| > |1 est FAUX ! \fi
+
+\medskip
+
+\subsection{Test des commandes \mdseries\texttt{\textbackslash everypar}}
+
+{J'ai codé dans cette section \verb|\everypar{$++\,$}| : \everypar{$++\,$}
+
+Paragraphe 1 << citation niveau 1
+
+Paragraphe 2 << citation niveau 2
+
+Paragraphe 3 fin citation niveau 2 >> puis fin niveau 1 >>
+
+Paragraphe 4}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage% tjrs en 1 colonne
+\hbox{}\ifx\itshape\undefined\else% avoid old frencht crash
+\subsection{Test de fermeture prématurée}
+
+Il arrive que les guillemets soient fermés dans un environnement
+plus intérieur qui n'apparie donc pas correctement les blocs.
+Voici un exemple d'utilisation :
+
+\begin{verbatim}
+Maître Corbeau dit à son clerc : << \itshape Cher collègue,
+
+\begin{itemize}
+\item Ah que vous êtes joli !
+\item Ah que vous me semblez beau ! >> \upshape
+et s'enfuit de ce pas...
+\end{itemize}
+
+\endguillemets
+\textsf{Quel homme étrange, n'est-ce pas ?}
+\end{verbatim}
+
+Voici ce que cela donne comme composition :
+
+\medskip
+\bgroup% for frenchle
+Maître Corbeau dit à son clerc : << \itshape Cher collègue,
+
+\SmsG%
+\begin{itemize}
+\item Ah que vous êtes joli !
+\item Ah que vous me semblez beau ! >> \upshape
+et s'enfuit de ce pas...
+\end{itemize}
+\FmsG%
+
+\endguillemets
+\egroup% for frenchle
+\textsf{Quel homme étrange, n'est-ce pas ?}
+
+\medskip
+On notera plusieurs choses. Premièrement il a fallu
+rétablir \verb|\upshape| après les guillemets fermants,
+du fait du mauvais appariement des blocs. Ensuite un message
+sort indiquant une fermeture prématurée des guillemets.
+Cette fermeture restant incomplète on note enfin que l'on a forcé
+un \verb|\endguillemets| pour clore proprement et définitivement
+l'environnement guillemets.
+
+\subsection{\mdseries\texttt{\textbackslash everyparguillemetsremoved}}
+\label{noeveryparguillemetsremoved}
+Dans le même exemple nous pouvons aussi interdire la génération
+automatique des guillemets ouvrants à chaque début de paragraphe ;
+il faut alors saisir \verb|\everyparguillemetsremoved| :
+\everyparguillemetsremoved
+
+\medskip
+\bgroup% for frenchle
+Maître Corbeau dit à son clerc : << \itshape Cher collègue,
+
+\SmsG%
+\begin{itemize}
+\item Ah que vous êtes joli !
+\item Ah que vous me semblez beau ! >> \upshape
+et s'enfuit de ce pas...
+\end{itemize}
+\FmsG%
+
+\endguillemets
+\egroup% for frenchle
+\textsf{Quel homme étrange, n'est-ce pas ?}
+
+\medskip
+Il suffit ensuite de rétablir \verb|\everyparguillemets|.
+\everyparguillemets
+\fi% ifx \itshape
+
+\subsection{Test de l'espacement}
+{\def\marque#1{\vbox{\halign{\hfil##\hfil\cr
+ \llap{\vrule width4.5mm height.4pt}%
+ \rlap{\vrule width4.5mm height.4pt}\cr
+ \noalign{\vskip-1cm}%
+ #1\cr}}}
+ \Huge
+ \def\ecartement{\fbox{a << \marque{\hbox{$|$}} >> b}}
+ \ecartement
+}
+% Difference de taille a voir entre les deux %%%%%%
+\setbox7\hbox{\leftguillemets\ X}
+\setbox8\hbox{X\ \rightguillemets}
+\SmsG%
+\message{Taille des boites page \thepage\space \string:
+ \the\wd7=\string?=\the\wd8}
+\FmsG%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\onecolumn
+\newpage
+\hbox{}
+\vfill
+\centerline{\Large Page intentionnellement laissée blanche}
+\vfill
+\twocolumn
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+
+\subsection{Guillemets interrompus}
+Une citation peut être en anglais et donc se commencer par
+\vers|<< \|\vers|english| et se terminer par \vers|\|\vers|french >>|. Ce cas
+ne doit plus générer de message
+{\em fermeture de guillemets non ouverts} !
+Voici le test, réalisé ici
+tout d'abord avec l'environnement \vers|nonfrench| :
+
+\medskip
+1 \fbox{<< \begin{nonfrench}% LaTeX keeps space
+ Text in English
+ \end{nonfrench}% LaTeX keeps space
+ >>}
+
+
+\medskip
+Puis avec : \\
+\verb|\begin{english}| ... \verb|\end{english}| :
+
+\medskip
+% bypass here our TeX--XeT emulation to avoid message: english environment
+% ended by \end{guillemets}
+\def\temp{\begingroup}
+\ifx\beginL\temp
+\else
+{% local redef of english for plain and our specific test file
+ \ifx\undefined\englishORI\else\let\english\englishORI\fi%
+2 \fbox{<< \begin{english}% LaTeX keeps space
+ Text in English
+ \end{english}% LaTeX keeps space
+ >>}
+
+\medskip
+Et enfin avec \verb|\|\verb|english| ... \verb|\endenglish| :
+
+\medskip
+3 \fbox{<< {\csname english\endcsname
+ Text in English
+ \csname endenglish\endcsname}% space here to remove
+ >>}
+}% local redef of english for plain test
+\fi
+
+\medskip
+Ceci avait aussi pour but de tester ces possibilités de
+changement de langage et de vérifier l'espacement qui
+devrait être ainsi :
+
+\medskip
+0 \fbox{<< Text in English >>}
+
+\noenglishdoublequotes
+\subsection{`` {\mdseries\texttt{\textbackslash noenglishdoublequotes}} ''}
+
+Nous avons mis la commande \vers|\noenglish|\-\vers|doublequotes| juste avant
+le titre de section de façon à remplacer les << quotes >> anglaises
+par des guillemets français dans ce titre.
+Il s'agit de vérifier aussi que la génération des fichiers auxiliaires
+\verb|.aux| et \verb|.toc| ne pose pas de problème lorsque ces fichiers
+sont réutilisés. Bien sûr, si cette option n'est pas activée pour tout le
+document, comme ici, on ne retrouvera pas les guillemets français
+dans la table des matières.
+
+\noenglishdoublequotes
+
+\english% histoire de changer de langue ?
+\french
+%\newpage
+\subsection%{<< no-french guillemets >>}
+ {\mdseries\texttt{\textbackslash nofrenchguillemets}}
+En codant \verb|\nofrenchguillemets|
+\nofrenchguillemets on n'utilise plus
+les guillemets programmés dans l'extension {\tt french}. Si on les utilise
+malgré tout, le résultat dépendra de la police. Ici nous utilisons la
+police \fontname\font{} et nous obtenons :
+
+<%
+ < en 7-bits >%
+ >
+
+et aussi :
+
+<< en 8-bits >>.
+
+Réactivons maintenant les guillemets avec la commande
+\verb|\frenchguillemets|
+\frenchguillemets et faisons le même test :
+
+<%
+ < en 7-bits >%
+ >
+
+et aussi :
+
+<< en 8-bits >>. Voyez-vous ?
+
+Vous ne voyez rien car \XeLaTeX{} ne fait pas de différence. Est-ce mieux
+que Pdf\LaTeX{} ?
+\vfill
+\subsection{Haut de page+guillemets}
+
+\subsubsection{En 8-bits}
+Il ne devrait pas y avoir de problème du tout.
+Car, puisqu'il s'agit d'un guillemet en 8-bits, cela doit
+être forcément un vrai guillemet français. Mais, malheureusement,
+{\em la solution pour l'implémenter n'est pas encore trouvée avec
+le codage OT1 ; mais avec le codage TU de XeTeX il y a une possibilité,
+voir ci-dessous}.
+Le codage de fonte de ce document imprime :
+\nonfrench <%
+ < >%
+ >%
+\endnonfrench{}
+ (doit être parfait en T1 et qui l'est aussi ici sous Xe\LaTeX).
+
+\subsubsection{En 7-bits}
+En codage OT1 les guillemets 7-bits de haut de page ne peuvent être
+bons sur cette page
+ {\bf QUE} parce que nous avons terminé la
+page en français, sinon nous aurions eu :
+\ifx\textexclamdown\undefined
+ \def\textexclamdown{¡}\def\textquestiondown{¿}
+\fi
+\textexclamdown\textexclamdown{} et \textquestiondown\textquestiondown.
+
+\textbf{Remarque :} OT1 concerne une autre version de ce document
+qui était utilisée bien avant \XeLaTeX.
+ \subsubsection{En Utf8 avec \XeLaTeX}
+Pour des guillemets corrects avec \XeLaTeX{} et source en Utf8,
+je propose cette insertion dans le source.\\
+ \verb| \catcode\char|«\verb|\active|\\
+ \verb| \catcode\char|»\verb|\active|\\
+ \verb| \def|«\verb|{\guillemotleft}|\\
+ \verb| \def|»\verb|{\guillemotright}|\\
+
+Ce sont les définitions ici utilisées dans ce document.
+Elles font désormais partie du paquet e-French par
+le petit module \emph{efrenchu.tex}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\hbox{ }\NL{24}
+
+\subsection{Guillemets et maths}
+
+L'équation suivante ne doit plus produire le fameux message :
+
+{\tt ! Argument of \backslash \string @genG % string pour amslatex
+ has an extra % { pour emacs
+ $\}$% c'est un \delimiter qui pose pb tq avec frencht d'ou mode math
+.}
+
+$$U^{k+1}=U^{k}- {< g_{k},d_{k} >}$$
+
+\section{D'autres guillemets}\label{autres}
+Avec \FP\ il est possible de substituer automatiquement aux
+guillemets `anglais' la forme \noenglishquote `que voici' en donnant la
+sous-option\\ \verb|\noenglishquote|.
+
+Mais attention, les apostrophes disparaissent
+comme dans : {\em il s'agit ici de l'exemple}
+\englishquote qui aurait dû être imprimé :
+{\em il s'agit ici de l'exemple}.
+Un usage intensif de cette option est plutôt à déconseiller.
+
+\newpage
+\english
+\section{French guillemets}
+Using french guillemets in an english document (\verb|<<| and \verb|>>|) will
+give (depending of font encoding) that: << and >>, it is normal!
+
+As you can look in the previous columns, french guillemets have specific
+rules. They are used for quotation when an author is cited or each time an
+emphasis is needed. Normally, italic is not used inside a quoted french
+text, excepted when you really want to show some wording.
+
+When opened, each paragraph of the quoted text will start left
+ with the opening french guillemets.
+
+Another quotated text can take place inside a first level. This second level
+citation is also very specific. Each line must start with guillemets.
+
+The style designer, from time to time, chose to apply here an ancient rule
+by putting here closing guillemets.
+
+The technical tools involved in \FP\
+ disallow to have at the same time
+the \verb|\everypar| possibility and the second level mechanism.
+
+\subsection{Guillemets and maths}
+
+The following equation is always correct:
+
+$$U^{k+1}=U^{k}- {< g_{k},d_{k} >}$$
+
+and never produce an error message.
+\NL1
+
+\section{Other guillemets}
+With \FP\ it is possible to replace english guillemets by
+diacritic caracters. But, be careful, all apostrophes will be diacritics too.
+\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\section{Trois petits points}
+Les points de suspension sont : ... et non pas ceux de \TeX{} : $\ldots{}$
+\noTeXdots
+En codant \verb|\noTeXdots| les commandes \verb|\dots| ou \verb|\ldots| de
+\LaTeX{} donneront : $\ldots{}$ Mais l'option par défaut a été
+volontairement maintenue au standard (\verb|\TeXdots|) puisqu'il suffit
+de ne pas les utiliser.\TeXdots
+
+\section{Crochets}
+IBM, en son temps, avait créé l'EBCDIC dans lequel ne figurait pas
+les crochets ([ ]). C'est la raison pour laquelle les utilisateurs IBM
+ont parfois substitué $<$ et $>$ aux crochets. La sous option
+\verb|\EBCDICbrackets| \EBCDICbrackets
+permet de les remplacer comme ici <automatiquement> par des crochets.
+Mais faites attention, les doubles guillemets
+\verb|<|\verb|<| et \verb|>|\verb|>| % pour eviter la conversion 8bits
+ ne donneront jamais des crochets mais << et >>
+(sauf en mode \verb|verbatim|). On peut en général
+se contenter de \verb|< <| et \verb|> >| pour obtenir < < et > >.
+On revient à la situation antérieure en tapant la commande suivante :
+\verb|\normalbrackets|\normalbrackets.
+
+\section{Débordements}
+Nous venons de choisir l'option d'indication de débordement de ligne
+\verb|\overfullhboxmark| et nous voyons son
+effet lorsque la ligne ne peut être coupée grâce à l'impression
+de la petite boîte noire.
+%(cf. page \pageref{debordement}).
+Cette option est activée au minimum pour une page entière.
+Ne pas spécifier l'option et son contraire sur la même page sinon
+l'effet est inchangé.
+
+\labelsinmargin
+\section{\mdseries\texttt{\textbackslash labelsinmargin}}%
+\label{labels: in: margin}
+\FP\ offre la possibilité, comme cela a été demandé
+à partir de cette section, d'imprimer dans la marge le libellé des
+étiquettes utilisées dans les ordres \verb|\label|.
+Cette option, utilisable
+aussi en dehors du français, est la suivante :
+\verb|\labelsinmargin|.
+
+\newpage\english
+\section{Three dots}
+Usual and common \TeX{} and \LaTeX{} dots are not french dots.
+\NL4
+
+\section{Brackets}
+An option is offered to replace \verb|<| and \verb|>| by brackets.
+\NL{11}
+
+\section{\mdseries\texttt{\textbackslash overfullhboxmark}}
+The command \verb|\overfullhboxmark| print a black
+box where your have an overfull \verb|hbox| i.e.\ when a line can't be
+hyphenated. The default is \verb|\nooverfullhboxmark|.
+\NL4
+
+\section{Labels in margin}\label{labels are in margin}
+An option allow you to print the labels you use in a page. These labels are
+printed in margins.
+\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\section{Des points sur...}
+Inutile de mettre les points sur les i quand on accentue un i. Tout bon
+éditeur de texte doit faire ce travail pour vous. Sinon il existe la
+sous-option \verb|\idotless| qui produira \idotless
+\let\XX\^% Pour éviter une traduction éventuelle en 8 bits
+\XX{i} si on lui demande d'imprimer \verb|\^i|.
+\iwithdot La valeur par défaut
+dans \FP\ est \verb|\iwithdot| qui donnera malgré tout de
+bons i accentués avec ML\TeX{} (î) s'ils sont saisis directement en 8
+bits (vérifiez dans votre fichier source).
+
+{\makeatletter\def\GOfrench{T1}\ifx\GOfrench\f@encoding
+\section{Ponctuation et mode \protect\linebreak % SPECIAL FONTES EC REELLES
+ mathématique}
+\else
+\section{Ponctuation et mode\\ mathématique}
+\fi}
+Il s'agit de vérifier que les modifications introduites
+par l'extension \FP\
+ne posent aucun genre de problème en mode mathématique.
+\\ Nous définissons une macro \verb|\test| :
+\\ \verb|\def\test#1{#1}|\def\test#1{#1}
+\\ pour voir si le mode mathématique peut être appelé
+sans problème en
+argument de macro-instructions. L'appel de \verb|\test{$x''$}| ne doit
+pas poser de problème%
+\iflatex
+, ni même \verb|\texttt{|\-\verb|[$x''=0$]}|
+\\ Ainsi : \verb|\texttt{[$x''=0$]}|
+\\donne : \texttt{[$x''=0$]} et
+\else%
+. \\Ainsi :
+\fi
+\\ \verb|$A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;$|
+\\ \verb|\test{$A':B''_1<C_{d'}$}|
+\\donne : $A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;$
+\\\phantom{donne :} \test{$A':B''_1<C_{d'}$}
+\\Avec \verb|\noenglishquote|\noenglishquote{} cela...
+\\donne : $A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;$
+\\\phantom{donne :} \test{$A':B''_1<C_{d'}$}
+\englishquote
+\\ puis avec \verb|\noenglishdoublequotes| \noenglishdoublequotes et
+`` mise en vedette '' :
+$$% \begin{displaymath}
+ A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;
+$$% \end{displaymath}
+$$% \begin{displaymath}
+ \test{A':B''_1<C_{d'}}
+$$% \end{displaymath}
+De même :
+\begin{verbatim}
+{\tt CALL SUBR($<$iopt$<$,ilopt$>%
+ >$)}
+\end{verbatim}
+doit s'imprimer :\\
+{\tt CALL SUBR($<$iopt$<$,ilopt$>%
+ >$)}\\
+sans produire le message d'erreur << Fermeture de guillemets non ouverts ! >>.
+\englishdoublequotes
+
+
+\newpage\english
+\section{An \i dotless}
+Everybody knows that a french ``{\em i circonflexe}'' has no dot on it.
+(In my opinion it is a \TeX{} bug to leave the dot when a diacritic is
+put on.) To suppress the dot automatically the best way is to use a well
+programmed text editor. \FP\ offers another opportunity with
+\verb|\idotless|.
+
+\NL3
+
+\section[Math mode and punctuation]{Math mode and \newline punctuation}
+Here we verify that french modifications about punctation
+does not introduce any problem in printing mathematics.
+\\ We define a new macro \verb|\test| :
+\\ \verb|\def\test#1{#1}|\def\test#1{#1}
+\\ in order to see if there is no more problem when passing maths
+inside a macro argument. Calling \verb|\test{$x''$}| must not
+introduce any problem%
+\iflatex
+, as well as \verb|\texttt{|\-\verb|[$x''=0$]}|
+\NL1\\So: \verb|\texttt{[$x''=0$]}|
+\\gives: \texttt{[$x''=0$]} and
+\else%
+. \NL1\\So:
+\fi
+\\\verb|$A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;$|
+\\\verb|\test{$A':B''_1<C_{d'}$}|
+\\ gives: $A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;$
+\\\phantom{gives:} \test{$A':B''_1<C_{d'}$}
+\\With \verb|\noenglishquote|\noenglishquote{} it$\ldots{}$
+\\gives: $A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;$
+\\\phantom{gives:} \test{$A':B''_1<C_{d'}$}
+\englishquote
+\\ and with \verb|\noenglishdoublequotes|\noenglishdoublequotes{}
+in ``display'' math mode:
+$$% \begin{displaymath}
+ A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;
+$$% \end{displaymath}
+$$% \begin{displaymath}
+ \test{A':B''_1<C_{d'}}
+$$% \end{displaymath}
+\englishdoublequotes
+Also:
+\ifx\documentclass\undefined\\ % Still Plain!
+\else\\[-2\baselineskip] % to keep the same spacing as in French
+\fi
+\begin{verbatim}
+{\tt CALL SUBR($<$iopt$<$,ilopt$>%
+ >$)}
+\end{verbatim}
+must print:\\
+%\SmsG%
+{\tt CALL SUBR($<$iopt$<$,ilopt$>%
+ >$)}\\
+%\FmsG%
+without producing the error message:
+``Fermeture de guillemets non ouverts !''.
+\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+Pour ma part lorsque je désire des crochets que je n'ai pas
+au clavier, je préfère taper :\\
+\verb|{\tt CALL SUBR(<iopt<,ilopt> >)}| et utiliser
+l'option \verb|\EBCDICbrackets|\EBCDICbrackets{} :\\
+{\tt CALL SUBR(<iopt<,ilopt> >)}
+
+Cette option n'a pas d'effet en mode mathématique :
+$$ 1233 < 1234 <%
+ < 1235 >%
+ > 1234 > 1233 $$
+\normalbrackets
+
+\makeatletter% we should use \frac with AmS
+\ifx\RIfM@\undefined%\ifx\csname amsmath.sty\endcsname\relax
+ \long\def\text#1{#1}\long\def\frac#1#2{{#1\over#2}}
+\fi
+\makeatother
+
+Vérifions aussi
+($x < {\frac{1}{3}} < {\frac{1}{2}} > {\frac{1}{4}}$) :
+$$x < \frac{1}{3} < \frac{1}{2} > \frac{1}{4} $$
+puis aussi :
+
+ \text{\quad pour $|y| < \frac{111}{444}$}
+
+\bigskip
+La double ponctuation ne doit avoir aucun effet
+(visible) dans une formule en mode
+mathématiques, est-ce bien le cas sur l'exemple ci-dessous :
+
+{\LARGE $$a := b, (c!n=m) \textrm{ ; vrai ?}$$}
+
+On notera que la partie texte de la formule a été saisie avec la
+commande : \\
+\verb|\textrm{ ; vrai ?}|\\
+et que l'espacement français y a été appliqué.
+
+\iflatex
+\subsection{Le cas de la virgule}
+En standard \AllTeX{} (ou alors avec l'option spéciale
+\verb|\regularmathcomma| de \FP) le traitement de la virgule
+est spécifique, ainsi quand on tape ce qui suit en mode
+mathématique de mise en valeur :
+\regularmathcomma%
+\begin{versatim}
+$$\textrm{La fonction}\ f(x,y)\
+ \textrm{ou le Vecteur}\ V(x, y, z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{€}$$
+\end{versatim}
+on obtient des espacements après les virgules,
+qu'il y ait ou non des espaces dans le source \TeX\ :
+$$\textrm{La fonction}\ f(x,y)\
+ \textrm{ou le Vecteur}\ V(x, y, z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{€}$$
+(ce qui montre une anomalie dans la composition
+des nombres relatifs)
+\frenchmathcomma
+\fi
+
+\newpage\english
+When I have no brackets on my keyboard I prefer to type:\\
+\verb|{\tt CALL SUBR(<iopt<,ilopt> >)}|\\ using
+ the option \verb|\EBCDICbrackets| but the result in english
+remains unchanged\EBCDICbrackets{}:\\
+{\tt CALL SUBR(<iopt<,ilopt> >)}
+
+And within math mode:
+$$ 1233 < 1234 <%
+ < 1235 >%
+ > 1234 > 1233 $$
+\normalbrackets
+
+\makeatletter% we should use \frac with AmS
+\ifx\RIfM@\undefined%\ifx\csname amsmath.sty\endcsname\relax
+ \long\def\text#1{#1}\long\def\frac#1#2{{#1\over#2}}
+\fi
+\makeatother
+
+Let's verify also ($x < {\frac{1}{3}} < {\frac{1}{2}} > {\frac{1}{4}}$) :
+$$x < \frac{1}{3} < \frac{1}{2} > \frac{1}{4}$$
+and:
+
+ \text{\quad pour $|y| < \frac{111}{444}$}
+
+\bigskip
+The ``double punctuation'' should not have any effect
+in maths, which is obviously the case in the following
+English example:
+\NL1
+
+{\LARGE $$a := b, (c!n=m) \textrm{ ; vrai ?}$$}
+
+Though the text part of the formula has been typed
+via a command: \\
+\verb|\textrm{ ; vrai ?}|\\
+the french spacing doesn't apply here.
+
+\iflatex
+\subsection{The comma case}
+With \AllTeX{} standard (or with the special \FP\
+\verb|\regularmathcomma| the processing of comma is really specific.
+So, when you type in the following in display math mode:
+\regularmathcomma%
+\begin{verbatim}
+$$\textrm{La fonction}\ f(x,y)\
+ \textrm{ou le Vecteur}\ V(x, y, z)$$
+$$Total=1,255\,\$\ ou\
+ 1\,500,00\,\textrm{€}$$
+\end{verbatim}
+you will get thin spaces after the commas,
+no matter spaces are given or not in the \TeX\ source:
+$$\textrm{La fonction}\ f(x,y)\
+ \textrm{ou le Vecteur}\ V(x, y, z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{€}$$
+(which shows a french typesetting error for
+the relative numbers).
+\frenchmathcomma
+\fi%
+
+\iflatex\french
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+Par contre avec \FP\ on n'obtient
+aucun espacement supplémentaire :
+$$\textrm{La fonction}\ f(x,y)\
+ \textrm{ou le Vecteur}\ V(x, y, z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{€}$$
+cela est dû à l'option \verb|\frenchmathcomma| qui est
+activée par défaut avec \FP.
+Mais cela montre alors une anomalie de composition
+dans les listes $(x,y,z)$.
+
+Si l'on veut des espaces il faut alors les indiquer
+explicitement, comme cela est l'usage, plus
+généralement, en mode mathématique :
+\begin{versatim}
+$$\textrm{La fonction}\ f(x,\,y)\
+ \textrm{ou le Vecteur}\ V(x,\,y,\,z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{€}$$
+\end{versatim}
+ce qui donnera :
+$$\textrm{La fonction}\ f(x,\,y)\
+ \textrm{ou le Vecteur}\ V(x,\,y,\,z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{€}$$
+
+\medskip
+
+On notera que \FP\ obéit à l'extension \texttt{icomma}
+lorsque cette dernière est chargée avant \FP, mais
+seulement en français.
+
+
+\newpage\english
+With the \FP\ package there is no space added
+at all:
+\frenchmathcomma%
+$$\textrm{La fonction}\ f(x,y)\
+ \textrm{ou le Vecteur}\ V(x, y, z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{€}$$
+this is due to the option \verb|\frenchmathcomma| which is
+defaultly activated in the \FP\ package.
+People will then distinguish a typesetting error
+in the lists $(x,y,z)$.
+
+If you want spaces you should then give them to \TeX\
+explicitely, as usually done, more generally in math mode:
+\begin{verbatim}
+$$\textrm{La fonction}\ f(x,\,y)\
+ \textrm{ou le Vecteur}\
+ V(x,\,y,\,z)$$
+$$Total=1,255\,\$\ ou\
+ 1\,500,00\,\textrm{€}$$
+\end{verbatim}
+which will give:
+$$\textrm{La fonction}\ f(x,\,y)\
+ \textrm{ou le Vecteur}\ V(x,\,y,\,z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{€}$$
+\fi
+
+You should notice that \FP\ respect the choice of
+the \texttt{icomma} package when that last one is loaded before
+\FP; but it only applies in French.
+\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\section{Mon antislash est \mdseries\texttt{\backslash}}
+
+L'antislash n'existe pas dans toutes les polices en OT1.
+Que vous utilisiez \verb|\backslash| ou \verb|\textbackslash|
+vous obtiendrez la même chose, ainsi
+en romain droit on obtient :
+
+textbackslash=\textbackslash
+
+backslash=\backslash
+
+\noindent
+mais avec la fonte tt on obtient :
+
+{\tt
+textbackslash=\textbackslash
+
+backslash=\backslash
+}
+\NL2
+
+\section{Notes de bas de page}
+
+\iflatex\makeatletter\xdef\countSAVED{\the\c@footnote}\makeatother\fi
+\long\def\XX{%
+ Numérotation normale\footnote{Une note normalement numérotée.}.
+ {\setcounter{footnote}{0}
+ \renewcommand{\thefootnote}{\fnsymbol{footnote}}
+
+ Voici une note\footnote{Première note.}
+ puis une autre\footnote{Deuxième note.}
+ puis encore une autre\footnote{Troisième note.}
+ }}
+
+Nous comparons ici la composition des notes de bas de page
+(avec et sans \verb|\fnsymbol|)
+dans une langue et dans l'autre. Voyons ce que cela donne :
+
+\XX
+
+\newpage\english
+\section{My antislash is \mdseries\texttt{\textbackslash}}
+
+The antislash glyph doesn't exist in all OT1 font.
+Whatever you use, \verb|\backslash| or \verb|\textbackslash|
+you will obtain the same output, so
+in upright roman you obtain:
+
+textbackslash=\textbackslash
+
+backslash=$\backslash$
+
+\noindent
+but with the tt font you obtain:
+
+{\tt
+textbackslash=\textbackslash
+
+backslash=$\backslash$
+}
+
+\noindent
+but \verb|\backslash| is only available in
+math mode.
+
+\section{Compared footnotes}
+
+We compare the typesetting of footnotes
+(with and without \verb|\fnsymbol|)
+in one language versus the other. Let's look at them.
+
+\iflatex\makeatletter\c@footnote=\countSAVED\makeatother\fi
+
+\XX
+\iflatex\makeatletter\c@footnote=\countSAVED\makeatother\fi
+\addtocounter{footnote}{1}
+\NL1
+
+\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+
+\section{\mdseries\texttt{\textbackslash guillemetsinarrays}}
+
+Avec \FP\ l'utilisation de guillemets à la
+française en mode texte dans les environnements \texttt{array} ou
+\texttt{eqnarray} est possible
+mais il est nécessaire de protéger les opérateurs
+inférieur (\texttt{<}) et supérieur (\texttt{>}) lorsqu'ils terminent
+une colonne. On rajoute alors une paire d'accolades ou \verb|\relax|
+pour terminer la macro-commande :
+\begin{verbatim}
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a & \protect< &b\\
+a & b &<\\
+a & >{} &c\\
+<{}& << >> &c\\
+<{}& \textrm{<< text >>}&c
+\end{array}
+$
+\end{verbatim}
+
+\noindent ce qui donne :
+
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a & \protect< &b\\
+a & b &<\\
+a & >{} &c\\
+<{}& << >> &c\\
+<{}& \textrm{<< text >>}&c
+\end{array}
+$
+
+\medskip
+On peut éviter d'avoir à modifier des tableaux existants et dans ce
+cas on codera \verb|\no|\-\verb|guil|\-\verb|lemetsinarrays| :
+
+\begin{verbatim}
+\noguillemetsinarrays
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a & < &b\\
+a & b &<\\
+a & > &c\\
+< & << >> &c\\
+< & \textrm{<< text >>}&c
+\end{array}
+$
+\end{verbatim}
+
+\noindent ce qui donne alors :
+
+\noguillemetsinarrays
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a & < &b\\
+a & b &<\\
+a & > &c\\
+< & << >> &c\\
+< & \textrm{<< text >>}&c
+\end{array}
+$
+\guillemetsinarrays% reset default
+
+\newpage\english
+\section{Guillemets in arrays}
+The \FP\ package allows people to print french guillemets
+in \texttt{array} environments (but in text mode). This usually breaks
+the code for \texttt{<} or \texttt{>} when they finish an array slot.
+So you should protect them; like this:
+\NL2
+
+\begin{verbatim}
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a & \protect< &b\\
+a & b &<\\
+a & >{} &c\\
+<{}& \textrm{<< text >>}&c
+\end{array}
+$
+\end{verbatim}
+\NL1
+
+\noindent which gives:
+
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a & \protect< &b\\
+a & b &<\\
+a & >{} &c\\
+<{}& \textrm{<< text >>}&c
+\end{array}
+$
+\NL1
+
+\medskip
+
+One can avoid to modify existing arrays and then just say
+\verb|\noguillemetsinarrays| but this command is not
+interesting in English because the problem doesn't exist
+at all:
+
+\begin{verbatim}
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a & < &b\\
+a & b &<\\
+a & > &c\\
+< & \textrm{<< text >> &c
+\end{array}
+$
+\end{verbatim}
+\NL1
+
+\noindent gives the following result:
+
+\def\GOfrench{\let\ifCLA\iffalse}% To allow dmy and frencht to compile
+\ifx\ifCLA\undefined\expandafter\GOfrench\fi% without error.
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a &
+\ifCLA\expandafter\protect\fi% To allow \ConstantLayout test file.
+< &b\\
+a & b &<\\
+a &
+\ifCLA\expandafter\protect\fi% To allow \ConstantLayout test file.
+> &c\\
+\ifCLA\expandafter\protect\fi% To allow \ConstantLayout test file.
+< & \textrm{<< text >>}&c
+\end{array}
+$
+\NL1
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+
+\noguillemetsinarrays% for continuation of column
+Cette commande est aussi valable pour les environnements
+\texttt{eqnarray} :
+
+\begin{eqnarray}
+a & < &b\\
+a & > &c\\
+< & << >> &c\\
+< & \textrm{<< text >>}&c
+\end{eqnarray}
+
+Pour terminer je rétablis la valeur par défaut :
+\verb|\guillemetsinarrays|
+\guillemetsinarrays
+et si j'essaye le même exemple j'obtiendrais
+le message : \\
+{\makeatletter\let\@PreserveBraces={% uggly hack for plain
+\vers|! Argument of \@PreserveBraces has an|\\
+\vers|extra }.|
+}% closing hack.
+
+\section{Guillemets verbatim}
+
+Avec l'option \verb|\nofrenchguillemets| il est possible
+--~si \FP\ travaille en codage de fonte du genre \texttt{T1}
+{\makeatletter\def\GOfrench{T1}\ifx\GOfrench\f@encoding\else
+(mais ca ne semble pas être le cas ici)\fi}%
+~--
+\nofrenchguillemets
+d'imprimer des guillemets 8-bits en verbatim : \verb|<< >>|.
+\frenchguillemets
+
+\iflatex
+\section{Environnement guillemets exclus}
+
+\begin{versatim}
+\guillemets{} Je me suis dit que :
+<< avec l'option [...] les guillemets
+sont inopérants. \endguillemets{}
+\end{versatim}
+\SmsG
+\noeveryparguillemets
+\guillemets{}
+\verb|[\guillemets{}]| Je me suis dit que :
+<< avec l'option \vers|\noevery|\-\vers|par|\-\vers|guillemets|
+on ne doit pas avoir un environnement qui se termine avant la fin
+du paragraphe. C'est pourquoi l'environnement \texttt{guillemets}
+n'est plus autorisé dans ce cadre.
+Désormais un message est émis et ces environnements
+guillemets sont inopérants. \endguillemets{}
+
+On note que \verb|\guillemets{}| n'a aucun effet visible
+et que le début de paragraphe est forcé aux premiers
+caractères-guillemets ouvrants qui suivent. Le
+\verb|\endguillemets{}| de fin d'environnement ferme cependant
+le paragraphe.
+
+\guillemets [\verb|\guillemets{}|]\!
+Ces environnements exclus dans le cadre de cette option
+ peuvent être de premier ou
+/\guillemets{} deuxième \endguillemets{}/ niveau
+comme ici (slashs). [\verb|\endguillemets{}|]
+\endguillemets{}
+
+\FmsG
+\frenchguillemets
+\fi%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\english
+Notice that with standard \LaTeX\ you obtain a message
+saying that \verb|\guillemotleft| and \verb|\guillemotright|
+are invalid in math mode when you try to use guillemets
+in an \texttt{array} environement.
+\NL{9}
+
+\smallskip
+
+\section{Verbatim Guillemets}
+
+The 8bit french guillemets chars printed within
+a verbatim environnement give here: \verb|<< >>|
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\section{Utilisation de la \mdseries\texttt{toc}}
+
+Il n'est pas prévu de pouvoir composer une table des matières ou un
+sommaire dans plus d'une langue.
+On notera que \verb|\sommaire| est un apport de \FP.
+
+\section{Fichiers {\mdseries\texttt{lof}} et {\mdseries\texttt{lot}}}
+On vérifie ici que la ponctuation française n'a pas créé
+d'ennui particulier.
+Nous avons laissé en blanc la figure \ref{x<<:;!?>>x}
+qui n'est qu'un simple
+test. De même le tableau \ref{y`<<:;!?>>'y} n'est là que pour
+créer une entrée dans la liste des tableaux.
+
+Le {\em caption} de la figure
+\ref{x<<:;!?>>x}
+ doit apparaître com\-me ceci :
+ {\it << essai >> ; 2 cm ! pourquoi pas ?}
+\begin{figure}[h]
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\%\vspace*{2cm}
+\ \\
+\ Peu importe la figure...\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption{<< essai >> ; 2 cm ! pourquoi pas ?
+ \protect\\ (cf. aussi le tableau \ref{frenchdactylo})}
+\label{x<<:;!?>>x}
+\end{figure}
+
+Le {\em caption} du tableau
+\ref{y`<<:;!?>>'y}
+ doit être comme ceci :
+{\it ` << essai >> ; 2 cm ! pourquoi pas ? '}
+\begin{table}[h]
+\caption{` << essai >> ; 2 cm ! pourquoi pas ? '
+ \protect\\ (cf. aussi le tableau \ref{frenchdactylo})}
+\label{y`<<:;!?>>'y}
+
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ Peu importe le tableau\footnote{Une note de tableau.}...\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+
+On notera les libellés ({\sc Fig.} et {\sc Tab.}) plus confor\-mes à
+l'usage français. Ne pas oublier non plus que les titres de tableaux sont
+toujours placés, en français, avant ceux-ci contrairement aux figures.
+
+\FP\ ne prévoit pas que l'on puisse composer une
+partie des tables des figures (ou tableaux) en français et une autre
+en anglais par exemple. Les fichiers \verb|.lof| et \verb|.lot| seront
+donc composés entièrement dans la langue présélectionnée.
+
+\newpage\english
+\section{{\mdseries\texttt{toc}} file use}
+No facility is given to typeset the \verb|.toc| in various languages.
+
+Notice that \verb|\sommaire| is a new command brought up with this
+package.
+
+\section{{\mdseries\texttt{lof}} and {\mdseries\texttt{lot}} files}
+Same test in English just to verify that our french modifications
+does not affect the text in English.
+
+You will notice, of course, that the caption names are re-established
+to their original values ({\bf figure} and {\bf table}).
+
+The following figure (not referable) %(\ref{ex<<:;!?>>ex})
+caption must look like:
+<< essai >>; 2 cm! Why not?
+\begin{figure}[h]
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ No matter how is the figure$\ldots{}$\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption{<< essai >>; 2 cm! Why not?
+ \protect\\ (cf. also the table \ref{frenchdactylo})}
+%\label{ex<<:;!?>>ex}% produit un missing \endcsname
+\end{figure}
+
+The {\em caption} of the table (not referable) %\ref{ey`<<:;!?>>'ey}
+must look like:
+` << essai >>; 2 cm! Why not? '
+\begin{table}[h]
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ No matter how is the table\footnotemark% \footnotetext est perdu !
+ $\ldots{}$\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption{` << essai >>; 2 cm! Why not? '
+ \protect\\ (cf. also the table \ref{frenchdactylo})}
+%\label{ey`<<:;!?>>'ey}% generates missing \endcsname
+\end{table}\footnotetext{A note from a table.}
+\NL1
+
+Notice that we have here the standard caption names used by \LaTeX{}.
+
+You can see in the French column the specific labels and places of caption
+titles (under the figure but over the table).
+
+Don't try to compose \verb|.lof| and \verb|.lot| files in more than one
+language, it's not designed in this (stupid?) way!
+
+\french
+\begin{table*}[tb]
+\caption{` << essai >> ; 2 cm ! pourquoi pas ? '
+ (cf. aussi le tableau \ref{frenchdactylo})}
+\label{2`<<:;!?>>'2}
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ Peu importe le tableau sur deux colonnes%
+\footnote{Une note de tableau.}...\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\end{table*}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Encore un tableau...}
+Mais celui-ci est sur deux colonnes si l'option
+\verb|twocolumn| est active. Vérifions simplement
+que le traitement est le même qu'en une seule
+colonne.
+
+Le {\em caption} du tableau
+\ref{2`<<:;!?>>'2}
+ doit être comme ceci :
+{\it ` << essai >> ; 2 cm ! pourquoi pas ? '}
+
+\section{\sloppy Encore {\mdseries\texttt{\textbackslash labelsinmargin}}}
+
+À nouveau nous utilisons \verb|\labelsinmargin|
+\labelsinmargin
+pour vérifier son fonctionnement dans une figure
+et un titre de figure
+
+\begin{figure}[h]
+\label{label de la figure}
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ Peu importe la figure...\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption{le titre de la figure avec label
+\label{label du titre fig.}}
+\end{figure}
+
+Même test avec un tableau :
+\begin{table}[h]
+\label{label du tableau}
+\caption{le titre du tableau avec label\label{label du titre tab.}}
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ Peu importe le tableau...\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+
+\sloppypar{
+Désactivons définitivement l'option
+avec \verb!\nolabelsinmargin!.
+}
+\nolabelsinmargin
+
+\newpage\english
+\NL8
+\section{{\mdseries\texttt{\textbackslash labelsinmargin}} again}
+
+Again we test \verb|\labelsinmargin|
+\labelsinmargin
+to verify that it is running within a figure
+and in a figure's caption.
+
+\begin{figure}[h]
+\label{label in a figure}
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ No matter the figure$\ldots{}$\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption{title with a label\label{label in fig. caption}}
+\end{figure}
+
+Same test with a table:
+\begin{table}[h]
+\label{label in a table}
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ No matter the table$\ldots{}$\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption{title with a label\label{label in a tab. caption}}
+\end{table}
+
+Disactivate definitely the option with \verb!\nolabelsinmargin!.
+\nolabelsinmargin
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+
+\section{Notes dans \mdseries\texttt{\textbackslash caption}}
+
+Si une note dans un tableau doit être imprimée à la fin du
+tableau, une note dans un titre de tableau doit être
+imprimée en fin de page. Malheureusement \LaTeX{} perd
+le texte des notes dans les environnements {\tt figure} et
+{\tt table}. L'ex\-ten\-sion \FP\ prévient l'utilisateur
+que le texte doit être réinséré à l'aide de \verb|\footnotetext|.
+
+\begin{table}[h]
+
+\SmsG%
+\caption[Essai de footnote dans un caption de tableau]
+ {Légende\protect\footnote{Une note de bas de page.}}
+\FmsG%
+
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+%\ \\
+\ Peu importe le tableau...\\
+%\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+\footnotetext{Une note de bas de page.}
+
+\section{{\mdseries\texttt{\textbackslash caption}} vide}
+
+\begin{table}[h]
+\caption{}
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+%\ \\
+\ Tableau sans légende\\
+%\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+
+\section{\mdseries\texttt{\textbackslash nombre}}
+
+Les nombres en français sont imprimés correctement lorsque l'on
+utilise \verb|\nombre|, ainsi :
+
+\begin{verbatim}
+\nombre{123 456,123 456}
+\end{verbatim}
+imprime \nombre{123 456,123 456} au lieu de la forme habituelle
+ {\regularmathcomma $123 456,123 456$}
+ou \mbox{123 456,123 456} suivant que l'on est en mode math
+ou en mode texte.
+
+On y voit des espaces fines à chaque millier et (normalement)
+une virgule sans espace supplémentaire comme cela se produit
+en mode math avec \TeX{} standard.
+
+\section{Autre chose ?}
+Non !
+
+[espace libre utilisable]
+
+\newpage\english
+
+\section{Notes within \mdseries\texttt{\textbackslash caption}}
+
+Normally in French we print table's footnotes at the end of the table
+but it can't be the case when a footnote is called from a caption title.
+But unfortunately footnote's text is lost when inside a \LaTeX{} figure
+or table environnement, as shown here.
+Thus {\tt french.sty} warn the user with the appropriate message, but
+in English nothing is done.
+
+\begin{table}[h]
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+%\ \\
+\ No matter the table$\ldots{}$\\
+%\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption[footnote try within a table's caption]
+ {Caption title\protect\footnote{A footnote page.}}
+
+\end{table}
+%\footnotetext{A footnote page.}
+
+\section{Empty \mdseries\texttt{\textbackslash caption}}
+
+\begin{table}[h]
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+%\ \\
+\ Empty caption\\
+%\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption{}
+\end{table}
+
+\section{\mdseries\texttt{\textbackslash nombre}}
+
+French number should be correctly printed using
+\verb|\nombre|, so :
+
+\begin{verbatim}
+\nombre{123 456,123 456}
+\end{verbatim}
+should not print as usual
+$123 456,123 456$ nor \mbox{123 456,123 456}
+(depending you are in math or in text mode)
+but $123\,456{,}123\,456$.
+\NL1
+
+We see here thin spaces between each thousand part and no
+(usual) space after the comma (as it is in math with standard
+\TeX{}).
+
+\smallskip
+
+\section{Anything else?}
+
+No!
+
+\noindent
+[free space to reuse]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\section{Le 1\protect\fup{er} paragraphe}
+Notez bien que le 1\fup{er} paragraphe d'une section
+ne commence jamais au fer à gauche
+en français, comme vous le voyez ici.
+
+Le deuxième paragraphe démarre comme le premier...\footnote{%
+La typographie du titre de section (1\fup{er}) est à noter ;
+ {\tt mysmaller.sty} a été utilisé
+à la compilation de {\tt frenchrf} avec \LaTeX{}.
+Il existe aussi l'extension {\tt relsize} qui fonctionne
+bien avec \FP.}
+
+\section{Test des listes}\label{listes}
+
+Voici un test d'énumération (\verb|itemize|) de \LaTeX{} :
+
+\begin{itemize}
+\item liste de niveau 1 ;
+ \begin{itemize}
+ \item incluant un niveau 2,
+ \begin{itemize}
+ \item mais aussi un niveau 3,
+ \item peu utilisé ;
+ \end{itemize}
+ \item le niveau 2 se terminant ici ;
+ \end{itemize}
+\item suite de la liste de niveau 1 ;
+\item dernier élément de niveau 1.
+\end{itemize}
+
+On remarquera les deux choses suivantes :
+\primo les marqueurs sont identiques quel que soit
+le niveau et \secundo aucun élément ne commence par une majuscule.
+\NL2
+
+\section{Caractères actifs}
+Quelques jeux de macros doivent parfois être chargés
+directement dans le document
+et utilisent les caractères {\em actifs\/} de \FP. Il y
+a alors conflit ouvert. Plusieurs solutions sont offertes, soit utiliser
+l'ordre : \\
+\verb| \originalinput{fichier}|\\
+ soit :
+\begin{verbatim}
+ \begin{nonfrench}
+ ... macros-instructions...
+ \end{nonfrench}
+\end{verbatim}
+
+Mais attention n'utilisez pas en français un code que
+vous auriez chargé
+en anglais ou réciproquement !
+
+
+\newpage\english
+\section{First paragraph}
+In English each paragraph is indented except the first one of a section,
+subsection, etc. as you can see in this example.
+
+Subsequent paragraphs start indented$\ldots{}$\NL1
+
+\section{Itemized lists}
+Here is the same french \verb|itemize| list:\NL1
+
+\begin{itemize}
+\item liste de niveau 1;
+ \begin{itemize}
+ \item incluant un niveau 2,
+ \begin{itemize}
+ \item mais aussi un niveau 3,
+ \item peu utilisé ;
+ \end{itemize}
+ \item le niveau 2 se terminant ici ;
+ \end{itemize}
+\item suite de la liste de niveau 1 ;
+\item dernier élément de niveau 1.
+\end{itemize}
+
+You can compare english and french lists.
+Notice firstly that item markers are identical at each level and secondly
+that each item never starts with an uppercase letter.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Active characters}
+Codes that were designed for English might bring problems when used with
+\FP\ because few characters are {\em activated\/}.
+Few solutions are offered, either:\\
+\verb| \originalinput{file}|
+
+or:
+\begin{verbatim}
+ \begin{nonfrench}
+ ... macros-instructions...
+ \end{nonfrench}
+\end{verbatim}
+% * * *
+
+But be carefull, don't use in French a code that was loaded in English
+or reciprocally!
+
+% * * *
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+
+\section{Abréviations}
+\abbreviations
+Si on demande \verb|\abbreviations| alors on a
+accès à un fichier d'abré\-via\-tions
+typo\-graphi\-ques françaises.
+Ainsi je saisis \verb|"monseigneur"| et j'imprime "monseigneur"\!.
+De même, avec ML\TeX{} je saisis \verb|"deuxième"|
+(vérifiez dans le
+source que ce mot est bien codé en 8bits) et j'imprime "deuxième"\!%
+. %alors que le fichier d'abréviations contient \verb|"deuxi\`|\verb|eme"|.
+Ainsi il n'est plus vraiment indispensable de se rappeler que
+l'abréviation de madame est "madame" (et maître : "maître"\!).
+
+Lorsqu'un mot ne figure pas dans le fichier d'abréviations, il est alors
+imprimé tel que. Ainsi \verb|"GUTenberg"| imprimera
+\SmsG%
+"GUTenberg".
+\FmsG%
+ Mais n'oubliez jamais le double guillemet fermant sinon vous obtiendrez
+ un message du genre :
+\begin{versatim}
+ Paragraph ended before \AbbrevName was complete.
+\end{versatim}
+
+Je peux aussi donner mon fichier personnel d'abréviations en codant :\\
+\verb|\abreviations[mon_fichier_personnel]|
+
+On retire ces possibilités par la commande \verb|\noabbreviations|.
+N'oublions pas que le caractère \verb|"| sert normalement en \TeX{}
+comme en \LaTeX{} à exprimer les nombres en hexadécimal.
+
+\section{Monsieur s'abrège "Monsieur"}
+
+Que je saisisse \verb|"Monsieur"| ou \verb|"monsieur"|
+j'obtiens la même abréviation : "Monsieur" ou "monsieur", respectivement.
+
+Il n'en est pas toujours de même... ainsi lorsqu'on saisit
+\verb|"Numéro"| et \verb|"numéro"| on obtient respectivement :
+"Numéro" et "numéro", car \verb|Numéro|
+est une entrée dans le fichier des abbréviations où il est écrit
+\verb|{Numéro}|.
+
+Il est désormais possible de placer une abréviation dans un titre
+de chapitre ou de section, comme le titre de cette section le
+démontre ; nous avons saisi :
+\begin{verbatim}
+\section{Monsieur s'abrège "Monsieur"}
+\end{verbatim}
+
+\noabbreviations
+
+\newpage\english
+
+\section{Abbreviations}
+The abbreviation facility offered in \FP\ is based on
+an abbreviations file. When requested by \verb|\abbreviations| one
+may call any \verb|"abbreviation"|. If this abbreviation is found in the
+file it will be replaced by the typographic expansion, if not it will
+be printed as is.\NL2
+
+But never forget the ending double quotes otherwise you will obtain the
+terrible message:
+{\tt Paragraph} {\tt ended before} \texttt{\textbackslash AbbrevName}
+{\tt was complete.}
+\NL4
+
+You can have your own abbreviations file by calling:
+\verb|\abreviations[my_file]|.\NL1
+
+Saying \verb|\noabbreviations| this facility is lost. Remember that the
+char \verb|"| is used normally in \TeX{} as in \LaTeX{} to start an
+hexadecimal number.
+
+But used in English, \verb|"monsieur"| will give "monsieur"%
+\footnote{Notice the quoting!}.
+
+\newpage\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Autres macros utiles}
+\verb|\fsc{KnUtH}| permet d'imprimer \fsc{KnUtH} et \verb|\lsc{SnCf}|
+donne \lsc{SnCf}. Cela doit aussi marcher si le mot commence par une
+accentuation comme ici avec le mot \fsc{\'% a laisser tq a cause du 7bits
+epinal} et même quand cette accentuation est plus loin dans
+le mot comme ici dans \fsc{ANDR\'% a laisser tq a cause du 7bits
+E}.
+
+\bigskip
+Voici une note%
+\footnote{La note.\label{NOTE}}
+de bas de page commandée par \verb|\footnote{La note.\label{NOTE}}|.
+Je peux faire à nouveau appel à cette note\refmark{NOTE}
+ par l'ordre \verb|\refmark{NOTE}|.
+
+\bigskip
+Par analogie avec l'environnement \verb|verse| :
+\begin{verse}
+%\moretolerance % pour eviter un leger overfull hbox
+1\iere{} ligne : cette ligne est bien trop longue, elle doit être coupée autant de fois que nécessaire...\\
+2\ieme{} ligne : le test terrible de...\\%
+3\ieme{} ligne : `ceci est le test des quotes'\\
+\end{verse}
+\tthyphenation
+voici le même test (sans \verb|\\|)
+avec l'environnement \vers|versatim| qui est
+un environnement \vers|verba|\-\vers|tim| composé
+avec des coupures de lignes
+comme l'est l'environnement \verb|verse| et dont les {\em quotes} peuvent
+être imprimées avec des accents si on précise
+\vers|\noenglishquote| :
+\noenglishquote
+\begin{versatim}
+1\iere{} ligne : cette ligne est bien trop longue, elle doit être coupée autant de fois que nécessaire...
+2\ieme{} ligne : le test terrible de \end{document}
+3\ieme{} ligne : `ceci est le test des quotes'
+\end{versatim}
+\englishquote
+
+\allowuchyph
+Et maintenant voici l'ordre réduit \verb|\vers| qui
+s'utilise comme \verb|\verb| et doit permettre de couper une
+longue chaîne de caractères \texttt{ver\-batim}. Celle-ci
+sera coupée par défaut entre les mots (\vers|\notthyphe|\-\vers|nation|)
+mais pourra l'être à l'intérieur des mots si on précise
+\tthyphenation \vers|\tthyphe|\-\vers|nation| comme ici : <<
+\vers|Longue Chaîne De Caractères À Couper Absolument| >>.
+Les mots commençant en majuscule ne pourront être coupés
+que si \vers|\uchyph=1|, valeur par défaut dans \FP\
+(\vers|\|\vers|allow|\-\vers|uchyph|) qui est utilisée pour cette
+partie uniquement.
+
+\subsection*{Test de {\mdseries\texttt{\textbackslash fsc}}
+(\fsc{French CAPS})}
+Ce paragraphe teste la protection de certaines macro-instructions.
+
+\disallowuchyph\notthyphenation
+\newpage\english
+\section{Other useful macros}
+French patronymic names are printed in small capitals with the first
+letter in uppercase. That is done with the \verb|\fsc| macro.
+Another macro \verb|\lsc| is available to print all the word(s) in small
+capitals, specially usefull for trademark or companies names.
+
+\LaTeX{} is at the current time unable to print a \verb|\ref| as
+a footnotemark, the command \verb|\refmark| is able to do that.
+
+Also, \LaTeX{} doesn't offer any {\tt verbatim} style able to
+hyphenate lines. \FP\ is able to do this with the
+environment {\tt versatim} or the \texttt{\textbackslash vers} order within a
+line.
+
+These environments allow to replace the {\tt tt} quoting
+({\tt ` '}) by more realistic ones ({\tt\`{ } \'{ }}) with
+the order \texttt{\textbackslash noenglishquote}. Of course this environment
+produce nothing different from the standard \verb|verbatim| when
+used in \verb|\english|:
+{\overfullrule=5pt
+
+\hfuzz=30pt
+\begin{versatim}
+1\iere{} ligne : cette ligne est bien trop
+2\ieme{} ligne : le test terrible de...
+3\ieme{} ligne : `ceci est le test des...
+\end{versatim}
+
+\SmsG%
+
+And now this a test of a long string within a \verb|\vers|:
+``\vers|Longue Chaîne De Caractères À Couper A|
+This string would be hyphenated only if someone said
+\verb|\tthyphenation| previously.
+}
+
+\FmsG%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\section{Accents et {\mdseries\tt tabbing}}
+\FP\ apporte une solution pour pouvoir introduire
+des lettres accentuées dans un environnement \vers|tabbing| lorsque
+le source \TeX{} est en 7bits ou utilise Ml\TeX{}
+\footnote{%
+Cette option est aussi utile désormais en T1 car les lettres accentuées
+sont traduites avec \FP, de façon interne, en 7-bits à la \TeX.
+ }%
+ ; c'est l'option par défaut
+\vers|\|\vers|tabbing|\-\vers|accents|\tabbingaccents. L'exem\-ple :
+\begin{tabbing}
+Les TYPES : \= Les matieres \= Les genres \kill
+Bidon : \> d'huile \>$A'=B''$\` normal \\
+Caisse : \> \`%
+ a outils \> rustique \\
+Toile : \> \a`%
+ a matelas \> confort
+\end{tabbing}
+\notabbingaccents
+doit s'imprimer ainsi :
+\begin{tabbing}
+Les TYPES : \= Les matieres \= Les genres \kill
+Bidon : \> d'huile \>$A'=B''$\` normal \\
+Caisse : \>\a`a outils \> rustique \\
+Toile : \>\a`a matelas \> confort \\
+\end{tabbing}
+\vspace*{-0.5\baselineskip}
+Nous l'avions saisi comme suit :
+\begin{versatim}
+\begin{tabbing}
+Les TYPES : \= Les matieres \= Les genres \kill
+Bidon : \> d'huile \>$A'=B''$\` normal \\
+Caisse : \> \`%
+ a outils \> rustique \\
+Toile : \> \a`%
+ a matelas \> confort
+\end{tabbing}
+\end{versatim}
+
+\section{Figurettes}
+Le style \verb|french| propose un environnement spécial, appelé
+\verb|figurette|,
+ pour placer les figures à l'enfroit exact où
+ces figures se présentent
+dans le texte. Cela est particulièrement utile pour des petites figures,
+domaine où \LaTeX{} n'est pas adapté en standard.
+Pour réaliser ceci :
+ \begin{figurette}
+ \center\fbox{essai}\endcenter% rajoute pour plain TeX
+ \caption{Ceci est une figurette}
+ \label{figurette}
+ \end{figurette}
+Nous avons écrit :
+\begin{verbatim}
+ \begin{figurette}
+ \center\fbox{essai}
+ \caption{Ceci est une figurette}
+ \label{figurette}
+ \end{figurette}
+\end{verbatim}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\english
+\section{Diacritics \& {\mdseries\tt tabbing}}
+There is no way in a \LaTeX{} \texttt{tabbing} to put diacritics on letters
+as we use them usually. Here is how is printed the {\tt tabbing}
+you can find in the french part:
+
+\begin{tabbing}
+Les TYPES : \= Les matieres \= Les genres \kill
+Bidon : \> d'huile \>$A'=B''$\` normal \\
+Caisse : \> \`%
+ a outils \> rustique \\
+Toile : \> \`%
+ a matelas \> confort
+\end{tabbing}
+
+and that would normally be printed as follows:
+
+\begin{tabbing}
+Les TYPES : \= Les matieres \= Les genres \kill
+Bidon : \> d'huile \>$A'=B''$\` normal \\
+Caisse : \>\a`a outils \> rustique \\
+Toile : \>\a`a matelas \> confort \\
+\end{tabbing}
+
+ \begin{figurette}
+ \center\fbox{essai}\endcenter% rajoute pour plain TeX
+ \caption{Originally a figurette}
+ \label{engfig}
+ \end{figurette}
+\NL{4}
+
+\section{Little figures}
+
+\FP\ offers a special environment called
+\verb|figurette| which allows to put little figures EXACTLY
+where they appear in the text. This is a lack in the present
+versions of \LaTeX{}. In English the environment \verb|figurette|
+is replaced by an environment \verb|figure[h]|; look at figure
+\ref{engfig} we tried to put here without success and we
+typed like this:
+
+\begin{verbatim}
+ \begin{figurette}
+ \center\fbox{essai}
+ \caption{Originally a figurette}
+ \label{engfig}
+ \end{figurette}
+\end{verbatim}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\ifx\drapeaufg\undefined\else
+\section{Composition \protect\linebreak en drapeau}
+À gauche on trouve une composition justifiée standard \LaTeX.
+Dessous, une composition avec l'environnement \texttt{drapeaufg}
+proposé par l'extension \FP, il s'agit d'une composition
+\emph{en drapeau, au fer} à gauche. À droite, il s'agit aussi d'une
+composition \emph{en drapeau, au fer} à gauche mais cette fois-ci avec
+l'environnement \texttt{drapeaufgIN}, sans coupure de mots, comme cela
+est recommandé par l'imprimerie nationale.
+
+\subsection{Tests ordinaires}
+\textbf{\large Texte justifié de référence}
+
+\medskip
+\def\GOfrench{\noindent{\fboxsep 0pt\fboxrule 0.2pt\fbox{\advance\hsize by -2pt
+ \hbox{\vbox{\noindent
+<< Par ailleurs, les lignes n'occupant pas toute la
+ justification (titres ou légendes le plus souvent) peuvent être
+ \emph{centrées} ou se présenter alignées verticalement
+ par la gauche sur la
+ marge de gauche de la page, ou \XX
+ verticalement par la droite sur la marge de
+ droite de la page. On dira alors qu'elles sont composées
+\emph{en drapeau, au fer} à gauche ou \emph{en drapeau, au fer} à droite.
+Dans ce type de composition, les coupures de mots sont proscrites et les
+rejets à la ligne devront obéir à une certaine logique souvent dictée par le
+sens. Ainsi on ne séparera pas l'article du substantif, le pronom personnel
+sujet de son verbe, l'adjectif numéral du nom auquel il se \XX
+rapporte, \etc. >>
+(règles Imprimerie Nationale, p~153)%
+}}\hss}}}
+
+\let\XX\relax
+\GOfrench
+
+\hbox{}
+
+\textbf{\large Drapeau, au fer à gauche}
+
+\medskip
+\begin{drapeaufg}
+\GOfrench
+\end{drapeaufg}
+
+\newpage
+\enlargethispage{20pt}\hbox{}\smallskip
+
+\hbox{}\smallskip\NL5
+Dans ce dernier cas, des débordements dans la marge droite
+sont possibles ; ils sont à traiter
+au cas par cas par de simples coupures de lignes placées aux endroits
+recommandés par l'imprimerie nationale (selon texte encadré). Le
+dernier texte est ainsi corrigé.\NL3\vspace*{-2.5pt}
+
+\textbf{\large Drapeau << fg >>, selon IN}
+
+\medskip
+\begin{drapeaufgIN}
+\GOfrench
+\end{drapeaufgIN}
+
+\medskip
+\textbf{\large Drapeau << fg IN >>, corrigé}
+
+\medskip
+\let\XX\\
+\begin{drapeaufgIN}
+\GOfrench
+\end{drapeaufgIN}
+
+\newpage
+\subsection{Tests en drapeau << fg >>, aux limites}
+Voici deux tests aux limites de la composition
+\emph{en drapeau, au fer} à gauche, sur une colonne
+étroite (2cm) tout d'abord avec l'environnement
+\texttt{drapeaufg} et ensuite avec la recommandation
+de l'imprimerie nationale appliquée à
+\FP\ (ou interprètée par l'environnement \texttt{drapeaufgIN}).
+
+Les coefficients de laideur (\texttt{badness})
+acceptés sont élevés, c'est la raison pour laquelle
+aucun message d'\texttt{underfull hbox}
+(tout comme celui d'\texttt{overfull})
+n'est émis dans les deux cas
+ci-dessous.
+
+\bigskip
+
+\def\temp{\noindent{\fboxsep 0pt\fboxrule 0.2pt\fbox{\advance\hsize by -2pt
+ \hbox{\vbox{\noindent
+ instit instits
+institut instituts
+institution institutions
+institutionnel institutionnels
+institutionnelle institutionnelles
+institutionnellement
+constitutionnellement
+inconstitutionnellement
+}}\hss}}}
+
+\let\XX\relax
+\parbox{2cm}{%
+\begin{drapeaufg}
+\hsize=2cm
+\temp
+\end{drapeaufg}
+}
+\hspace*{0.5cm}
+\parbox{2cm}{%
+\begin{drapeaufgIN}
+\hsize=2cm
+\temp
+\end{drapeaufgIN}
+}
+
+\newpage
+\subsection{Tests en drapeau << fd >>, aux limites}
+Nous effectuons ici les mêmes test mais avec
+les environnements \texttt{drapeaufd} (fer à droite)
+et \texttt{drapeaufdIN} (selon imprimerie nationale).
+En fait, l'environnement
+\texttt{drapeaufd} est tout simplement
+un \texttt{raggedleft}.
+\NL{9}
+
+\let\XX\relax
+\parbox{2cm}{%
+\begin{drapeaufd}
+%\mbox{Avec \the\rightskip :}
+\hsize=2cm
+\temp
+\end{drapeaufd}
+}
+\hspace*{0.5cm}
+\parbox{2cm}{%
+\begin{drapeaufdIN}
+%\mbox{Avec \the\rightskip :}
+\hsize=2cm
+\temp
+\end{drapeaufdIN}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\Large
+\let\XX\relax
+\subsection{Test << fd >> classique}
+
+\begin{drapeaufd}
+\GOfrench
+\end{drapeaufd}
+
+\normalsize\bigskip
+
+L'œil aiguisé sera troublé car
+les deux colonnes ne sont pas alignées horizontalement ;
+cela est dû à la différence de matériel à composer, au total,
+dans chacune des deux colonnes.
+
+\vfill
+
+\newpage
+\Large
+\subsection{Test << fd >> IN}
+\begin{drapeaufdIN}
+\GOfrench
+\end{drapeaufdIN}
+
+\normalsize\bigskip
+
+Quelque soit le corps de la police (dans les limites
+classiques de \LaTeX{}), avec cette largeur de colonne,
+on n'obtient pas de différence
+de mise en page entre les deux environnements. Les règles
+de l'imprimerie nationale sont donc plus largement appliquées
+dans ce cas.
+
+\vfill
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\onecolumn
+\newpage\french
+\hbox{}
+\vfill
+\centerline{\Large Page intentionnellement laissée blanche}
+\vfill
+\twocolumn
+
+\fi% on a saute si drapeaufg est inconnu (frencht)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\section{Lettrines}
+\SmsG% lettrine reduite a 1 seule lettre !
+Voici le test des lettrines proposées en mode semi-automatique
+avec \FP\ :
+
+\bigskip
+\verb| \flettrine{Quoi ?}|
+\flettrine{Quoi ?} {Paris}
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés.
+
+<< Ici démarre une lettrine dans une citation.
+
+\bigskip
+\lettrine{Paris}
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés.
+
+\bigskip
+\flettrine{Paris}
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés.
+
+et la citation se termine ici. >>
+
+\bigskip
+\verb| \font\lettrinefont=cmr17 scaled|\\
+{\font\lettrinefont=cmr17 scaled \magstep5
+\verb| \magstep5\lettrine[`` {Paris} '']|
+\lettrine[`` {Paris} '']
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés.\par}
+
+\bigskip
+\verb| \lettrine[<< {Paris} >>]|
+\lettrine[<< {Paris} >>]
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés.
+
+\bigskip
+\verb| \flettrine[<< {Paris} ]|
+\flettrine[<< {Paris} ]
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés. >>
+
+\bigskip
+\tthyphenation\noindent
+\vers|\|\vers|font\lettrinefont=cmti12 scaled| \!\vers| \magstep4\lettrine|
+{\em \% vérification d'italique.}
+\font\lettrinefont=cmti12 scaled \magstep4\lettrine
+Blalbla {\bf je blablate}, tu blablates, ils blablatent, b...
+(ceci est l'exemple même de ce qu'il ne faut pas faire car ainsi
+le mot n'est pas mis en petites capitales). Ceci avait pour but
+de tester une police italique.
+
+\bigskip
+\lettrine{L'absurdité} de cette lettrine...
+
+\notthyphenation
+\FmsG
+
+\newpage\english
+
+\section{Illuminated letters}
+
+Look at the French part of this document because, in English,
+these macros have no effect:
+
+\bigskip
+\verb| \flettrine{Quoi ?}|
+\flettrine{Quoi ?} {Paris}
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés.
+
+<< Ici démarre une lettrine dans une citation.
+
+\bigskip
+\lettrine{Paris}
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés.
+
+\bigskip
+\flettrine{Paris}
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés.
+
+et la citation se termine ici. >>
+
+\bigskip
+\verb| \font\lettrinefont=cmr17 scaled|\\
+{\font\lettrinefont=cmr17 scaled \magstep5
+\verb| \magstep5\lettrine[`` {Paris} '']|
+\lettrine[`` {Paris} '']
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés.\par}
+
+\bigskip
+\verb| \lettrine[<< {Paris} >>]|
+\lettrine[<< {Paris} >>]
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés.
+
+\bigskip
+\verb| \flettrine[<< {Paris} ]|
+\flettrine[<< {Paris} ]
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés. >>
+
+\bigskip
+\noindent
+\verb|\font\lettrinefont=cmti12 scaled| \verb| \magstep4\lettrine|
+%{\em \% vérification d'italique.}
+\font\lettrinefont=cmti12 scaled \magstep4\lettrine
+Blalbla {\bf je blablate}, tu blablates, ils blablatent, b...
+(ceci est l'exemple même de ce qu'il ne faut pas faire car ainsi
+le mot n'est pas mis en petites capitales). Ceci avait pour but
+de tester une police italique.
+
+\bigskip
+\lettrine{L'absurdité} de cette lettrine...
+
+\onecolumn\newpage%
+\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% ===>>>> Il n'y a plus d'anglais au delà de cette limite <<<<===
+\def\lastlinein#1{\expandafter\gdef\csname #1\endcsname{\relax}}
+\lastlinein{english}% this is for frencht.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\section{Lettrines automatiques ou non}
+
+\bigskip
+\lettrine{THIS IS A TEST} (a non-automatic one)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+\bigskip
+\flettrine{THIS IS A TEST} (a non-automatic one)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+\bigskip
+\automaticlettrine
+
+\lettrine{THIS IS A TEST} (a default automatic one)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+\bigskip
+\flettrine{THIS IS A TEST} (a default automatic one)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+
+\bigskip
+\def\lettrinefontname{cmr17}
+\lettrine{THIS IS A TEST} (a cmr17 automatic one)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+\bigskip
+\flettrine{THIS IS A TEST} (a cmr17 automatic one)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+\bigskip
+\lettrine{Que vaut ce test ?} (en automatique)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+\bigskip
+\noautomaticlettrine
+\lettrine{THIS IS A TEST} (a non-automatic one)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+\bigskip
+\lettrine{Que vaut ce test ?} (non-automatique)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\section{Énumérations}
+L'espacement des énumérations françaises est
+ profondément modifié avec \FP, pour s'en
+convaincre voir le test des listes page \pageref{listes} ou
+l'environnement \texttt{order} ci-après.
+
+\section{L'environnement << {\mdseries\texttt{order}} >>}
+Un environnement spécifique est proposé, il s'agit de l'environnement
+\verb|order| pour \LaTeX{} dont voici un petit exemple :
+
+\begin{order}
+\item Bien regarder ;
+\item l'espacement de chaque élément est spécial ;
+\item l'espacement vertical est aussi différent.
+\item A-D-O-P-T-E-Z \ \ L-E !
+\end{order}
+
+Ce prototype correspond bien aux énumérations
+françaises (je ne
+parle pas uniquement des marqueurs -- primo, secundo, \etc. --
+mais aussi de la gestion des espaces). En voici un autre exemple
+concret :
+\NL1
+
+Les guillemets entrent aussi en ligne de compte : << Je citerai
+3 cas très importants :
+\begin{order}
+\item le premier cas ;
+\item le second ;
+\item le dernier.
+\end{order}
+qui sont [...] >>
+\NL1
+
+À noter que ce mécanisme de rajout des guillemets en début de
+chaque élément de liste marche aussi avec un environnement
+comme \texttt{itemize}.
+
+\expandafter\ifx\csname frenchTeXmods\endcsname\relax
+ \space% ce test ne marche pas en LaTeX standard.
+\else
+ \ifx\frenchTeXmods\empty\space% ni en dummy french !
+ \else
+\section{Tests aux limites des guillemets anglais}
+
+Vérifions qu'il est possible d'activer temporairement
+quelques caractères sans perturber le traitement. Exemple :
+
+\begin{verbatim}
+{\catcode`\'=\active\catcode`\'=\active
+ `` Test guillemets anglais ''
+}
+\end{verbatim}
+
+{\catcode`\'=\active\catcode`\'=\active
+ `` Test guillemets anglais ''
+}
+ \fi
+\fi
+
+Un cas bien spécial avait été rencontré avec l'extension \myverb|amstex|
+qui utilisait une référence avec des mathématiques dans une autre
+référence, ce qui entrainait une boucle infinie avec \FP. Voici
+le test en question :
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% this code generates a loop with versions of french < V3,42 %%%%%%
+\makeatletter
+\def\r@ref{{\ref{nulllabel}$'$}}{1}
+\makeatother
+\ref{ref} = 1 $'$ % boucle garantie si < V3,42
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Autre test aux limites ?
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\section{<< Autres tests >>}
+Nous sommes ici en une colonne.
+
+\bigskip
+Voici un test d'encadré contenant le mode \verb|centering| :
+\begin{center}\fbox{%
+\parbox{6cm}{\begin{center}Information : si vous voulez me joindre,
+mon tél. : 01 69 35 85 40. Je n'y suis qu'aux horaires de
+bureau.\end{center}}%
+ }\end{center}
+
+Bon ?\footnote{L'objet de cette note de bas de page est
+de vérifier l'espacement des inférieurs et supérieurs,
+\primo en \texttt{\backslash tt} :
+\texttt{XXXX ===> <=== YYYY} et
+\secundo en {\tt verbatim} :
+\myverb|french V4 < french V5 > frenchOLD|%
+.}
+
+\begin{table*}[h]
+\caption{Dactylographie et typographie comparées}
+\label{frenchdactylo}
+\vspace*{1cm}
+\huge
+\begin{tabular}{|r|r|}
+\hline
+dactylographie\ \ \ \ \hfill & \ \ \ typographie\ \ \ \hfill\\
+\hline
+ \verb|use \dots or \ldots| \ & use \dots\ or $\ldots{}$\ \\
+ \verb|utilisez...| \ & utilisez...\ \\
+ \verb|semi-colon;| \ & semi-colon;\ \\
+ \verb|point-virgule ;| \ & point-virgule ;\ \\
+ \verb|My god!| \ & My god!\ \\
+ \verb|Mon dieu !| \ & Mon Dieu !\ \\
+ \verb|Why not?| \ & Why not?\ \\
+ \verb|Pourquoi pas ?| \ & Pourquoi pas ?\ \\
+ \verb|``I say''| \ & ``I say''\ \\
+ \verb|<< Je dis >>| \ & << Je dis >>\ \\
+ \verb|He said: Yes| \ & He said: Yes\ \\
+ \verb|Il dit : non| \ & Il dit : non\ \\
+ \verb|$1\,234,567$| \ & $1\,234,567$\ \\
+ \verb|$f(x,\,y)$| \ & $f(x,\,y)$\ \\
+\hline
+\end{tabular}
+\normalsize
+\end{table*}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifx\itshape\undefined\else% avoid old frencht crash
+\subsection{Test des guillemets dans un \mdseries\texttt{\backslash edef}}
+
+Les guillemets peuvent être appelés dans une définition de macro
+telle que \verb|\edef| mais comme les guillemets ne sont pas expansibles
+entièrement il a donc fallu arriver à réaliser une définition acceptable.
+
+Ainsi \verb|\edef\testedef{<< essai >>}|
+\edef\testedef{<< essai >>}
+donnera la curieuse définition suivante : \\
+\hbox{}\hfill\texttt{\meaning\testedef} ; \\
+elle reste complètement expansible (dans certaines conditions)
+ou pas du tout (comme ici appelée en tt on obtiendra
+le résultat suivant : \texttt{\testedef}).
+\fi
+
+\subsection{{\mdseries\tt <{}} et {\mdseries\tt >{}} redéfinis}
+
+Mes utilisateurs sont terribles ! Ils veulent le beurre, l'argent du
+beurre et aussi la fermière... S'ils codent
+\verb9\def\truc<#1|#2>{/#1 OU #2/}9
+ ils veulent pouvoir obtenir
+/Essai OU Erreur/ en saisissant \verb9\truc<Essai|Erreur>9. Faisons
+l'essai réel :
+{\def\truc<#1|#2>{/#1 OU #2/} \truc<Essai|Erreur>}.
+
+Encore plus fort : nous voulons avoir une notation de Backus-Naur
+c'est-à-dire des \verb|\rangle| et \verb|\langle|. Voici la
+définition que nous avons entrée avant le \verb|\begin{document}| :
+\begin{verbatim}
+{\catcode`\<=\active\catcode`\>=\active%
+\global\def<{\left\langle}\global\def>{\right\rangle}
+}
+\end{verbatim}
+
+Pour tester l'efficacité de ces macros il suffit alors de faire
+par exemple :
+\begin{verbatim}
+<< $<assignement>$ >>
+\end{verbatim}
+à condition que l'option \verb|\frenchguillemets| soit
+active (en maths).
+
+Essayons cela :
+% en fait il faut reactiver cela maintenant :
+{%
+ \gdef\myinf{\left\langle}%
+ \gdef\mysup{\right\rangle}%
+<< $\frenchguillemets% on a \nofrenchguillemets avec AmSTeX
+ <assignement>$ >>.
+}%
+% Remettre ici pour frenchle
+\global\let\myinf\inferieura% A no-op def
+\global\let\mysup\superieura% for a temporary action
+
+\subsection{\mdseries\texttt{\textbackslash special}}
+L'inclusion d'une commande \verb|\special| est ici testée :\\
+{%%%%%%%%%%%% attention : commentaires impossible dans cette partie.
+ \catcode`\%=12
+ \texttt{\backslash special}\verb|{ps:|{\tt %%%
+ }\verb| Texte bidon {`<<manuel:C;!?>>'}}|
+ \special{ps:%%%
+ Texte bidon {`<<manuel:C;!?>>'}}
+}
+
+\subsection{{\mdseries\texttt{\textbackslash refmark}} dans un tableau}
+
+Où l'on reparle encore de \verb|\refmark|...
+
+La note \ref{bas} est référencée depuis le tableau ci-dessous, tout comme
+les notes du tableau lui-même.
+
+ \begin{table}[htbp]
+ \begin{center}
+ \begin{tabular}{|c|l|}
+ \hline
+ Lettre & Utilisation\\
+ \hline
+ {\tt h} & petit blabla gentil et anodin \refmark{bas}\\
+ {\tt l} & ici reblabla assez moyen\refmark{bas}$^,$\refmark{refnote}\\
+ {\tt L} & autre grand grand grand blabla
+ \footnote{La note du tableau << refmark >>.\label{refnote}}\\
+ \hline
+ \end{tabular}
+ \caption{Le titre du tableau.}
+ \end{center}
+\end{table}
+
+En dehors du tableau on peut faire appel\footnote{La note de page.\label{bas}}
+à une note qui est, par contre, référencée dans le tableau. Tout cela
+est réalisé grâce à l'ordre \verb|\refmark| introduit par l'extension
+\FP.
+
+\subsection{{\mdseries\texttt{\textbackslash nombre}} en argument}
+
+Voici un test simple permettant de valider \verb|\nombre| lorsqu'il
+est en argument d'une macro-instruction :
+
+\begin{verbatim}
+\noindent
+1\,234 un nombre simple !\\
+$*$\\
+\nombre{1 234} un nombre simple !\\
+\nombre{1 234,5} avec une décimale.\\
+\texttt{\nombre{1 234,56} avec fonte tt.}\\
+\emph{\nombre{1 234,567} en mode emphasé.}\\
+\nombre{1 234,567 8} avec encore une décimale.
+\end{verbatim}
+
+Il faut noter que l'ordre \verb|\nombre| est toujours composé en mode
+mathématique ce qui force l'utilisation des fontes mathématiques.
+Tout changement de fonte doit donc être précisé de façon ad hoc.
+Par ailleurs, la composition n'est garantie que si l'option
+\verb|\nofiles| n'a pas été indiquée en début de document.
+Voici ce que ce test donne :
+
+\noindent
+1\,234 un nombre simple !\\
+$*$\\
+\nombre{1 234} un nombre simple !\\
+\nombre{1 234,5} avec une décimale.\\
+\texttt{\nombre{1 234,56} avec fonte tt.}\\
+\emph{\nombre{1 234,567} en mode emphasé.}\\
+\nombre{1 234,567 8} avec encore une décimale.
+
+\ifx\documentclass\undefined % Still Plain! so no \DeclareFontFamily
+\else%
+\subsection{{\mdseries\texttt{\textbackslash label}} en mode math}
+
+Il s'agit ici de tester la commande \verb|\label| dans un environnement
+\verb|equation| :
+
+\begin{verbatim}
+Vérifions le numéro de l'équation \ref{labelequation} ci-dessous :
+\begin{equation}\label{labelequation}
+V_{Lm}=\frac{L}{t_p}
+\end{equation}
+\end{verbatim}
+
+Voici le résultat du test :
+
+Vérifions le numéro de l'équation \ref{labelequation} ci-dessous :
+\begin{equation}\label{labelequation}
+V_{Lm}=\frac{L}{t_p}
+\end{equation}
+\fi
+
+\csname TexteComplementaire\endcsname
+
+\subsection{Bibliographie}
+Voyons maintenant la bibliographie.
+Dans \cite{`<<manuel:Gaulle;!?>>'} on trouvera...
+\nocite{`<<merci:Ronan;!?>>'}
+Par contre
+\cite[pp.1--3, X \& consorts]{<<blabla>>}
+est beaucoup plus fourni en exemples et commentaires... Mais dans
+\cite[p. 25 \S~13 {{\it et seq.}}]{`<<torture:Gaulle;!?>>'}
+toutes ces informations
+sont plus détaillées.
+
+Ce qui suit n'est pas un exemple de belle bibliographie, juste une
+vérification de bon fonctionnement.
+
+\bibliographystyle{plain}
+
+\begin{thebibliography}{Knuth 99}
+
+\section*{Bibliographie dans le document}
+
+\bibitem[Knuth 99]{<<blabla>>} Le \TeX book ou la << bible >>
+ des gourous \TeX
+\bibitem{`<<manuel:Gaulle;!?>>'} B. {\sc Gaulle}, {\em
+ Le résultat d'une << {\em dure} >> journée de travail !}
+\bibitem{`<<merci:Ronan;!?>>'} R. {\sc Keryell}, {\em
+ Le gentil normalien qui m'a beaucoup aidé grâce à sa thèse...}
+\bibitem{`<<torture:Gaulle;!?>>'} B. {\sc Gaulle}, {\em
+ Notice d'utilisation du style french}, 1991-1999.
+\bibitem{`<<tortureFP:Gaulle;!?>>'} B. {\sc Gaulle}, {\em
+ Notice d'utilisation de l'extension \FP\ pour \LaTeX}, 2000-20xx.
+\end{thebibliography}
+
+\ifx\documentclass\undefined % Still Plain! so skip
+\else%
+\section*{\phantom{\normalsize[Knuth 99]}Bibliographie en dehors du document}
+
+Avec certaines extensions de bibliographie il peut s'avérer utile
+de protéger les caractères actifs à l'intérieur même de la base
+de données bibliographique.
+
+\bibliography{testbib}
+\fi%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\listoffigures
+\listoftables
+\glossary{Façon cordon bleu}
+\glossaires
+\section*{Glossaire des mots techniques}
+\printglossary[\jobname.glo]
+
+\noindent -- magnification
+
+\noindent -- caractères spéciaux : \NL1
+
+{\huge%\frenchmacros n'est pas utile ici
+\begin{tabular}{|c|c|}
+\hline
+Pour imprimer ceci & Saisir cela\\ \hline
+\at & \verb|\at|\\ \hline
+\texttt{\vert} & \verb|\texttt{\vert}|\\ \hline
+\tilde & \verb|\tilde|\\ \hline
+\texttt{\backslash}& \verb|\texttt{\backslash}|\\ \hline
+\chap & \verb|\chap|\\ \hline
+\degre & \verb|\degre| \\ \hline
+\degres & \verb|\degres| \\ \hline
+\normalsize
+1\ier{} étage & \verb|1\ier{} étage| \\ \hline
+\normalsize
+(2\ieme\!) & \verb|(2\ieme\!)| \\ \hline
+\primo & \verb|\primo|\\ \hline
+\secundo) & \verb|\secundo)|\\
+\hline
+\end{tabular}
+} \NL1
+
+On notera que le caractère \verb|\degre| n'est pas le signe typographique
+usuellement utilisé pour exprimer
+des degrés mais que \verb|\degres| est
+plus conforme à la tradition. On remarque bien les différences entre
+\verb|\primo| et \verb|\secundo)|
+(la forme parenthésée n'est pas valable
+en {\em belle} typographie française).
+\primo... \secundo... \tertio... \quarto...
+\primo)... \secundo)... \tertio)... \quarto)...
+
+\section*{Glossaire argotique}
+Le pied
+
+\printindex
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\part{Ce qui ne marche pas (bien)...}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{Quelques questions à étudier}
+
+Cette partie ne comporte que des << anomalies >> que l'auteur espère
+résoudre d'ici quelque temps,
+grâce à votre aide... peut être ?
+
+En fait il ne reste vraiment
+pas grand chose à règler mais ce sont probablement des
+vieux problèmes sacrément compliqués.
+
+\section{Le << 2 points >>}
+Le << 2 points >> a une fâcheuse tendance
+à rester en bas de page lorsqu'il est
+suivi d'un {\tt verbatim}. Il serait souhaitable d'en trouver la raison.
+
+\section{Les guillemets}
+
+Le problème avec \verb|quotation| page \pageref{quotation}.
+
+%Et la perte d'informations
+%dans le cas de \verb|\noeveryparguillemets| lorsque l'on démarre
+%une citation dans un paragraphe déjà commencé.
+%
+%Vraiment très {\em fragile} ce \verb|\noeveryparguillemets| ! (
+
+Voir le cas des notes
+de bas de page ou en marge qui produis(ai ?)ent des désastres
+avec \verb|\noeveryparguillemets|.
+
+\section{Le cas des extensions mal écrites ...}
+
+... ne se résout souvent que par la modification de l'extension en question.
+Cela a été le cas de nombreuses extensions depuis le début de \frenchname{}
+et j'ai bien peur que cela continue \emph{éternellement}% (et à propos : qui me succèdera ?)
+.
+Ici Bernard Gaulle ajoutait (déjà en 2002) : << et à propos : qui me succédera ? >>.
+Nous pensons que le groupe de travail autour du projet e-french répond à sa question.
+
+Certains cas sont insolubles, par exemple :
+l'extension \verb|here.sty|
+redéfinissait << au vol >>
+l'ordre \LaTeX{} \verb|\table| au lieu
+de modifier l'existant ; cela posait un réel problème à FrenchPro
+qui se base sur la modification d'une commande \verb|\table|
+existante. Heureusement ce style périmé peut être remplacé
+avantageusement par \verb|float|.
+
+Notons qu'aujourd'hui avec les diverses variantes de \texttt{float},
+ce problème n'existe plus (comme bien d'autres d'ailleurs).
+
+\chapter{Améliorations à envisager}
+
+\section{Index et bibliographie}
+Deux thèmes qui n'ont que très peu été abordés.
+
+\section{Abréviations}
+Il est fâcheux d'avoir à connaître quelles sont les mots
+abrégeables pour pouvoir demander leur abréviation ; autant les saisir
+correctement dès le début...
+
+Faut-il arrêter la composition \LaTeX{} quand une abréviation
+n'est pas trouvée ?
+
+Faut-il offrir la possibilité de lister toutes les abréviations ?
+
+\annexes
+\hsize=18cm
+%
+%\chapter{Copyright}
+%\Mylisting{copyrigh.tex}
+%
+%\chapter{Le fichier \mdseries{\tt language.dat}}
+%\Mylisting{language.dat}
+
+\chapter{Le fichier \mdseries{\tt frabbrev-u8.tex}}
+\Mylisting{frabbrev-u8.tex}
+
+% retire pour mettre french.cmd 98/06
+%\chapter{Le fichier \mdseries{\tt french.dmy}}
+%My\listing{french.dmy}
+
+\chapter{Le fichier \mdseries{\tt french.cmd}}
+\Mylisting{french.cmd}
+
+\chapter{Le fichier \mdseries{\tt french.chk}}
+\Mylisting{french.chk}
+%
+%\chapter{Un style english (\mdseries{\tt fenglish})}
+%\Mylisting{fenglish_doc}
+
+%\chapter{Le code de l'extension \FP}
+%
+%\Mylisting{french_doc.txt}
+
+\newpage
+\hsize=15cm
+\abbreviations\noenglishdoublequotes
+\tableofcontents
+\noabbreviations\englishdoublequotes% remove options set for toc.
+
+\english %=\relax if english text (see \lastlinein)
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/doc/test/XeLaTeX/lisez-moi.txt b/language/french/e-french/texmf/doc/test/XeLaTeX/lisez-moi.txt
new file mode 100644
index 0000000000..dd87b0a242
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/XeLaTeX/lisez-moi.txt
@@ -0,0 +1,2 @@
+Pour compiler ajouter ..\mymaj et ..\mylist ici.
+Ceci est un essai loin de la grande perfection.
diff --git a/language/french/e-french/texmf/doc/test/french.tst b/language/french/e-french/texmf/doc/test/french.tst
new file mode 100644
index 0000000000..7404ef046d
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/french.tst
@@ -0,0 +1,3805 @@
+% !TeX encoding = latin9
+% This is the french torture file for all formats.
+% Copyright Bernard Gaulle as in french.doc
+%
+% À passer en 8 bits conformément à votre système
+%
+%% checksum = "25011 3750 14847 120214"
+%%
+%
+% For localisation:
+%
+\makeatletter%
+\ifx\documentclass\undefined\let\kbAissue\relax\let\typeouA\typeout%
+\else%
+ \let\typeouA\@gobble%
+% For debugging one can remove "msg" access, just uncomment
+%\let\kbAissue\relax% this line.
+ \ifx\kbAissue\undefined%
+% Firstly we add the material to use the "msg" package for localization.
+ \def\kb@issue#1#2{\kb@issue@[#1]#2\void}% The local \issuemsg macro.
+ % which will call the real one;
+ % #1 is the macro message required.
+ % #2 is the message header + msg number
+ % such as "^^J -234-", just message
+ % number (234) is kept.
+ \let\kbAissue\kb@issue%
+ \def\kb@issue@[#1]#2-#3-#4\void{\issuemsg[#1]#3(french)}%
+ \ifx\issuemsg\undefined\let\kbAissue\relax\let\typeouA\typeout\fi%
+ \fi%
+\fi%
+\makeatother%
+%
+% For better debugging:
+\ifx\IeC\undefined
+\kbAissue% localise it.
+\typeout{^^J-66- ERROR! This file can't be typeset without any input}
+ \typeouA{-66- encoding declaration (look at keyboard or inputenc packages.)}
+\expandafter\stop% \usepackage[latin1]{keyboard} should be fine.
+\fi
+\let\FP\frenchpack\hyphenation{e-french} % anciennement French-Pro
+\wlog{Formating \jobname\space with\space\FP\space(\frenchstyleid)}
+%
+%
+\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi%
+\ProvidesFile{french.tst}%
+ [2005/05/11 The torture test file for the package \FP]% **last mods**
+\ifx\undefined\FmsG\def\FmsG{}\def\SmsG{}\fi
+%
+{\catcode`\<=\active\catcode`\>=\active%
+% Je veux :
+%\global\def<{\left\langle}\global\def>{\right\rangle}
+% Et pour ne pas pouvoir avoir l'effet que localement,
+% je fais :
+\gdef<{\myinf}\gdef>{\mysup}
+}
+\label{nulllabel}% null \label for AmSTeX test \ref within a \ref
+\iflatex\makeindex \makeglossary
+ \csname frhyphex\endcsname% load (again) the exceptions, outside babel
+ \def\NL#1{\Sauter#1Lignes}
+ \begin{document}
+ \makeatletter
+ \ifx\babel@savevariable\undefined%
+ \let\FRENCH\frenchTeXmods%
+ \else\def\FRENCH{\selectlanguage{french}}% pour babel
+ \fi%
+ \makeatother
+ \csname onecolumn\endcsname % avoid writting \onecolumn
+ % (special effect in frencht.tex)
+ \renewcommand{\thepage}{\roman{page}}%
+ \ifx\documentclass\undefined\else% for 2e
+ % As 2e doesn't accept \verb in arguments:
+ \gdef\myverb|#1|{%\nonfrench
+ \texttt{#1}%
+ %\endnonfrench
+ \relax}%
+ \fi
+\else
+ \let\FRENCH\frenchTeXmods%
+ \def\NL#1{\par}
+\fi
+\ifx\myverb\undefined\let\myverb=\verb\fi%
+% global here is just req. for TeX--XeT tests.
+\global\let\myinf\inferieura% A no-op def
+\global\let\mysup\superieura% for a temporary action
+\ifx\undefined\english\let\english\relax\fi%
+% Les \ldots sont $\ldots$ a cause de AmSLaTeX V1.1
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\HyphDiff#1#2{{\setbox0=\vbox{%
+ \pretolerance=-1 \hyphenpenalty=-10000
+ \hsize=0pt \leftskip=0pt \rightskip=0pt \parfillskip=0pt
+ \parindent=0pt \hfuzz=\maxdimen \interlinepenalty=0
+ \clubpenalty=0 \widowpenalty=0 \brokenpenalty=0
+ \hskip 0pt #1}%
+ \setbox2=\hbox{}%
+ \setbox9=\vbox{\unvbox 0 \loop \unskip \setbox1=\lastbox
+ \ifhbox 1
+ \global\setbox 2 = \hbox{%
+ \unhbox 1 \discretionary{}{}{}%
+ \unhbox 2}%
+ \repeat}%
+\setbox3\hbox{#2}\ifnum\wd2=\wd3\else
+\kbAissue% localise it.
+\typeout{-31- Wrong French Hyphenation\string!
+ Are you sure to run with a format ***********}
+\typeouA{-31- in which the french patterns were
+ installed at initex time\string? ***********}
+\ifECM\else%
+\kbAissue% localise it.
+\typeout{-32- if yes try to switch to T1 font
+ encoding (\noexpand\usepackage[T1]{fontenc})***}
+\fi%
+\showhyphens{#1}\typeout{(should be\string: #2)
+ \string<\string<======== *********************************}
+\fi}}
+\HyphDiff{éventualité}{éven-tua-lité}
+\HyphDiff{dégazonnage}{dé-ga-zon-nage}
+\HyphDiff{chromosomique}{chro-mo-so-mique}
+%%%%
+\SmsG%
+\typeout{V\'%
+ erification de la sortie de caract\`%
+ eres 8-bits \string:}
+\message{L'\'% \typeout ne transforme pas en 8bits pour l'instant.
+ et\'%
+ e est l\`%
+ a en ao\^%
+ ut \string!}
+\iflatex%
+\typeout{Essai de macro d'accentuation dans un ordre \string\showhyphens %
+ \string:}
+\showhyphens{Faut-il croire \`%
+ a l'\'%
+ ETERNIT\'%
+ E ? \'%
+ eludons ...}
+\showhyphens{Ao\^%
+ ut 2001 ou l'autre \`%
+ ere ...}
+\fi%
+\FmsG%
+%
+\english% Title page is in english
+\ifx\documentclass\undefined % Still Plain! so no \DeclareFontFamily
+\else%
+% To avoid "No file OMScmtt.fd" message 2004/10/29
+\DeclareFontFamily{OMS}{cmtt}{\skewchar\font48 }
+\DeclareFontShape{OMS}{cmtt}{m}{n}%
+ {<->ssub*cmsy/m/n}{}
+\DeclareFontShape{OMS}{cmtt}{m}{it}%
+ {<->ssub*cmsy/m/n}{}
+\DeclareFontShape{OMS}{cmtt}{m}{sl}%
+ {<->ssub*cmsy/m/n}{}
+\DeclareFontShape{OMS}{cmtt}{m}{sc}%
+ {<->ssub*cmsy/m/n}{}
+\DeclareFontShape{OMS}{cmtt}{bx}{n}%
+ {<->ssub*cmsy/b/n}{}
+\DeclareFontShape{OMS}{cmtt}{bx}{it}%
+ {<->ssub*cmsy/b/n}{}
+\DeclareFontShape{OMS}{cmtt}{bx}{sl}%
+ {<->ssub*cmsy/b/n}{}
+\DeclareFontShape{OMS}{cmtt}{bx}{sc}%
+ {<->ssub*cmsy/b/n}{}
+%%%%%%%%%%%%%%%%%%%%%%%
+\fi%
+\makeatletter% for \f@encoding
+\title{\fbox{ \FP\ \LaTeX%
+ \thanks{We are here in english, notice the problem when we use,
+ like in \texttt{frenchla}, a
+ {\mdseries\texttt{\textbackslash fnsymbol}}
+ in a box.\newline%
+ \indent \hspace*{0.5em}
+ Notice also that
+ {\mdseries\texttt{\textbackslash backslash}}
+ can't be used.%
+ }%
+ }\\ \ \\%
+ Version \frenchstyleid\\ \ \\
+ ``Torture'' Test (\jobname) \\ with
+ \ifx\encodingdefault\undefined Unknown
+ \else\ifx\f@encoding\undefined\encodingdefault{}
+ \else\f@encoding{} \fi
+ \fi Font Encoding\\\ }
+ \author{Bernard {\sc Gaulle}%
+ \thanks{Thanks to those good guys who helped me.\newline%
+ \indent\hspace*{0.5em}
+ This test note is also referred by a
+ {\mdseries\texttt{\textbackslash refmark}} call.
+ \label{title:thanks}%
+ }%
+ \\ \ \\ et...\refmark{title:thanks}%
+ }%
+% AmS \normalparindent no more exists 2000/06/15, so the code is removed.
+%\makeatletter% Don't let AMS change \parindent
+%\ifx\RIfM@\undefined\else\normalparindent=1em\parindent=\normalparindent\fi%
+%\makeatother
+\makeatother%
+\date{Printed on \today}
+% As the titlepage is in English but the date in French we let \ier defined:
+{\def\ier{ier}\maketitle}
+\setcounter{page}{2}\thispagestyle{empty}
+\cleardoublepage\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\onecolumn
+\sommaire[4]
+\bigskip
+\begin{center}
+\noindent\fbox{%
+\begin{minipage}[t]{0.5\textwidth}
+\begin{center} \fbox{\parbox{5cm}{{\bf Remarque} : \\ la commande
+\texttt{\backslash som\-maire}\label{pbverb}%
+\footnote{Cette note a été demandée depuis une minipage.}%
+\footnote{Cette deuxième note aussi.}
+%%%%NB : \verb|\sommaire| ou \verb|\tableofcontents| produisent des HORREURS,
+%%%% lorsqu'ils ont utilises dans un \fbox, BUG LATEX !
+ est un apport de \FP.\hfill}}
+\end{center}
+\end{minipage}
+}
+\end{center}
+
+{% Not a LaTeX redefinition : \def\thefootnote{\fnsymbol{footnote}}
+\renewcommand{\thefootnote}{\fnsymbol{footnote}}%
+Essai de note avec \verb|\fnsymbol|
+\footnote{Note avec une étoile.}.
+
+\def\thefootnote{\relax}
+Essai de note de bas de page non numérotée
+\footnote{Note non numérotée.}.
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\cleardoublepage
+\chapter*{\prefacename}
+
+{\em Certains croient qu'une préface peut apporter de la valeur au livre,
+moi je pense plutôt que cela apporte de la {\em valeur}
+à l'auteur...} (dans
+tous les sens du terme).
+
+\cleardoublepage
+
+\twocolumn
+\renewcommand{\thepage}{\arabic{page}}\setcounter{page}{1}%
+\chapter*{Introduction}
+
+\begin{motsclef}
+french, style, francisation, francophonie, multilingue,
+english, option, extension.
+\end{motsclef}
+
+\begin{resume}
+Ce document a été conçu
+uniquement pour tester intensivement \FP\ (anciennement appelé
+option de style%
+ \glossary{« : ; style ? ! »}\index{« : ; style ? »}%
+ \footnote{Cette note a pour but de faire appel à une macro
+ \texttt{\backslash index} contenant des caractères actifs.%
+ \index{« : ; depuis la note de bas de page ? »}%
+ }
+\index{french!Le point d'exclamation est un caractère spécial de Makeindex}%
+\index{<@{\tt\protect\inferieura} ({\tt\protect\backslash inferieura})}%
+\index{>@{\tt\protect\superieura} ({\tt\protect\backslash superieura})}%
+\index{Magic di N'Konga (auteur célèbre)}%
+ \texttt{FrenchPro}).
+\end{resume}
+
+\bigskip Notez que les deux environnements \verb|resume| et \verb|motsclef|
+(ainsi que \verb|keywords|)
+sont des apports de \FP.
+
+\bigskip Si le libellé « Résumé » apparaît dans la partie
+ anglaise, cela
+signifie que \FP\ ne possédait pas de définition
+d'\verb|\abstract| et donc l'a remplacé par \verb|\resume|. Cela signifie
+aussi que les libellés anglais n'ont pas été définis
+%(\verb|\captionnames|%
+%\footnote{Une extension {\tt fenglish} est fournie conjointement avec
+%\FP\ ; {\tt\backslash captionnames} y est défini.
+%Cette extension {\tt
+%fenglish} est automatiquement appelée par \FP\ dans le
+%cas que nous avons cité.}
+% n'était pas défini par les extensions appelées avant
+% \FP).
+Rappelez-vous aussi que \verb|\abstract| ne fait pas partie de la classe
+de document \verb|book|.
+
+Remarquez les différences entre les numéros de notes de bas de page en
+français et en anglais, ainsi que l'impression de ce même numéro en
+bas de la page.
+
+\english\newpage
+\begin{keywords} %???\relax% for AMS which has its own macro with #1
+French, Style, Option, Package, French-Speaking usage, English, Multilingual.
+\end{keywords}
+
+\begin{abstract} The object of this paper is to test intensively \FP.
+\end{abstract}
+\NL1
+
+\bigskip Notice that the three environments
+\verb|resume|, \verb|keywords| and \verb|motsclef|
+are all introduced by \FP.
+
+\bigskip Notice that if the abstract name printed here is not ``Abstract'' you
+are using packages that have no \verb|\abstractname| defined for eng\-lish.
+ The english package defining such captions is loaded only
+if \verb|\captionsnames|%
+\footnote{The {\tt fenglish} package is given with \FP,
+so {\tt$\backslash$captionnames} are normally defined because
+\FP\ is calling automatically the {\tt fenglish} package in the
+pre\-viously cited case.} was
+previously undefined. (Remember also that as \verb|\abstract| is not defined
+in the \verb|book| document class the \FP\ assumes it is a
+\verb|\resume|.)
+
+Notice the different typesetting of the footnote numbers in French and English
+as well as the printing of that numbers before the footnote text.\vfill
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%\pagebreak
+\french
+\part{Ce qui marche est ici...}
+\disallowuchyph% ce que je prefere...
+
+\chapter{Avertissements}
+
+Seul le document authentique qui est fourni par l'auteur
+ sous une forme composée
+constitue la référence. Cela veut dire que l'installateur de \FP\
+sur un système doit comparer son résultat
+(sous forme papier ou
+fichier \verb|.pdf|) avec la forme authentique fournie par l'auteur.
+
+\bigskip
+
+\bigskip \FP\ a été conçu pour fonctionner
+avec la majorité des formats basés sur \LaTeX{}
+\footnote{Au siècle dernier (XX\ieme), \FP\ était appelé « style
+\texttt{french} » et pouvait fonctionner en dehors de \LaTeX\ mais
+l'effort pour assurer cette facilité dans de trop nombreux formats
+exotiques était totalement disproportionné ; ceci a donc été
+abandonné (au moment de la sortie de \LaTeXe).}%
+.
+
+\bigskip \AllTeX{} est mon logo ; il symbolise {\em tous les \TeX{}} ; on peut
+l'imprimer correctement dans toutes les polices ({\em \AllTeX}, {\bf \AllTeX},
+{\sf \AllTeX}, {\tt \AllTeX}, ...) grâce à la partie NFSS de \LaTeXe%
+\footnote{Le document de référence ({\tt frenchrf})
+a été produit avec NFSS. Ce document-ci a été composé avec le format
+{\tt \fmtname}.}
+.
+
+\newpage\english Only the authentic author's document in a composed form is
+the reference. That means that the on site \FP\ installator must
+compare his result (paper or \verb|.pdf| file) with the authentic form
+provided by the author.
+\NL2
+
+\bigskip \FP\ was designed to work with all {\em formats\/}
+based on \LaTeX.
+
+\bigskip \AllTeX{} is my logo ; it's a symbol for expressing
+{\em all \TeX{}} ; one can print it correctly in all shapes
+({\em \AllTeX}, {\bf \AllTeX},
+{\sf \AllTeX}, {\tt \AllTeX}, etc.) due to the NFSS part of \LaTeXe%
+\footnote{The
+reference document was produced with NFSS of {\tt \fmtname}.}%
+.
+
+\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{La torture}
+
+\section{Le saviez-vous ?} Nos journaux, livres, revues,
+articles scientifiques ou autres ont été (en gros) durant les trente
+dernières années du vingtième siècle imprimés
+par des machines d'origine
+américaine. Ainsi, petit à petit, nous perdîmes
+l'habitude de lire des
+majuscules accentuées parce que tout simplement les polices
+ de caractères
+utilisables sur ces machines n'en comportaient pas.
+
+L'usage de plus en plus généralisé de l'infor\-ma\-tique
+{\em américaine} fit ainsi disparaître pendant un temps tous
+ les accents de notre langue écrite.
+
+De la même manière un certain nombre de
+{\em mauvaises habitudes} furent
+prises quasiment inconsciemment tout simplement parce que les programmes
+informatiques ne pouvaient pas faire autrement. Ainsi de nombreuses {\it
+coquetteries} de notre typographie sont tombées dans l'oubli.
+
+Saviez-vous par exemple qu'on n'imprime pas des guillemets comme ceci `` '' ni
+même ` ' mais ainsi « » ? Nous nous autoriserons toutefois
+ à utiliser dans
+ce document ces guillemets %\noenglishquote
+(` ') que nous considérons comme
+{\em techniques}.
+
+\newpage\english \section{Did you know that?}
+Our (french)
+newspapers, books, magazines, scientific articles and other things have
+been printed the last thirty years (roughly)
+of the twentiest century with american machines. So our
+habits to read accented uppercase letters declined because they simply were
+not included in the machinery.\NL2
+
+Together with American computer usage growth, all french
+diacritics disappeared from our french written language.\NL1
+
+In a same way {\em bad
+habits} took place, inconsciously, for the only reason that computer programs
+could not do otherwise. So, a lot of french typographic {\em coquetteries\/}
+are largely forgotten.\NL1
+
+ Did you know for example that we never typeset french
+guillemets like this `` '' neither ` ' but%
+{\makeatletter\def\GOfrench{T1}\ifx\GOfrench\f@encoding\else%
+\footnote{We switched to \emph{French} here to be able %
+ to print valid glyphs.}%
+\fi} %
+\begin{french}« and »\end{french}? Instead, we will
+authorised ourselves to use (` ') in this document
+because we consider they are {\em technical} guillemets.
+\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+*** Cet espace est laissé intentionellement à blanc ***
+\NL3
+\section{Typographie française}
+%\noenglishquote
+La typographie française est spécifique en ce qui concerne
+l'utilisation des signes sui\-vants :
+`\verb|.| \verb|:| \verb|;| \verb|!| \verb|?| \verb|«| \verb|»|'.
+
+La répartition des espaces dans une ligne se fait de façon
+équitable entre les
+mots (jamais à l'intérieur des mots) et après
+la ponctuation (c'est le
+\verb|\frenchspacing| de \TeX{}) contrairement à la
+ typographie anglaise.
+
+Les `\verb|; ! ?|' doivent être précédés d'une espace fine
+insécable. C'est
+ce que nous avons appliqué dans \FP.
+Le cas du `\verb|?|'
+a été traité spécialement car l'espace fine ayant
+été jugée trop grande (par
+des spécialistes), a été réduite tout en adjoignant une peu de
+{\em glue} d'extensibilité.
+
+En ce qui concerne le `\verb|:|', le code typogra\-phi\-que%
+\footnote{Nous
+avons choisi d'adopter les recommandations de l'imprimerie nationale
+française.} précise qu'il est précédé
+d'une espace {\em mot\/}
+insécable.
+D'autres ont jugé que c'était inesthétique et cela a été
+remplacé par une espace fine.
+
+Les guillemets français « doivent être suivis d'une espace mot
+insécable qui
+a été remplacée ici par une espace moindre.
+Les guillemets fermants »
+sont, eux, précédés de la même espace.
+
+\SmsG%
+Lorsque la ligne n'est pas assez remplie et qu'il existe un `:', les
+typographes ont --~semble-\hbox{t-il}~-- l'habitude
+de répartir largement les espaces autour
+des deux points. C'est ce qui a été fait dans \FP\ qui
+pourra éventuellement produire une ligne : peu remplie\footnote{Le cas présenté ici a été
+créé artificiellement et peut donc apparaître exagéré dans
+certaines mises-en-pages.}%
+\penalty-10000%
+ ou aussi bien une ligne se terminant ainsi : « {\em com\-me % \- pour fourier
+font les pros\/} »
+lorsqu'ils ne trouvent pas d'autre moyen mais il devrait s'agir que de cas
+extrêmes. À noter que cela a pour avantage de réduire les
+\verb|over/under-full hbox| de façon significative.
+
+Paragraphe de remplissage...\\ ...\\... pour vérifier que le `:' ne
+termine ni la page ni la colonne. Ainsi :
+
+%\englishquote
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{itemize}
+\item %qu'il s'agisse de verbatim ou d'une liste d'éléments
+les deux points et le texte qui suit
+sont tous deux sur la même page.
+\end{itemize}
+%\newpage % already done with the previous list
+\FmsG%
+\english
+
+\smallskip
+
+\section{French printing}
+
+French printing use specific typographic rules specially in concern with
+the following: `. : ; ! ?' and french guillemets.
+
+Interword spacing in a line is allways equal (and never modified inside a
+word). It's the same way after punctuation (standard \verb|\frenchspacing|) as
+opposed to the english typography.\NL1
+
+All `; ! ?' are preceeded by a thin and uncuttable space. We apply this
+automatically in \FP. (We have added few stretching {\em glue} to
+the question mark).\NL2
+
+Regarding the `:' we have not inserted an inter-word space but a thin space
+and also have added some glue.\NL2
+
+\smallskip
+French guillemets are processed the same way. \NL3
+
+In an {\em underfull\/} line containing a `:' man has habits to share spaces
+around the double points. This way used in \FP\ can also produce a
+line with a ragged right, as shown in the french column. This technique
+ reduce a lot of {\em overfull} and {\em underfull} {\tt hboxes}
+produced by \TeX{}.
+\NL3
+
+As shown also, \FP\ is reluctant to print a double point at the
+end of a page or a column.\french%\noenglishquote
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\section[Dactylographie française]{Rappels concernant la \newline
+dactylographie}
+
+Les habitudes de saisie c.-à-d. les habitudes dactylographiques,
+ veulent que les signes suivants
+`\verb|:| \verb|;| \verb|!| \verb|?| \verb|»|'
+soient toujours précédés d'un blanc
+(barre d'espace sur les claviers) et les \verb|«| toujours
+suivis d'un blanc. \FP\ remplacera
+automatiquement ce blanc (à la composition) par l'espace appropriée.
+
+{\moretolerance\moretolerance\moretolerance
+Les guillemets français « (et respectivement »)...
+\footnote{\tthyphenation Avec les options fournies
+telles \vers|A4| et \vers|double|\-\vers|column| on obtient
+ là un \vers|overfull| \vers|hbox| difficilement réductible
+de façon automatique mais je l'ai réduit
+avec 3 \texttt{\backslash moretolerance}%
+\notthyphenation.}
+\par}
+%\nooverfullhboxmark
+
+Les vrais guillemets français « (et respectivement »)
+s'utilisent toujours doublés (\verb|«| et respectivement
+\verb|»|). Ainsi $<$ et $>$ ne
+sont que des signes mathématiques et n'ont pas
+d'autre sens en français que : {\em inférieur à} et
+{\em supérieur à}.
+
+Il est fortement conseillé de poursuivre
+ces habitudes dactylographiques qui
+contribuent aussi à éclaircir le texte
+saisi et donc ainsi à faciliter les
+corrections ultérieures.
+\NL1
+
+\subsection[Test de la ponctuation française
+ \mdseries`\protect\myverb|. : ; ! ?|']
+{Test de la ponctuation \newline française
+ \mdseries`\protect\myverb|. : ; ! ?|'}
+
+Le deux points s'imprime comme ceci : s'il est précédé d'un blanc
+(au moins un) sinon rien n'est changé (par ex. 11:33). Notez
+l'espace après le point terminant la phrase ; le point virgule
+est aussi précédé d'une espace fine s'il n'est pas collé
+au mot le précédant (comme dans cet exemple dû à une faute
+de frappe; assez fréquente).\\
+{\moretolerance
+Oh ! Quoi-donc ? Notez ici l'espacement utilisé
+devant le `!' et le `?'. Il ne faut
+pas oublier aussi de taper le blanc avant, sinon? tout est
+%terriblement
+ collé! Voyez-vous la différence ? Bravo !
+}
+
+Mais pour les documents {\em mal\/} saisis (c.-à-d. sans blanc) il est
+toujours possible de spécifier la sous-option \verb|\untypedspaces|
+\untypedspaces pour obtenir une insertion automatique des espaces
+manquants comme ici! où il avait été saisi `\verb|ici!|'.
+Vérifions pour les autres ponctuations :;? \typedspaces que nous
+n'obtenons pas :;? serrées comme ici.
+
+Vérification de l'espacement :
+
+\noindent
+\verb| \typedspaces X~; Y ; Z;| = \typedspaces X~; Y ; Z;
+
+\noindent
+\verb|\untypedspaces X~; Y ; Z;| = \untypedspaces X~; Y ; Z; \typedspaces
+
+\newpage\english
+\section{French typing}
+French typists have some habits. For example they type a space before `: ; ! ?
+\verb|»|' and after \verb|«|. \FP\ replace automatically this
+blank space by the appropriate spacing.
+
+There is only one kind of quoting in French by the mean of guillemets which
+are allways typed \verb|«| and \verb|»|. Usual english simple and double
+quotes must be prohibited.
+
+\subsection{\mdseries%
+ \texttt{\textbackslash untypedspaces}}%
+This control command offers the ability to repair automatically a document
+badly typed i.e. in which spaces were not typed before french punctuation.
+This bypass can help but is not the good way to use daily because there are
+many cases where, for example, a double point must never be preceeded
+by a space.
+
+Now we verify that the spacing is unchanged in English:
+
+\noindent
+\verb| \typedspaces X~; Y ; Z;| = \typedspaces X~; Y ; Z;
+
+\noindent
+\verb|\untypedspaces X~; Y ; Z;| = \untypedspaces X~; Y ; Z; \typedspaces
+
+\subsection{\mdseries%
+ \texttt{\textbackslash wrongtypedspaces}}
+A french typist may input spaces before
+punctuation as it is usual in French. These unfortunate space
+ can be removed by simply letting \FP\ do it with* the control
+sequence:
+
+\begin{verbatim}
+\letpunctuationactivefor
+ \wrongtypedspaces
+\end{verbatim}
+
+\FRENCH% pour ne pas dire \french
+\letpunctuationactivefor\wrongtypedspaces
+\english
+Let's try the previous example:\par
+\noindent
+\verb| X~; Y ; Z;| = X~; Y ; Z;
+
+Now we say \verb|\nowrongtypedspaces|
+\nowrongtypedspaces to come back to the normal
+situation.
+
+\vfill
+\french
+\nowrongtypedspaces% to be sure it is set when english text is skipped
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\csname StopFrenchLbT\endcsname% special case, temporary.
+
+\section[Test des guillemets français, 7 (<%
+ < >%
+ >) et 8-bits (« »)]%
+{Test des guillemets \newline français (« »)}
+\hyphenation{nor-ma-le-ment}
+
+Les guillemets français s'écrivent et se saisissent
+« normalement » comme ceci :
+\verb|« |{\tt nor}\-%
+{\tt male}\-{\tt ment }\verb|»|
+ ou éventuellement en italiques mais toujours
+\bgroup% for frenchle
+« \em normalement\/ » %
+\egroup% for frenchle
+; ici nous avons tapé au clavier :
+\verb|« \em| {\tt normalement}\verb| »|.
+Et en tapant par contre :\\ \verb|«\em|
+ {\tt anormale\-ment (sans espace)}\verb|»| \ on obtient...
+\bgroup% for frenchle
+«\em anormale\-ment (sans espace)\/».
+\egroup% for frenchle
+Re\-mar\-quez que les guillemets font office d'acco\-lades \TeX{} et que donc
+les changements de polices sont restaurés en sortant de la citation.
+
+Pour les documents déjà saisis {\em sans espace} << \FP\ >>
+insérera systématiquement un espace à l'endroit
+désiré si l'on a donné la sous-option \verb|\untypedspaces|.
+\untypedspaces
+Et en tapant à nouveau
+\verb|«\em| {\tt anormale\-ment (sans espace)}\verb|»| on obtient
+\bgroup% for frenchle
+«\em anormalement (sans espace)\/».
+\egroup% for frenchle
+\typedspaces
+
+Parfois on désirera remplacer systématiquement tous les
+guillemets anglais (`` et '') d'un texte par de vrais guillemets
+français, il
+suffira alors de fournir l'étrange option :\\
+\texttt{\backslash noenglishdoublequotes}\\
+\noenglishdoublequotes pour obtenir : `` ''.
+
+`` '' (même test en début de paragraphe).\englishdoublequotes
+
+Lorsqu'une citation est faite dans un texte, celle-ci commence
+toujours par des guillemets. « Cette citation peut se poursuivre sur
+plusieurs paragraphes.
+
+Dans ce cas, le style %\verb|french|
+insérera systématiquement les guillemets nécessaires
+en début de
+chaque paragraphe. »
+
+Mais une citation peut aussi en contenir une autre. « Dans ce cas l'imprimerie
+ nationale précise dans ses {\em Règles typographiques} :
+\ancientguillemets
+ « Lors\-que la première citation est
+elle-même placée entre
+guillemets, chaque ligne de la seconde débutera par un
+guillemet ouvrant. »
+Ce dispositif, comme on le voit, n'est pas mis en ½uvre ici
+ (voir son application au paragraphe \ref{noeveryparguillemets}).
+ « La deuxième citation peut aussi...
+
+se poursuivre sur un ou
+plusieurs paragra\-phes. » Notez bien qu'avant cette citation nous avons
+demandé les \verb|\ancientguillemets|
+pour produire ces guillemets fermants
+en début de ligne. Le \verb|\todayguillemets| rétablit la
+situation une fois
+le deuxième niveau terminé. \todayguillemets
+
+{\makeatletter\def\GOfrench{T1}\ifx\GOfrench\f@encoding
+\enlargethispage{10pt}% increase probably due to EC fonts metrics?
+\fi}
+Il arrive que la fin d'une citation de deux\-ième niveau
+coïncide avec celle
+du premier niveau. « Dans ce cas il faudra coder, comme ici :\\
+\verb|\endguillemets|
+à la place de ``\verb|»|'' \endguillemets.
+
+Deux tests : \fbox{\begin{guillemets} XXX \end{guillemets}}
+et \fbox{X \begin{guillemets} XXX \end{guillemets} X} servant à
+vérifier l'espacement quand on utilise \verb|\begin| et \verb|\end|.
+
+Le paragraphe suivant va alors démarrer de façon
+tout à fait normale...
+
+On peut aussi coder :
+\begin{verbatim}
+\begin{guillemets}
+Une citation...
+\end{guillemets}
+\end{verbatim}
+ce qui donnera :
+\begin{guillemets}
+Une citation...
+\end{guillemets}
+et en tapant {\em à la \TeX} : \verb|\guillemets{}| \verb|Une citation...|
+\verb|\en|\vers|d|\-\vers|guillemets{}| nous devons obtenir absolument la même chose :
+\guillemets{} Une citation... \endguillemets{}
+
+Vérifions maintenant l'espacement dans les différents cas :
+
+\noindent
+\fbox{\parbox{2cm}{«X\dotfill X»}} \%\texttt{\backslash typedspaces}
+ {\em sans blanc}
+
+\noindent
+\fbox{\parbox{2cm}{« X\dotfill X »}} \%\texttt{\backslash typedspaces}
+{\em normal}
+
+\noindent\untypedspaces
+\fbox{\parbox{2cm}{« X\dotfill X »}} \%\texttt{\backslash untypedspaces}
+{\em avec blanc}
+
+\noindent
+\fbox{\parbox{2cm}{«X\dotfill X»}} \%\texttt{\backslash untypedspaces}
+{\em sans blanc}
+\typedspaces
+
+\noindent
+\fbox{\parbox{3cm}{A blabla bla blabla : «
+Ceci est mon test de césure »}} «...» reste possible.
+
+\begin{flushleft}
+ Ceci est « un test avec \verb|\raggedright| » qui
+--~théoriquement~-- ne devrait plus nous poser de problème.
+\end{flushleft}
+
+\subsection{{\mdseries%
+\texttt{\textbackslash noeveryparguillemets}}}\label{noeveryparguillemets}
+Cette option permet de gérer correctement les citations de second
+rang mais elle est tout à fait contraire
+ au processus \verb|\everypar| cité précédemment grâce auquel
+ les guillemets sont générés automatiquement à chaque
+début de paragraphe.
+Voici ce que produit l'option {\em normale\/}
+\texttt{\backslash every\-par\-guil\-lemets} sur le paragraphe suivant :
+
+« Tout le monde s'accorde à trouver légitime la division :
+{\tt extra-ordinaire}. Le cas des mots com\-posés est le seul
+à rencontrer
+cette unanimité. Dans les autres, les opinions sont très partagées.
+ Frey est le plus catégorique : il n'admet de division selon la formation
+que pour des mots de composition complètement française, et la rejette
+sinon... Le {\em Code typographique}, tout en adoptant ce même point
+ de vue « ... [reconnaît] néanmoins que certains auteurs de travaux
+scientifiques préfèrent la division éty\-mologique
+qui fait ressortir
+ la racine grecque ou latine. » Quant à Gouriou, il écrit :
+« On préfèrera cependant garder la coupure étymologique
+ chaque fois que les composants sont {\em aisément} re\-connaissables. »
+(L'italique est de Gouriou.)
+\marginpar{{\footnotesize Ici on a triché avec des} \texttt{\backslash!}}
+\!Telle \!est aussi \!l'opinion \!de \!Girodet ».
+
+Et voici l'effet de \verb|\noeveryparguillemets| :
+\noeveryparguillemets
+
+« Tout le monde s'accorde à trouver légitime la division :
+{\tt extra-ordinaire}. Le cas des mots com\-posés est le seul
+à rencontrer
+cette unanimité. Dans les autres, les opinions sont très partagées.
+ Frey est le plus catégorique : il n'admet de division selon la formation
+que pour des mots de composition complètement française, et la rejette
+sinon... Le {\em Code typo\-graphique}, tout en adoptant ce même point
+ de vue « ... [reconnaît] néanmoins que certains auteurs de travaux
+scientifiques préfèrent la division éty\-mologique
+qui fait ressortir
+ la racine grecque ou latine. » Quant à Gouriou, il écrit :
+« On préfèrera cependant garder la coupure étymologique
+ chaque fois que les composants sont {\em aisément} re\-connaissables. »
+(L'italique est de Gouriou.)
+Telle est aussi l'opinion de Girodet ».
+\everyparguillemets
+
+Il faut noter que cette option impose que le paragraphe commence et se
+termine par des guillemets. % sinon code \guillpar et \parguill
+C'est pour cela que nous n'avons pas mis cette option par défaut.
+
+\subsubsection{Un test assez méchant}
+Voici un exemple d'utilisation dans un environement \verb|quotation|%
+\footnote{Nous avons introduit \texttt{\backslash moretolerance}
+pour obtenir une composition correcte.} :
+\begin{quotation}
+\moretolerance\moretolerance\moretolerance
+« Je ne peux mieux faire que de citer la définition qu'a donnée
+de la gravure un de nos maîtres fondeurs, Fournier le Jeune :
+
+« La scien\-ce du graveur, dit-il, consiste à connaître la figure
+la plus parfaite que l'on puisse donner aux caractères, les dimensions
+qu'ils doivent avoir et à les représenter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perpétuent des lettres
+à l'infini par la fonte. \endguillemets
+\end{quotation}
+
+Le même exemple sans \verb|quotation| :
+
+« Je ne peux mieux faire que de citer la définition qu'a donnée
+de la gravure un de nos maîtres fondeurs, Fournier le Jeune :
+
+« La scien\-ce du graveur, dit-il, consiste à con\-naître la figure
+la plus parfaite que l'on puisse donner aux caractères, les dimensions
+qu'ils doivent avoir et à les représenter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perpétuent des lettres
+à l'infini par la fonte. \endguillemets
+\bigskip
+
+\noeveryparguillemets
+Puis avec \verb|\noeveryparguillemets| (c.-à-d. sans \verb|quotation|) :
+
+« Je ne peux mieux faire que de citer la définition qu'a donnée
+de la gravure un de nos maîtres fondeurs, Fournier le Jeune :
+
+« La scien\-ce du graveur, dit-il, consiste à connaî\-tre la figure
+la plus parfaite que l'on puisse donner aux caractères, les dimensions
+qu'ils doivent avoir et à les représenter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perpétuent des lettres
+à l'infini par la % En cas d'arrêt à cet endroit : le format
+fonte. \endguillemets%.fmt utilisé n'est prob. pas ds le bon codage !
+\bigskip
+
+Et enfin avec \verb|quotation|, voilà
+ce que cela peut donner\label{quotation} :
+%%% La \marginpar suivante pose un pb de ``Lost Float'' qd elle est
+%%% placee plus loin, pourquoi ?
+\marginpar{{\footnotesize Il y a ici un problème à étudier en 2 colonnes !}}
+\begin{quotation}
+« Je ne peux mieux faire que de citer la définition qu'a donnée
+de la gravure un de nos maîtres fondeurs, Fournier le Jeune :
+
+« La scien\-ce du graveur, dit-il, consis\-te à connaître la figure
+la plus parfaite que l'on puisse donner aux caractères, les dimensions
+qu'ils doivent avoir et à les représenter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perpétuent des lettres
+à l'infini par la fonte.
+ \endguillemets
+\end{quotation}
+\everyparguillemets
+On notera ici les espaces inter-mots beaucoup plus {\em tolérants}. C'est
+la seule solution trouvée pour arriver à imprimer
+quelque chose d'à peu
+près correct en double colonnage.
+
+\vfill
+Terminons la page en anglais pour tester le haut de page. Les guillemets
+doivent être bons avec le codage T1.
+
+\english
+Let's complete the page with english text in order to test and show
+how will be printed the header.
+\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\onecolumn
+\subsubsection{Même test en \mdseries\texttt{\textbackslash onecolumn}}
+Voici un exemple en environement \verb|quotation| :
+\begin{quotation}
+« Je ne peux mieux faire que de citer la définition qu'a donnée
+de la gravure un de nos maîtres fondeurs, Fournier le Jeune :
+
+« La scien\-ce du graveur, dit-il, consiste à connaître la figure
+la plus parfaite que l'on puisse donner aux caractères, les dimensions
+qu'ils doivent avoir et à les représenter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perpétuent des lettres
+à l'infini par la fonte. \endguillemets
+\end{quotation}
+
+Le même exemple sans \verb|quotation| :
+
+« Je ne peux mieux faire que de citer la définition qu'a donnée
+de la gravure un de nos maîtres fondeurs, Fournier le Jeune :
+
+« La scien\-ce du graveur, dit-il, consiste à connaître la figure
+la plus parfaite que l'on puisse donner aux caractères, les dimensions
+qu'ils doivent avoir et à les représenter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perpétuent des lettres
+à l'infini par la fonte. \endguillemets
+\bigskip
+
+\noeveryparguillemets
+Puis avec \verb|\noeveryparguillemets| (sans \verb|quotation|) :
+
+« Je ne peux mieux faire que de citer la définition qu'a donnée
+de la gravure un de nos maîtres fondeurs, Fournier le Jeune :
+
+« La scien\-ce du graveur, dit-il, consiste à connaître la figure
+la plus parfaite que l'on puisse donner aux caractères, les dimensions
+qu'ils doivent avoir et à les représenter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perpétuent des lettres
+à l'infini par la fonte. \endguillemets
+\bigskip
+
+Et enfin avec \verb|quotation| :
+\begin{quotation}
+ \let\bkORI\break
+ %\def\break{\bkORI\hbox to 0pt{/}}% for debug
+ %\ancientguillemets% for debug
+« Je ne peux mieux faire que de citer la définition qu'a donné
+de la gravure un de nos maîtres fondeurs, Fournier le Jeune :
+
+« La scien\-ce du graveur, dit-il, consiste à connaître la figure
+la plus parfaite que l'on puisse donner aux caractères, les dimensions
+qu'ils doivent avoir et à les représenter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perpétuent des lettres
+à l'infini par la fonte. \endguillemets
+\end{quotation}
+\everyparguillemets
+
+\subsubsection{Test de « stretchability »}
+
+Les espaces doivent être également répartis sur la ligne :
+
+\medskip
+\hbox to \hsize{etiord-gauche\footnote{En plain \TeX{} l'espacement est ici
+\label{etiord}
+ curieusement incorrect ! ...}
+ « centre-ertnec » \hbox{}\footnote{... alors qu'il faudrait
+la même répartition
+ de l'espace.}%
+ ehcuag-droite}
+\medskip
+
+\subsection{Test des commandes \mdseries\texttt{\textbackslash ifnum}}
+
+\ifnum 1 < 3 1\verb| < |3 est VRAI, bien sûr !
+ \else 1\verb| < |3 est FAUX ! \fi
+comme
+\ifnum 3 > 1 3\verb| > |1 est aussi VRAI, bien sûr !
+ \else 3\verb| > |1 est FAUX ! \fi
+
+\medskip
+
+\subsection{Test des commandes \mdseries\texttt{\textbackslash everypar}}
+
+{J'ai codé dans cette section \verb|\everypar{$++\,$}| : \everypar{$++\,$}
+
+Paragraphe 1 « citation niveau 1
+
+Paragraphe 2 « citation niveau 2
+
+Paragraphe 3 fin citation niveau 2 » puis fin niveau 1 »
+
+Paragraphe 4}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage% tjrs en 1 colonne
+\hbox{}\ifx\itshape\undefined\else% avoid old frencht crash
+\subsection{Test de fermeture prématurée}
+
+Il arrive que les guillemets soient fermés dans un environnement
+plus intérieur qui n'apparie donc pas correctement les blocs.
+Voici un exemple d'utilisation :
+
+\begin{verbatim}
+Maître Corbeau dit à son clerc : « \itshape Cher collègue,
+
+\begin{itemize}
+\item Ah que vous êtes joli !
+\item Ah que vous me semblez beau ! » \upshape
+et s'enfuit de ce pas...
+\end{itemize}
+
+\endguillemets
+\textsf{Quel homme étrange, n'est-ce pas ?}
+\end{verbatim}
+
+Voici ce que cela donne comme composition :
+
+\medskip
+\bgroup% for frenchle
+Maître Corbeau dit à son clerc : « \itshape Cher collègue,
+
+\SmsG%
+\begin{itemize}
+\item Ah que vous êtes joli !
+\item Ah que vous me semblez beau ! » \upshape
+et s'enfuit de ce pas...
+\end{itemize}
+\FmsG%
+
+\endguillemets
+\egroup% for frenchle
+\textsf{Quel homme étrange, n'est-ce pas ?}
+
+\medskip
+On notera plusieurs choses. Premièrement il a fallu
+rétablir \verb|\upshape| après les guillemets fermants,
+du fait du mauvais appariement des blocs. Ensuite un message
+sort indiquant une fermeture prématurée des guillemets.
+Cette fermeture restant incomplète on note enfin que l'on a forcé
+un \verb|\endguillemets| pour clore proprement et définitivement
+l'environnement guillemets.
+
+\subsection{\mdseries\texttt{\textbackslash everyparguillemetsremoved}}
+\label{noeveryparguillemetsremoved}
+Dans le même exemple nous pouvons aussi interdire la génération
+automatique des guillemets ouvrants à chaque début de paragraphe ;
+il faut alors saisir \verb|\everyparguillemetsremoved| :
+\everyparguillemetsremoved
+
+\medskip
+\bgroup% for frenchle
+Maître Corbeau dit à son clerc : « \itshape Cher collègue,
+
+\SmsG%
+\begin{itemize}
+\item Ah que vous êtes joli !
+\item Ah que vous me semblez beau ! » \upshape
+et s'enfuit de ce pas...
+\end{itemize}
+\FmsG%
+
+\endguillemets
+\egroup% for frenchle
+\textsf{Quel homme étrange, n'est-ce pas ?}
+
+\medskip
+Il suffit ensuite de rétablir \verb|\everyparguillemets|.
+\everyparguillemets
+\fi% ifx \itshape
+
+\subsection{Test de l'espacement}
+{\def\marque#1{\vbox{\halign{\hfil##\hfil\cr
+ \llap{\vrule width4.5mm height.4pt}%
+ \rlap{\vrule width4.5mm height.4pt}\cr
+ \noalign{\vskip-1cm}%
+ #1\cr}}}
+ \Huge
+ \def\ecartement{\fbox{a « \marque{\hbox{$|$}} » b}}
+ \ecartement
+}
+% Difference de taille a voir entre les deux %%%%%%
+\setbox7\hbox{\leftguillemets\ X}
+\setbox8\hbox{X\ \rightguillemets}
+\SmsG%
+\message{Taille des boites page \thepage\space \string:
+ \the\wd7=\string?=\the\wd8}
+\FmsG%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\onecolumn
+\newpage
+\hbox{}
+\vfill
+\centerline{\Large Page intentionnellement laissée blanche}
+\vfill
+\twocolumn
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+
+\subsection{Guillemets interrompus}
+Une citation peut être en anglais et donc se commencer par
+\vers|« \|\vers|english| et se terminer par \vers|\|\vers|french »|. Ce cas
+ne doit plus générer de message
+{\em fermeture de guillemets non ouverts} !
+Voici le test, réalisé ici
+tout d'abord avec l'environnement \vers|nonfrench| :
+
+\medskip
+1 \fbox{« \begin{nonfrench}% LaTeX keeps space
+ Text in English
+ \end{nonfrench}% LaTeX keeps space
+ »}
+
+
+\medskip
+Puis avec : \\
+\verb|\begin{english}| ... \verb|\end{english}| :
+
+\medskip
+% bypass here our TeX--XeT emulation to avoid message: english environment
+% ended by \end{guillemets}
+\def\temp{\begingroup}
+\ifx\beginL\temp
+\else
+{% local redef of english for plain and our specific test file
+ \ifx\undefined\englishORI\else\let\english\englishORI\fi%
+2 \fbox{« \begin{english}% LaTeX keeps space
+ Text in English
+ \end{english}% LaTeX keeps space
+ »}
+
+\medskip
+Et enfin avec \verb|\|\verb|english| ... \verb|\endenglish| :
+
+\medskip
+3 \fbox{« {\csname english\endcsname
+ Text in English
+ \csname endenglish\endcsname}% space here to remove
+ »}
+}% local redef of english for plain test
+\fi
+
+\medskip
+Ceci avait aussi pour but de tester ces possibilités de
+changement de langage et de vérifier l'espacement qui
+devrait être ainsi :
+
+\medskip
+0 \fbox{« Text in English »}
+
+\noenglishdoublequotes
+\subsection{`` {\mdseries\texttt{\textbackslash noenglishdoublequotes}} ''}
+
+Nous avons mis la commande \vers|\noenglish|\-\vers|doublequotes| juste avant
+le titre de section de façon à remplacer les « quotes » anglaises
+par des guillemets français dans ce titre.
+Il s'agit de vérifier aussi que la génération des fichiers auxiliaires
+\verb|.aux| et \verb|.toc| ne pose pas de problème lorsque ces fichiers
+sont réutilisés. Bien sûr, si cette option n'est pas activée pour tout le
+document, comme ici, on ne retrouvera pas les guillemets français
+dans la table des matières.
+
+\noenglishdoublequotes
+
+\english% histoire de changer de langue ?
+\french
+%\newpage
+\subsection%{« no-french guillemets »}
+ {\mdseries\texttt{\textbackslash nofrenchguillemets}}
+En codant \verb|\nofrenchguillemets|
+\nofrenchguillemets on n'utilise plus
+les guillemets programmés dans l'extension {\tt french}. Si on les utilise
+malgré tout, le résultat dépendra de la police. Ici nous utilisons la
+police \fontname\font{} et nous obtenons :
+
+<%
+ < en 7-bits >%
+ >
+
+et aussi :
+
+« en 8-bits ».
+
+Réactivons maintenant les guillemets avec la commande
+\verb|\frenchguillemets|
+\frenchguillemets et faisons le même test :
+
+<%
+ < en 7-bits >%
+ >
+
+et aussi :
+
+« en 8-bits ». Voyez-vous ?
+\vfill
+\subsection{Haut de page+guillemets}
+
+\subsubsection{En 8-bits}
+Il ne devrait pas y avoir de problème du tout.
+Car, puisqu'il s'agit d'un guillemet en 8-bits, cela doit
+être forcément un vrai guillemet français. Mais, malheureusement,
+{\em la solution pour l'implémenter n'est pas encore trouvée avec
+le codage OT1}.
+Le codage de fonte de ce document imprime :
+\nonfrench <%
+ < >%
+ >%
+\endnonfrench{}
+ (doit être parfait en T1).
+
+\subsubsection{En 7-bits}
+En codage OT1 les guillemets 7-bits de haut de page ne peuvent être
+bons sur cette page
+ {\bf QUE} parce que nous avons terminé la
+page en français, sinon nous aurions eu :
+\ifx\textexclamdown\undefined
+ \def\textexclamdown{¡}\def\textquestiondown{¿}
+\fi
+\textexclamdown\textexclamdown{} et \textquestiondown\textquestiondown
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\hbox{ }\NL{24}
+
+\subsection{Guillemets et maths}
+
+L'équation suivante ne doit plus produire le fameux message :
+
+{\tt ! Argument of \backslash \string @genG % string pour amslatex
+ has an extra % { pour emacs
+ $\}$% c'est un \delimiter qui pose pb tq avec frencht d'ou mode math
+.}
+
+$$U^{k+1}=U^{k}- {< g_{k},d_{k} >}$$
+
+\section{D'autres guillemets}\label{autres}
+Avec \FP\ il est possible de substituer automatiquement aux
+guillemets `anglais' la forme \noenglishquote `que voici' en donnant la
+sous-option \verb|\noenglishquote|.
+Mais attention, les apostrophes deviennent des accents
+comme dans : {\em il s'agit ici de l'exemple}
+\englishquote qui aurait dû être imprimé :
+{\em il s'agit ici de l'exemple}.
+Un usage intensif de cette option est plutôt à déconseiller.
+
+\newpage
+\english
+\section{French guillemets}
+Using french guillemets in an english document (\verb|«| and \verb|»|) will
+give (depending of font encoding) that: « and », it is normal!
+
+As you can look in the previous columns, french guillemets have specific
+rules. They are used for quotation when an author is cited or each time an
+emphasis is needed. Normally, italic is not used inside a quoted french
+text, excepted when you really want to show some wording.
+
+When opened, each paragraph of the quoted text will start left
+ with the opening french guillemets.
+
+Another quotated text can take place inside a first level. This second level
+citation is also very specific. Each line must start with guillemets.
+
+The style designer, from time to time, chose to apply here an ancient rule
+by putting here closing guillemets.
+
+The technical tools involved in \FP\
+ disallow to have at the same time
+the \verb|\everypar| possibility and the second level mechanism.
+
+\subsection{Guillemets and maths}
+
+The following equation is always correct:
+
+$$U^{k+1}=U^{k}- {< g_{k},d_{k} >}$$
+
+and never produce an error message.
+\NL1
+
+\section{Other guillemets}
+With \FP\ it is possible to replace english guillemets by
+diacritic caracters. But, be careful, all apostrophes will be diacritics too.
+\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\section{Trois petits points}
+Les points de suspension sont : ... et non pas ceux de \TeX{} : $\ldots{}$
+\noTeXdots
+En codant \verb|\noTeXdots| les commandes \verb|\dots| ou \verb|\ldots| de
+\LaTeX{} donneront : $\ldots{}$ Mais l'option par défaut a été
+volontairement maintenue au standard (\verb|\TeXdots|) puisqu'il suffit
+de ne pas les utiliser.\TeXdots
+
+\section{Crochets}
+IBM, en son temps, avait créé l'EBCDIC dans lequel ne figurait pas
+les crochets ([ ]). C'est la raison pour laquelle les utilisateurs IBM
+ont parfois substitué $<$ et $>$ aux crochets. La sous option
+\verb|\EBCDICbrackets| \EBCDICbrackets
+permet de les remplacer comme ici <automatiquement> par des crochets.
+Mais faites attention, les doubles guillemets
+\verb|<|\verb|<| et \verb|>|\verb|>| % pour eviter la conversion 8bits
+ ne donneront jamais des crochets mais « et »
+(sauf en mode \verb|verbatim|). On peut en général
+se contenter de \verb|< <| et \verb|> >| pour obtenir < < et > >.
+On revient à la situation antérieure en tapant la commande suivante :
+\verb|\normalbrackets|\normalbrackets.
+
+\section{Débordements}
+Nous venons de choisir l'option d'indication de débordement de ligne
+\verb|\overfullhboxmark| et nous voyons son
+effet lorsque la ligne ne peut être coupée grâce à l'impression
+de la petite boîte noire.
+%(cf. page \pageref{debordement}).
+Cette option est activée au minimum pour une page entière.
+Ne pas spécifier l'option et son contraire sur la même page sinon
+l'effet est inchangé.
+
+\labelsinmargin
+\section{\mdseries\texttt{\textbackslash labelsinmargin}}%
+\label{labels: in: margin}
+\FP\ offre la possibilité, comme cela a été demandé
+à partir de cette section, d'imprimer dans la marge le libellé des
+étiquettes utilisées dans les ordres \verb|\label|.
+Cette option, utilisable
+aussi en dehors du français, est la suivante :
+\verb|\labelsinmargin|.
+
+\newpage\english
+\section{Three dots}
+Usual and common \TeX{} and \LaTeX{} dots are not french dots.
+\NL4
+
+\section{Brackets}
+An option is offered to replace \verb|<| and \verb|>| by brackets.
+\NL{11}
+
+\section{\mdseries\texttt{\textbackslash overfullhboxmark}}
+The command \verb|\overfullhboxmark| print a black
+box where your have an overfull \verb|hbox| i.e.\ when a line can't be
+hyphenated. The default is \verb|\nooverfullhboxmark|.
+\NL4
+
+\section{Labels in margin}\label{labels are in margin}
+An option allow you to print the labels you use in a page. These labels are
+printed in margins.
+\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\section{Des points sur...}
+Inutile de mettre les points sur les i quand on accentue un i. Tout bon
+éditeur de texte doit faire ce travail pour vous. Sinon il existe la
+sous-option \verb|\idotless| qui produira \idotless
+\let\XX\^% Pour éviter une traduction éventuelle en 8 bits
+\XX{i} si on lui demande d'imprimer \verb|\^i|.
+\iwithdot La valeur par défaut
+dans \FP\ est \verb|\iwithdot| qui donnera malgré tout de
+bons i accentués avec ML\TeX{} (î) s'ils sont saisis directement en 8
+bits (vérifiez dans votre fichier source).
+
+{\makeatletter\def\GOfrench{T1}\ifx\GOfrench\f@encoding
+\section{Ponctuation et mode \protect\linebreak % SPECIAL FONTES EC REELLES
+ mathématique}
+\else
+\section{Ponctuation et mode mathématique}
+\fi}
+Il s'agit de vérifier que les modifications introduites
+par l'extension \FP\
+ne posent aucun genre de problème en mode mathématique.
+\\ Nous définissons une macro \verb|\test| :
+\\ \verb|\def\test#1{#1}|\def\test#1{#1}
+\\ pour voir si le mode mathématique peut être appelé
+sans problème en
+argument de macro-instructions. L'appel de \verb|\test{$x''$}| ne doit
+pas poser de problème%
+\iflatex
+, ni même \verb|\texttt{|\-\verb|[$x''=0$]}|
+\\ Ainsi : \verb|\texttt{[$x''=0$]}|
+\\donne : \texttt{[$x''=0$]} et
+\else%
+. \\Ainsi :
+\fi
+\\ \verb|$A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;$|
+\\ \verb|\test{$A':B''_1<C_{d'}$}|
+\\donne : $A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;$
+\\\phantom{donne :} \test{$A':B''_1<C_{d'}$}
+\\Avec \verb|\noenglishquote|\noenglishquote{} cela...
+\\donne : $A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;$
+\\\phantom{donne :} \test{$A':B''_1<C_{d'}$}
+\englishquote
+\\ puis avec \verb|\noenglishdoublequotes| \noenglishdoublequotes et
+`` mise en vedette '' :
+$$% \begin{displaymath}
+ A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;
+$$% \end{displaymath}
+$$% \begin{displaymath}
+ \test{A':B''_1<C_{d'}}
+$$% \end{displaymath}
+De même :
+\begin{verbatim}
+{\tt CALL SUBR($<$iopt$<$,ilopt$>%
+ >$)}
+\end{verbatim}
+doit s'imprimer :\\
+{\tt CALL SUBR($<$iopt$<$,ilopt$>%
+ >$)}\\
+sans produire le message d'erreur « Fermeture de guillemets non ouverts ! ».
+\englishdoublequotes
+
+
+\newpage\english
+\section{An \i dotless}
+Everybody knows that a french ``{\em i circonflexe}'' has no dot on it.
+(In my opinion it is a \TeX{} bug to leave the dot when a diacritic is
+put on.) To suppress the dot automatically the best way is to use a well
+programmed text editor. \FP\ offers another opportunity with
+\verb|\idotless|.
+
+\NL3
+
+\section[Math mode and punctuation]{Math mode and \newline punctuation}
+Here we verify that french modifications about punctation
+does not introduce any problem in printing mathematics.
+\\ We define a new macro \verb|\test| :
+\\ \verb|\def\test#1{#1}|\def\test#1{#1}
+\\ in order to see if there is no more problem when passing maths
+inside a macro argument. Calling \verb|\test{$x''$}| must not
+introduce any problem%
+\iflatex
+, as well as \verb|\texttt{|\-\verb|[$x''=0$]}|
+\NL1\\So: \verb|\texttt{[$x''=0$]}|
+\\gives: \texttt{[$x''=0$]} and
+\else%
+. \NL1\\So:
+\fi
+\\\verb|$A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;$|
+\\\verb|\test{$A':B''_1<C_{d'}$}|
+\\ gives: $A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;$
+\\\phantom{gives:} \test{$A':B''_1<C_{d'}$}
+\\With \verb|\noenglishquote|\noenglishquote{} it$\ldots{}$
+\\gives: $A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;$
+\\\phantom{gives:} \test{$A':B''_1<C_{d'}$}
+\englishquote
+\\ and with \verb|\noenglishdoublequotes|\noenglishdoublequotes{}
+in ``display'' math mode:
+$$% \begin{displaymath}
+ A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;
+$$% \end{displaymath}
+$$% \begin{displaymath}
+ \test{A':B''_1<C_{d'}}
+$$% \end{displaymath}
+\englishdoublequotes
+Also:
+\ifx\documentclass\undefined\\ % Still Plain!
+\else\\[-2\baselineskip] % to keep the same spacing as in French
+\fi
+\begin{verbatim}
+{\tt CALL SUBR($<$iopt$<$,ilopt$>%
+ >$)}
+\end{verbatim}
+must print:\\
+%\SmsG%
+{\tt CALL SUBR($<$iopt$<$,ilopt$>%
+ >$)}\\
+%\FmsG%
+without producing the error message:
+``Fermeture de guillemets non ouverts !''.
+\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+Pour ma part lorsque je désire des crochets que je n'ai pas
+au clavier, je préfère taper :\\
+\verb|{\tt CALL SUBR(<iopt<,ilopt> >)}| et utiliser
+l'option \verb|\EBCDICbrackets|\EBCDICbrackets{} :\\
+{\tt CALL SUBR(<iopt<,ilopt> >)}
+
+Cette option n'a pas d'effet en mode mathématique :
+$$ 1233 < 1234 <%
+ < 1235 >%
+ > 1234 > 1233 $$
+\normalbrackets
+
+\makeatletter% we should use \frac with AmS
+\ifx\RIfM@\undefined%\ifx\csname amsmath.sty\endcsname\relax
+ \long\def\text#1{#1}\long\def\frac#1#2{{#1\over#2}}
+\fi
+\makeatother
+
+Vérifions aussi
+($x < {\frac{1}{3}} < {\frac{1}{2}} > {\frac{1}{4}}$) :
+$$x < \frac{1}{3} < \frac{1}{2} > \frac{1}{4} $$
+puis aussi :
+
+ \text{\quad pour $|y| < \frac{111}{444}$}
+
+\bigskip
+La double ponctuation ne doit avoir aucun effet
+(visible) dans une formule en mode
+mathématiques, est-ce bien le cas sur l'exemple ci-dessous :
+
+{\LARGE $$a := b, (c!n=m) \textrm{ ; vrai ?}$$}
+
+On notera que la partie texte de la formule a été saisie avec la
+commande : \\
+\verb|\textrm{ ; vrai ?}|\\
+et que l'espacement français y a été appliqué.
+
+\iflatex
+\subsection{Le cas de la virgule}
+En standard \AllTeX{} (ou alors avec l'option spéciale
+\verb|\regularmathcomma| de \FP) le traitement de la virgule
+est spécifique, ainsi quand on tape ce qui suit en mode
+mathématique de mise en valeur :
+\regularmathcomma%
+\begin{versatim}
+$$\textrm{La fonction}\ f(x,y)\
+ \textrm{ou le Vecteur}\ V(x, y, z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{\euro}$$
+\end{versatim}
+on obtient des espacements après les virgules,
+qu'il y ait ou non des espaces dans le source \TeX\ :
+$$\textrm{La fonction}\ f(x,y)\
+ \textrm{ou le Vecteur}\ V(x, y, z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{\euro}$$
+(ce qui montre une anomalie dans la composition
+des nombres relatifs)
+\frenchmathcomma
+\fi
+
+\newpage\english
+When I have no brackets on my keyboard I prefer to type:\\
+\verb|{\tt CALL SUBR(<iopt<,ilopt> >)}|\\ using
+ the option \verb|\EBCDICbrackets| but the result in english
+remains unchanged\EBCDICbrackets{}:\\
+{\tt CALL SUBR(<iopt<,ilopt> >)}
+
+And within math mode:
+$$ 1233 < 1234 <%
+ < 1235 >%
+ > 1234 > 1233 $$
+\normalbrackets
+
+\makeatletter% we should use \frac with AmS
+\ifx\RIfM@\undefined%\ifx\csname amsmath.sty\endcsname\relax
+ \long\def\text#1{#1}\long\def\frac#1#2{{#1\over#2}}
+\fi
+\makeatother
+
+Let's verify also ($x < {\frac{1}{3}} < {\frac{1}{2}} > {\frac{1}{4}}$) :
+$$x < \frac{1}{3} < \frac{1}{2} > \frac{1}{4}$$
+and:
+
+ \text{\quad pour $|y| < \frac{111}{444}$}
+
+\bigskip
+The ``double punctuation'' should not have any effect
+in maths, which is obviously the case in the following
+English example:
+\NL1
+
+{\LARGE $$a := b, (c!n=m) \textrm{ ; vrai ?}$$}
+
+Though the text part of the formula has been typed
+via a command: \\
+\verb|\textrm{ ; vrai ?}|\\
+the french spacing doesn't apply here.
+
+\iflatex
+\subsection{The comma case}
+With \AllTeX{} standard (or with the special \FP\
+\verb|\regularmathcomma| the processing of comma is really specific.
+So, when you type in the following in display math mode:
+\regularmathcomma%
+\begin{verbatim}
+$$\textrm{La fonction}\ f(x,y)\
+ \textrm{ou le Vecteur}\ V(x, y, z)$$
+$$Total=1,255\,\$\ ou\
+ 1\,500,00\,\textrm{\euro}$$
+\end{verbatim}
+you will get thin spaces after the commas,
+no matter spaces are given or not in the \TeX\ source:
+$$\textrm{La fonction}\ f(x,y)\
+ \textrm{ou le Vecteur}\ V(x, y, z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{\euro}$$
+(which shows a french typesetting error for
+the relative numbers).
+\frenchmathcomma
+\fi%
+
+\iflatex\french
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+Par contre avec \FP\ on n'obtient
+aucun espacement supplémentaire :
+$$\textrm{La fonction}\ f(x,y)\
+ \textrm{ou le Vecteur}\ V(x, y, z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{\euro}$$
+cela est dû à l'option \verb|\frenchmathcomma| qui est
+activée par défaut avec \FP.
+Mais cela montre alors une anomalie de composition
+dans les listes $(x,y,z)$.
+
+Si l'on veut des espaces il faut alors les indiquer
+explicitement, comme cela est l'usage, plus
+généralement, en mode mathématique :
+\begin{versatim}
+$$\textrm{La fonction}\ f(x,\,y)\
+ \textrm{ou le Vecteur}\ V(x,\,y,\,z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{\euro}$$
+\end{versatim}
+ce qui donnera :
+$$\textrm{La fonction}\ f(x,\,y)\
+ \textrm{ou le Vecteur}\ V(x,\,y,\,z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{\euro}$$
+
+\medskip
+
+On notera que \FP\ obéit à l'extension \texttt{icomma}
+lorsque cette dernière est chargée avant \FP, mais
+seulement en français.
+
+
+\newpage\english
+With the \FP\ package there is no space added
+at all:
+\frenchmathcomma%
+$$\textrm{La fonction}\ f(x,y)\
+ \textrm{ou le Vecteur}\ V(x, y, z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{\euro}$$
+this is due to the option \verb|\frenchmathcomma| which is
+defaultly activated in the \FP\ package.
+People will then distinguish a typesetting error
+in the lists $(x,y,z)$.
+
+If you want spaces you should then give them to \TeX\
+explicitely, as usually done, more generally in math mode:
+\begin{verbatim}
+$$\textrm{La fonction}\ f(x,\,y)\
+ \textrm{ou le Vecteur}\
+ V(x,\,y,\,z)$$
+$$Total=1,255\,\$\ ou\
+ 1\,500,00\,\textrm{\euro}$$
+\end{verbatim}
+which will give:
+$$\textrm{La fonction}\ f(x,\,y)\
+ \textrm{ou le Vecteur}\ V(x,\,y,\,z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{\euro}$$
+\fi
+
+You should notice that \FP\ respect the choice of
+the \texttt{icomma} package when that last one is loaded before
+\FP; but it only applies in French.
+\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\section{Mon antislash est \mdseries\texttt{\backslash}}
+
+L'antislash n'existe pas dans toutes les polices en OT1.
+Que vous utilisiez \verb|\backslash| ou \verb|\textbackslash|
+vous obtiendrez la même chose, ainsi
+en romain droit on obtient :
+
+textbackslash=\textbackslash
+
+backslash=\backslash
+
+\noindent
+mais avec la fonte tt on obtient :
+
+{\tt
+textbackslash=\textbackslash
+
+backslash=\backslash
+}
+\NL2
+
+\section{Notes de bas de page}
+
+\iflatex\makeatletter\xdef\countSAVED{\the\c@footnote}\makeatother\fi
+\long\def\XX{%
+ Numérotation normale\footnote{Une note normalement numérotée.}.
+ {\setcounter{footnote}{0}
+ \renewcommand{\thefootnote}{\fnsymbol{footnote}}
+
+ Voici une note\footnote{Première note.}
+ puis une autre\footnote{Deuxième note.}
+ puis encore une autre\footnote{Troisième note.}
+ }}
+
+Nous comparons ici la composition des notes de bas de page
+(avec et sans \verb|\fnsymbol|)
+dans une langue et dans l'autre. Voyons ce que cela donne :
+
+\XX
+
+\newpage\english
+\section{My antislash is \mdseries\texttt{\textbackslash}}
+
+The antislash glyph doesn't exist in all OT1 font.
+Whatever you use, \verb|\backslash| or \verb|\textbackslash|
+you will obtain the same output, so
+in upright roman you obtain:
+
+textbackslash=\textbackslash
+
+backslash=$\backslash$
+
+\noindent
+but with the tt font you obtain:
+
+{\tt
+textbackslash=\textbackslash
+
+backslash=$\backslash$
+}
+
+\noindent
+but \verb|\backslash| is only available in
+math mode.
+
+\section{Compared footnotes}
+
+We compare the typesetting of footnotes
+(with and without \verb|\fnsymbol|)
+in one language versus the other. Let's look at them.
+
+\iflatex\makeatletter\c@footnote=\countSAVED\makeatother\fi
+
+\XX
+\iflatex\makeatletter\c@footnote=\countSAVED\makeatother\fi
+\addtocounter{footnote}{1}
+\NL1
+
+\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+
+\section{\mdseries\texttt{\textbackslash guillemetsinarrays}}
+
+Avec \FP\ l'utilisation de guillemets à la
+française en mode texte dans les environnements \texttt{array} ou
+\texttt{eqnarray} est possible
+mais il est nécessaire de protéger les opérateurs
+inférieur (\texttt{<}) et supérieur (\texttt{>}) lorsqu'ils terminent
+une colonne. On rajoute alors une paire d'accolades ou \verb|\relax|
+pour terminer la macro-commande :
+\begin{verbatim}
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a & \protect< &b\\
+a & b &<\\
+a & >{} &c\\
+<{}& « » &c\\
+<{}& \textrm{« text »}&c
+\end{array}
+$
+\end{verbatim}
+
+\noindent ce qui donne :
+
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a & \protect< &b\\
+a & b &<\\
+a & >{} &c\\
+<{}& « » &c\\
+<{}& \textrm{« text »}&c
+\end{array}
+$
+
+\medskip
+On peut éviter d'avoir à modifier des tableaux existants et dans ce
+cas on codera \verb|\no|\-\verb|guil|\-\verb|lemetsinarrays| :
+
+\begin{verbatim}
+\noguillemetsinarrays
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a & < &b\\
+a & b &<\\
+a & > &c\\
+< & « » &c\\
+< & \textrm{« text »}&c
+\end{array}
+$
+\end{verbatim}
+
+\noindent ce qui donne alors :
+
+\noguillemetsinarrays
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a & < &b\\
+a & b &<\\
+a & > &c\\
+< & « » &c\\
+< & \textrm{« text »}&c
+\end{array}
+$
+\guillemetsinarrays% reset default
+
+\newpage\english
+\section{Guillemets in arrays}
+The \FP\ package allows people to print french guillemets
+in \texttt{array} environments (but in text mode). This usually breaks
+the code for \texttt{<} or \texttt{>} when they finish an array slot.
+So you should protect them; like this:
+\NL2
+
+\begin{verbatim}
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a & \protect< &b\\
+a & b &<\\
+a & >{} &c\\
+<{}& \textrm{« text »}&c
+\end{array}
+$
+\end{verbatim}
+\NL1
+
+\noindent which gives:
+
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a & \protect< &b\\
+a & b &<\\
+a & >{} &c\\
+<{}& \textrm{« text »}&c
+\end{array}
+$
+\NL1
+
+\medskip
+
+One can avoid to modify existing arrays and then just say
+\verb|\noguillemetsinarrays| but this command is not
+interesting in English because the problem doesn't exist
+at all:
+
+\begin{verbatim}
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a & < &b\\
+a & b &<\\
+a & > &c\\
+< & \textrm{<< text >> &c
+\end{array}
+$
+\end{verbatim}
+\NL1
+
+\noindent gives the following result:
+
+\def\GOfrench{\let\ifCLA\iffalse}% To allow dmy and frencht to compile
+\ifx\ifCLA\undefined\expandafter\GOfrench\fi% without error.
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a &
+\ifCLA\expandafter\protect\fi% To allow \ConstantLayout test file.
+< &b\\
+a & b &<\\
+a &
+\ifCLA\expandafter\protect\fi% To allow \ConstantLayout test file.
+> &c\\
+\ifCLA\expandafter\protect\fi% To allow \ConstantLayout test file.
+< & \textrm{<< text >>}&c
+\end{array}
+$
+\NL1
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+
+\noguillemetsinarrays% for continuation of column
+Cette commande est aussi valable pour les environnements
+\texttt{eqnarray} :
+
+\begin{eqnarray}
+a & < &b\\
+a & > &c\\
+< & « » &c\\
+< & \textrm{« text »}&c
+\end{eqnarray}
+
+Pour terminer je rétablis la valeur par défaut :
+\verb|\guillemetsinarrays|
+\guillemetsinarrays
+et si j'essaye le même exemple j'obtiendrais
+le message : \\
+{\makeatletter\let\@PreserveBraces={% uggly hack for plain
+\vers|! Argument of \@PreserveBraces has an|\\
+\vers|extra }.|
+}% closing hack.
+
+\section{Guillemets verbatim}
+
+Avec l'option \verb|\nofrenchguillemets| il est possible
+--~si \FP\ travaille en codage de fonte du genre \texttt{T1}
+{\makeatletter\def\GOfrench{T1}\ifx\GOfrench\f@encoding\else
+(mais ca ne semble pas être le cas ici)\fi}%
+~--
+\nofrenchguillemets
+d'imprimer des guillemets 8-bits en verbatim : \verb|« »|.
+\frenchguillemets
+
+\iflatex
+\section{Environnement guillemets exclus}
+
+\begin{versatim}
+\guillemets{} Je me suis dit que :
+« avec l'option [...] les guillemets
+sont inopérants. \endguillemets{}
+\end{versatim}
+\SmsG
+\noeveryparguillemets
+\guillemets{}
+\verb|[\guillemets{}]| Je me suis dit que :
+« avec l'option \vers|\noevery|\-\vers|par|\-\vers|guillemets|
+on ne doit pas avoir un environnement qui se termine avant la fin
+du paragraphe. C'est pourquoi l'environnement \texttt{guillemets}
+n'est plus autorisé dans ce cadre.
+Désormais un message est émis et ces environnements
+guillemets sont inopérants. \endguillemets{}
+
+On note que \verb|\guillemets{}| n'a aucun effet visible
+et que le début de paragraphe est forcé aux premiers
+caractères-guillemets ouvrants qui suivent. Le
+\verb|\endguillemets{}| de fin d'environnement ferme cependant
+le paragraphe.
+
+\guillemets [\verb|\guillemets{}|]\!
+Ces environnements exclus dans le cadre de cette option
+ peuvent être de premier ou
+/\guillemets{} deuxième \endguillemets{}/ niveau
+comme ici (slashs). [\verb|\endguillemets{}|]
+\endguillemets{}
+
+\FmsG
+\frenchguillemets
+\fi%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\english
+Notice that with standard \LaTeX\ you obtain a message
+saying that \verb|\guillemotleft| and \verb|\guillemotright|
+are invalid in math mode when you try to use guillemets
+in an \texttt{array} environement.
+\NL{9}
+
+\smallskip
+
+\section{Verbatim Guillemets}
+
+The 8bit french guillemets chars printed within
+a verbatim environnement give here: \verb|« »|
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\section{Utilisation de la \mdseries\texttt{toc}}
+
+Il n'est pas prévu de pouvoir composer une table des matières ou un
+sommaire dans plus d'une langue.
+On notera que \verb|\sommaire| est un apport de \FP.
+
+\section{Fichiers {\mdseries\texttt{lof}} et {\mdseries\texttt{lot}}}
+On vérifie ici que la ponctuation française n'a pas créé
+d'ennui particulier.
+Nous avons laissé en blanc la figure \ref{x«:;!?»x}
+qui n'est qu'un simple
+test. De même le tableau \ref{y`«:;!?»'y} n'est là que pour
+créer une entrée dans la liste des tableaux.
+
+Le {\em caption} de la figure
+\ref{x«:;!?»x}
+ doit apparaître com\-me ceci :
+ {\it « essai » ; 2 cm ! pourquoi pas ?}
+\begin{figure}[h]
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\%\vspace*{2cm}
+\ \\
+\ Peu importe la figure...\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption{« essai » ; 2 cm ! pourquoi pas ?
+ \protect\\ (cf. aussi le tableau \ref{frenchdactylo})}
+\label{x«:;!?»x}
+\end{figure}
+
+Le {\em caption} du tableau
+\ref{y`«:;!?»'y}
+ doit être comme ceci :
+{\it ` « essai » ; 2 cm ! pourquoi pas ? '}
+\begin{table}[h]
+\caption{` « essai » ; 2 cm ! pourquoi pas ? '
+ \protect\\ (cf. aussi le tableau \ref{frenchdactylo})}
+\label{y`«:;!?»'y}
+
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ Peu importe le tableau\footnote{Une note de tableau.}...\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+
+On notera les libellés ({\sc Fig.} et {\sc Tab.}) plus confor\-mes à
+l'usage français. Ne pas oublier non plus que les titres de tableaux sont
+toujours placés, en français, avant ceux-ci contrairement aux figures.
+
+\FP\ ne prévoit pas que l'on puisse composer une
+partie des tables des figures (ou tableaux) en français et une autre
+en anglais par exemple. Les fichiers \verb|.lof| et \verb|.lot| seront
+donc composés entièrement dans la langue présélectionnée.
+
+\newpage\english
+\section{{\mdseries\texttt{toc}} file use}
+No facility is given to typeset the \verb|.toc| in various languages.
+
+Notice that \verb|\sommaire| is a new command brought up with this
+package.
+
+\section{{\mdseries\texttt{lof}} and {\mdseries\texttt{lot}} files}
+Same test in English just to verify that our french modifications
+does not affect the text in English.
+
+You will notice, of course, that the caption names are re-established
+to their original values ({\bf figure} and {\bf table}).
+
+The following figure (not referable) %(\ref{ex«:;!?»ex})
+caption must look like:
+« essai »; 2 cm! Why not?
+\begin{figure}[h]
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ No matter how is the figure$\ldots{}$\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption{« essai »; 2 cm! Why not?
+ \protect\\ (cf. also the table \ref{frenchdactylo})}
+%\label{ex«:;!?»ex}% produit un missing \endcsname
+\end{figure}
+
+The {\em caption} of the table (not referable) %\ref{ey`«:;!?»'ey}
+must look like:
+` « essai »; 2 cm! Why not? '
+\begin{table}[h]
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ No matter how is the table\footnotemark% \footnotetext est perdu !
+ $\ldots{}$\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption{` « essai »; 2 cm! Why not? '
+ \protect\\ (cf. also the table \ref{frenchdactylo})}
+%\label{ey`«:;!?»'ey}% generates missing \endcsname
+\end{table}\footnotetext{A note from a table.}
+\NL1
+
+Notice that we have here the standard caption names used by \LaTeX{}.
+
+You can see in the French column the specific labels and places of caption
+titles (under the figure but over the table).
+
+Don't try to compose \verb|.lof| and \verb|.lot| files in more than one
+language, it's not designed in this (stupid?) way!
+
+\french
+\begin{table*}[tb]
+\caption{` « essai » ; 2 cm ! pourquoi pas ? '
+ (cf. aussi le tableau \ref{frenchdactylo})}
+\label{2`«:;!?»'2}
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ Peu importe le tableau sur deux colonnes%
+\footnote{Une note de tableau.}...\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\end{table*}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Encore un tableau...}
+Mais celui-ci est sur deux colonnes si l'option
+\verb|twocolumn| est active. Vérifions simplement
+que le traitement est le même qu'en une seule
+colonne.
+
+Le {\em caption} du tableau
+\ref{2`«:;!?»'2}
+ doit être comme ceci :
+{\it ` « essai » ; 2 cm ! pourquoi pas ? '}
+
+\section{\sloppy Encore {\mdseries\texttt{\textbackslash labelsinmargin}}}
+
+À nouveau nous utilisons \verb|\labelsinmargin|
+\labelsinmargin
+pour vérifier son fonctionnement dans une figure
+et un titre de figure
+
+\begin{figure}[h]
+\label{label de la figure}
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ Peu importe la figure...\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption{le titre de la figure avec label
+\label{label du titre fig.}}
+\end{figure}
+
+Même test avec un tableau :
+\begin{table}[h]
+\label{label du tableau}
+\caption{le titre du tableau avec label\label{label du titre tab.}}
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ Peu importe le tableau...\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+
+\sloppypar{
+Désactivons définitivement l'option
+avec \verb!\nolabelsinmargin!.
+}
+\nolabelsinmargin
+
+\newpage\english
+\NL8
+\section{{\mdseries\texttt{\textbackslash labelsinmargin}} again}
+
+Again we test \verb|\labelsinmargin|
+\labelsinmargin
+to verify that it is running within a figure
+and in a figure's caption.
+
+\begin{figure}[h]
+\label{label in a figure}
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ No matter the figure$\ldots{}$\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption{title with a label\label{label in fig. caption}}
+\end{figure}
+
+Same test with a table:
+\begin{table}[h]
+\label{label in a table}
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ No matter the table$\ldots{}$\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption{title with a label\label{label in a tab. caption}}
+\end{table}
+
+Disactivate definitely the option with \verb!\nolabelsinmargin!.
+\nolabelsinmargin
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+
+\section{Notes dans \mdseries\texttt{\textbackslash caption}}
+
+Si une note dans un tableau doit être imprimée à la fin du
+tableau, une note dans un titre de tableau doit être
+imprimée en fin de page. Malheureusement \LaTeX{} perd
+le texte des notes dans les environnements {\tt figure} et
+{\tt table}. L'ex\-ten\-sion \FP\ prévient l'utilisateur
+que le texte doit être réinséré à l'aide de \verb|\footnotetext|.
+
+\begin{table}[h]
+
+\SmsG%
+\caption[Essai de footnote dans un caption de tableau]
+ {Légende\protect\footnote{Une note de bas de page.}}
+\FmsG%
+
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+%\ \\
+\ Peu importe le tableau...\\
+%\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+\footnotetext{Une note de bas de page.}
+
+\section{{\mdseries\texttt{\textbackslash caption}} vide}
+
+\begin{table}[h]
+\caption{}
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+%\ \\
+\ Tableau sans légende\\
+%\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+
+\section{\mdseries\texttt{\textbackslash nombre}}
+
+Les nombres en français sont imprimés correctement lorsque l'on
+utilise \verb|\nombre|, ainsi :
+
+\begin{verbatim}
+\nombre{123 456,123 456}
+\end{verbatim}
+imprime \nombre{123 456,123 456} au lieu de la forme habituelle
+ {\regularmathcomma $123 456,123 456$}
+ou \mbox{123 456,123 456} suivant que l'on est en mode math
+ou en mode texte.
+
+On y voit des espaces fines à chaque millier et (normalement)
+une virgule sans espace supplémentaire comme cela se produit
+en mode math avec \TeX{} standard.
+
+\section{Autre chose ?}
+Non !
+
+[espace libre utilisable]
+
+\newpage\english
+
+\section{Notes within \mdseries\texttt{\textbackslash caption}}
+
+Normally in French we print table's footnotes at the end of the table
+but it can't be the case when a footnote is called from a caption title.
+But unfortunately footnote's text is lost when inside a \LaTeX{} figure
+or table environnement, as shown here.
+Thus {\tt french.sty} warn the user with the appropriate message, but
+in English nothing is done.
+
+\begin{table}[h]
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+%\ \\
+\ No matter the table$\ldots{}$\\
+%\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption[footnote try within a table's caption]
+ {Caption title\protect\footnote{A footnote page.}}
+
+\end{table}
+%\footnotetext{A footnote page.}
+
+\section{Empty \mdseries\texttt{\textbackslash caption}}
+
+\begin{table}[h]
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+%\ \\
+\ Empty caption\\
+%\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption{}
+\end{table}
+
+\section{\mdseries\texttt{\textbackslash nombre}}
+
+French number should be correctly printed using
+\verb|\nombre|, so :
+
+\begin{verbatim}
+\nombre{123 456,123 456}
+\end{verbatim}
+should not print as usual
+$123 456,123 456$ nor \mbox{123 456,123 456}
+(depending you are in math or in text mode)
+but $123\,456{,}123\,456$.
+\NL1
+
+We see here thin spaces between each thousand part and no
+(usual) space after the comma (as it is in math with standard
+\TeX{}).
+
+\smallskip
+
+\section{Anything else?}
+
+No!
+
+\noindent
+[free space to reuse]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\section{Le 1\protect\fup{er} paragraphe}
+Notez bien que le 1\fup{er} paragraphe d'une section
+ne commence jamais au fer à gauche
+en français, comme vous le voyez ici.
+
+Le deuxième paragraphe démarre comme le premier...\footnote{%
+La typographie du titre de section (1\fup{er}) est à noter ;
+ {\tt mysmaller.sty} a été utilisé
+à la compilation de {\tt frenchrf} avec \LaTeX{}.
+Il existe aussi l'extension {\tt relsize} qui fonctionne
+bien avec \FP.}
+
+\section{Test des listes}\label{listes}
+
+Voici un test d'énumération (\verb|itemize|) de \LaTeX{} :
+
+\begin{itemize}
+\item liste de niveau 1 ;
+ \begin{itemize}
+ \item incluant un niveau 2,
+ \begin{itemize}
+ \item mais aussi un niveau 3,
+ \item peu utilisé ;
+ \end{itemize}
+ \item le niveau 2 se terminant ici ;
+ \end{itemize}
+\item suite de la liste de niveau 1 ;
+\item dernier élément de niveau 1.
+\end{itemize}
+
+On remarquera les deux choses suivantes :
+\primo les marqueurs sont identiques quel que soit
+le niveau et \secundo aucun élément ne commence par une majuscule.
+\NL2
+
+\section{Définition de langue}
+
+Cette partie n'a plus de sens (R. J.).
+%On peut se définir une langue comme par exemple le kathmandouais par : \\%
+%\verb|\NouveauLangage[2]|\verb|{kathmandouais}|\\%
+%\global% for TeX--XeT tests
+%\def\kathmandouaisTeXmods{\empty}
+% \NouveauLangage[2]{kathmandouais} %
+%et ensuite on peut écrire kathmandouais en tapant :
+%\verb|\kathmandouais|
+%\SmsG%
+%\kathmandouais%Message a ignorer si vous n'avez que 2 langues definies.
+%bla... blabla... bla%
+%\typeout{I AM WRITING KATMANDOUAIS, Ye\string! (language=\the\language)}%
+%\FmsG%
+%\footnote{Mais bien entendu les césures ne seront pas bonnes car elles
+%seront faites à partir d'un language existant. On notera la typographie
+%du numéro de cette note saisie en {\em Katmandouais}.}
+% et revenir au français par
+%\verb|\french|\french%
+%\footnote{Si le point qui suit n'est pas accolé au mot {\tt french}
+%alors cela signifie que des {\em blank space} traînent dans
+%\FP.}.
+%S'il n'y a pas de commande \verb|\kathmandouaisTeXmods| de définie
+%rien ne se passera
+%vraiment, cela sera équivalent à \verb|\relax|, seul un message
+%d'avertissement sera émis.
+
+\newpage\english
+\section{First paragraph}
+In English each paragraph is indented except the first one of a section,
+subsection, etc. as you can see in this example.
+
+Subsequent paragraphs start indented$\ldots{}$\NL1
+
+\section{Itemized lists}
+Here is the same french \verb|itemize| list:\NL1
+
+\begin{itemize}
+\item liste de niveau 1;
+ \begin{itemize}
+ \item incluant un niveau 2,
+ \begin{itemize}
+ \item mais aussi un niveau 3,
+ \item peu utilisé ;
+ \end{itemize}
+ \item le niveau 2 se terminant ici ;
+ \end{itemize}
+\item suite de la liste de niveau 1 ;
+\item dernier élément de niveau 1.
+\end{itemize}
+
+You can compare english and french lists.
+Notice firstly that item markers are identical at each level and secondly
+that each item never starts with an uppercase letter.
+
+\section{Create a language}
+
+This creation is now obsolete (R. J.).
+%There is a new control sequence to allow {\em the creation} of new language:\\
+%\verb|\NouveauLangage[n]{language}|\\
+%This command is in fact used internally but it can be also used elsewhere
+%to define a new language which rules will be set by:\\
+% \verb|\<language>TeXmods| (if defined.) The internal language number \verb|n|
+%tells \TeX{} what hyphenation table is to use among those defined at
+%\verb|INITEX| time.
+
+\begin{table*}[th]% pour la page suivante
+\begin{center}
+\fbox{Attention : psfig est périmé ; il n'est utilisé ici qu'à des fins de test. (B. G.)}\\[2ex]
+\fbox{Puisque psfig est périmé utilisons graphicx et epstopdf (R. J.)}
+\end{center}
+\end{table*}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\section{Caractères actifs}
+Quelques jeux de macros doivent parfois être chargés
+directement dans le document
+et utilisent les caractères {\em actifs\/} de \FP. Il y
+a alors conflit ouvert. Plusieurs solutions sont offertes, soit utiliser
+l'ordre : \\
+\verb| \originalinput{fichier}|\\
+ soit :
+\begin{verbatim}
+ \begin{nonfrench}
+ ... macros-instructions...
+ \end{nonfrench}
+\end{verbatim}
+%Nous avons adopté la deuxième solution ici :
+%
+%\tthyphenation
+%\begin{versatim}
+%Saluons au passage Trevor Darrell, l'auteur de \verb|psfig| :
+% \begin{nonfrench}
+% \let\psfig\undefined
+% \input mypsfig.sty
+% \begin{center}
+% \ \hbox{\vbox{\psfig{figure=%
+% myfigure.ps,height=1in}}}\
+% \end{center}
+% \end{nonfrench}
+%\end{versatim}
+
+%Saluons au passage Trevor Darrell, l'auteur de \verb|psfig| :
+%\begin{nonfrench}
+% \let\psfig\undefined
+% \input mypsfig.sty
+% \begin{center}
+% \ \hbox{\vbox{\psfig{figure=%
+% myfigure.ps,height=1in}}}\
+% \end{center}
+%\end{nonfrench}
+Mais attention n'utilisez pas en français un code que
+vous auriez chargé
+en anglais ou réciproquement !
+
+
+L'extension \FP\ n'est plus compatible avec \verb|psfig|.
+Mais pour montrer quand même l'image que Bernard Gaule voulait placer ici, la voici
+ayant sous Linux remplacé
+\texttt{myfigure.ps} en son expression encapsulée \texttt{myfigure.eps}
+par « \texttt{convert myfigure.ps myfigure.eps} ».\NL1
+%L'ordre \texttt{convert} est une commande Linux.
+%En voici l'exemple -- sans utiliser \verb|nonfrench| -- avec
+%\verb|\psdraft| :
+% \let\psfig\undefined
+% \input mypsfig.sty
+% \psdraft
+
+Saluons au passage Trevor Darrell, l'auteur de \verb|psfig| : \begin{center}
+ \ \hbox{\vbox{\includegraphics[height=1in]{myfigure.eps}}}
+%{\psfig{figure=%
+% myfigure.ps,height=1in}}}\
+% \ \hbox{\vbox{\psfig{figure=%
+% myfigure.ps,height=1in}}}\
+\NL1
+ \end{center}
+Voici le code modifié :
+\begin{verbatim}
+% \input mypsfig.sty
+% \psdraft
+ \begin{center}
+ \ \hbox{\vbox{\includegraphics%
+ [height=1in]{myfigure.pdf}}}
+% \ \hbox{\vbox{\psfig{figure=%
+% myfigure.ps,height=1in}}}\
+ \end{center}
+\end{verbatim}
+
+\NL1
+Comme vous le voyez l'appel à \texttt{mypsfig.sty} n'est plus nécessaire.
+Mais nous avions chargé \texttt{graphicx} et \texttt{epstopdf} dans les styles chargés à la base.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\english
+\section{Active characters}
+Codes that were designed for English might bring problems when used with
+\FP\ because few characters are {\em activated\/}.
+Few solutions are offered, either:\\
+\verb| \originalinput{file}|
+
+or:
+\begin{verbatim}
+ \begin{nonfrench}
+ ... macros-instructions...
+ \end{nonfrench}
+\end{verbatim}
+%We used here the second solution:
+%\begin{verbatim}
+%Saluons au passage Trevor Darrell,
+% l'auteur de \verb|psfig| :
+% \begin{nonfrench}
+% \let\psfig\undefined
+% \input mypsfig.sty
+% \begin{center}
+% \ \hbox{\vbox{\psfig{figure=%
+% myfigure.ps,height=1in}}}\
+% \end{center}
+% \end{nonfrench}
+%\end{verbatim}
+%
+%\notthyphenation
+%%\begin{nonfrench}% inutile d'obtenir un message de warning
+% \let\psfig\undefined
+% \input mypsfig.sty
+But be carefull, don't use in French a code that was loaded in English
+or reciprocally!
+
+The \FP\ extension is no more compatible with \verb|psfig|.
+
+But in order to show the image that Bernard Gaule had in mind to place here, you can see it
+after having converted with the Linux command \texttt{convert myfigure.ps myfigure.eps}
+his original \texttt{myfigure.ps} in an encapsulated version \texttt{myfigure.eps}.
+
+%\NL1
+Saluons au passage Trevor Darrell, %
+ l'auteur de \verb|psfig| :
+ \begin{center}
+ \ \hbox{\vbox{\includegraphics[height=1in]{myfigure.eps}}}
+% \ \hbox{\vbox{\psfig{figure=%
+% myfigure.ps,height=1in}}}\
+ \end{center}
+\NL1
+%%\end{nonfrench}
+Here is the modified code:
+\begin{verbatim}
+% \input mypsfig.sty
+% \psdraft
+ \begin{center}
+ \ \hbox{\vbox{\includegraphics%
+ [height=1in]{myfigure.eps}}}
+% \ \hbox{\vbox{\psfig{figure=%
+% myfigure.ps,height=1in}}}\
+ \end{center}
+\end{verbatim}
+As you can see, a call to \texttt{mypsfig.sty} is no more necessary.
+But \texttt{graphicx} and \texttt{epstopdf} have been loaded in the main module.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+
+\section{Abréviations}
+\abbreviations
+Si on demande \verb|\abbreviations| alors on a
+accès à un fichier d'abré\-via\-tions
+typo\-graphi\-ques françaises.
+Ainsi je saisis \verb|"monseigneur"| et j'imprime "monseigneur"\!.
+De même, avec ML\TeX{} je saisis \verb|"deuxième"|
+(vérifiez dans le
+source que ce mot est bien codé en 8bits) et j'imprime "deuxième"\!%
+. %alors que le fichier d'abréviations contient \verb|"deuxi\`|\verb|eme"|.
+Ainsi il n'est plus vraiment indispensable de se rappeler que
+l'abréviation de madame est "madame" (et maître : "maître"\!).
+
+Lorsqu'un mot ne figure pas dans le fichier d'abréviations, il est alors
+imprimé tel que. Ainsi \verb|"GUTenberg"| imprimera
+\SmsG%
+"GUTenberg".
+\FmsG%
+ Mais n'oubliez jamais le double guillemet fermant sinon vous obtiendrez
+ un message du genre :
+\begin{versatim}
+ Paragraph ended before \AbbrevName was complete.
+\end{versatim}
+
+Je peux aussi donner mon fichier personnel d'abréviations en codant :\\
+\verb|\abreviations[mon_fichier_personnel]|
+
+On retire ces possibilités par la commande \verb|\noabbreviations|.
+N'oublions pas que le caractère \verb|"| sert normalement en \TeX{}
+comme en \LaTeX{} à exprimer les nombres en hexadécimal.
+
+\section{Monsieur s'abrège "Monsieur"}
+
+Que je saisisse \verb|"Monsieur"| ou \verb|"monsieur"|
+j'obtiens la même abréviation : "Monsieur" ou "monsieur", respectivement.
+
+Il n'en est pas toujours de même... ainsi lorsqu'on saisit
+\verb|"Numéro"| et \verb|"numéro"| on obtient respectivement :
+"Numéro" et "numéro", car \verb|Numéro|
+est une entrée dans le fichier des abbréviations où il est écrit
+\verb|{Numéro}|.
+
+Il est désormais possible de placer une abréviation dans un titre
+de chapitre ou de section, comme le titre de cette section le
+démontre ; nous avons saisi :
+\begin{verbatim}
+\section{Monsieur s'abrège "Monsieur"}
+\end{verbatim}
+
+\noabbreviations
+
+\newpage\english
+
+\section{Abbreviations}
+The abbreviation facility offered in \FP\ is based on
+an abbreviations file. When requested by \verb|\abbreviations| one
+may call any \verb|"abbreviation"|. If this abbreviation is found in the
+file it will be replaced by the typographic expansion, if not it will
+be printed as is.\NL2
+
+But never forget the ending double quotes otherwise you will obtain the
+terrible message:
+{\tt Paragraph} {\tt ended before} \texttt{\textbackslash AbbrevName}
+{\tt was complete.}
+\NL4
+
+You can have your own abbreviations file by calling:
+\verb|\abreviations[my_file]|.\NL1
+
+Saying \verb|\noabbreviations| this facility is lost. Remember that the
+char \verb|"| is used normally in \TeX{} as in \LaTeX{} to start an
+hexadecimal number.
+
+But used in English, \verb|"monsieur"| will give "monsieur"%
+\footnote{Notice the quoting!}.
+
+\newpage\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Autres macros utiles}
+\verb|\fsc{KnUtH}| permet d'imprimer \fsc{KnUtH} et \verb|\lsc{SnCf}|
+donne \lsc{SnCf}. Cela doit aussi marcher si le mot commence par une
+accentuation comme ici avec le mot \fsc{\'% a laisser tq a cause du 7bits
+epinal} et même quand cette accentuation est plus loin dans
+le mot comme ici dans \fsc{ANDR\'% a laisser tq a cause du 7bits
+E}.
+
+\bigskip
+Voici une note%
+\footnote{La note.\label{NOTE}}
+de bas de page commandée par \verb|\footnote{La note.\label{NOTE}}|.
+Je peux faire à nouveau appel à cette note\refmark{NOTE}
+ par l'ordre \verb|\refmark{NOTE}|.
+
+\bigskip
+Par analogie avec l'environnement \verb|verse| :
+\begin{verse}
+%\moretolerance % pour eviter un leger overfull hbox
+1\iere{} ligne : cette ligne est bien trop longue, elle doit être coupée autant de fois que nécessaire...\\
+2\ieme{} ligne : le test terrible de...\\%
+3\ieme{} ligne : `ceci est le test des quotes'\\
+\end{verse}
+\tthyphenation
+voici le même test (sans \verb|\\|)
+avec l'environnement \vers|versatim| qui est
+un environnement \vers|verba|\-\vers|tim| composé
+avec des coupures de lignes
+comme l'est l'environnement \verb|verse| et dont les {\em quotes} peuvent
+être imprimées avec des accents si on précise
+\vers|\noenglishquote| :
+\noenglishquote
+\begin{versatim}
+1\iere{} ligne : cette ligne est bien trop longue, elle doit être coupée autant de fois que nécessaire...
+2\ieme{} ligne : le test terrible de \end{document}
+3\ieme{} ligne : `ceci est le test des quotes'
+\end{versatim}
+\englishquote
+
+\allowuchyph
+Et maintenant voici l'ordre réduit \verb|\vers| qui
+s'utilise comme \verb|\verb| et doit permettre de couper une
+longue chaîne de caractères \texttt{ver\-batim}. Celle-ci
+sera coupée par défaut entre les mots (\vers|\notthyphe|\-\vers|nation|)
+mais pourra l'être à l'intérieur des mots si on précise
+\tthyphenation \vers|\tthyphe|\-\vers|nation| comme ici : «
+\vers|Longue Chaîne De Caractères À Couper Absolument| ».
+Les mots commençant en majuscule ne pourront être coupés
+que si \vers|\uchyph=1|, valeur par défaut dans \FP\
+(\vers|\|\vers|allow|\-\vers|uchyph|) qui est utilisée pour cette
+partie uniquement.
+
+\subsection*{Test de {\mdseries\texttt{\textbackslash fsc}}
+(\fsc{French CAPS})}
+Ce paragraphe teste la protection de certaines macro-instructions.
+
+\disallowuchyph\notthyphenation
+\newpage\english
+\section{Other useful macros}
+French patronymic names are printed in small capitals with the first
+letter in uppercase. That is done with the \verb|\fsc| macro.
+Another macro \verb|\lsc| is available to print all the word(s) in small
+capitals, specially usefull for trademark or companies names.
+
+\LaTeX{} is at the current time unable to print a \verb|\ref| as
+a footnotemark, the command \verb|\refmark| is able to do that.
+
+Also, \LaTeX{} doesn't offer any {\tt verbatim} style able to
+hyphenate lines. \FP\ is able to do this with the
+environment {\tt versatim} or the \texttt{\textbackslash vers} order within a
+line.
+
+These environments allow to replace the {\tt tt} quoting
+({\tt ` '}) by more realistic ones ({\tt\`{ } \'{ }}) with
+the order \texttt{\textbackslash noenglishquote}. Of course this environment
+produce nothing different from the standard \verb|verbatim| when
+used in \verb|\english|:
+{\overfullrule=5pt
+
+\hfuzz=30pt
+\begin{versatim}
+1\iere{} ligne : cette ligne est bien trop
+2\ieme{} ligne : le test terrible de...
+3\ieme{} ligne : `ceci est le test des...
+\end{versatim}
+
+\SmsG%
+
+And now this a test of a long string within a \verb|\vers|:
+``\vers|Longue Chaîne De Caractères À Couper A|
+This string would be hyphenated only if someone said
+\verb|\tthyphenation| previously.
+}
+
+\FmsG%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\section{Accents et {\mdseries\tt tabbing}}
+\FP\ apporte une solution pour pouvoir introduire
+des lettres accentuées dans un environnement \vers|tabbing| lorsque
+le source \TeX{} est en 7bits ou utilise Ml\TeX{}
+\footnote{%
+Cette option est aussi utile désormais en T1 car les lettres accentuées
+sont traduites avec \FP, de façon interne, en 7-bits à la \TeX.
+ }%
+ ; c'est l'option par défaut
+\vers|\|\vers|tabbing|\-\vers|accents|\tabbingaccents. L'exem\-ple :
+\begin{tabbing}
+Les TYPES : \= Les matieres \= Les genres \kill
+Bidon : \> d'huile \>$A'=B''$\` normal \\
+Caisse : \> \`%
+ a outils \> rustique \\
+Toile : \> \a`%
+ a matelas \> confort
+\end{tabbing}
+\notabbingaccents
+doit s'imprimer ainsi :
+\begin{tabbing}
+Les TYPES : \= Les matieres \= Les genres \kill
+Bidon : \> d'huile \>$A'=B''$\` normal \\
+Caisse : \>\a`a outils \> rustique \\
+Toile : \>\a`a matelas \> confort \\
+\end{tabbing}
+\vspace*{-0.5\baselineskip}
+Nous l'avions saisi comme suit :
+\begin{versatim}
+\begin{tabbing}
+Les TYPES : \= Les matieres \= Les genres \kill
+Bidon : \> d'huile \>$A'=B''$\` normal \\
+Caisse : \> \`%
+ a outils \> rustique \\
+Toile : \> \a`%
+ a matelas \> confort
+\end{tabbing}
+\end{versatim}
+
+\section{Figurettes}
+Le style \verb|french| propose un environnement spécial, appelé
+\verb|figurette|,
+ pour placer les figures à l'enfroit exact où
+ces figures se présentent
+dans le texte. Cela est particulièrement utile pour des petites figures,
+domaine où \LaTeX{} n'est pas adapté en standard.
+Pour réaliser ceci :
+ \begin{figurette}
+ \center\fbox{essai}\endcenter% rajoute pour plain TeX
+ \caption{Ceci est une figurette}
+ \label{figurette}
+ \end{figurette}
+Nous avons écrit :
+\begin{verbatim}
+ \begin{figurette}
+ \center\fbox{essai}
+ \caption{Ceci est une figurette}
+ \label{figurette}
+ \end{figurette}
+\end{verbatim}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\english
+\section{Diacritics \& {\mdseries\tt tabbing}}
+There is no way in a \LaTeX{} \texttt{tabbing} to put diacritics on letters
+as we use them usually. Here is how is printed the {\tt tabbing}
+you can find in the french part:
+
+\begin{tabbing}
+Les TYPES : \= Les matieres \= Les genres \kill
+Bidon : \> d'huile \>$A'=B''$\` normal \\
+Caisse : \> \`%
+ a outils \> rustique \\
+Toile : \> \`%
+ a matelas \> confort
+\end{tabbing}
+
+and that would normally be printed as follows:
+
+\begin{tabbing}
+Les TYPES : \= Les matieres \= Les genres \kill
+Bidon : \> d'huile \>$A'=B''$\` normal \\
+Caisse : \>\a`a outils \> rustique \\
+Toile : \>\a`a matelas \> confort \\
+\end{tabbing}
+
+ \begin{figurette}
+ \center\fbox{essai}\endcenter% rajoute pour plain TeX
+ \caption{Originally a figurette}
+ \label{engfig}
+ \end{figurette}
+\NL{4}
+
+\section{Little figures}
+
+\FP\ offers a special environment called
+\verb|figurette| which allows to put little figures EXACTLY
+where they appear in the text. This is a lack in the present
+versions of \LaTeX{}. In English the environment \verb|figurette|
+is replaced by an environment \verb|figure[h]|; look at figure
+\ref{engfig} we tried to put here without success and we
+typed like this:
+
+\begin{verbatim}
+ \begin{figurette}
+ \center\fbox{essai}
+ \caption{Originally a figurette}
+ \label{engfig}
+ \end{figurette}
+\end{verbatim}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\ifx\drapeaufg\undefined\else
+\section{Composition \protect\linebreak en drapeau}
+À gauche on trouve une composition justifiée standard \LaTeX.
+Dessous, une composition avec l'environnement \texttt{drapeaufg}
+proposé par l'extension \FP, il s'agit d'une composition
+\emph{en drapeau, au fer} à gauche. À droite, il s'agit aussi d'une
+composition \emph{en drapeau, au fer} à gauche mais cette fois-ci avec
+l'environnement \texttt{drapeaufgIN}, sans coupure de mots, comme cela
+est recommandé par l'imprimerie nationale.
+
+\subsection{Tests ordinaires}
+\textbf{\large Texte justifié de référence}
+
+\medskip
+\def\GOfrench{\noindent{\fboxsep 0pt\fboxrule 0.2pt\fbox{\advance\hsize by -2pt
+ \hbox{\vbox{\noindent
+« Par ailleurs, les lignes n'occupant pas toute la
+ justification (titres ou légendes le plus souvent) peuvent être
+ \emph{centrées} ou se présenter alignées verticalement
+ par la gauche sur la
+ marge de gauche de la page, ou \XX
+ verticalement par la droite sur la marge de
+ droite de la page. On dira alors qu'elles sont composées
+\emph{en drapeau, au fer} à gauche ou \emph{en drapeau, au fer} à droite.
+Dans ce type de composition, les coupures de mots sont proscrites et les
+rejets à la ligne devront obéir à une certaine logique souvent dictée par le
+sens. Ainsi on ne séparera pas l'article du substantif, le pronom personnel
+sujet de son verbe, l'adjectif numéral du nom auquel il se \XX
+rapporte, \etc. »
+(règles Imprimerie Nationale, p~153)%
+}}\hss}}}
+
+\let\XX\relax
+\GOfrench
+
+\hbox{}
+
+\textbf{\large Drapeau, au fer à gauche}
+
+\medskip
+\begin{drapeaufg}
+\GOfrench
+\end{drapeaufg}
+
+\newpage
+\enlargethispage{20pt}\hbox{}\smallskip
+
+\hbox{}\smallskip\NL5
+Dans ce dernier cas, des débordements dans la marge droite
+sont possibles ; ils sont à traiter
+au cas par cas par de simples coupures de lignes placées aux endroits
+recommandés par l'imprimerie nationale (selon texte encadré). Le
+dernier texte est ainsi corrigé.\NL3\vspace*{-2.5pt}
+
+\textbf{\large Drapeau « fg », selon IN}
+
+\medskip
+\begin{drapeaufgIN}
+\GOfrench
+\end{drapeaufgIN}
+
+\medskip
+\textbf{\large Drapeau « fg IN », corrigé}
+
+\medskip
+\let\XX\\
+\begin{drapeaufgIN}
+\GOfrench
+\end{drapeaufgIN}
+
+\newpage
+\subsection{Tests en drapeau « fg », aux limites}
+Voici deux tests aux limites de la composition
+\emph{en drapeau, au fer} à gauche, sur une colonne
+étroite (2cm) tout d'abord avec l'environnement
+\texttt{drapeaufg} et ensuite avec la recommandation
+de l'imprimerie nationale appliquée à
+\FP\ (ou interprètée par l'environnement \texttt{drapeaufgIN}).
+
+Les coefficients de laideur (\texttt{badness})
+acceptés sont élevés, c'est la raison pour laquelle
+aucun message d'\texttt{underfull hbox}
+(tout comme celui d'\texttt{overfull})
+n'est émis dans les deux cas
+ci-dessous.
+
+\bigskip
+
+\def\temp{\noindent{\fboxsep 0pt\fboxrule 0.2pt\fbox{\advance\hsize by -2pt
+ \hbox{\vbox{\noindent
+ instit instits
+institut instituts
+institution institutions
+institutionnel institutionnels
+institutionnelle institutionnelles
+institutionnellement
+constitutionnellement
+inconstitutionnellement
+}}\hss}}}
+
+\let\XX\relax
+\parbox{2cm}{%
+\begin{drapeaufg}
+\hsize=2cm
+\temp
+\end{drapeaufg}
+}
+\hspace*{0.5cm}
+\parbox{2cm}{%
+\begin{drapeaufgIN}
+\hsize=2cm
+\temp
+\end{drapeaufgIN}
+}
+
+\newpage
+\subsection{Tests en drapeau « fd », aux limites}
+Nous effectuons ici les mêmes test mais avec
+les environnements \texttt{drapeaufd} (fer à droite)
+et \texttt{drapeaufdIN} (selon imprimerie nationale).
+En fait, l'environnement
+\texttt{drapeaufd} est tout simplement
+un \texttt{raggedleft}.
+\NL{9}
+
+\let\XX\relax
+\parbox{2cm}{%
+\begin{drapeaufd}
+%\mbox{Avec \the\rightskip :}
+\hsize=2cm
+\temp
+\end{drapeaufd}
+}
+\hspace*{0.5cm}
+\parbox{2cm}{%
+\begin{drapeaufdIN}
+%\mbox{Avec \the\rightskip :}
+\hsize=2cm
+\temp
+\end{drapeaufdIN}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\Large
+\let\XX\relax
+\subsection{Test « fd » classique}
+
+\begin{drapeaufd}
+\GOfrench
+\end{drapeaufd}
+
+\normalsize\bigskip
+
+L'½il aiguisé sera troublé car
+les deux colonnes ne sont pas alignées horizontalement ;
+cela est dû à la différence de matériel à composer, au total,
+dans chacune des deux colonnes.
+
+\vfill
+
+\newpage
+\Large
+\subsection{Test « fd » IN}
+\begin{drapeaufdIN}
+\GOfrench
+\end{drapeaufdIN}
+
+\normalsize\bigskip
+
+Quelque soit le corps de la police (dans les limites
+classiques de \LaTeX{}), avec cette largeur de colonne,
+on n'obtient pas de différence
+de mise en page entre les deux environnements. Les règles
+de l'imprimerie nationale sont donc plus largement appliquées
+dans ce cas.
+
+\vfill
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\onecolumn
+\newpage\french
+\hbox{}
+\vfill
+\centerline{\Large Page intentionnellement laissée blanche}
+\vfill
+\twocolumn
+
+\fi% on a saute si drapeaufg est inconnu (frencht)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\section{Lettrines}
+\SmsG% lettrine reduite a 1 seule lettre !
+Voici le test des lettrines proposées en mode semi-automatique
+avec \FP\ :
+
+\bigskip
+\verb| \flettrine{Quoi ?}|
+\flettrine{Quoi ?} {Paris}
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés.
+
+« Ici démarre une lettrine dans une citation.
+
+\bigskip
+\lettrine{Paris}
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés.
+
+\bigskip
+\flettrine{Paris}
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés.
+
+et la citation se termine ici. »
+
+\bigskip
+\verb| \font\lettrinefont=cmr17 scaled|\\
+{\font\lettrinefont=cmr17 scaled \magstep5
+\verb| \magstep5\lettrine[`` {Paris} '']|
+\lettrine[`` {Paris} '']
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés.\par}
+
+\bigskip
+\verb| \lettrine[« {Paris} »]|
+\lettrine[« {Paris} »]
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés.
+
+\bigskip
+\verb| \flettrine[« {Paris} ]|
+\flettrine[« {Paris} ]
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés. »
+
+\bigskip
+\tthyphenation\noindent
+\vers|\|\vers|font\lettrinefont=cmti12 scaled| \!\vers| \magstep4\lettrine|
+{\em \% vérification d'italique.}
+\font\lettrinefont=cmti12 scaled \magstep4\lettrine
+Blalbla {\bf je blablate}, tu blablates, ils blablatent, b...
+(ceci est l'exemple même de ce qu'il ne faut pas faire car ainsi
+le mot n'est pas mis en petites capitales). Ceci avait pour but
+de tester une police italique.
+
+\bigskip
+\lettrine{L'absurdité} de cette lettrine...
+
+\notthyphenation
+\FmsG
+
+\newpage\english
+
+\section{Illuminated letters}
+
+Look at the French part of this document because, in English,
+these macros have no effect:
+
+\bigskip
+\verb| \flettrine{Quoi ?}|
+\flettrine{Quoi ?} {Paris}
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés.
+
+« Ici démarre une lettrine dans une citation.
+
+\bigskip
+\lettrine{Paris}
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés.
+
+\bigskip
+\flettrine{Paris}
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés.
+
+et la citation se termine ici. »
+
+\bigskip
+\verb| \font\lettrinefont=cmr17 scaled|\\
+{\font\lettrinefont=cmr17 scaled \magstep5
+\verb| \magstep5\lettrine[`` {Paris} '']|
+\lettrine[`` {Paris} '']
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés.\par}
+
+\bigskip
+\verb| \lettrine[« {Paris} »]|
+\lettrine[« {Paris} »]
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés.
+
+\bigskip
+\verb| \flettrine[« {Paris} ]|
+\flettrine[« {Paris} ]
+{sera toujours Paris}. Ceci est une lettrine obtenue
+grâce au collègue allemand E.~{\sc Scha\-lück} et
+ aux différents codes qu'il
+m'a donnés. »
+
+\bigskip
+\noindent
+\verb|\font\lettrinefont=cmti12 scaled| \verb| \magstep4\lettrine|
+%{\em \% vérification d'italique.}
+\font\lettrinefont=cmti12 scaled \magstep4\lettrine
+Blalbla {\bf je blablate}, tu blablates, ils blablatent, b...
+(ceci est l'exemple même de ce qu'il ne faut pas faire car ainsi
+le mot n'est pas mis en petites capitales). Ceci avait pour but
+de tester une police italique.
+
+\bigskip
+\lettrine{L'absurdité} de cette lettrine...
+
+\onecolumn\newpage%
+\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% ===»» Il n'y a plus d'anglais au delà de cette limite ««===
+\def\lastlinein#1{\expandafter\gdef\csname #1\endcsname{\relax}}
+\lastlinein{english}% this is for frencht.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\section{Lettrines automatiques ou non}
+
+\bigskip
+\lettrine{THIS IS A TEST} (a non-automatic one)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+\bigskip
+\flettrine{THIS IS A TEST} (a non-automatic one)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+\bigskip
+\automaticlettrine
+
+\lettrine{THIS IS A TEST} (a default automatic one)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+\bigskip
+\flettrine{THIS IS A TEST} (a default automatic one)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+
+\bigskip
+\def\lettrinefontname{cmr17}
+\lettrine{THIS IS A TEST} (a cmr17 automatic one)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+\bigskip
+\flettrine{THIS IS A TEST} (a cmr17 automatic one)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+\bigskip
+\lettrine{Que vaut ce test ?} (en automatique)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+\bigskip
+\noautomaticlettrine
+\lettrine{THIS IS A TEST} (a non-automatic one)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+\bigskip
+\lettrine{Que vaut ce test ?} (non-automatique)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\section{Énumérations}
+L'espacement des énumérations françaises est
+ profondément modifié avec \FP, pour s'en
+convaincre voir le test des listes page \pageref{listes} ou
+l'environnement \texttt{order} ci-après.
+
+\section{L'environnement « {\mdseries\texttt{order}} »}
+Un environnement spécifique est proposé, il s'agit de l'environnement
+\verb|order| pour \LaTeX{} dont voici un petit exemple :
+
+\begin{order}
+\item Bien regarder ;
+\item l'espacement de chaque élément est spécial ;
+\item l'espacement vertical est aussi différent.
+\item A-D-O-P-T-E-Z \ \ L-E !
+\end{order}
+
+Ce prototype correspond bien aux énumérations
+françaises (je ne
+parle pas uniquement des marqueurs -- primo, secundo, \etc. --
+mais aussi de la gestion des espaces). En voici un autre exemple
+concret :
+\NL1
+
+Les guillemets entrent aussi en ligne de compte : « Je citerai
+3 cas très importants :
+\begin{order}
+\item le premier cas ;
+\item le second ;
+\item le dernier.
+\end{order}
+qui sont [...] »
+\NL1
+
+À noter que ce mécanisme de rajout des guillemets en début de
+chaque élément de liste marche aussi avec un environnement
+comme \texttt{itemize}.
+
+\expandafter\ifx\csname frenchTeXmods\endcsname\relax
+ \space% ce test ne marche pas en LaTeX standard.
+\else
+ \ifx\frenchTeXmods\empty\space% ni en dummy french !
+ \else
+\section{Tests aux limites des guillemets anglais}
+
+Vérifions qu'il est possible d'activer temporairement
+quelques caractères sans perturber le traitement. Exemple :
+
+\begin{verbatim}
+{\catcode`\'=\active\catcode`\'=\active
+ `` Test guillemets anglais ''
+}
+\end{verbatim}
+
+{\catcode`\'=\active\catcode`\'=\active
+ `` Test guillemets anglais ''
+}
+ \fi
+\fi
+
+Un cas bien spécial avait été rencontré avec l'extension \myverb|amstex|
+qui utilisait une référence avec des mathématiques dans une autre
+référence, ce qui entrainait une boucle infinie avec \FP. Voici
+le test en question :
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% this code generates a loop with versions of french < V3,42 %%%%%%
+\makeatletter
+\def\r@ref{{\ref{nulllabel}$'$}}{1}
+\makeatother
+\ref{ref} = 1 $'$ % boucle garantie si < V3,42
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Autre test aux limites ?
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\section{« Autres tests »}
+Nous sommes ici en une colonne.
+
+\bigskip
+Voici un test d'encadré contenant le mode \verb|centering| :
+\begin{center}\fbox{%
+\parbox{6cm}{\begin{center}Information : si vous voulez me joindre,
+mon tél. : 01 69 35 85 40. Je n'y suis qu'aux horaires de
+bureau.\end{center}}%
+ }\end{center}
+
+Bon ?\footnote{L'objet de cette note de bas de page est
+de vérifier l'espacement des inférieurs et supérieurs,
+\primo en \texttt{\backslash tt} :
+\texttt{XXXX ===> <=== YYYY} et
+\secundo en {\tt verbatim} :
+\myverb|french V4 < french V5 > frenchOLD|%
+.}
+
+\begin{table*}[h]
+\caption{Dactylographie et typographie comparées}
+\label{frenchdactylo}
+\vspace*{1cm}
+\huge
+\begin{tabular}{|r|r|}
+\hline
+dactylographie\ \ \ \ \hfill & \ \ \ typographie\ \ \ \hfill\\
+\hline
+ \verb|use \dots or \ldots| \ & use \dots\ or $\ldots{}$\ \\
+ \verb|utilisez...| \ & utilisez...\ \\
+ \verb|semi-colon;| \ & semi-colon;\ \\
+ \verb|point-virgule ;| \ & point-virgule ;\ \\
+ \verb|My god!| \ & My god!\ \\
+ \verb|Mon dieu !| \ & Mon Dieu !\ \\
+ \verb|Why not?| \ & Why not?\ \\
+ \verb|Pourquoi pas ?| \ & Pourquoi pas ?\ \\
+ \verb|``I say''| \ & ``I say''\ \\
+ \verb|« Je dis »| \ & « Je dis »\ \\
+ \verb|He said: Yes| \ & He said: Yes\ \\
+ \verb|Il dit : non| \ & Il dit : non\ \\
+ \verb|$1\,234,567$| \ & $1\,234,567$\ \\
+ \verb|$f(x,\,y)$| \ & $f(x,\,y)$\ \\
+\hline
+\end{tabular}
+\normalsize
+\end{table*}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifx\itshape\undefined\else% avoid old frencht crash
+\subsection{Test des guillemets dans un \mdseries\texttt{\backslash edef}}
+
+Les guillemets peuvent être appelés dans une définition de macro
+telle que \verb|\edef| mais comme les guillemets ne sont pas expansibles
+entièrement il a donc fallu arriver à réaliser une définition acceptable.
+
+Ainsi \verb|\edef\testedef{« essai »}|
+\edef\testedef{« essai »}
+donnera la curieuse définition suivante : \\
+\hbox{}\hfill\texttt{\meaning\testedef} ; \\
+elle reste complètement expansible (dans certaines conditions)
+ou pas du tout (comme ici appelée en tt on obtiendra
+le résultat suivant : \texttt{\testedef}).
+\fi
+
+\subsection{{\mdseries\tt <{}} et {\mdseries\tt >{}} redéfinis}
+
+Mes utilisateurs sont terribles ! Ils veulent le beurre, l'argent du
+beurre et aussi la fermière... S'ils codent
+\verb9\def\truc<#1|#2>{/#1 OU #2/}9
+ ils veulent pouvoir obtenir
+/Essai OU Erreur/ en saisissant \verb9\truc<Essai|Erreur>9. Faisons
+l'essai réel :
+{\def\truc<#1|#2>{/#1 OU #2/} \truc<Essai|Erreur>}.
+
+Encore plus fort : nous voulons avoir une notation de Backus-Naur
+c'est-à-dire des \verb|\rangle| et \verb|\langle|. Voici la
+définition que nous avons entrée avant le \verb|\begin{document}| :
+\begin{verbatim}
+{\catcode`\<=\active\catcode`\>=\active%
+\global\def<{\left\langle}\global\def>{\right\rangle}
+}
+\end{verbatim}
+
+Pour tester l'efficacité de ces macros il suffit alors de faire
+par exemple :
+\begin{verbatim}
+« $<assignement>$ »
+\end{verbatim}
+à condition que l'option \verb|\frenchguillemets| soit
+active (en maths).
+
+Essayons cela :
+% en fait il faut reactiver cela maintenant :
+{%
+ \gdef\myinf{\left\langle}%
+ \gdef\mysup{\right\rangle}%
+« $\frenchguillemets% on a \nofrenchguillemets avec AmSTeX
+ <assignement>$ ».
+}%
+% Remettre ici pour frenchle
+\global\let\myinf\inferieura% A no-op def
+\global\let\mysup\superieura% for a temporary action
+
+\subsection{\mdseries\texttt{\textbackslash special}}
+L'inclusion d'une commande \verb|\special| est ici testée :\\
+{%%%%%%%%%%%% attention : commentaires impossible dans cette partie.
+ \catcode`\%=12
+ \texttt{\backslash special}\verb|{ps:|{\tt %%%
+ }\verb| Texte bidon {`«manuel:C;!?»'}}|
+ \special{ps:%%%
+ Texte bidon {`«manuel:C;!?»'}}
+}
+
+\subsection{{\mdseries\texttt{\textbackslash refmark}} dans un tableau}
+
+Où l'on reparle encore de \verb|\refmark|...
+
+La note \ref{bas} est référencée depuis le tableau ci-dessous, tout comme
+les notes du tableau lui-même.
+
+ \begin{table}[htbp]
+ \begin{center}
+ \begin{tabular}{|c|l|}
+ \hline
+ Lettre & Utilisation\\
+ \hline
+ {\tt h} & petit blabla gentil et anodin \refmark{bas}\\
+ {\tt l} & ici reblabla assez moyen\refmark{bas}$^,$\refmark{refnote}\\
+ {\tt L} & autre grand grand grand blabla
+ \footnote{La note du tableau « refmark ».\label{refnote}}\\
+ \hline
+ \end{tabular}
+ \caption{Le titre du tableau.}
+ \end{center}
+\end{table}
+
+En dehors du tableau on peut faire appel\footnote{La note de page.\label{bas}}
+à une note qui est, par contre, référencée dans le tableau. Tout cela
+est réalisé grâce à l'ordre \verb|\refmark| introduit par l'extension
+\FP.
+
+\subsection{{\mdseries\texttt{\textbackslash nombre}} en argument}
+
+Voici un test simple permettant de valider \verb|\nombre| lorsqu'il
+est en argument d'une macro-instruction :
+
+\begin{verbatim}
+\noindent
+1\,234 un nombre simple !\\
+$*$\\
+\nombre{1 234} un nombre simple !\\
+\nombre{1 234,5} avec une décimale.\\
+\texttt{\nombre{1 234,56} avec fonte tt.}\\
+\emph{\nombre{1 234,567} en mode emphasé.}\\
+\nombre{1 234,567 8} avec encore une décimale.
+\end{verbatim}
+
+Il faut noter que l'ordre \verb|\nombre| est toujours composé en mode
+mathématique ce qui force l'utilisation des fontes mathématiques.
+Tout changement de fonte doit donc être précisé de façon ad hoc.
+Par ailleurs, la composition n'est garantie que si l'option
+\verb|\nofiles| n'a pas été indiquée en début de document.
+Voici ce que ce test donne :
+
+\noindent
+1\,234 un nombre simple !\\
+$*$\\
+\nombre{1 234} un nombre simple !\\
+\nombre{1 234,5} avec une décimale.\\
+\texttt{\nombre{1 234,56} avec fonte tt.}\\
+\emph{\nombre{1 234,567} en mode emphasé.}\\
+\nombre{1 234,567 8} avec encore une décimale.
+
+\ifx\documentclass\undefined % Still Plain! so no \DeclareFontFamily
+\else%
+\subsection{{\mdseries\texttt{\textbackslash label}} en mode math}
+
+Il s'agit ici de tester la commande \verb|\label| dans un environnement
+\verb|equation| :
+
+\begin{verbatim}
+Vérifions le numéro de l'équation \ref{labelequation} ci-dessous :
+\begin{equation}\label{labelequation}
+V_{Lm}=\frac{L}{t_p}
+\end{equation}
+\end{verbatim}
+
+Voici le résultat du test :
+
+Vérifions le numéro de l'équation \ref{labelequation} ci-dessous :
+\begin{equation}\label{labelequation}
+V_{Lm}=\frac{L}{t_p}
+\end{equation}
+\fi
+
+\csname TexteComplementaire\endcsname
+
+\subsection{Bibliographie}
+Voyons maintenant la bibliographie.
+Dans \cite{`«manuel:Gaulle;!?»'} on trouvera...
+\nocite{`«merci:Ronan;!?»'}
+Par contre
+\cite[pp.1--3, X \& consorts]{«blabla»}
+est beaucoup plus fourni en exemples et commentaires... Mais dans
+\cite[p. 25 \S~13 {{\it et seq.}}]{`«torture:Gaulle;!?»'}
+toutes ces informations
+sont plus détaillées.
+
+Ce qui suit n'est pas un exemple de belle bibliographie, juste une
+vérification de bon fonctionnement.
+
+\bibliographystyle{plain}
+
+\begin{thebibliography}{Knuth 99}
+
+\section*{Bibliographie dans le document}
+
+\bibitem[Knuth 99]{«blabla»} Le \TeX book ou la « bible »
+ des gourous \TeX
+\bibitem{`«manuel:Gaulle;!?»'} B. {\sc Gaulle}, {\em
+ Le résultat d'une « {\em dure} » journée de travail !}
+\bibitem{`«merci:Ronan;!?»'} R. {\sc Keryell}, {\em
+ Le gentil normalien qui m'a beaucoup aidé grâce à sa thèse...}
+\bibitem{`«torture:Gaulle;!?»'} B. {\sc Gaulle}, {\em
+ Notice d'utilisation du style french}, 1991-1999.
+\bibitem{`«tortureFP:Gaulle;!?»'} B. {\sc Gaulle}, {\em
+ Notice d'utilisation de l'extension \FP\ pour \LaTeX}, 2000-20xx.
+\end{thebibliography}
+
+\ifx\documentclass\undefined % Still Plain! so skip
+\else%
+\section*{\phantom{\normalsize[Knuth 99]}Bibliographie en dehors du document}
+
+Avec certaines extensions de bibliographie il peut s'avérer utile
+de protéger les caractères actifs à l'intérieur même de la base
+de données bibliographique.
+
+\bibliography{testbib}
+\fi%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\listoffigures
+\listoftables
+\glossary{Façon cordon bleu}
+\glossaires
+\section*{Glossaire des mots techniques}
+\printglossary[\jobname.glo]
+
+\noindent -- magnification
+
+\noindent -- caractères spéciaux : \NL1
+
+{\huge%\frenchmacros n'est pas utile ici
+\begin{tabular}{|c|c|}
+\hline
+Pour imprimer ceci & Saisir cela\\ \hline
+\at & \verb|\at|\\ \hline
+\texttt{\vert} & \verb|\texttt{\vert}|\\ \hline
+\tilde & \verb|\tilde|\\ \hline
+\texttt{\backslash}& \verb|\texttt{\backslash}|\\ \hline
+\chap & \verb|\chap|\\ \hline
+\degre & \verb|\degre| \\ \hline
+\degres & \verb|\degres| \\ \hline
+\normalsize
+1\ier{} étage & \verb|1\ier{} étage| \\ \hline
+\normalsize
+(2\ieme\!) & \verb|(2\ieme\!)| \\ \hline
+\primo & \verb|\primo|\\ \hline
+\secundo) & \verb|\secundo)|\\
+\hline
+\end{tabular}
+} \NL1
+
+On notera que le caractère \verb|\degre| n'est pas le signe typographique
+usuellement utilisé pour exprimer
+des degrés mais que \verb|\degres| est
+plus conforme à la tradition. On remarque bien les différences entre
+\verb|\primo| et \verb|\secundo)|
+(la forme parenthésée n'est pas valable
+en {\em belle} typographie française).
+\primo... \secundo... \tertio... \quarto...
+\primo)... \secundo)... \tertio)... \quarto)...
+
+\section*{Glossaire argotique}
+Le pied
+
+\printindex
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\part{Ce qui ne marche pas (bien)...}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{Quelques questions à étudier}
+
+Cette partie ne comporte que des « anomalies » que l'auteur espère
+résoudre d'ici quelque temps,
+grâce à votre aide... peut être ?
+
+En fait il ne reste vraiment
+pas grand chose à règler mais ce sont probablement des
+vieux problèmes sacrément compliqués.
+
+\section{Le « 2 points »}
+Le « 2 points » a une fâcheuse tendance
+à rester en bas de page lorsqu'il est
+suivi d'un {\tt verbatim}. Il serait souhaitable d'en trouver la raison.
+
+\section{Les guillemets}
+
+Le problème avec \verb|quotation| page \pageref{quotation}.
+
+%Et la perte d'informations
+%dans le cas de \verb|\noeveryparguillemets| lorsque l'on démarre
+%une citation dans un paragraphe déjà commencé.
+%
+%Vraiment très {\em fragile} ce \verb|\noeveryparguillemets| ! (
+
+Voir le cas des notes
+de bas de page ou en marge qui produis(ai ?)ent des désastres
+avec \verb|\noeveryparguillemets|.
+
+\section{Le cas des extensions mal écrites ...}
+
+... ne se résout souvent que par la modification de l'extension en question.
+Cela a été le cas de nombreuses extensions depuis le début de \frenchname{}
+et j'ai bien peur que cela continue \emph{éternellement}% (et à propos : qui me succèdera ?)
+.
+Ici Bernard Gaulle ajoutait (déjà en 2002) : « et à propos : qui me succédera ? ».
+Nous pensons que le groupe de travail autour du projet e-french répond à sa question.
+
+Certains cas sont insolubles, par exemple :
+l'extension \verb|here.sty|
+redéfinissait « au vol »
+l'ordre \LaTeX{} \verb|\table| au lieu
+de modifier l'existant ; cela posait un réel problème à FrenchPro
+qui se base sur la modification d'une commande \verb|\table|
+existante. Heureusement ce style périmé peut être remplacé
+avantageusement par \verb|float|.
+
+Notons qu'aujourd'hui avec les diverses variantes de \texttt{float},
+ce problème n'existe plus (comme bien d'autres d'ailleurs).
+
+\chapter{Améliorations à envisager}
+
+\section{Index et bibliographie}
+Deux thèmes qui n'ont que très peu été abordés.
+
+\section{Abréviations}
+Il est fâcheux d'avoir à connaître quelles sont les mots
+abrégeables pour pouvoir demander leur abréviation ; autant les saisir
+correctement dès le début...
+
+Faut-il arrêter la composition \LaTeX{} quand une abréviation
+n'est pas trouvée ?
+
+Faut-il offrir la possibilité de lister toutes les abréviations ?
+
+\annexes
+\hsize=18cm
+%
+%\chapter{Copyright}
+%\Mylisting{copyrigh.tex}
+%
+%\chapter{Le fichier \mdseries{\tt language.dat}}
+%\Mylisting{language.dat}
+
+\chapter{Le fichier \mdseries{\tt frabbrev.tex}}
+\Mylisting{frabbrev.tex}
+
+% retire pour mettre french.cmd 98/06
+%\chapter{Le fichier \mdseries{\tt french.dmy}}
+%My\listing{french.dmy}
+
+\chapter{Le fichier \mdseries{\tt french.cmd}}
+\Mylisting{french.cmd}
+
+\chapter{Le fichier \mdseries{\tt french.chk}}
+\Mylisting{french.chk}
+%
+%\chapter{Un style english (\mdseries{\tt fenglish})}
+%\Mylisting{fenglish_doc}
+
+%\chapter{Le code de l'extension \FP}
+%
+%\Mylisting{french_doc.txt}
+
+\newpage
+\hsize=15cm
+\abbreviations\noenglishdoublequotes
+\tableofcontents
+\noabbreviations\englishdoublequotes% remove options set for toc.
+
+\english %=\relax if english text (see \lastlinein)
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/doc/test/frenchab.tex b/language/french/e-french/texmf/doc/test/frenchab.tex
new file mode 100644
index 0000000000..3993d1187a
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/frenchab.tex
@@ -0,0 +1,68 @@
+% !TeX encoding = latin9
+% This is frenchab.tex
+%
+% French Torture Test with AmsLaTeX (main style: book)
+% Copyright Bernard Gaulle as in french.doc
+%
+% last mods 2006/04/25
+%
+\advance\hoffset by -10pt% marge droite (chez moi) pas totalement imprimee
+%
+\documentclass[twocolumn]{book}
+ \usepackage[latin9]{inputenc}% pour le codage d'entrée, ici latin9
+ \usepackage[T1]{fontenc}% pour utiliser les fontes ec (et cm en math)
+\usepackage{amsmath,mylist,mya4,graphicx,french}
+\usepackage{eurosym} %for the ¤
+\usepackage{epstopdf}% so graphicx accepts eps images
+\setlength{\textwidth}{410pt}%%
+\let\Stop\undefined
+% Localisation code for numbered \typeout: "\kbAissue% localise it."
+% For debugging one can remove "msg" access, just uncomment
+%\let\kbAissue\relax% this line.
+\makeatletter
+ \ifx\kbAissue\undefined%
+% Firstly we add the material to use the "msg" package for localization.
+ \def\kb@issue#1#2{\kb@issue@[#1]#2\void}% The local \issuemsg macro.
+ % which will call the real one;
+ % #1 is the macro message required.
+ % #2 is the message header + msg number
+ % such as "^^J -234-", just message
+ % number (234) is kept.
+ \let\kbAissue\kb@issue%
+ \def\kb@issue@[#1]#2-#3-#4\void{\issuemsg[#1]#3(french)}%
+ \ifx\issuemsg\undefined\let\kbAissue\relax\let\typeouA\typeout\fi%
+ \fi%
+\makeatother
+%
+\ifx\endfrench\switchtolanguage
+\kbAissue% localise it.
+ \typeout{-37a- ANOMALIE : french actif.}\Stop\fi
+\def\LPLAIN{lplain}
+\ifx\fmtname\LPLAIN\else\def\LPLAIN{LaTeX2e}\fi
+\ifx\fmtname\LPLAIN\else\relax
+ \typeout{**********************************************}
+\kbAissue% localise it.
+ \typeout{-36- ANOMALIE : format LaTeX (\fmtname) non standard.}
+ \typeout{CORRIGER pour avoir \fmtname=\LPLAIN\space ou ancien nom.}
+\Stop% Vous devez avoir dans ltvers.dtx : \def\fmtname{LaTeX2e} !
+\fi
+\let\iflatex\iftrue
+\def\SmsG{\typeout%
+ {\string<\string<--------------------------------------------------------}}
+\def\FmsG{\typeout%
+ {--------------------------------------------------------\string>\string>}}
+{\SmsG\obeyspaces
+\typeout{( Test de torture du style \frenchname}
+\typeout{(Ce test genere deliberement quelques messages d'erreur. )}
+\typeout{(Pour vous permettre de distinguer les messages d'erreur )}
+\typeout{(normaux de ceux qui sont anormaux, j'ai encadre, comme )}
+\typeout{(ici, ces messages ; ne vous en preoccupez pas. --bg )}
+\FmsG}%
+\frenchtest
+\ifx\endfrench\switchtolanguage\else
+\kbAissue% localise it.
+ \typeout{-37b- ANOMALIE : french inactif.}\Stop\fi
+\end{document}
+%%
+%% checksum = "21525 63 238 2681"
+%%
diff --git a/language/french/e-french/texmf/doc/test/frenchla.tex b/language/french/e-french/texmf/doc/test/frenchla.tex
new file mode 100644
index 0000000000..ed6717aa15
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/frenchla.tex
@@ -0,0 +1,21 @@
+% !TeX encoding = latin9
+% This is frenchlb.tex
+%
+% French Torture Test with LaTeX (main style article)
+% Copyright Bernard Gaulle as in french.doc
+%
+% last mods 2006/04/25
+%
+\documentclass[twocolumn]{article}
+ \usepackage[latin9]{inputenc}% pour le codage d'entrée, ici latin9
+ \usepackage[T1]{fontenc}% pour utiliser les fontes ec (et cm en math)
+\usepackage{eurosym} %for the ¤
+\usepackage{mylist,mya4,graphicx,french}
+\usepackage{epstopdf}% so graphicx accepts eps images
+\setlength{\textwidth}{410pt}%%
+\let\iflatex\iftrue
+\frenchtest
+\end{document}
+%%
+%% checksum = "13164 16 42 436"
+%%
diff --git a/language/french/e-french/texmf/doc/test/frenchlb.tex b/language/french/e-french/texmf/doc/test/frenchlb.tex
new file mode 100644
index 0000000000..4e0faaf9a8
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/frenchlb.tex
@@ -0,0 +1,84 @@
+% !TeX encoding = latin9
+% This is frenchlb.tex
+%
+% French Torture Test with LaTeX (main style: book)
+% Copyright Bernard Gaulle as in french.doc
+%
+% last mods 2006/04/25
+%
+\advance\hoffset by 20pt% pour centrer l'ensemble.
+\documentclass[twocolumn,twoside,a4paper]{book}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Si vous n'avez pas utilisé kbconfig pour créer le format,
+% probablement avez-vous besoin de :
+ \usepackage[latin9]{inputenc}% pour le codage d'entrée, ici latin9
+ \usepackage[T1]{fontenc}% pour utiliser les fontes ec (et cm en math)
+% Ou alors \usepackage[decmulti]{inputenc}% pour le codage d'entrée mais c'est
+% vous qui l'aurez choisi... Moi je préfère encore keyboard (cad kbconfig).
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\usepackage{mysmall,graphicx,mylist}
+\usepackage{eurosym} %for the ¤
+\usepackage{epstopdf}% so graphicx accepts eps images
+%\usepackage[tracefiles]{msg}% Only usefull for tracing purpose.
+% Plut\^ot que \usepackage{french} on fait appel à mlp pour charger french :
+\usepackage[anglais,francais]{mlp}
+\setlength{\textheight}{225mm}% a4paper is a little shorter...than a4.sty
+\setlength{\textwidth}{410pt}%%
+\listfiles
+
+\catcode`\@=11
+\let\Stop\undefined\ifx\@@end\undefined\let\@@end\end\fi
+% Localisation code for numbered \typeout: "\kbAissue% localise it."
+% For debugging one can remove "msg" access, just uncomment
+%\let\kbAissue\relax% this line.
+ \ifx\kbAissue\undefined%
+% Firstly we add the material to use the "msg" package for localization.
+ \def\kb@issue#1#2{\kb@issue@[#1]#2\void}% The local \issuemsg macro.
+ % which will call the real one;
+ % #1 is the macro message required.
+ % #2 is the message header + msg number
+ % such as "^^J -234-", just message
+ % number (234) is kept.
+ \let\kbAissue\kb@issue%
+ \def\kb@issue@[#1]#2-#3-#4\void{\issuemsg[#1]#3(french)}%
+ \ifx\issuemsg\undefined\let\kbAissue\relax\let\typeouA\typeout\fi%
+ \fi%
+%
+\ifx\endfrench\switchtolanguage
+\kbAissue% localise it.
+ \typeout{-37a- ANOMALIE : extension french active ici.}\Stop
+\@@end
+\fi
+\def\LPLAIN{lplain}
+\ifx\fmtname\LPLAIN\else\relax
+ \def\LPLAIN{LaTeX2e}
+ \ifx\fmtname\LPLAIN\else\relax
+ \typeout{**********************************************}
+\kbAissue% localise it.
+ \typeout{-36- ANOMALIE \string: nom de format LaTeX (\fmtname) invalide.}
+ \typeouA{-36b- CORRIGER pour avoir \fmtname=\LPLAIN\space ou ancien nom.}
+\Stop% Vous devez avoir dans ltvers.dtx : \def\fmtname{LaTeX2e} !
+\@@end
+ \fi
+\fi
+\catcode`\@=12
+\let\iflatex\iftrue
+\def\SmsG{\typeout%
+ {\string<\string<--------------------------------------------------------}}
+\def\FmsG{\typeout{}\typeout%
+ {--------------------------------------------------------\string>\string>}}
+{\SmsG\obeyspaces
+\typeout{( Test de torture du style \frenchname}
+\typeout{(Ce test genere deliberement quelques messages d'erreur. )}
+\typeout{(Pour vous permettre de distinguer les messages d'erreur )}
+\typeout{(normaux de ceux qui sont anormaux, j'ai encadre, comme )}
+\typeout{(ici, ces messages ; ne vous en preoccupez pas. --bg )}
+\FmsG}%
+\frenchtest
+\ifx\endfrench\switchtolanguage\else
+\kbAissue% localise it.
+ \typeout{-37b- ANOMALIE \string: extension french inactive ici.}\Stop\fi%
+\end{document}
+%%
+%% checksum = "10201 81 331 3632"
+%%
diff --git a/language/french/e-french/texmf/doc/test/frenchll.tex b/language/french/e-french/texmf/doc/test/frenchll.tex
new file mode 100644
index 0000000000..7451cb8305
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/frenchll.tex
@@ -0,0 +1,102 @@
+% This is frenchll.tex
+%
+% French Torture Test with LaTeX (main style: letter)
+% Copyright Bernard Gaulle as in french.doc
+%
+% last mods 2006/04/25
+% 7bits file.
+%
+%%
+%% checksum = "09076 98 267 3191"
+%%
+\advance\hoffset by -10pt% marge droite (chez moi) pas totalement imprimee
+\advance\voffset by -20pt% marge haute (chez moi) pas totalement imprimee
+%
+\def\twocolumn{\relax}% Un peu debile de pouvoir faire une lettre en 2 colonnes
+%
+\def\TT#1{\gdef\TITLE{#1}}
+\def\formhead{\Huge \bf Association GUTenberg}
+\def\formfoot{\bf Si\`ege social : C/o Irisa, campus de Beaulieu,
+ F--35042 Rennes cedex.}
+\def\title#1{\french
+ \begin{letter}{M. Dupond\\
+ 17, rue St. \'Eloi\\
+ 24140 La monzie montastruc}
+ \yourref{votre lettre du 15 courant}
+ \ourref{bg-004-92}
+ \object{Remerciements}
+ \opening{Cher Monsieur X,}
+
+ Voici...
+Blabla habituel, b, khwd djhlheqw lwj wljlwd lkwd wx, jh, 2d
+ wkjyujb 2d, jhgoi2w 1w3dh, jljkwds m, hlwd blhwdl wbwd khw2db
+ bbklwyh, wluw bowdb, wlup ; 4f ; iw
+13, nbjh3d mldfkm, mhowedm mnpi13m eef.
+ \fclosing[7]{Veuillez agr\'eer, cher X, l'expression de mes salutations les
+ plus distingu\'ees.}
+ \cc{Monsieur le directeur Y}
+ \encl{lettre du ministre Z}
+ \PS{J'oubliais de...}
+\vfill
+ \end{letter}
+ \english
+ \begin{letter}{M. Smith\\
+ 17, St. Patrick street\\
+ YORK WZG-21, England}
+ \opening{Dear Sir,}
+ \par
+ Here is...\vfill
+ \closing{Yours,}
+ \cc{Y}
+ \encl{Z}
+ I forgot to say...
+\vfill
+ \end{letter}
+ \french
+ \TT{#1}
+}
+% Pseudo definitions de macros non autorisees dans le style letter
+\def\maketitle{\expandafter\let\csname table*\endcsname\table%
+ \expandafter\let\csname endtable*\endcsname\endtable%
+ \expandafter\let\csname chapter*\endcsname\chapter%
+ \expandafter\let\csname section*\endcsname\section%
+ \TITLE}
+\def\tableofcontents{}
+\def\part{\par}
+\def\chapter{\par}
+\def\section{\par}
+\def\subsection{\par}
+\def\subsubsection{\par}
+\makeatletter
+\def\caption{\@ifnextchar[\@caption\@@caption%]
+ }
+\def\@caption[#1]#2{\@@caption{#2}}
+\def\@@caption#1{\centerline{#1}}
+\makeatother
+\def\figure{}\def\endfigure{}
+\let\table\relax\let\endtable\relax% as in endfloat
+\def\thebibliography{}\def\endthebibliography{}\def\bibitem{}
+\def\listoffigures{}\def\listoftables{}
+\def\printglossary[#1]{\relax}
+\newcounter{chapter}\newcounter{section}
+%
+\documentclass{letter}
+\usepackage[latin9]{inputenc}% pour le codage d'entrée, ici latin9
+ \usepackage[T1]{fontenc}% pour utiliser les fontes ec (et cm en math)
+\usepackage{eurosym} %for the €
+\usepackage{mylist,mya4,graphicx,french}
+\usepackage{epstopdf}% so graphicx accepts eps images
+\address{Bernard {\sc Gaulle}\\4, avenue Cadoux-Girault\\
+ F--92270 Bois-Colombes}
+\location{\em Paris, le}
+\signature{B. {\sc Gaulle} (votre serviteur...)}
+\email{gaulle@idris.fr}
+\setlength{\textwidth}{410pt}%%
+\ifx\documentclass\undefined
+%\input mypsfig.sty
+%\else
+%\usepackage{mypsfig}
+\fi
+\let\iflatex\iftrue
+\frenchtest
+\end{document}
diff --git a/language/french/e-french/texmf/doc/test/frenchln.tex b/language/french/e-french/texmf/doc/test/frenchln.tex
new file mode 100644
index 0000000000..6119e7f812
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/frenchln.tex
@@ -0,0 +1,35 @@
+% This is frenchln.tex
+%
+% French Torture Test with LaTeX,
+% with the ``Poor Man French'' package.
+% (main style: book)
+% Copyright Bernard Gaulle as in french.doc
+%
+% last mods 2006/04/25
+%
+% 7bits file.
+%
+% (case of a french document sent to another system where there is no
+% french customization. So the french style is sent before the document
+% and that is *that* whole document which is typeset by LaTeX.)
+%
+% I tested it without language.dat nor frenglish.sty nor abbrevfr.tex.
+% and with no language specification coming from INTEX time
+%\let\french\undefined\let\fhyph\undefined
+%\let\english\undefined\let\ehyph\undefined
+%
+\documentclass[twocolumn]{book}
+\usepackage[latin9]{inputenc}% pour le codage d'entrée, ici latin9
+ \usepackage[T1]{fontenc}% pour utiliser les fontes ec (et cm en math)
+\usepackage{eurosym} %for the ¤
+\usepackage{mylist,mya4,graphicx,pmfrench}
+\usepackage{epstopdf}% so graphicx accepts eps images
+\setlength{\textwidth}{410pt}%%
+\let\iflatex\iftrue
+\gdef\listing#1{\leavevmode{\it \% le fichier {\tt #1}
+ est d\'elib\'er\'ement non imprim\'e.}\par}
+\frenchtest
+\end{document}
+%%
+%% checksum = "14399 31 126 1062"
+%%
diff --git a/language/french/e-french/texmf/doc/test/frenchlr.tex b/language/french/e-french/texmf/doc/test/frenchlr.tex
new file mode 100644
index 0000000000..1cc8872554
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/frenchlr.tex
@@ -0,0 +1,18 @@
+% This is frenchlr.tex
+%
+% French Torture Test with LaTeX (main style: report)
+% Copyright Bernard Gaulle as in french.doc
+%
+% last mods 2006/04/25
+%
+\let\iflatex=\iftrue
+\documentclass[twocolumn]{report}
+\usepackage[latin9]{inputenc}% pour le codage d'entrée, ici latin9
+ \usepackage[T1]{fontenc}% pour utiliser les fontes ec (et cm en math)
+\usepackage{eurosym} %for the ¤
+\usepackage{mylist,mya4,graphicx,french}
+\usepackage{epstopdf}% so graphicx accepts eps images
+\setlength{\textwidth}{410pt}%
+
+\frenchtest
+\end{document}
diff --git a/language/french/e-french/texmf/doc/test/frenchrf.pdf b/language/french/e-french/texmf/doc/test/frenchrf.pdf
new file mode 100644
index 0000000000..61f359e0d5
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/frenchrf.pdf
Binary files differ
diff --git a/language/french/e-french/texmf/doc/test/fxench.tst b/language/french/e-french/texmf/doc/test/fxench.tst
new file mode 100644
index 0000000000..65d52fc1cf
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/fxench.tst
@@ -0,0 +1,3750 @@
+% This is the french torture file for all formats.
+% Copyright Bernard Gaulle as in french.doc
+%
+% \`{A} passer en 8 bits conform\'{e}ment \`{a} votre syst\`{e}me
+%
+%% checksum = "26167 3750 15103 125091"
+%%
+%
+% For localisation:
+%
+\makeatletter%
+\ifx\documentclass\undefined\let\kbAissue\relax\let\typeouA\typeout%
+\else%
+ \let\typeouA\@gobble%
+% For debugging one can remove "msg" access, just uncomment
+%\let\kbAissue\relax% this line.
+ \ifx\kbAissue\undefined%
+% Firstly we add the material to use the "msg" package for localization.
+ \def\kb@issue#1#2{\kb@issue@[#1]#2\void}% The local \issuemsg macro.
+ % which will call the real one;
+ % #1 is the macro message required.
+ % #2 is the message header + msg number
+ % such as "^^J -234-", just message
+ % number (234) is kept.
+ \let\kbAissue\kb@issue%
+ \def\kb@issue@[#1]#2-#3-#4\void{\issuemsg[#1]#3(french)}%
+ \ifx\issuemsg\undefined\let\kbAissue\relax\let\typeouA\typeout\fi%
+ \fi%
+\fi%
+\makeatother%
+%
+% For better debugging:
+\ifx\IeC\undefined
+\kbAissue% localise it.
+\typeout{^^J-66- ERROR! This file can't be typeset without any input}
+ \typeouA{-66- encoding declaration (look at keyboard or inputenc packages.)}
+\expandafter\stop% \usepackage[latin1]{keyboard} should be fine.
+\fi
+\let\FP\frenchpack\hyphenation{French-Pro}
+\wlog{Formating \jobname\space with\space\FP\space(\frenchstyleid)}
+%
+%
+\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi%
+\ProvidesFile{french.tst}%
+ [2005/05/11 The torture test file for the package \FP]% **last mods**
+\ifx\undefined\FmsG\def\FmsG{}\def\SmsG{}\fi
+%
+{\catcode`\<=\active\catcode`\>=\active%
+% Je veux :
+%\global\def<{\left\langle}\global\def>{\right\rangle}
+% Et pour ne pas pouvoir avoir l'effet que localement,
+% je fais :
+\gdef<{\myinf}\gdef>{\mysup}
+}
+\label{nulllabel}% null \label for AmSTeX test \ref within a \ref
+\iflatex\makeindex \makeglossary
+ \csname frhyphex\endcsname% load (again) the exceptions, outside babel
+ \def\NL#1{\Sauter#1Lignes}
+ \begin{document}
+ \makeatletter
+ \ifx\babel@savevariable\undefined%
+ \let\FRENCH\frenchTeXmods%
+ \else\def\FRENCH{\selectlanguage{french}}% pour babel
+ \fi%
+ \makeatother
+ \csname onecolumn\endcsname % avoid writting \onecolumn
+ % (special effect in frencht.tex)
+ \renewcommand{\thepage}{\roman{page}}%
+ \ifx\documentclass\undefined\else% for 2e
+ % As 2e doesn't accept \verb in arguments:
+ \gdef\myverb|#1|{%\nonfrench
+ \texttt{#1}%
+ %\endnonfrench
+ \relax}%
+ \fi
+\else
+ \let\FRENCH\frenchTeXmods%
+ \def\NL#1{\par}
+\fi
+\ifx\myverb\undefined\let\myverb=\verb\fi%
+% global here is just req. for TeX--XeT tests.
+\global\let\myinf\inferieura% A no-op def
+\global\let\mysup\superieura% for a temporary action
+\ifx\undefined\english\let\english\relax\fi%
+% Les \ldots sont $\ldots$ a cause de AmSLaTeX V1.1
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\HyphDiff#1#2{{\setbox0=\vbox{%
+ \pretolerance=-1 \hyphenpenalty=-10000
+ \hsize=0pt \leftskip=0pt \rightskip=0pt \parfillskip=0pt
+ \parindent=0pt \hfuzz=\maxdimen \interlinepenalty=0
+ \clubpenalty=0 \widowpenalty=0 \brokenpenalty=0
+ \hskip 0pt #1}%
+ \setbox2=\hbox{}%
+ \setbox9=\vbox{\unvbox 0 \loop \unskip \setbox1=\lastbox
+ \ifhbox 1
+ \global\setbox 2 = \hbox{%
+ \unhbox 1 \discretionary{}{}{}%
+ \unhbox 2}%
+ \repeat}%
+\setbox3\hbox{#2}\ifnum\wd2=\wd3\else
+\kbAissue% localise it.
+\typeout{-31- Wrong French Hyphenation\string!
+ Are you sure to run with a format ***********}
+\typeouA{-31- in which the french patterns were
+ installed at initex time\string? ***********}
+\ifECM\else%
+\kbAissue% localise it.
+\typeout{-32- if yes try to switch to T1 font
+ encoding (\noexpand\usepackage[T1]{fontenc})***}
+\fi%
+\showhyphens{#1}\typeout{(should be\string: #2)
+ \string<\string<======== *********************************}
+\fi}}
+\HyphDiff{\'{e}ventualit\'{e}}{\'{e}ven-tua-lit\'{e}}
+\HyphDiff{d\'{e}gazonnage}{d\'{e}-ga-zon-nage}
+\HyphDiff{chromosomique}{chro-mo-so-mique}
+%%%%
+\SmsG%
+\typeout{V\'%
+ erification de la sortie de caract\`%
+ eres 8-bits \string:}
+\message{L'\'% \typeout ne transforme pas en 8bits pour l'instant.
+ et\'%
+ e est l\`%
+ a en ao\^%
+ ut \string!}
+\iflatex%
+\typeout{Essai de macro d'accentuation dans un ordre \string\showhyphens %
+ \string:}
+\showhyphens{Faut-il croire \`%
+ a l'\'%
+ ETERNIT\'%
+ E ? \'%
+ eludons ...}
+\showhyphens{Ao\^%
+ ut 2001 ou l'autre \`%
+ ere ...}
+\fi%
+\FmsG%
+%
+\english% Title page is in english
+\ifx\documentclass\undefined % Still Plain! so no \DeclareFontFamily
+\else%
+% To avoid "No file OMScmtt.fd" message 2004/10/29
+\DeclareFontFamily{OMS}{cmtt}{\skewchar\font48 }
+\DeclareFontShape{OMS}{cmtt}{m}{n}%
+ {<->ssub*cmsy/m/n}{}
+\DeclareFontShape{OMS}{cmtt}{m}{it}%
+ {<->ssub*cmsy/m/n}{}
+\DeclareFontShape{OMS}{cmtt}{m}{sl}%
+ {<->ssub*cmsy/m/n}{}
+\DeclareFontShape{OMS}{cmtt}{m}{sc}%
+ {<->ssub*cmsy/m/n}{}
+\DeclareFontShape{OMS}{cmtt}{bx}{n}%
+ {<->ssub*cmsy/b/n}{}
+\DeclareFontShape{OMS}{cmtt}{bx}{it}%
+ {<->ssub*cmsy/b/n}{}
+\DeclareFontShape{OMS}{cmtt}{bx}{sl}%
+ {<->ssub*cmsy/b/n}{}
+\DeclareFontShape{OMS}{cmtt}{bx}{sc}%
+ {<->ssub*cmsy/b/n}{}
+%%%%%%%%%%%%%%%%%%%%%%%
+\fi%
+\makeatletter% for \f@encoding
+\title{\fbox{ \FP\ \LaTeX%
+ \thanks{We are here in english, notice the problem when we use,
+ like in \texttt{frenchla}, a
+ {\mdseries\texttt{\textbackslash fnsymbol}}
+ in a box.\newline%
+ \indent \hspace*{0.5em}
+ Notice also that
+ {\mdseries\texttt{\textbackslash backslash}}%
+ can't be used.%
+ }%
+ }\\ \ \\%
+ Version \frenchstyleid\\ \ \\
+ ``Torture'' Test (\jobname) \\ with
+ \ifx\encodingdefault\undefined Unknown
+ \else\ifx\f@encoding\undefined\encodingdefault{}
+ \else\f@encoding{} \fi
+ \fi Font Encoding\\\ }
+ \author{Bernard {\sc Gaulle}%
+ \thanks{Thanks to those good guys who helped me.\newline%
+ \indent\hspace*{0.5em}
+ This test note is also referred by a
+ {\mdseries\texttt{\textbackslash refmark}} call.
+ \label{title:thanks}%
+ }%
+ \\ \ \\ et...\refmark{title:thanks}%
+ }%
+% AmS \normalparindent no more exists 2000/06/15, so the code is removed.
+%\makeatletter% Don't let AMS change \parindent
+%\ifx\RIfM@\undefined\else\normalparindent=1em\parindent=\normalparindent\fi%
+%\makeatother
+\makeatother%
+\date{Printed on \today}
+% As the titlepage is in English but the date in French we let \ier defined:
+{\def\ier{ier}\maketitle}
+\setcounter{page}{2}\thispagestyle{empty}
+\cleardoublepage\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\onecolumn
+\sommaire[4]
+\bigskip
+\begin{center}
+\noindent\fbox{%
+\begin{minipage}[t]{0.5\textwidth}
+\begin{center} \fbox{\parbox{5cm}{{\bf Remarque} : \\ la commande
+\texttt{\backslash som\-maire}\label{pbverb}%
+\footnote{Cette note a \'{e}t\'{e} demand\'{e}e depuis une minipage.}%
+\footnote{Cette deuxi\`{e}me note aussi.}
+%%%%NB : \verb|\sommaire| ou \verb|\tableofcontents| produisent des HORREURS,
+%%%% lorsqu'ils ont utilises dans un \fbox, BUG LATEX !
+ est un apport de \FP.\hfill}}
+\end{center}
+\end{minipage}
+}
+\end{center}
+
+{% Not a LaTeX redefinition : \def\thefootnote{\fnsymbol{footnote}}
+\renewcommand{\thefootnote}{\fnsymbol{footnote}}%
+Essai de note avec \verb|\fnsymbol|
+\footnote{Note avec une \'{e}toile.}.
+
+\def\thefootnote{\relax}
+Essai de note de bas de page non num\'{e}rot\'{e}e
+\footnote{Note non num\'{e}rot\'{e}e.}.
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\cleardoublepage
+\chapter*{\prefacename}
+
+{\em Certains croient qu'une pr\'{e}face peut apporter de la valeur au livre,
+moi je pense plut\^{o}t que cela apporte de la {\em valeur}
+\`{a} l'auteur...} (dans
+tous les sens du terme).
+
+\cleardoublepage
+
+\twocolumn
+\renewcommand{\thepage}{\arabic{page}}\setcounter{page}{1}%
+\chapter*{Introduction}
+
+\begin{motsclef}
+french, style, francisation, francophonie, multilingue,
+english, option, extension.
+\end{motsclef}
+
+\begin{resume}
+Ce document a \'{e}t\'{e} con\c{c}u
+uniquement pour tester intensivement \FP\ (anciennement appel\'{e}
+option de style%
+ \glossary{<< : ; style ? ! >>}\index{<< : ; style ? >>}%
+ \footnote{Cette note a pour but de faire appel \`{a} une macro
+ \texttt{\backslash index} contenant des caract\`{e}res actifs.%
+ \index{<< : ; depuis la note de bas de page ? >>}%
+ }
+\index{french!Le point d'exclamation est un caract\`{e}re sp\'{e}cial de Makeindex}%
+\index{<@{\tt\protect\inferieura} ({\tt\protect\backslash inferieura})}%
+\index{>@{\tt\protect\superieura} ({\tt\protect\backslash superieura})}%
+\index{Magic di N'Konga (auteur c\'{e}l\`{e}bre)}%
+ \texttt{french}).
+\end{resume}
+
+\bigskip Notez que les deux environnements \verb|resume| et \verb|motsclef|
+(ainsi que \verb|keywords|)
+sont des apports de \FP.
+
+\bigskip Si le libell\'{e} << R\'{e}sum\'{e} >> appara\^{\i}t dans la partie
+ anglaise, cela
+signifie que \FP\ ne poss\'{e}dait pas de d\'{e}finition
+d'\verb|\abstract| et donc l'a remplac\'{e} par \verb|\resume|. Cela signifie
+aussi que les libell\'{e}s anglais n'ont pas \'{e}t\'{e} d\'{e}finis
+(\verb|\captionnames|%
+\footnote{Une extension {\tt fenglish} est fournie conjointement avec
+\FP\ ; {\tt\backslash captionnames} y est d\'{e}fini.
+Cette extension {\tt
+fenglish} est automatiquement appel\'{e}e par \FP\ dans le
+cas que nous avons cit\'{e}.}
+ n'\'{e}tait pas d\'{e}fini par les extensions appel\'{e}es avant
+ \FP).
+Rappelez-vous aussi que \verb|\abstract| ne fait pas partie de la classe
+de document \verb|book|.
+
+Remarquez les diff\'{e}rences entre les num\'{e}ros de notes de bas de page en
+fran\c{c}ais et en anglais, ainsi que l'impression de ce m\^{e}me num\'{e}ro en
+bas de la page.
+
+\english\newpage
+\begin{keywords} %???\relax% for AMS which has its own macro with #1
+French, Style, Option, Package, French-Speaking usage, English, Multilingual.
+\end{keywords}
+
+\begin{abstract} The object of this paper is to test intensively \FP.
+\end{abstract}
+\NL1
+
+\bigskip Notice that the three environments
+\verb|resume|, \verb|keywords| and \verb|motsclef|
+are all introduced by \FP.
+
+\bigskip Notice that if the abstract name printed here is not ``Abstract'' you
+are using packages that have no \verb|\abstractname| defined for eng\-lish.
+ The english package defining such captions is loaded only
+if \verb|\captionsnames|%
+\footnote{The {\tt fenglish} package is given with \FP,
+so {\tt$\backslash$captionnames} are normally defined because
+\FP\ is calling automatically the {\tt fenglish} package in the
+pre\-viously cited case.} was
+previously undefined. (Remember also that as \verb|\abstract| is not defined
+in the \verb|book| document class the \FP\ assumes it is a
+\verb|\resume|.)
+
+Notice the different typesetting of the footnote numbers in French and English
+as well as the printing of that numbers before the footnote text.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\french
+\part{Ce qui marche est ici...}
+\disallowuchyph% ce que je prefere...
+
+\chapter{Avertissements}
+
+Seul le document authentique qui est fourni par l'auteur
+ sous une forme compos\'{e}e
+constitue la r\'{e}f\'{e}rence. Cela veut dire que l'installateur de \FP\
+sur un syst\`{e}me doit comparer son r\'{e}sultat
+(sous forme papier ou
+fichier \verb|.dvi|) avec la forme authentique fournie par l'auteur.
+
+\bigskip
+
+\bigskip \FP\ a \'{e}t\'{e} con\c{c}u pour fonctionner
+avec la majorit\'{e} bas\'{e}s sur \LaTeX{}
+\footnote{Au si\`{e}cle dernier (XX\ieme), \FP\ \'{e}tait appel\'{e} << style
+\texttt{french} >> et pouvait fonctionner en dehors de \LaTeX\ mais
+l'effort pour assurer cette facilit\'{e} dans de trop nombreux formats
+exotiques \'{e}tait totalement disproportionn\'{e} ; ceci a donc \'{e}t\'{e}
+abandonn\'{e} (au moment de la sortie de \LaTeXe).}%
+.
+
+\bigskip \AllTeX{} est mon logo ; il symbolise {\em tous les \TeX{}} ; on peut
+l'imprimer correctement dans toutes les polices ({\em \AllTeX}, {\bf \AllTeX},
+{\sf \AllTeX}, {\tt \AllTeX}, ...) gr\^{a}ce \`{a} la partie NFSS de \LaTeXe%
+\footnote{Le document de r\'{e}f\'{e}rence ({\tt frenchrf})
+a \'{e}t\'{e} produit avec NFSS. Ce document-ci a \'{e}t\'{e} compos\'{e} avec le format
+{\tt \fmtname}.}
+.
+
+\newpage\english Only the authentic author's document in a composed form is
+the reference. That means that the on site \FP\ installator must
+compare his result (paper or \verb|.dvi| file) with the authentic form
+provided by the author.
+\NL3
+
+\bigskip \FP\ was designed to work with all {\em formats\/}
+based on \LaTeX.
+
+\bigskip \AllTeX{} is my logo ; it's a symbol for expressing
+{\em all \TeX{}} ; one can print it correctly in all shapes
+({\em \AllTeX}, {\bf \AllTeX},
+{\sf \AllTeX}, {\tt \AllTeX}, etc.) due to the NFSS part of \LaTeXe%
+\footnote{The
+reference document was produced with NFSS of {\tt \fmtname}.}%
+.
+
+\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{La torture}
+
+\section{Le saviez-vous ?} Nos journaux, livres, revues,
+articles scientifiques ou autres ont \'{e}t\'{e}
+ pendant ces trente derni\`{e}res ann\'{e}es imprim\'{e}s
+par des machines d'origine
+am\'{e}ricaine. Ainsi, petit \`{a} petit, nous perd\^{\i}mes
+l'habitude de lire des
+majuscules accentu\'{e}es parce que tout simplement les polices
+ de caract\`{e}res
+utilisables sur ces machines n'en comportaient pas.
+
+L'usage de plus en plus g\'{e}n\'{e}ralis\'{e} de l'infor\-ma\-tique
+{\em am\'{e}ricaine} fit ainsi dispara\^{\i}tre pendant un temps tous
+ les accents de notre langue \'{e}crite.
+
+De la m\^{e}me mani\`{e}re un certain nombre de
+{\em mauvaises habitudes} furent
+prises quasiment inconsciemment tout simplement parce que les programmes
+informatiques ne pouvaient pas faire autrement. Ainsi de nombreuses {\it
+coquetteries} de notre typographie sont tomb\'{e}es dans l'oubli.
+
+Saviez-vous par exemple qu'on n'imprime pas des guillemets comme ceci `` '' ni
+m\^{e}me ` ' mais ainsi << >> ? Nous nous autoriserons toutefois
+ \`{a} utiliser dans
+ce document ces guillemets %\noenglishquote
+(` ') que nous consid\'{e}rons comme
+{\em techniques}.
+
+\newpage\english \section{Did you know that?}
+Our (french)
+newspapers, books, magazines, scientific articles and other things have
+been printed with american machines during these last thirty years. So our
+habits to read accented uppercase letters declined because they simply were
+not included in the machinery.\NL2
+
+Together with American computer usage growth, all french
+diacritics disappeared from our french written language.\NL1
+
+In a same way {\em bad
+habits} took place, inconsciously, for the only reason that computer programs
+could not do otherwise. So, a lot of french typographic {\em coquetteries\/}
+are largely forgotten.\NL2
+
+ Did you know for example that we never typeset french
+guillemets like this `` '' neither ` ' but%
+{\makeatletter\def\GOfrench{T1}\ifx\GOfrench\f@encoding\else%
+\footnote{We switched to \emph{French} here to be able %
+ to print valid glyphs.}%
+\fi} %
+\begin{french}<< and >>\end{french}? Instead, we will
+authorised ourselves to use (` ') in this document
+because we consider they are {\em technical} guillemets.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+*** Cet espace est laiss\'{e} intentionellement \`{a} blanc ***
+\NL3
+\section{Typographie fran\c{c}aise}
+%\noenglishquote
+La typographie fran\c{c}aise est sp\'{e}cifique en ce qui concerne
+l'utilisation des signes sui\-vants :
+`\verb|.| \verb|:| \verb|;| \verb|!| \verb|?| \verb|<<| \verb|>>|'.
+
+La r\'{e}partition des espaces dans une ligne se fait de fa\c{c}on
+\'{e}quitable entre les
+mots (jamais \`{a} l'int\'{e}rieur des mots) et apr\`{e}s
+la ponctuation (c'est le
+\verb|\frenchspacing| de \TeX{}) contrairement \`{a} la
+ typographie anglaise.
+
+Les `\verb|; ! ?|' doivent \^{e}tre pr\'{e}c\'{e}d\'{e}s d'une espace fine
+ins\'{e}cable. C'est
+ce que nous avons appliqu\'{e} dans \FP.
+Le cas du `\verb|?|'
+a \'{e}t\'{e} trait\'{e} sp\'{e}cialement car l'espace fine ayant
+\'{e}t\'{e} jug\'{e}e trop grande (par
+des sp\'{e}cialistes), a \'{e}t\'{e} r\'{e}duite tout en adjoignant une peu de
+{\em glue} d'extensibilit\'{e}.
+
+En ce qui concerne le `\verb|:|', le code typogra\-phi\-que%
+\footnote{Nous
+avons choisi d'adopter les recommandations de l'imprimerie nationale
+fran\c{c}aise.} pr\'{e}cise qu'il est pr\'{e}c\'{e}d\'{e}
+d'une espace {\em mot\/}
+ins\'{e}cable.
+D'autres ont jug\'{e} que c'\'{e}tait inesth\'{e}tique et cela a \'{e}t\'{e}
+remplac\'{e} par une espace fine.
+
+Les guillemets fran\c{c}ais << doivent \^{e}tre suivis d'une espace mot
+ins\'{e}cable qui
+a \'{e}t\'{e} remplac\'{e}e ici par une espace moindre.
+Les guillemets fermants >>
+sont, eux, pr\'{e}c\'{e}d\'{e}s de la m\^{e}me espace.
+
+\SmsG%
+Lorsque la ligne n'est pas assez remplie et qu'il existe un `:', les
+typographes ont --~semble-\hbox{t-il}~-- l'habitude
+de r\'{e}partir largement les espaces autour
+des deux points. C'est ce qui a \'{e}t\'{e} fait dans \FP\ qui
+pourra \'{e}ventuellement produire une ligne :
+peu remplie\footnote{Le cas pr\'{e}sent\'{e} ici a \'{e}t\'{e}
+cr\'{e}\'{e} artificiellement et peut donc appara\^{\i}tre exag\'{e}r\'{e} dans
+certaines mises-en-pages.}%
+\penalty-10000%
+ ou aussi bien une ligne se terminant ainsi : << {\em com\-me % \- pour fourier
+font les pros\/} >>
+lorsqu'ils ne trouvent pas d'autre moyen mais il devrait s'agir que de cas
+extr\^{e}mes. \`{A} noter que cela a pour avantage de r\'{e}duire les
+\verb|over/under-full hbox| de fa\c{c}on significative.
+
+Paragraphe de remplissage...\\ ...\\... pour v\'{e}rifier que le `:' ne
+termine ni la page ni la colonne. Ainsi :
+
+%\englishquote
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{itemize}
+\item %qu'il s'agisse de verbatim ou d'une liste d'\'{e}l\'{e}ments
+les deux points et le texte qui suit
+sont tous deux sur la m\^{e}me page.
+\end{itemize}
+%\newpage % already done with the previous list
+\FmsG%
+\english
+
+\smallskip
+
+\section{French printing}
+
+French printing use specific typographic rules specially in concern with
+the following: `. : ; ! ?' and french guillemets.
+
+Interword spacing in a line is allways equal (and never modified inside a
+word). It's the same way after punctuation (standard \verb|\frenchspacing|) as
+opposed to the english typography.\NL1
+
+All `; ! ?' are preceeded by a thin and uncuttable space. We apply this
+automatically in \FP. (We have added few stretching {\em glue} to
+the question mark).\NL2
+
+Regarding the `:' we have not inserted an inter-word space but a thin space
+and also have added some glue.\NL2
+
+\smallskip
+French guillemets are processed the same way. \NL3
+
+In an {\em underfull\/} line containing a `:' man has habits to share spaces
+around the double points. This way used in \FP\ can also produce a
+line with a ragged right, as shown in the french column. This technique
+ reduce a lot of {\em overfull} and {\em underfull} {\tt hboxes}
+produced by \TeX{}.
+\NL3
+
+As shown also, \FP\ is reluctant to print a double point at the
+end of a page or a column.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french%\noenglishquote
+\section[Dactylographie fran\c{c}aise]{Rappels concernant la \newline
+dactylographie}
+
+Les habitudes de saisie c.-\`{a}-d. les habitudes dactylographiques,
+ veulent que les signes suivants
+`\verb|:| \verb|;| \verb|!| \verb|?| \verb|>>|'
+soient toujours pr\'{e}c\'{e}d\'{e}s d'un blanc
+(barre d'espace sur les claviers) et les \verb|<<| toujours
+suivis d'un blanc. \FP\ remplacera
+automatiquement ce blanc (\`{a} la composition) par l'espace appropri\'{e}e.
+
+{\moretolerance\moretolerance\moretolerance
+Les guillemets fran\c{c}ais << (et respectivement >>)...
+\footnote{\tthyphenation Avec les options fournies
+telles \vers|A4| et \vers|double|\-\vers|column| on obtient
+ l\`{a} un \vers|overfull| \vers|hbox| difficilement r\'{e}ductible
+de fa\c{c}on automatique mais je l'ai r\'{e}duit
+avec 3 \texttt{\backslash moretolerance}%
+\notthyphenation.}
+\par}
+%\nooverfullhboxmark
+
+Les vrais guillemets fran\c{c}ais << (et respectivement >>)
+s'utilisent toujours doubl\'{e}s (\verb|<<| et respectivement
+\verb|>>|). Ainsi $<$ et $>$ ne
+sont que des signes math\'{e}matiques et n'ont pas
+d'autre sens en fran\c{c}ais que : {\em inf\'{e}rieur \`{a}} et
+{\em sup\'{e}rieur \`{a}}.
+
+Il est fortement conseill\'{e} de poursuivre
+ces habitudes dactylographiques qui
+contribuent aussi \`{a} \'{e}claircir le texte
+saisi et donc ainsi \`{a} faciliter les
+corrections ult\'{e}rieures.
+\NL1
+
+\subsection[Test de la ponctuation fran\c{c}aise
+ \mdseries`\protect\myverb|. : ; ! ?|']
+{Test de la ponctuation \newline fran\c{c}aise
+ \mdseries`\protect\myverb|. : ; ! ?|'}
+
+Le deux points s'imprime comme ceci : s'il est pr\'{e}c\'{e}d\'{e} d'un blanc
+(au moins un) sinon rien n'est chang\'{e} (par ex. 11:33). Notez
+l'espace apr\`{e}s le point terminant la phrase ; le point virgule
+est aussi pr\'{e}c\'{e}d\'{e} d'une espace fine s'il n'est pas coll\'{e}
+au mot le pr\'{e}c\'{e}dant (comme dans cet exemple d\^{u} \`{a} une faute
+de frappe; assez fr\'{e}quente).\\
+{\moretolerance
+Oh ! Quoi-donc ? Notez ici l'espacement utilis\'{e}
+devant le `!' et le `?'. Il ne faut
+pas oublier aussi de taper le blanc avant, sinon? tout est
+%terriblement
+ coll\'{e}! Voyez-vous la diff\'{e}rence ? Bravo !
+}
+
+Mais pour les documents {\em mal\/} saisis (c.-\`{a}-d. sans blanc) il est
+toujours possible de sp\'{e}cifier la sous-option \verb|\untypedspaces|
+\untypedspaces pour obtenir une insertion automatique des espaces
+manquants comme ici! o\`{u} il avait \'{e}t\'{e} saisi `\verb|ici!|'.
+V\'{e}rifions pour les autres ponctuations :;? \typedspaces que nous
+n'obtenons pas :;? serr\'{e}es comme ici.
+
+V\'{e}rification de l'espacement :
+
+\noindent
+\verb| \typedspaces X~; Y ; Z;| = \typedspaces X~; Y ; Z;
+
+\noindent
+\verb|\untypedspaces X~; Y ; Z;| = \untypedspaces X~; Y ; Z; \typedspaces
+
+\newpage\english
+\section{French typing}
+French typists have some habits. For example they type a space before `: ; ! ?
+\verb|>>|' and after \verb|<<|. \FP\ replace automatically this
+blank space by the appropriate spacing.
+
+There is only one kind of quoting in French by the mean of guillemets which
+are allways typed \verb|<<| and \verb|>>|. Usual english simple and double
+quotes must be prohibited.
+
+\subsection{\mdseries%
+ \texttt{\textbackslash untypedspaces}}%
+This control command offers the ability to repair automatically a document
+badly typed i.e. in which spaces were not typed before french punctuation.
+This bypass can help but is not the good way to use daily because there are
+many cases where, for example, a double point must never be preceeded
+by a space.
+
+Now we verify that the spacing is unchanged in English:
+
+\noindent
+\verb| \typedspaces X~; Y ; Z;| = \typedspaces X~; Y ; Z;
+
+\noindent
+\verb|\untypedspaces X~; Y ; Z;| = \untypedspaces X~; Y ; Z; \typedspaces
+
+\subsection{\mdseries%
+ \texttt{\textbackslash wrongtypedspaces}}
+A french typist may input spaces before
+punctuation as it is usual in French. These unfortunate space
+ can be removed by simply letting \FP\ do it with* the control
+sequence:
+
+\begin{verbatim}
+\letpunctuationactivefor
+ \wrongtypedspaces
+\end{verbatim}
+
+\FRENCH% pour ne pas dire \french
+\letpunctuationactivefor\wrongtypedspaces
+\english
+Let's try the previous example:\par
+\noindent
+\verb| X~; Y ; Z;| = X~; Y ; Z;
+
+Now we say \verb|\nowrongtypedspaces|
+\nowrongtypedspaces to come back to the normal
+situation.
+
+\vfill
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\nowrongtypedspaces% to be sure it is set when english text is skipped
+\csname StopFrenchLbT\endcsname% special case, temporary.
+
+\section[Test des guillemets fran\c{c}ais, 7 (<%
+ < >%
+ >) et 8-bits (<< >>)]%
+{Test des guillemets \newline fran\c{c}ais (<< >>)}
+\hyphenation{nor-ma-le-ment}
+
+Les guillemets fran\c{c}ais s'\'{e}crivent et se saisissent
+<< normalement >> comme ceci :
+\verb|<< |{\tt nor}\-%
+{\tt male}\-{\tt ment }\verb|>>|
+ ou \'{e}ventuellement en italiques mais toujours
+\bgroup% for frenchle
+<< \em normalement\/ >> %
+\egroup% for frenchle
+; ici nous avons tap\'{e} au clavier :
+\verb|<< \em| {\tt normalement}\verb| >>|.
+Et en tapant par contre :\\ \verb|<<\em|
+ {\tt anormale\-ment (sans espace)}\verb|>>| \ on obtient...
+\bgroup% for frenchle
+<<\em anormale\-ment (sans espace)\/>>.
+\egroup% for frenchle
+Re\-mar\-quez que les guillemets font office d'acco\-lades \TeX{} et que donc
+les changements de polices sont restaur\'{e}s en sortant de la citation.
+
+Pour les documents d\'{e}j\`{a} saisis {\em sans espace} \FP\
+ins\'{e}rera syst\'{e}matiquement un espace \`{a} l'endroit
+d\'{e}sir\'{e} si l'on a donn\'{e} la sous-option \verb|\untypedspaces|.
+\untypedspaces
+Et en tapant \`{a} nouveau
+\verb|<<\em| {\tt anormale\-ment (sans espace)}\verb|>>| on obtient
+\bgroup% for frenchle
+<<\em anormalement (sans espace)\/>>.
+\egroup% for frenchle
+\typedspaces
+
+Parfois on d\'{e}sirera remplacer syst\'{e}matiquement tous les
+guillemets anglais (`` et '') d'un texte par de vrais guillemets
+fran\c{c}ais, il
+suffira alors de fournir l'\'{e}trange option :\\
+\texttt{\backslash noenglishdoublequotes}\\
+\noenglishdoublequotes pour obtenir : `` ''.
+
+`` '' (m\^{e}me test en d\'{e}but de paragraphe).\englishdoublequotes
+
+Lorsqu'une citation est faite dans un texte, celle-ci commence
+toujours par des guillemets. << Cette citation peut se poursuivre sur
+plusieurs paragraphes.
+
+Dans ce cas, le style %\verb|french|
+ins\'{e}rera syst\'{e}matiquement les guillemets n\'{e}cessaires
+en d\'{e}but de
+chaque paragraphe. >>
+
+Mais une citation peut aussi en contenir une autre. << Dans ce cas l'imprimerie
+ nationale pr\'{e}cise dans ses {\em R\`{e}gles typographiques} :
+\ancientguillemets
+ << Lors\-que la premi\`{e}re citation est
+elle-m\^{e}me plac\'{e}e entre
+guillemets, chaque ligne de la seconde d\'{e}butera par un
+guillemet ouvrant. >>
+Ce dispositif, comme on le voit, n'est pas mis en {\oe}uvre ici
+ (voir son application au paragraphe \ref{noeveryparguillemets}).
+ << La deuxi\`{e}me citation peut aussi...
+
+se poursuivre sur un ou
+plusieurs paragra\-phes. >> Notez bien qu'avant cette citation nous avons
+demand\'{e} les \verb|\ancientguillemets|
+pour produire ces guillemets fermants
+en d\'{e}but de ligne. Le \verb|\todayguillemets| r\'{e}tablit la
+situation une fois
+le deuxi\`{e}me niveau termin\'{e}. \todayguillemets
+
+{\makeatletter\def\GOfrench{T1}\ifx\GOfrench\f@encoding
+\enlargethispage{10pt}% increase probably due to EC fonts metrics?
+\fi}
+Il arrive que la fin d'une citation de deux\-i\`{e}me niveau
+co\"{\i}ncide avec celle
+du premier niveau. << Dans ce cas il faudra coder, comme ici :\\
+\verb|\endguillemets|
+\`{a} la place de ``\verb|>>|'' \endguillemets.
+
+Deux tests : \fbox{\begin{guillemets} XXX \end{guillemets}}
+et \fbox{X \begin{guillemets} XXX \end{guillemets} X} servant \`{a}
+v\'{e}rifier l'espacement quand on utilise \verb|\begin| et \verb|\end|.
+
+Le paragraphe suivant va alors d\'{e}marrer de fa\c{c}on
+tout \`{a} fait normale...
+
+On peut aussi coder :
+\begin{verbatim}
+\begin{guillemets}
+Une citation...
+\end{guillemets}
+\end{verbatim}
+ce qui donnera :
+\begin{guillemets}
+Une citation...
+\end{guillemets}
+et en tapant {\em \`{a} la \TeX} : \verb|\guillemets{}| \verb|Une citation...|
+\verb|\en|\vers|d|\-\vers|guillemets{}| nous devons obtenir absolument la m\^{e}me chose :
+\guillemets{} Une citation... \endguillemets{}
+
+V\'{e}rifions maintenant l'espacement dans les diff\'{e}rents cas :
+
+\noindent
+\fbox{\parbox{2cm}{<<X\dotfill X>>}} \%\texttt{\backslash typedspaces}
+ {\em sans blanc}
+
+\noindent
+\fbox{\parbox{2cm}{<< X\dotfill X >>}} \%\texttt{\backslash typedspaces}
+{\em normal}
+
+\noindent\untypedspaces
+\fbox{\parbox{2cm}{<< X\dotfill X >>}} \%\texttt{\backslash untypedspaces}
+{\em avec blanc}
+
+\noindent
+\fbox{\parbox{2cm}{<<X\dotfill X>>}} \%\texttt{\backslash untypedspaces}
+{\em sans blanc}
+\typedspaces
+
+\noindent
+\fbox{\parbox{3cm}{A blabla bla blabla : <<
+Ceci est mon test de c\'{e}sure >>}} <<...>> reste possible.
+
+\begin{flushleft}
+ Ceci est << un test avec \verb|\raggedright| >> qui
+--~th\'{e}oriquement~-- ne devrait plus nous poser de probl\`{e}me.
+\end{flushleft}
+
+\subsection{{\mdseries%
+\texttt{\textbackslash noeveryparguillemets}}}\label{noeveryparguillemets}
+Cette option permet de g\'{e}rer correctement les citations de second
+rang mais elle est tout \`{a} fait contraire
+ au processus \verb|\everypar| cit\'{e} pr\'{e}c\'{e}demment gr\^{a}ce auquel
+ les guillemets sont g\'{e}n\'{e}r\'{e}s automatiquement \`{a} chaque
+d\'{e}but de paragraphe.
+Voici ce que produit l'option {\em normale\/}
+\texttt{\backslash every\-par\-guil\-lemets} sur le paragraphe suivant :
+
+<< Tout le monde s'accorde \`{a} trouver l\'{e}gitime la division :
+{\tt extra-ordinaire}. Le cas des mots com\-pos\'{e}s est le seul
+\`{a} rencontrer
+cette unanimit\'{e}. Dans les autres, les opinions sont tr\`{e}s partag\'{e}es.
+ Frey est le plus cat\'{e}gorique : il n'admet de division selon la formation
+que pour des mots de composition compl\`{e}tement fran\c{c}aise, et la rejette
+sinon... Le {\em Code typographique}, tout en adoptant ce m\^{e}me point
+ de vue << ... [reconna\^{\i}t] n\'{e}anmoins que certains auteurs de travaux
+scientifiques pr\'{e}f\`{e}rent la division \'{e}ty\-mologique
+qui fait ressortir
+ la racine grecque ou latine. >> Quant \`{a} Gouriou, il \'{e}crit :
+<< On pr\'{e}f\`{e}rera cependant garder la coupure \'{e}tymologique
+ chaque fois que les composants sont {\em ais\'{e}ment} re\-connaissables. >>
+(L'italique est de Gouriou.)
+\marginpar{{\footnotesize Ici on a trich\'{e} avec des} \texttt{\backslash!}}
+\!Telle \!est aussi \!l'opinion \!de \!Girodet >>.
+
+Et voici l'effet de \verb|\noeveryparguillemets| :
+\noeveryparguillemets
+
+<< Tout le monde s'accorde \`{a} trouver l\'{e}gitime la division :
+{\tt extra-ordinaire}. Le cas des mots com\-pos\'{e}s est le seul
+\`{a} rencontrer
+cette unanimit\'{e}. Dans les autres, les opinions sont tr\`{e}s partag\'{e}es.
+ Frey est le plus cat\'{e}gorique : il n'admet de division selon la formation
+que pour des mots de composition compl\`{e}tement fran\c{c}aise, et la rejette
+sinon... Le {\em Code typo\-graphique}, tout en adoptant ce m\^{e}me point
+ de vue << ... [reconna\^{\i}t] n\'{e}anmoins que certains auteurs de travaux
+scientifiques pr\'{e}f\`{e}rent la division \'{e}ty\-mologique
+qui fait ressortir
+ la racine grecque ou latine. >> Quant \`{a} Gouriou, il \'{e}crit :
+<< On pr\'{e}f\`{e}rera cependant garder la coupure \'{e}tymologique
+ chaque fois que les composants sont {\em ais\'{e}ment} re\-connaissables. >>
+(L'italique est de Gouriou.)
+Telle est aussi l'opinion de Girodet >>.
+\everyparguillemets
+
+Il faut noter que cette option impose que le paragraphe commence et se
+termine par des guillemets. % sinon code \guillpar et \parguill
+C'est pour cela que nous n'avons pas mis cette option par d\'{e}faut.
+
+\subsubsection{Un test assez m\'{e}chant}
+Voici un exemple d'utilisation dans un environement \verb|quotation|%
+\footnote{Nous avons introduit \texttt{\backslash moretolerance}
+pour obtenir une composition correcte.} :
+\begin{quotation}
+\moretolerance\moretolerance\moretolerance
+<< Je ne peux mieux faire que de citer la d\'{e}finition qu'a donn\'{e}e
+de la gravure un de nos ma\^{\i}tres fondeurs, Fournier le Jeune :
+
+<< La scien\-ce du graveur, dit-il, consiste \`{a} conna\^{\i}tre la figure
+la plus parfaite que l'on puisse donner aux caract\`{e}res, les dimensions
+qu'ils doivent avoir et \`{a} les repr\'{e}senter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perp\'{e}tuent des lettres
+\`{a} l'infini par la fonte. \endguillemets
+\end{quotation}
+
+Le m\^{e}me exemple sans \verb|quotation| :
+
+<< Je ne peux mieux faire que de citer la d\'{e}finition qu'a donn\'{e}e
+de la gravure un de nos ma\^{\i}tres fondeurs, Fournier le Jeune :
+
+<< La scien\-ce du graveur, dit-il, consiste \`{a} con\-na\^{\i}tre la figure
+la plus parfaite que l'on puisse donner aux caract\`{e}res, les dimensions
+qu'ils doivent avoir et \`{a} les repr\'{e}senter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perp\'{e}tuent des lettres
+\`{a} l'infini par la fonte. \endguillemets
+\bigskip
+
+\noeveryparguillemets
+Puis avec \verb|\noeveryparguillemets| (c.-\`{a}-d. sans \verb|quotation|) :
+
+<< Je ne peux mieux faire que de citer la d\'{e}finition qu'a donn\'{e}e
+de la gravure un de nos ma\^{\i}tres fondeurs, Fournier le Jeune :
+
+<< La scien\-ce du graveur, dit-il, consiste \`{a} conna\^{\i}\-tre la figure
+la plus parfaite que l'on puisse donner aux caract\`{e}res, les dimensions
+qu'ils doivent avoir et \`{a} les repr\'{e}senter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perp\'{e}tuent des lettres
+\`{a} l'infini par la % En cas d'arr\^{e}t \`{a} cet endroit : le format
+fonte. \endguillemets%.fmt utilis\'{e} n'est prob. pas ds le bon codage !
+\bigskip
+
+Et enfin avec \verb|quotation|, voil\`{a}
+ce que cela peut donner\label{quotation} :
+%%% La \marginpar suivante pose un pb de ``Lost Float'' qd elle est
+%%% placee plus loin, pourquoi ?
+\marginpar{{\footnotesize Il y a ici un probl\`{e}me \`{a} \'{e}tudier en 2 colonnes !}}
+\begin{quotation}
+<< Je ne peux mieux faire que de citer la d\'{e}finition qu'a donn\'{e}e
+de la gravure un de nos ma\^{\i}tres fondeurs, Fournier le Jeune :
+
+<< La scien\-ce du graveur, dit-il, consis\-te \`{a} conna\^{\i}tre la figure
+la plus parfaite que l'on puisse donner aux caract\`{e}res, les dimensions
+qu'ils doivent avoir et \`{a} les repr\'{e}senter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perp\'{e}tuent des lettres
+\`{a} l'infini par la fonte.
+ \endguillemets
+\end{quotation}
+\everyparguillemets
+On notera ici les espaces inter-mots beaucoup plus {\em tol\'{e}rants}. C'est
+la seule solution trouv\'{e}e pour arriver \`{a} imprimer
+quelque chose d'\`{a} peu
+pr\`{e}s correct en double colonnage.
+
+\vfill
+Terminons la page en anglais pour tester le haut de page. Les guillemets
+doivent \^{e}tre bons avec le codage T1.
+
+\english
+Let's complete the page with english text in order to test and show
+how will be printed the header.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\onecolumn
+\subsubsection{M\^{e}me test en \mdseries\texttt{\textbackslash onecolumn}}
+Voici un exemple en environement \verb|quotation| :
+\begin{quotation}
+<< Je ne peux mieux faire que de citer la d\'{e}finition qu'a donn\'{e}e
+de la gravure un de nos ma\^{\i}tres fondeurs, Fournier le Jeune :
+
+<< La scien\-ce du graveur, dit-il, consiste \`{a} conna\^{\i}tre la figure
+la plus parfaite que l'on puisse donner aux caract\`{e}res, les dimensions
+qu'ils doivent avoir et \`{a} les repr\'{e}senter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perp\'{e}tuent des lettres
+\`{a} l'infini par la fonte. \endguillemets
+\end{quotation}
+
+Le m\^{e}me exemple sans \verb|quotation| :
+
+<< Je ne peux mieux faire que de citer la d\'{e}finition qu'a donn\'{e}e
+de la gravure un de nos ma\^{\i}tres fondeurs, Fournier le Jeune :
+
+<< La scien\-ce du graveur, dit-il, consiste \`{a} conna\^{\i}tre la figure
+la plus parfaite que l'on puisse donner aux caract\`{e}res, les dimensions
+qu'ils doivent avoir et \`{a} les repr\'{e}senter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perp\'{e}tuent des lettres
+\`{a} l'infini par la fonte. \endguillemets
+\bigskip
+
+\noeveryparguillemets
+Puis avec \verb|\noeveryparguillemets| (sans \verb|quotation|) :
+
+<< Je ne peux mieux faire que de citer la d\'{e}finition qu'a donn\'{e}e
+de la gravure un de nos ma\^{\i}tres fondeurs, Fournier le Jeune :
+
+<< La scien\-ce du graveur, dit-il, consiste \`{a} conna\^{\i}tre la figure
+la plus parfaite que l'on puisse donner aux caract\`{e}res, les dimensions
+qu'ils doivent avoir et \`{a} les repr\'{e}senter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perp\'{e}tuent des lettres
+\`{a} l'infini par la fonte. \endguillemets
+\bigskip
+
+Et enfin avec \verb|quotation| :
+\begin{quotation}
+ \let\bkORI\break
+ %\def\break{\bkORI\hbox to 0pt{/}}% for debug
+ %\ancientguillemets% for debug
+<< Je ne peux mieux faire que de citer la d\'{e}finition qu'a donn\'{e}
+de la gravure un de nos ma\^{\i}tres fondeurs, Fournier le Jeune :
+
+<< La scien\-ce du graveur, dit-il, consiste \`{a} conna\^{\i}tre la figure
+la plus parfaite que l'on puisse donner aux caract\`{e}res, les dimensions
+qu'ils doivent avoir et \`{a} les repr\'{e}senter sur l'acier pour les frapper
+sur le cuivre afin d'en former des matrices qui perp\'{e}tuent des lettres
+\`{a} l'infini par la fonte. \endguillemets
+\end{quotation}
+\everyparguillemets
+
+\subsubsection{Test de << stretchability >>}
+
+Les espaces doivent \^{e}tre \'{e}galement r\'{e}partis sur la ligne :
+
+\medskip
+\hbox to \hsize{etiord-gauche\footnote{En plain \TeX{} l'espacement est ici
+\label{etiord}
+ curieusement incorrect ! ...}
+ << centre-ertnec >> \hbox{}\footnote{... alors qu'il faudrait
+la m\^{e}me r\'{e}partition
+ de l'espace.}%
+ ehcuag-droite}
+\medskip
+
+\subsection{Test des commandes \mdseries\texttt{\textbackslash ifnum}}
+
+\ifnum 1 < 3 1\verb| < |3 est VRAI, bien s\^{u}r !
+ \else 1\verb| < |3 est FAUX ! \fi
+comme
+\ifnum 3 > 1 3\verb| > |1 est aussi VRAI, bien s\^{u}r !
+ \else 3\verb| > |1 est FAUX ! \fi
+
+\medskip
+
+\subsection{Test des commandes \mdseries\texttt{\textbackslash everypar}}
+
+{J'ai cod\'{e} dans cette section \verb|\everypar{$++\,$}| : \everypar{$++\,$}
+
+Paragraphe 1 << citation niveau 1
+
+Paragraphe 2 << citation niveau 2
+
+Paragraphe 3 fin citation niveau 2 >> puis fin niveau 1 >>
+
+Paragraphe 4}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage% tjrs en 1 colonne
+\hbox{}\ifx\itshape\undefined\else% avoid old frencht crash
+\subsection{Test de fermeture pr\'{e}matur\'{e}e}
+
+Il arrive que les guillemets soient ferm\'{e}s dans un environnement
+plus int\'{e}rieur qui n'apparie donc pas correctement les blocs.
+Voici un exemple d'utilisation :
+
+\begin{verbatim}
+Ma\^{\i}tre Corbeau dit \`{a} son clerc : << \itshape Cher coll\`{e}gue,
+
+\begin{itemize}
+\item Ah que vous \^{e}tes joli !
+\item Ah que vous me semblez beau ! >> \upshape
+et s'enfuit de ce pas...
+\end{itemize}
+
+\endguillemets
+\textsf{Quel homme \'{e}trange, n'est-ce pas ?}
+\end{verbatim}
+
+Voici ce que cela donne comme composition :
+
+\medskip
+\bgroup% for frenchle
+Ma\^{\i}tre Corbeau dit \`{a} son clerc : << \itshape Cher coll\`{e}gue,
+
+\SmsG%
+\begin{itemize}
+\item Ah que vous \^{e}tes joli !
+\item Ah que vous me semblez beau ! >> \upshape
+et s'enfuit de ce pas...
+\end{itemize}
+\FmsG%
+
+\endguillemets
+\egroup% for frenchle
+\textsf{Quel homme \'{e}trange, n'est-ce pas ?}
+
+\medskip
+On notera plusieurs choses. Premi\`{e}rement il a fallu
+r\'{e}tablir \verb|\upshape| apr\`{e}s les guillemets fermants,
+du fait du mauvais appariement des blocs. Ensuite un message
+sort indiquant une fermeture pr\'{e}matur\'{e}e des guillemets.
+Cette fermeture restant incompl\`{e}te on note enfin que l'on a forc\'{e}
+un \verb|\endguillemets| pour clore proprement et d\'{e}finitivement
+l'environnement guillemets.
+
+\subsection{\mdseries\texttt{\textbackslash everyparguillemetsremoved}}
+\label{noeveryparguillemetsremoved}
+Dans le m\^{e}me exemple nous pouvons aussi interdire la g\'{e}n\'{e}ration
+automatique des guillemets ouvrants \`{a} chaque d\'{e}but de paragraphe ;
+il faut alors saisir \verb|\everyparguillemetsremoved| :
+\everyparguillemetsremoved
+
+\medskip
+\bgroup% for frenchle
+Ma\^{\i}tre Corbeau dit \`{a} son clerc : << \itshape Cher coll\`{e}gue,
+
+\SmsG%
+\begin{itemize}
+\item Ah que vous \^{e}tes joli !
+\item Ah que vous me semblez beau ! >> \upshape
+et s'enfuit de ce pas...
+\end{itemize}
+\FmsG%
+
+\endguillemets
+\egroup% for frenchle
+\textsf{Quel homme \'{e}trange, n'est-ce pas ?}
+
+\medskip
+Il suffit ensuite de r\'{e}tablir \verb|\everyparguillemets|.
+\everyparguillemets
+\fi% ifx \itshape
+
+\subsection{Test de l'espacement}
+{\def\marque#1{\vbox{\halign{\hfil##\hfil\cr
+ \llap{\vrule width4.5mm height.4pt}%
+ \rlap{\vrule width4.5mm height.4pt}\cr
+ \noalign{\vskip-1cm}%
+ #1\cr}}}
+ \Huge
+ \def\ecartement{\fbox{a << \marque{\hbox{$|$}} >> b}}
+ \ecartement
+}
+% Difference de taille a voir entre les deux %%%%%%
+\setbox7\hbox{\leftguillemets\ X}
+\setbox8\hbox{X\ \rightguillemets}
+\SmsG%
+\message{Taille des boites page \thepage\space \string:
+ \the\wd7=\string?=\the\wd8}
+\FmsG%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\onecolumn
+\newpage
+\hbox{}
+\vfill
+\centerline{\Large Page intentionnellement laiss\'{e}e blanche}
+\vfill
+\twocolumn
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+
+\subsection{Guillemets interrompus}
+Une citation peut \^{e}tre en anglais et donc se commencer par
+\vers|<< \|\vers|english| et se terminer par \vers|\|\vers|french >>|. Ce cas
+ne doit plus g\'{e}n\'{e}rer de message
+{\em fermeture de guillemets non ouverts} !
+Voici le test, r\'{e}alis\'{e} ici
+tout d'abord avec l'environnement \vers|nonfrench| :
+
+\medskip
+1 \fbox{<< \begin{nonfrench}% LaTeX keeps space
+ Text in English
+ \end{nonfrench}% LaTeX keeps space
+ >>}
+
+
+\medskip
+Puis avec : \\
+\verb|\begin{english}| ... \verb|\end{english}| :
+
+\medskip
+% bypass here our TeX--XeT emulation to avoid message: english environment
+% ended by \end{guillemets}
+\def\temp{\begingroup}
+\ifx\beginL\temp
+\else
+{% local redef of english for plain and our specific test file
+ \ifx\undefined\englishORI\else\let\english\englishORI\fi%
+2 \fbox{<< \begin{english}% LaTeX keeps space
+ Text in English
+ \end{english}% LaTeX keeps space
+ >>}
+
+\medskip
+Et enfin avec \verb|\|\verb|english| ... \verb|\endenglish| :
+
+\medskip
+3 \fbox{<< {\csname english\endcsname
+ Text in English
+ \csname endenglish\endcsname}% space here to remove
+ >>}
+}% local redef of english for plain test
+\fi
+
+\medskip
+Ceci avait aussi pour but de tester ces possibilit\'{e}s de
+changement de langage et de v\'{e}rifier l'espacement qui
+devrait \^{e}tre ainsi :
+
+\medskip
+0 \fbox{<< Text in English >>}
+
+\noenglishdoublequotes
+\subsection{`` {\mdseries\texttt{\textbackslash noenglishdoublequotes}} ''}
+
+Nous avons mis la commande \vers|\noenglish|\-\vers|doublequotes| juste avant
+le titre de section de fa\c{c}on \`{a} remplacer les << quotes >> anglaises
+par des guillemets fran\c{c}ais dans ce titre.
+Il s'agit de v\'{e}rifier aussi que la g\'{e}n\'{e}ration des fichiers auxiliaires
+\verb|.aux| et \verb|.toc| ne pose pas de probl\`{e}me lorsque ces fichiers
+sont r\'{e}utilis\'{e}s. Bien s\^{u}r, si cette option n'est pas activ\'{e}e pour tout le
+document, comme ici, on ne retrouvera pas les guillemets fran\c{c}ais
+dans la table des mati\`{e}res.
+
+\noenglishdoublequotes
+
+\english% histoire de changer de langue ?
+
+\newpage\french
+\subsection%{<< no-french guillemets >>}
+ {\mdseries\texttt{\textbackslash nofrenchguillemets}}
+En codant \verb|\nofrenchguillemets|
+\nofrenchguillemets on n'utilise plus
+les guillemets programm\'{e}s dans l'extension {\tt french}. Si on les utilise
+malgr\'{e} tout, le r\'{e}sultat d\'{e}pendra de la police. Ici nous utilisons la
+police \fontname\font{} et nous obtenons :
+
+<%
+ < en 7-bits >%
+ >
+
+et aussi :
+
+<< en 8-bits >>.
+
+R\'{e}activons maintenant les guillemets avec la commande
+\verb|\frenchguillemets|
+\frenchguillemets et faisons le m\^{e}me test :
+
+<%
+ < en 7-bits >%
+ >
+
+et aussi :
+
+<< en 8-bits >>. Voyez-vous ?
+\vfill
+\subsection{Haut de page+guillemets}
+
+\subsubsection{En 8-bits}
+Il ne devrait pas y avoir de probl\`{e}me du tout.
+Car, puisqu'il s'agit d'un guillemet en 8-bits, cela doit
+\^{e}tre forc\'{e}ment un vrai guillemet fran\c{c}ais. Mais, malheureusement,
+{\em la solution pour l'impl\'{e}menter n'est pas encore trouv\'{e}e avec
+le codage OT1}.
+Le codage de fonte de ce document imprime :
+\nonfrench <%
+ < >%
+ >%
+\endnonfrench{}
+ (doit \^{e}tre parfait en T1).
+
+\subsubsection{En 7-bits}
+En codage OT1 les guillemets 7-bits de haut de page ne peuvent \^{e}tre
+bons sur cette page
+ {\bf QUE} parce que nous avons termin\'{e} la
+page en fran\c{c}ais, sinon nous aurions eu :
+\ifx\textexclamdown\undefined
+ \def\textexclamdown{!`}\def\textquestiondown{?`}
+\fi
+\textexclamdown\textexclamdown{} et \textquestiondown\textquestiondown
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\hbox{ }\NL{25}
+
+\subsection{Guillemets et maths}
+
+L'\'{e}quation suivante ne doit plus produire le fameux message :
+
+{\tt ! Argument of \backslash \string @genG % string pour amslatex
+ has an extra % { pour emacs
+ $\}$% c'est un \delimiter qui pose pb tq avec frencht d'ou mode math
+.}
+
+$$U^{k+1}=U^{k}- {< g_{k},d_{k} >}$$
+
+\section{D'autres guillemets}\label{autres}
+Avec \FP\ il est possible de substituer automatiquement aux
+guillemets `anglais' la forme \noenglishquote `que voici' en donnant la
+sous-option \verb|\noenglishquote|.
+Mais attention, les apostrophes deviennent des accents
+comme dans : {\em il s'agit ici de l'exemple}
+\englishquote qui aurait d\^{u} \^{e}tre imprim\'{e} :
+{\em il s'agit ici de l'exemple}.
+Un usage intensif de cette option est plut\^{o}t \`{a} d\'{e}conseiller.
+
+\newpage\english
+\section{French guillemets}
+Using french guillemets in an english document (\verb|<<| and \verb|>>|) will
+give (depending of font encoding) that: << and >>, it is normal!
+
+As you can look in the previous columns, french guillemets have specific
+rules. They are used for quotation when an author is cited or each time an
+emphasis is needed. Normally, italic is not used inside a quoted french
+text, excepted when you really want to show some wording.
+
+When opened, each paragraph of the quoted text will start left
+ with the opening french guillemets.
+
+Another quotated text can take place inside a first level. This second level
+citation is also very specific. Each line must start with guillemets.
+
+The style designer, from time to time, chose to apply here an ancient rule
+by putting here closing guillemets.
+
+The technical tools involved in \FP\
+ disallow to have at the same time
+the \verb|\everypar| possibility and the second level mechanism.
+
+\subsection{Guillemets and maths}
+
+The following equation is always correct:
+
+$$U^{k+1}=U^{k}- {< g_{k},d_{k} >}$$
+
+and never produce an error message.
+\NL1
+
+\section{Other guillemets}
+With \FP\ it is possible to replace english guillemets by
+diacritic caracters. But, be careful, all apostrophes will be diacritics too.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\section{Trois petits points}
+Les points de suspension sont : ... et non pas ceux de \TeX{} : $\ldots{}$
+\noTeXdots
+En codant \verb|\noTeXdots| les commandes \verb|\dots| ou \verb|\ldots| de
+\LaTeX{} donneront : $\ldots{}$ Mais l'option par d\'{e}faut a \'{e}t\'{e}
+volontairement maintenue au standard (\verb|\TeXdots|) puisqu'il suffit
+de ne pas les utiliser.\TeXdots
+
+\section{Crochets}
+IBM, en son temps, avait cr\'{e}\'{e} l'EBCDIC dans lequel ne figurait pas
+les crochets ([ ]). C'est la raison pour laquelle les utilisateurs IBM
+ont parfois substitu\'{e} $<$ et $>$ aux crochets. La sous option
+\verb|\EBCDICbrackets| \EBCDICbrackets
+permet de les remplacer comme ici <automatiquement> par des crochets.
+Mais faites attention, les doubles guillemets
+\verb|<|\verb|<| et \verb|>|\verb|>| % pour eviter la conversion 8bits
+ ne donneront jamais des crochets mais << et >>
+(sauf en mode \verb|verbatim|). On peut en g\'{e}n\'{e}ral
+se contenter de \verb|< <| et \verb|> >| pour obtenir < < et > >.
+On revient \`{a} la situation ant\'{e}rieure en tapant la commande suivante :
+\verb|\normalbrackets|\normalbrackets.
+
+\section{D\'{e}bordements}
+Nous venons de choisir l'option d'indication de d\'{e}bordement de ligne
+\verb|\overfullhboxmark| et nous voyons son
+effet lorsque la ligne ne peut \^{e}tre coup\'{e}e gr\^{a}ce \`{a} l'impression
+de la petite bo\^{\i}te noire.
+%(cf. page \pageref{debordement}).
+Cette option est activ\'{e}e au minimum pour une page enti\`{e}re.
+Ne pas sp\'{e}cifier l'option et son contraire sur la m\^{e}me page sinon
+l'effet est inchang\'{e}.
+
+\labelsinmargin
+\section{\mdseries\texttt{\textbackslash labelsinmargin}}%
+\label{labels: in: margin}
+\FP\ offre la possibilit\'{e}, comme cela a \'{e}t\'{e} demand\'{e}
+\`{a} partir de cette section, d'imprimer dans la marge le libell\'{e} des
+\'{e}tiquettes utilis\'{e}es dans les ordres \verb|\label|.
+Cette option, utilisable
+aussi en dehors du fran\c{c}ais, est la suivante :
+\verb|\labelsinmargin|.
+
+\newpage\english
+\section{Three dots}
+Usual and common \TeX{} and \LaTeX{} dots are not french dots.
+\NL4
+
+\section{Brackets}
+An option is offered to replace \verb|<| and \verb|>| by brackets.
+\NL{11}
+
+\section{\mdseries\texttt{\textbackslash overfullhboxmark}}
+The command \verb|\overfullhboxmark| print a black
+box where your have an overfull \verb|hbox| i.e.\ when a line can't be
+hyphenated. The default is \verb|\nooverfullhboxmark|.
+\NL4
+
+\section{Labels in margin}\label{labels are in margin}
+An option allow you to print the labels you use in a page. These labels are
+printed in margins.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\section{Des points sur...}
+Inutile de mettre les points sur les i quand on accentue un i. Tout bon
+\'{e}diteur de texte doit faire ce travail pour vous. Sinon il existe la
+sous-option \verb|\idotless| qui produira \idotless
+\let\XX\^% Pour \'{e}viter une traduction \'{e}ventuelle en 8 bits
+\XX{i} si on lui demande d'imprimer \verb|\^i|.
+\iwithdot La valeur par d\'{e}faut
+dans \FP\ est \verb|\iwithdot| qui donnera malgr\'{e} tout de
+bons i accentu\'{e}s avec ML\TeX{} (\^{\i}) s'ils sont saisis directement en 8
+bits (v\'{e}rifiez dans votre fichier source).
+
+{\makeatletter\def\GOfrench{T1}\ifx\GOfrench\f@encoding
+\section{Ponctuation et mode \protect\linebreak % SPECIAL FONTES EC REELLES
+ math\'{e}matique}
+\else
+\section{Ponctuation et mode math\'{e}matique}
+\fi}
+Il s'agit de v\'{e}rifier que les modifications introduites
+par l'extension \FP\
+ne posent aucun genre de probl\`{e}me en mode math\'{e}matique.
+\\ Nous d\'{e}finissons une macro \verb|\test| :
+\\ \verb|\def\test#1{#1}|\def\test#1{#1}
+\\ pour voir si le mode math\'{e}matique peut \^{e}tre appel\'{e}
+sans probl\`{e}me en
+argument de macro-instructions. L'appel de \verb|\test{$x''$}| ne doit
+pas poser de probl\`{e}me%
+\iflatex
+, ni m\^{e}me \verb|\texttt{|\-\verb|[$x''=0$]}|
+\\ Ainsi : \verb|\texttt{[$x''=0$]}|
+\\donne : \texttt{[$x''=0$]} et
+\else%
+. \\Ainsi :
+\fi
+\\ \verb|$A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;$|
+\\ \verb|\test{$A':B''_1<C_{d'}$}|
+\\donne : $A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;$
+\\\phantom{donne :} \test{$A':B''_1<C_{d'}$}
+\\Avec \verb|\noenglishquote|\noenglishquote{} cela...
+\\donne : $A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;$
+\\\phantom{donne :} \test{$A':B''_1<C_{d'}$}
+\englishquote
+\\ puis avec \verb|\noenglishdoublequotes| \noenglishdoublequotes et
+`` mise en vedette '' :
+$$% \begin{displaymath}
+ A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;
+$$% \end{displaymath}
+$$% \begin{displaymath}
+ \test{A':B''_1<C_{d'}}
+$$% \end{displaymath}
+De m\^{e}me :
+\begin{verbatim}
+{\tt CALL SUBR($<$iopt$<$,ilopt$>%
+ >$)}
+\end{verbatim}
+doit s'imprimer :\\
+{\tt CALL SUBR($<$iopt$<$,ilopt$>%
+ >$)}\\
+sans produire le message d'erreur << Fermeture de guillemets non ouverts ! >>.
+\englishdoublequotes
+
+
+\newpage\english
+\section{An \i dotless}
+Everybody knows that a french ``{\em i circonflexe}'' has no dot on it.
+(In my opinion it is a \TeX{} bug to leave the dot when a diacritic is
+put on.) To suppress the dot automatically the best way is to use a well
+programmed text editor. \FP\ offers another opportunity with
+\verb|\idotless|.
+
+\NL2
+
+\section[Math mode and punctuation]{Math mode and \newline punctuation}
+Here we verify that french modifications about punctation
+does not introduce any problem in printing mathematics.
+\\ We define a new macro \verb|\test| :
+\\ \verb|\def\test#1{#1}|\def\test#1{#1}
+\\ in order to see if there is no more problem when passing maths
+inside a macro argument. Calling \verb|\test{$x''$}| must not
+introduce any problem%
+\iflatex
+, as well as \verb|\texttt{|\-\verb|[$x''=0$]}|
+\NL1\\So: \verb|\texttt{[$x''=0$]}|
+\\gives: \texttt{[$x''=0$]} and
+\else%
+. \NL1\\So:
+\fi
+\\\verb|$A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;$|
+\\\verb|\test{$A':B''_1<C_{d'}$}|
+\\ gives: $A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;$
+\\\phantom{gives:} \test{$A':B''_1<C_{d'}$}
+\\With \verb|\noenglishquote|\noenglishquote{} it$\ldots{}$
+\\gives: $A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;$
+\\\phantom{gives:} \test{$A':B''_1<C_{d'}$}
+\englishquote
+\\ and with \verb|\noenglishdoublequotes|\noenglishdoublequotes{}
+in ``display'' math mode:
+$$% \begin{displaymath}
+ A':B''_1<C_{d'}>D^2\ et\,\ !n\ ?\ ;
+$$% \end{displaymath}
+$$% \begin{displaymath}
+ \test{A':B''_1<C_{d'}}
+$$% \end{displaymath}
+\englishdoublequotes
+Also:
+\ifx\documentclass\undefined\\ % Still Plain!
+\else\\[-2\baselineskip] % to keep the same spacing as in French
+\fi
+\begin{verbatim}
+{\tt CALL SUBR($<$iopt$<$,ilopt$>%
+ >$)}
+\end{verbatim}
+must print:\\
+%\SmsG%
+{\tt CALL SUBR($<$iopt$<$,ilopt$>%
+ >$)}\\
+%\FmsG%
+without producing the error message:
+``Fermeture de guillemets non ouverts !''.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+Pour ma part lorsque je d\'{e}sire des crochets que je n'ai pas
+au clavier, je pr\'{e}f\`{e}re taper :\\
+\verb|{\tt CALL SUBR(<iopt<,ilopt> >)}| et utiliser
+l'option \verb|\EBCDICbrackets|\EBCDICbrackets{} :\\
+{\tt CALL SUBR(<iopt<,ilopt> >)}
+
+Cette option n'a pas d'effet en mode math\'{e}matique :
+$$ 1233 < 1234 <%
+ < 1235 >%
+ > 1234 > 1233 $$
+\normalbrackets
+
+\makeatletter% we should use \frac with AmS
+\ifx\RIfM@\undefined%\ifx\csname amsmath.sty\endcsname\relax
+ \long\def\text#1{#1}\long\def\frac#1#2{{#1\over#2}}
+\fi
+\makeatother
+
+V\'{e}rifions aussi
+($x < {\frac{1}{3}} < {\frac{1}{2}} > {\frac{1}{4}}$) :
+$$x < \frac{1}{3} < \frac{1}{2} > \frac{1}{4} $$
+puis aussi :
+
+ \text{\quad pour $|y| < \frac{111}{444}$}
+
+\bigskip
+La double ponctuation ne doit avoir aucun effet
+(visible) dans une formule en mode
+math\'{e}matiques, est-ce bien le cas sur l'exemple ci-dessous :
+
+{\LARGE $$a := b, (c!n=m) \textrm{ ; vrai ?}$$}
+
+On notera que la partie texte de la formule a \'{e}t\'{e} saisie avec la
+commande : \\
+\verb|\textrm{ ; vrai ?}|\\
+et que l'espacement fran\c{c}ais y a \'{e}t\'{e} appliqu\'{e}.
+
+\iflatex
+\subsection{Le cas de la virgule}
+En standard \AllTeX{} (ou alors avec l'option sp\'{e}ciale
+\verb|\regularmathcomma| de \FP) le traitement de la virgule
+est sp\'{e}cifique, ainsi quand on tape ce qui suit en mode
+math\'{e}matique de mise en valeur :
+\regularmathcomma%
+\begin{versatim}
+$$\textrm{La fonction}\ f(x,y)\
+ \textrm{ou le Vecteur}\ V(x, y, z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{EUR}$$
+\end{versatim}
+on obtient des espacements apr\`{e}s les virgules,
+qu'il y ait ou non des espaces dans le source \TeX\ :
+$$\textrm{La fonction}\ f(x,y)\
+ \textrm{ou le Vecteur}\ V(x, y, z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{EUR}$$
+(ce qui montre une anomalie dans la composition
+des nombres relatifs)
+\frenchmathcomma
+\fi
+
+\newpage\english
+When I have no brackets on my keyboard I prefer to type:\\
+\verb|{\tt CALL SUBR(<iopt<,ilopt> >)}|\\ using
+ the option \verb|\EBCDICbrackets| but the result in english
+remains unchanged\EBCDICbrackets{}:\\
+{\tt CALL SUBR(<iopt<,ilopt> >)}
+
+And within math mode:
+$$ 1233 < 1234 <%
+ < 1235 >%
+ > 1234 > 1233 $$
+\normalbrackets
+
+\makeatletter% we should use \frac with AmS
+\ifx\RIfM@\undefined%\ifx\csname amsmath.sty\endcsname\relax
+ \long\def\text#1{#1}\long\def\frac#1#2{{#1\over#2}}
+\fi
+\makeatother
+
+Let's verify also ($x < {\frac{1}{3}} < {\frac{1}{2}} > {\frac{1}{4}}$) :
+$$x < \frac{1}{3} < \frac{1}{2} > \frac{1}{4}$$
+and:
+
+ \text{\quad pour $|y| < \frac{111}{444}$}
+
+\bigskip
+The ``double punctuation'' should not have any effect
+in maths, which is obviously the case in the following
+English example:
+\NL1
+
+{\LARGE $$a := b, (c!n=m) \textrm{ ; vrai ?}$$}
+
+Though the text part of the formula has been typed
+via a command: \\
+\verb|\textrm{ ; vrai ?}|\\
+the french spacing doesn't apply here.
+
+\iflatex
+\subsection{The comma case}
+With \AllTeX{} standard (or with the special \FP\
+\verb|\regularmathcomma| the processing of comma is really specific.
+So, when you type in the following in display math mode:
+\regularmathcomma%
+\begin{verbatim}
+$$\textrm{La fonction}\ f(x,y)\
+ \textrm{ou le Vecteur}\ V(x, y, z)$$
+$$Total=1,255\,\$\ ou\
+ 1\,500,00\,\textrm{EUR}$$
+\end{verbatim}
+you will get thin spaces after the commas,
+no matter spaces are given or not in the \TeX\ source:
+$$\textrm{La fonction}\ f(x,y)\
+ \textrm{ou le Vecteur}\ V(x, y, z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{EUR}$$
+(which shows a french typesetting error for
+the relative numbers).
+\frenchmathcomma
+\fi%
+
+\iflatex
+\newpage\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+Par contre avec \FP\ on n'obtient
+aucun espacement suppl\'{e}mentaire :
+$$\textrm{La fonction}\ f(x,y)\
+ \textrm{ou le Vecteur}\ V(x, y, z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{EUR}$$
+cela est d\^{u} \`{a} l'option \verb|\frenchmathcomma| qui est
+activ\'{e}e par d\'{e}faut avec \FP.
+Mais cela montre alors une anomalie de composition
+dans les listes $(x,y,z)$.
+
+Si l'on veut des espaces il faut alors les indiquer
+explicitement, comme cela est l'usage, plus
+g\'{e}n\'{e}ralement, en mode math\'{e}matique :
+\begin{versatim}
+$$\textrm{La fonction}\ f(x,\,y)\
+ \textrm{ou le Vecteur}\ V(x,\,y,\,z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{EUR}$$
+\end{versatim}
+ce qui donnera :
+$$\textrm{La fonction}\ f(x,\,y)\
+ \textrm{ou le Vecteur}\ V(x,\,y,\,z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{EUR}$$
+
+\medskip
+
+On notera que \FP\ ob\'{e}it \`{a} l'extension \texttt{icomma}
+lorsque cette derni\`{e}re est charg\'{e}e avant \FP, mais
+seulement en fran\c{c}ais.
+
+
+\newpage\english
+With the \FP\ package there is no space added
+at all:
+\frenchmathcomma%
+$$\textrm{La fonction}\ f(x,y)\
+ \textrm{ou le Vecteur}\ V(x, y, z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{EUR}$$
+this is due to the option \verb|\frenchmathcomma| which is
+defaultly activated in the \FP\ package.
+People will then distinguish a typesetting error
+in the lists $(x,y,z)$.
+
+If you want spaces you should then give them to \TeX\
+explicitely, as usually done, more generally in math mode:
+\begin{verbatim}
+$$\textrm{La fonction}\ f(x,\,y)\
+ \textrm{ou le Vecteur}\
+ V(x,\,y,\,z)$$
+$$Total=1,255\,\$\ ou\
+ 1\,500,00\,\textrm{EUR}$$
+\end{verbatim}
+which will give:
+$$\textrm{La fonction}\ f(x,\,y)\
+ \textrm{ou le Vecteur}\ V(x,\,y,\,z)$$
+$$Total=1,255\,\$\ ou\ 1\,500,00\,\textrm{EUR}$$
+\fi
+
+You should notice that \FP\ respect the choice of
+the \texttt{icomma} package when that last one is loaded before
+\FP; but it only applies in French.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\section{Mon antislash est \mdseries\texttt{\backslash}}
+
+L'antislash n'existe pas dans toutes les polices en OT1.
+Que vous utilisiez \verb|\backslash| ou \verb|\textbackslash|
+vous obtiendrez la m\^{e}me chose, ainsi
+en romain droit on obtient :
+
+textbackslash=\textbackslash
+
+backslash=\backslash
+
+\noindent
+mais avec la fonte tt on obtient :
+
+{\tt
+textbackslash=\textbackslash
+
+backslash=\backslash
+}
+\NL2
+
+\section{Notes de bas de page}
+
+\iflatex\makeatletter\xdef\countSAVED{\the\c@footnote}\makeatother\fi
+\long\def\XX{%
+ Num\'{e}rotation normale\footnote{Une note normalement num\'{e}rot\'{e}e.}.
+ {\setcounter{footnote}{0}
+ \renewcommand{\thefootnote}{\fnsymbol{footnote}}
+
+ Voici une note\footnote{Premi\`{e}re note.}
+ puis une autre\footnote{Deuxi\`{e}me note.}
+ puis encore une autre\footnote{Troisi\`{e}me note.}
+ }}
+
+Nous comparons ici la composition des notes de bas de page
+(avec et sans \verb|\fnsymbol|)
+dans une langue et dans l'autre. Voyons ce que cela donne :
+
+\XX
+
+\newpage\english
+\section{My antislash is \mdseries\texttt{\textbackslash}}
+
+The antislash glyph doesn't exist in all OT1 font.
+Whatever you use, \verb|\backslash| or \verb|\textbackslash|
+you will obtain the same output, so
+in upright roman you obtain:
+
+textbackslash=\textbackslash
+
+backslash=$\backslash$
+
+\noindent
+but with the tt font you obtain:
+
+{\tt
+textbackslash=\textbackslash
+
+backslash=$\backslash$
+}
+
+\noindent
+but \verb|\backslash| is only available in
+math mode.
+
+\section{Compared footnotes}
+
+We compare the typesetting of footnotes
+(with and without \verb|\fnsymbol|)
+in one language versus the other. Let's look at them.
+
+\iflatex\makeatletter\c@footnote=\countSAVED\makeatother\fi
+
+\XX
+\iflatex\makeatletter\c@footnote=\countSAVED\makeatother\fi
+\addtocounter{footnote}{1}
+\NL1
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+
+\section{\mdseries\texttt{\textbackslash guillemetsinarrays}}
+
+Avec \FP\ l'utilisation de guillemets \`{a} la
+fran\c{c}aise en mode texte dans les environnements \texttt{array} ou
+\texttt{eqnarray} est possible
+mais il est n\'{e}cessaire de prot\'{e}ger les op\'{e}rateurs
+inf\'{e}rieur (\texttt{<}) et sup\'{e}rieur (\texttt{>}) lorsqu'ils terminent
+une colonne. On rajoute alors une paire d'accolades ou \verb|\relax|
+pour terminer la macro-commande :
+\begin{verbatim}
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a & \protect< &b\\
+a & b &<\\
+a & >{} &c\\
+<{}& << >> &c\\
+<{}& \textrm{<< text >>}&c
+\end{array}
+$
+\end{verbatim}
+
+\noindent ce qui donne :
+
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a & \protect< &b\\
+a & b &<\\
+a & >{} &c\\
+<{}& << >> &c\\
+<{}& \textrm{<< text >>}&c
+\end{array}
+$
+
+\medskip
+On peut \'{e}viter d'avoir \`{a} modifier des tableaux existants et dans ce
+cas on codera \verb|\no|\-\verb|guil|\-\verb|lemetsinarrays| :
+
+\begin{verbatim}
+\noguillemetsinarrays
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a & < &b\\
+a & b &<\\
+a & > &c\\
+< & << >> &c\\
+< & \textrm{<< text >>}&c
+\end{array}
+$
+\end{verbatim}
+
+\noindent ce qui donne alors :
+
+\noguillemetsinarrays
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a & < &b\\
+a & b &<\\
+a & > &c\\
+< & << >> &c\\
+< & \textrm{<< text >>}&c
+\end{array}
+$
+\guillemetsinarrays% reset default
+
+\newpage\english
+\section{Guillemets in arrays}
+The \FP\ package allows people to print french guillemets
+in \texttt{array} environments (but in text mode). This usually breaks
+the code for \texttt{<} or \texttt{>} when they finish an array slot.
+So you should protect them; like this:
+\NL2
+
+\begin{verbatim}
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a & \protect< &b\\
+a & b &<\\
+a & >{} &c\\
+<{}& \textrm{<< text >>}&c
+\end{array}
+$
+\end{verbatim}
+\NL1
+
+\noindent which gives:
+
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a & \protect< &b\\
+a & b &<\\
+a & >{} &c\\
+<{}& \textrm{<< text >>}&c
+\end{array}
+$
+\NL1
+
+\medskip
+
+One can avoid to modify existing arrays and then just say
+\verb|\noguillemetsinarrays| but this command is not
+interesting in English because the problem doesn't exist
+at all:
+
+\begin{verbatim}
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a & < &b\\
+a & b &<\\
+a & > &c\\
+< & \textrm{<< text >>}&c
+\end{array}
+$
+\end{verbatim}
+\NL1
+
+\noindent gives the following result:
+
+\def\GOfrench{\let\ifCLA\iffalse}% To allow dmy and frencht to compile
+\ifx\ifCLA\undefined\expandafter\GOfrench\fi% without error.
+$
+\begin{array}{ccc}
+a & \inferieura &b\\
+a &
+\ifCLA\expandafter\protect\fi% To allow \ConstantLayout test file.
+< &b\\
+a & b &<\\
+a &
+\ifCLA\expandafter\protect\fi% To allow \ConstantLayout test file.
+> &c\\
+\ifCLA\expandafter\protect\fi% To allow \ConstantLayout test file.
+< & \textrm{<< text >>}&c
+\end{array}
+$
+\NL1
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+
+\noguillemetsinarrays% for continuation of column
+Cette commande est aussi valable pour les environnements
+\texttt{eqnarray} :
+
+\begin{eqnarray}
+a & < &b\\
+a & > &c\\
+< & << >> &c\\
+< & \textrm{<< text >>}&c
+\end{eqnarray}
+
+Pour terminer je r\'{e}tablis la valeur par d\'{e}faut :
+\verb|\guillemetsinarrays|
+\guillemetsinarrays
+et si j'essaye le m\^{e}me exemple j'obtiendrais
+le message : \\
+{\makeatletter\let\@PreserveBraces={% uggly hack for plain
+\vers|! Argument of \@PreserveBraces has an|\\
+\vers|extra }.|
+}% closing hack.
+
+\section{Guillemets verbatim}
+
+Avec l'option \verb|\nofrenchguillemets| il est possible
+--~si \FP\ travaille en codage de fonte du genre \texttt{T1}
+{\makeatletter\def\GOfrench{T1}\ifx\GOfrench\f@encoding\else
+(mais ca ne semble pas \^{e}tre le cas ici)\fi}%
+~--
+\nofrenchguillemets
+d'imprimer des guillemets 8-bits en verbatim : \verb|<< >>|.
+\frenchguillemets
+
+\iflatex
+\section{Environnement guillemets exclus}
+
+\begin{versatim}
+\guillemets{} Je me suis dit que :
+<< avec l'option [...] les guillemets
+sont inop\'{e}rants. \endguillemets{}
+\end{versatim}
+\SmsG
+\noeveryparguillemets
+\guillemets{}
+\verb|[\guillemets{}]| Je me suis dit que :
+<< avec l'option \vers|\noevery|\-\vers|par|\-\vers|guillemets|
+on ne doit pas avoir un environnement qui se termine avant la fin
+du paragraphe. C'est pourquoi l'environnement \texttt{guillemets}
+n'est plus autoris\'{e} dans ce cadre.
+D\'{e}sormais un message est \'{e}mis et ces environnements
+guillemets sont inop\'{e}rants. \endguillemets{}
+
+On note que \verb|\guillemets{}| n'a aucun effet visible
+et que le d\'{e}but de paragraphe est forc\'{e} aux premiers
+caract\`{e}res-guillemets ouvrants qui suivent. Le
+\verb|\endguillemets{}| de fin d'environnement ferme cependant
+le paragraphe.
+
+\guillemets [\verb|\guillemets{}|]\!
+Ces environnements exclus dans le cadre de cette option
+ peuvent \^{e}tre de premier ou
+/\guillemets{} deuxi\`{e}me \endguillemets{}/ niveau
+comme ici (slashs). [\verb|\endguillemets{}|]
+\endguillemets{}
+
+\FmsG
+\frenchguillemets
+\fi%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\english
+Notice that with standard \LaTeX\ you obtain a message
+saying that \verb|\guillemotleft| and \verb|\guillemotright|
+are invalid in math mode when you try to use guillemets
+in an \texttt{array} environement.
+\NL{9}
+
+\smallskip
+
+\section{Verbatim Guillemets}
+
+The 8bit french guillemets chars printed within
+a verbatim environnement give here: \verb|<< >>|
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\section{Utilisation de la \mdseries\texttt{toc}}
+
+Il n'est pas pr\'{e}vu de pouvoir composer une table des mati\`{e}res ou un
+sommaire dans plus d'une langue.
+On notera que \verb|\sommaire| est un apport de \FP.
+
+\section{Fichiers {\mdseries\texttt{lof}} et {\mdseries\texttt{lot}}}
+On v\'{e}rifie ici que la ponctuation fran\c{c}aise n'a pas cr\'{e}\'{e}
+d'ennui particulier.
+Nous avons laiss\'{e} en blanc la figure \ref{x<<:;!?>>x}
+qui n'est qu'un simple
+test. De m\^{e}me le tableau \ref{y`<<:;!?>>'y} n'est l\`{a} que pour
+cr\'{e}er une entr\'{e}e dans la liste des tableaux.
+
+Le {\em caption} de la figure
+\ref{x<<:;!?>>x}
+ doit appara\^{\i}tre com\-me ceci :
+ {\it << essai >> ; 2 cm ! pourquoi pas ?}
+\begin{figure}[h]
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\%\vspace*{2cm}
+\ \\
+\ Peu importe la figure...\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption{<< essai >> ; 2 cm ! pourquoi pas ?
+ \protect\\ (cf. aussi le tableau \ref{frenchdactylo})}
+\label{x<<:;!?>>x}
+\end{figure}
+
+Le {\em caption} du tableau
+\ref{y`<<:;!?>>'y}
+ doit \^{e}tre comme ceci :
+{\it ` << essai >> ; 2 cm ! pourquoi pas ? '}
+\begin{table}[h]
+\caption{` << essai >> ; 2 cm ! pourquoi pas ? '
+ \protect\\ (cf. aussi le tableau \ref{frenchdactylo})}
+\label{y`<<:;!?>>'y}
+
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ Peu importe le tableau\footnote{Une note de tableau.}...\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+
+On notera les libell\'{e}s ({\sc Fig.} et {\sc Tab.}) plus confor\-mes \`{a}
+l'usage fran\c{c}ais. Ne pas oublier non plus que les titres de tableaux sont
+toujours plac\'{e}s, en fran\c{c}ais, avant ceux-ci contrairement aux figures.
+
+\FP\ ne pr\'{e}voit pas que l'on puisse composer une
+partie des tables des figures (ou tableaux) en fran\c{c}ais et une autre
+en anglais par exemple. Les fichiers \verb|.lof| et \verb|.lot| seront
+donc compos\'{e}s enti\`{e}rement dans la langue pr\'{e}s\'{e}lectionn\'{e}e.
+
+\newpage\english
+\section{{\mdseries\texttt{toc}} file use}
+No facility is given to typeset the \verb|.toc| in various languages.
+
+Notice that \verb|\sommaire| is a new command brought up with this
+package.
+
+\section{{\mdseries\texttt{lof}} and {\mdseries\texttt{lot}} files}
+Same test in English just to verify that our french modifications
+does not affect the text in English.
+
+You will notice, of course, that the caption names are re-established
+to their original values ({\bf figure} and {\bf table}).
+
+The following figure (not referable) %(\ref{ex<<:;!?>>ex})
+caption must look like:
+<< essai >>; 2 cm! Why not?
+\begin{figure}[h]
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ No matter how is the figure$\ldots{}$\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption{<< essai >>; 2 cm! Why not?
+ \protect\\ (cf. also the table \ref{frenchdactylo})}
+%\label{ex<<:;!?>>ex}% produit un missing \endcsname
+\end{figure}
+
+The {\em caption} of the table (not referable) %\ref{ey`<<:;!?>>'ey}
+must look like:
+` << essai >>; 2 cm! Why not? '
+\begin{table}[h]
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ No matter how is the table\footnotemark% \footnotetext est perdu !
+ $\ldots{}$\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption{` << essai >>; 2 cm! Why not? '
+ \protect\\ (cf. also the table \ref{frenchdactylo})}
+%\label{ey`<<:;!?>>'ey}% generates missing \endcsname
+\end{table}\footnotetext{A note from a table.}
+\NL1
+
+Notice that we have here the standard caption names used by \LaTeX{}.
+
+You can see in the French column the specific labels and places of caption
+titles (under the figure but over the table).
+
+Don't try to compose \verb|.lof| and \verb|.lot| files in more than one
+language, it's not designed in this (stupid?) way!
+
+\french
+\begin{table*}[tb]
+\caption{` << essai >> ; 2 cm ! pourquoi pas ? '
+ (cf. aussi le tableau \ref{frenchdactylo})}
+\label{2`<<:;!?>>'2}
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ Peu importe le tableau sur deux colonnes%
+\footnote{Une note de tableau.}...\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\end{table*}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Encore un tableau...}
+Mais celui-ci est sur deux colonnes si l'option
+\verb|twocolumn| est active. V\'{e}rifions simplement
+que le traitement est le m\^{e}me qu'en une seule
+colonne.
+
+Le {\em caption} du tableau
+\ref{2`<<:;!?>>'2}
+ doit \^{e}tre comme ceci :
+{\it ` << essai >> ; 2 cm ! pourquoi pas ? '}
+
+\section{\sloppy Encore {\mdseries\texttt{\textbackslash labelsinmargin}}}
+
+\`{A} nouveau nous utilisons \verb|\labelsinmargin|
+\labelsinmargin
+pour v\'{e}rifier son fonctionnement dans une figure
+et un titre de figure
+
+\begin{figure}[h]
+\label{label de la figure}
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ Peu importe la figure...\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption{le titre de la figure avec label
+\label{label du titre fig.}}
+\end{figure}
+
+M\^{e}me test avec un tableau :
+\begin{table}[h]
+\label{label du tableau}
+\caption{le titre du tableau avec label\label{label du titre tab.}}
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ Peu importe le tableau...\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+
+\sloppypar{
+D\'{e}sactivons d\'{e}finitivement l'option
+avec \verb!\nolabelsinmargin!.
+}
+\nolabelsinmargin
+
+\newpage\english
+\NL8
+\section{{\mdseries\texttt{\textbackslash labelsinmargin}} again}
+
+Again we test \verb|\labelsinmargin|
+\labelsinmargin
+to verify that it is running within a figure
+and in a figure's caption.
+
+\begin{figure}[h]
+\label{label in a figure}
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ No matter the figure$\ldots{}$\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption{title with a label\label{label in fig. caption}}
+\end{figure}
+
+Same test with a table:
+\begin{table}[h]
+\label{label in a table}
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+\ \\
+\ No matter the table$\ldots{}$\\
+\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption{title with a label\label{label in a tab. caption}}
+\end{table}
+
+Disactivate definitely the option with \verb!\nolabelsinmargin!.
+\nolabelsinmargin
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+
+\section{Notes dans \mdseries\texttt{\textbackslash caption}}
+
+Si une note dans un tableau doit \^{e}tre imprim\'{e}e \`{a} la fin du
+tableau, une note dans un titre de tableau doit \^{e}tre
+imprim\'{e}e en fin de page. Malheureusement \LaTeX{} perd
+le texte des notes dans les environnements {\tt figure} et
+{\tt table}. L'ex\-ten\-sion \FP\ pr\'{e}vient l'utilisateur
+que le texte doit \^{e}tre r\'{e}ins\'{e}r\'{e} \`{a} l'aide de \verb|\footnotetext|.
+
+\begin{table}[h]
+
+\SmsG%
+\caption[Essai de footnote dans un caption de tableau]
+ {L\'{e}gende\protect\footnote{Une note de bas de page.}}
+\FmsG%
+
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+%\ \\
+\ Peu importe le tableau...\\
+%\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+\footnotetext{Une note de bas de page.}
+
+\section{{\mdseries\texttt{\textbackslash caption}} vide}
+
+\begin{table}[h]
+\caption{}
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+%\ \\
+\ Tableau sans l\'{e}gende\\
+%\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+
+\section{\mdseries\texttt{\textbackslash nombre}}
+
+Les nombres en fran\c{c}ais sont imprim\'{e}s correctement lorsque l'on
+utilise \verb|\nombre|, ainsi :
+
+\begin{verbatim}
+\nombre{123 456,123 456}
+\end{verbatim}
+imprime \nombre{123 456,123 456} au lieu de la forme habituelle
+ {\regularmathcomma $123 456,123 456$}
+ou \mbox{123 456,123 456} suivant que l'on est en mode math
+ou en mode texte.
+
+On y voit des espaces fines \`{a} chaque millier et (normalement)
+une virgule sans espace suppl\'{e}mentaire comme cela se produit
+en mode math avec \TeX{} standard.
+
+\section{Autre chose ?}
+Non !
+
+[espace libre utilisable]
+
+\newpage\english
+
+\section{Notes within \mdseries\texttt{\textbackslash caption}}
+
+Normally in French we print table's footnotes at the end of the table
+but it can't be the case when a footnote is called from a caption title.
+But unfortunately footnote's text is lost when inside a \LaTeX{} figure
+or table environnement, as shown here.
+Thus {\tt french.sty} warn the user with the appropriate message, but
+in English nothing is done.
+
+\begin{table}[h]
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+%\ \\
+\ No matter the table$\ldots{}$\\
+%\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption[footnote try within a table's caption]
+ {Caption title\protect\footnote{A footnote page.}}
+
+\end{table}
+%\footnotetext{A footnote page.}
+
+\section{Empty \mdseries\texttt{\textbackslash caption}}
+
+\begin{table}[h]
+\begin{center}
+\begin{tabular}{|c|}
+\hline
+\ \hfill \ \\
+%\ \\
+\ Empty caption\\
+%\ \\
+\ \\
+\hline
+\end{tabular}
+\end{center}
+\caption{}
+\end{table}
+
+\section{\mdseries\texttt{\textbackslash nombre}}
+
+French number should be correctly printed using
+\verb|\nombre|, so :
+
+\begin{verbatim}
+\nombre{123 456,123 456}
+\end{verbatim}
+should not print as usual
+$123 456,123 456$ nor \mbox{123 456,123 456}
+(depending you are in math or in text mode)
+but $123\,456{,}123\,456$.
+\NL1
+
+We see here thin spaces between each thousand part and no
+(usual) space after the comma (as it is in math with standard
+\TeX{}).
+
+\smallskip
+
+\section{Anything else?}
+
+No!
+
+\noindent
+[free space to reuse]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\section{Le 1\protect\fup{er} paragraphe}
+Notez bien que le 1\fup{er} paragraphe d'une section
+ne commence jamais au fer \`{a} gauche
+en fran\c{c}ais, comme vous le voyez ici.
+
+Le deuxi\`{e}me paragraphe d\'{e}marre comme le premier...\footnote{%
+La typographie du titre de section (1\fup{er}) est \`{a} noter ;
+ {\tt mysmaller.sty} a \'{e}t\'{e} utilis\'{e}
+\`{a} la compilation de {\tt frenchrf} avec \LaTeX{}.
+Il existe aussi l'extension {\tt relsize} qui fonctionne
+bien avec \FP.}
+
+\section{Test des listes}\label{listes}
+
+Voici un test d'\'{e}num\'{e}ration (\verb|itemize|) de \LaTeX{} :
+
+\begin{itemize}
+\item liste de niveau 1 ;
+ \begin{itemize}
+ \item incluant un niveau 2,
+ \begin{itemize}
+ \item mais aussi un niveau 3,
+ \item peu utilis\'{e} ;
+ \end{itemize}
+ \item le niveau 2 se terminant ici ;
+ \end{itemize}
+\item suite de la liste de niveau 1 ;
+\item dernier \'{e}l\'{e}ment de niveau 1.
+\end{itemize}
+
+On remarquera les deux choses suivantes :
+\primo les marqueurs sont identiques quel que soit
+le niveau et \secundo aucun \'{e}l\'{e}ment ne commence par une majuscule.
+\NL2
+
+\section{D\'{e}finition de langue}
+
+On peut se d\'{e}finir une langue comme par exemple le kathmandouais par : \\%
+\verb|\NouveauLangage[2]|\verb|{kathmandouais}|\\%
+\global% for TeX--XeT tests
+\def\kathmandouaisTeXmods{\empty}
+ \NouveauLangage[2]{kathmandouais} %
+et ensuite on peut \'{e}crire kathmandouais en tapant :
+\verb|\kathmandouais|
+\SmsG%
+\kathmandouais%Message a ignorer si vous n'avez que 2 langues definies.
+bla... blabla... bla%
+\typeout{I AM WRITING KATMANDOUAIS, Ye\string! (language=\the\language)}%
+\FmsG%
+\footnote{Mais bien entendu les c\'{e}sures ne seront pas bonnes car elles
+seront faites \`{a} partir d'un language existant. On notera la typographie
+du num\'{e}ro de cette note saisie en {\em Katmandouais}.}
+ et revenir au fran\c{c}ais par
+\verb|\french|\french%
+\footnote{Si le point qui suit n'est pas accol\'{e} au mot {\tt french}
+alors cela signifie que des {\em blank space} tra\^{\i}nent dans
+\FP.}.
+S'il n'y a pas de commande \verb|\kathmandouaisTeXmods| de d\'{e}finie
+rien ne se passera
+vraiment, cela sera \'{e}quivalent \`{a} \verb|\relax|, seul un message
+d'avertissement sera \'{e}mis.
+
+\newpage\english
+\section{First paragraph}
+In English each paragraph is indented except the first one of a section,
+subsection, etc. as you can see in this example.
+
+Subsequent paragraphs start indented$\ldots{}$\NL1
+
+\section{Itemized lists}
+Here is the same french \verb|itemize| list:\NL1
+
+\begin{itemize}
+\item liste de niveau 1;
+ \begin{itemize}
+ \item incluant un niveau 2,
+ \begin{itemize}
+ \item mais aussi un niveau 3,
+ \item peu utilis\'{e} ;
+ \end{itemize}
+ \item le niveau 2 se terminant ici ;
+ \end{itemize}
+\item suite de la liste de niveau 1 ;
+\item dernier \'{e}l\'{e}ment de niveau 1.
+\end{itemize}
+
+You can compare english and french lists.
+Notice firstly that item markers are identical at each level and secondly
+that each item never starts with an uppercase letter.
+
+\section{Create a language}
+There is a new control sequence to allow {\em the creation} of new language:\\
+\verb|\NouveauLangage[n]{language}|\\
+This command is in fact used internally but it can be also used elsewhere
+to define a new language which rules will be set by:\\
+ \verb|\<language>TeXmods| (if defined.) The internal language number \verb|n|
+tells \TeX{} what hyphenation table is to use among those defined at
+\verb|INITEX| time.
+
+\begin{table*}[th]% pour la page suivante
+\begin{center}
+\fbox{Attention : psfig est p\'{e}rim\'{e} ; il n'est utilis\'{e} ici
+ qu'\`{a} des fins de test.}
+\end{center}
+\end{table*}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\section{Caract\`{e}res actifs}
+Quelques jeux de macros doivent parfois \^{e}tre charg\'{e}s
+directement dans le document
+et utilisent les caract\`{e}res {\em actifs\/} de \FP. Il y
+a alors conflit ouvert. Plusieurs solutions sont offertes, soit utiliser
+l'ordre : \\
+\verb| \originalinput{fichier}|\\
+ soit :
+\begin{verbatim}
+ \begin{nonfrench}
+ ... macros-instructions...
+ \end{nonfrench}
+\end{verbatim}
+Nous avons adopt\'{e} la deuxi\`{e}me solution ici :
+
+\tthyphenation
+\begin{versatim}
+Saluons au passage Trevor Darrell, l'auteur de \verb|psfig| :
+ \begin{nonfrench}
+ \let\psfig\undefined
+ \input mypsfig.sty
+ \begin{center}
+ \ \hbox{\vbox{\psfig{figure=%
+ myfigure.ps,height=1in}}}\
+ \end{center}
+ \end{nonfrench}
+\end{versatim}
+
+Saluons au passage Trevor Darrell, l'auteur de \verb|psfig| :
+\begin{nonfrench}
+ \let\psfig\undefined
+ \input mypsfig.sty
+ \begin{center}
+ \ \hbox{\vbox{\psfig{figure=%
+ myfigure.ps,height=1in}}}\
+ \end{center}
+\end{nonfrench}
+Mais attention n'utilisez pas en fran\c{c}ais un code que
+vous auriez charg\'{e}
+en anglais ou r\'{e}ciproquement !
+
+En fait, l'extension \FP\ est compatible avec \verb|psfig|.
+En voici l'exemple -- sans utiliser \verb|nonfrench| -- avec
+\verb|\psdraft| :
+ \let\psfig\undefined
+ \input mypsfig.sty
+ \psdraft
+ \begin{center}
+ \ \hbox{\vbox{\psfig{figure=%
+ myfigure.ps,height=1in}}}\
+ \end{center}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\english
+\section{Active characters}
+Codes that were designed for English might bring problems when used with
+\FP\ because few characters are {\em activated\/}.
+Few solutions are offered, either:\\
+\verb| \originalinput{file}|
+
+or:
+\begin{verbatim}
+ \begin{nonfrench}
+ ... macros-instructions...
+ \end{nonfrench}
+\end{verbatim}
+We used here the second solution:
+\begin{verbatim}
+Saluons au passage Trevor Darrell,
+ l'auteur de \verb|psfig| :
+ \begin{nonfrench}
+ \let\psfig\undefined
+ \input mypsfig.sty
+ \begin{center}
+ \ \hbox{\vbox{\psfig{figure=%
+ myfigure.ps,height=1in}}}\
+ \end{center}
+ \end{nonfrench}
+\end{verbatim}
+
+\notthyphenation
+Saluons au passage Trevor Darrell, %
+ l'auteur de \verb|psfig| :
+%\begin{nonfrench}% inutile d'obtenir un message de warning
+ \let\psfig\undefined
+ \input mypsfig.sty
+ \begin{center}
+ \ \hbox{\vbox{\psfig{figure=%
+ myfigure.ps,height=1in}}}\
+ \end{center}
+%\end{nonfrench}
+But be carefull, don't use in French a code that was loaded in English
+or reciprocally!
+\NL1
+
+In fact the \FP\ is fully compatible with \verb|psfig| once
+\FP\ starts working i.e. after the
+\vers|\|\vers|begin{document}|.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+
+\section{Abr\'{e}viations}
+\abbreviations
+Si on demande \verb|\abbreviations| alors on a
+acc\`{e}s \`{a} un fichier d'abr\'{e}\-via\-tions
+typo\-graphi\-ques fran\c{c}aises.
+Ainsi je saisis \verb|"monseigneur"| et j'imprime "monseigneur"\!.
+De m\^{e}me, avec ML\TeX{} je saisis \verb|"deuxi\`{e}me"|
+(v\'{e}rifiez dans le
+source que ce mot est bien cod\'{e} en 8bits) et j'imprime "deuxi\`{e}me"\!%
+. %alors que le fichier d'abr\'{e}viations contient \verb|"deuxi\`|\verb|eme"|.
+Ainsi il n'est plus vraiment indispensable de se rappeler que
+l'abr\'{e}viation de madame est "madame" (et ma\^{\i}tre : "ma\^{\i}tre"\!).
+
+Lorsqu'un mot ne figure pas dans le fichier d'abr\'{e}viations, il est alors
+imprim\'{e} tel que. Ainsi \verb|"GUTenberg"| imprimera
+\SmsG%
+"GUTenberg".
+\FmsG%
+ Mais n'oubliez jamais le double guillemet fermant sinon vous obtiendrez
+ un message du genre :
+\begin{versatim}
+ Paragraph ended before \AbbrevName was complete.
+\end{versatim}
+
+Je peux aussi donner mon fichier personnel d'abr\'{e}viations en codant :\\
+\verb|\abreviations[mon_fichier_personnel]|
+
+On retire ces possibilit\'{e}s par la commande \verb|\noabbreviations|.
+N'oublions pas que le caract\`{e}re \verb|"| sert normalement en \TeX{}
+comme en \LaTeX{} \`{a} exprimer les nombres en hexad\'{e}cimal.
+
+\section{Monsieur s'abr\`{e}ge "Monsieur"}
+
+Que je saisisse \verb|"Monsieur"| ou \verb|"monsieur"|
+j'obtiens la m\^{e}me abr\'{e}viation : "Monsieur" ou "monsieur", respectivement.
+
+Il n'en est pas toujours de m\^{e}me... ainsi lorsqu'on saisit
+\verb|"Num\'{e}ro"| et \verb|"num\'{e}ro"| on obtient respectivement :
+"Num\'{e}ro" et "num\'{e}ro", car \verb|Num\'{e}ro|
+est une entr\'{e}e dans le fichier des abbr\'{e}viations o\`{u} il est \'{e}crit
+\verb|{Num\'{e}ro}|.
+
+Il est d\'{e}sormais possible de placer une abr\'{e}viation dans un titre
+de chapitre ou de section, comme le titre de cette section le
+d\'{e}montre ; nous avons saisi :
+\begin{verbatim}
+\section{Monsieur s'abr\`{e}ge "Monsieur"}
+\end{verbatim}
+
+\noabbreviations
+
+\newpage\english
+
+\section{Abbreviations}
+The abbreviation facility offered in \FP\ is based on
+an abbreviations file. When requested by \verb|\abbreviations| one
+may call any \verb|"abbreviation"|. If this abbreviation is found in the
+file it will be replaced by the typographic expansion, if not it will
+be printed as is.\NL2
+
+But never forget the ending double quotes otherwise you will obtain the
+terrible message:
+{\tt Paragraph} {\tt ended before} \texttt{\textbackslash AbbrevName}
+{\tt was complete.}
+\NL4
+
+You can have your own abbreviations file by calling:
+\verb|\abreviations[my_file]|.\NL1
+
+Saying \verb|\noabbreviations| this facility is lost. Remember that the
+char \verb|"| is used normally in \TeX{} as in \LaTeX{} to start an
+hexadecimal number.
+
+But used in English, \verb|"monsieur"| will give "monsieur"%
+\footnote{Notice the quoting!}.
+
+\newpage\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Autres macros utiles}
+\verb|\fsc{KnUtH}| permet d'imprimer \fsc{KnUtH} et \verb|\lsc{SnCf}|
+donne \lsc{SnCf}. Cela doit aussi marcher si le mot commence par une
+accentuation comme ici avec le mot \fsc{\'% a laisser tq a cause du 7bits
+epinal} et m\^{e}me quand cette accentuation est plus loin dans
+le mot comme ici dans \fsc{ANDR\'% a laisser tq a cause du 7bits
+E}.
+
+\bigskip
+Voici une note%
+\footnote{La note.\label{NOTE}}
+de bas de page command\'{e}e par \verb|\footnote{La note.\label{NOTE}}|.
+Je peux faire \`{a} nouveau appel \`{a} cette note\refmark{NOTE}
+ par l'ordre \verb|\refmark{NOTE}|.
+
+\bigskip
+Par analogie avec l'environnement \verb|verse| :
+\begin{verse}
+%\moretolerance % pour eviter un leger overfull hbox
+1\iere{} ligne : cette ligne est bien trop longue, elle doit \^{e}tre coup\'{e}e autant de fois que n\'{e}cessaire...\\
+2\ieme{} ligne : le test terrible de...\\%
+3\ieme{} ligne : `ceci est le test des quotes'\\
+\end{verse}
+\tthyphenation
+voici le m\^{e}me test (sans \verb|\\|)
+avec l'environnement \vers|versatim| qui est
+un environnement \vers|verba|\-\vers|tim| compos\'{e}
+avec des coupures de lignes
+comme l'est l'environnement \verb|verse| et dont les {\em quotes} peuvent
+\^{e}tre imprim\'{e}es avec des accents si on pr\'{e}cise
+\vers|\noenglishquote| :
+\noenglishquote
+\begin{versatim}
+1\iere{} ligne : cette ligne est bien trop longue, elle doit \^{e}tre coup\'{e}e autant de fois que n\'{e}cessaire...
+2\ieme{} ligne : le test terrible de \end{document}
+3\ieme{} ligne : `ceci est le test des quotes'
+\end{versatim}
+\englishquote
+
+\allowuchyph
+Et maintenant voici l'ordre r\'{e}duit \verb|\vers| qui
+s'utilise comme \verb|\verb| et doit permettre de couper une
+longue cha\^{\i}ne de caract\`{e}res \texttt{ver\-batim}. Celle-ci
+sera coup\'{e}e par d\'{e}faut entre les mots (\vers|\notthyphe|\-\vers|nation|)
+mais pourra l'\^{e}tre \`{a} l'int\'{e}rieur des mots si on pr\'{e}cise
+\tthyphenation \vers|\tthyphe|\-\vers|nation| comme ici : <<
+\vers|Longue Cha\^{\i}ne De Caract\`{e}res \`{A} Couper Absolument| >>.
+Les mots commen\c{c}ant en majuscule ne pourront \^{e}tre coup\'{e}s
+que si \vers|\uchyph=1|, valeur par d\'{e}faut dans \FP\
+(\vers|\|\vers|allow|\-\vers|uchyph|) qui est utilis\'{e}e pour cette
+partie uniquement.
+
+\subsection*{Test de {\mdseries\texttt{\textbackslash fsc}}
+(\fsc{French CAPS})}
+Ce paragraphe teste la protection de certaines macro-instructions.
+
+\disallowuchyph\notthyphenation
+\newpage\english
+\section{Other useful macros}
+French patronymic names are printed in small capitals with the first
+letter in uppercase. That is done with the \verb|\fsc| macro.
+Another macro \verb|\lsc| is available to print all the word(s) in small
+capitals, specially usefull for trademark or companies names.
+
+\LaTeX{} is at the current time unable to print a \verb|\ref| as
+a footnotemark, the command \verb|\refmark| is able to do that.
+
+Also, \LaTeX{} doesn't offer any {\tt verbatim} style able to
+hyphenate lines. \FP\ is able to do this with the
+environment {\tt versatim} or the \texttt{\textbackslash vers} order within a
+line.
+
+These environments allow to replace the {\tt tt} quoting
+({\tt ` '}) by more realistic ones ({\tt\`{ } \'{ }}) with
+the order \texttt{\textbackslash noenglishquote}. Of course this environment
+produce nothing different from the standard \verb|verbatim| when
+used in \verb|\english|:
+{\overfullrule=5pt
+
+\hfuzz=30pt
+\begin{versatim}
+1\iere{} ligne : cette ligne est bien trop
+2\ieme{} ligne : le test terrible de...
+3\ieme{} ligne : `ceci est le test des...
+\end{versatim}
+
+\SmsG%
+
+And now this a test of a long string within a \verb|\vers|:
+``\vers|Longue Cha\^{\i}ne De Caract\`{e}res \`{A} Couper A|
+This string would be hyphenated only if someone said
+\verb|\tthyphenation| previously.
+}
+
+\FmsG%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\section{Accents et {\mdseries\tt tabbing}}
+\FP\ apporte une solution pour pouvoir introduire
+des lettres accentu\'{e}es dans un environnement \vers|tabbing| lorsque
+le source \TeX{} est en 7bits ou utilise Ml\TeX{}
+\footnote{%
+Cette option est aussi utile d\'{e}sormais en T1 car les lettres accentu\'{e}es
+sont traduites avec \FP, de fa\c{c}on interne, en 7-bits \`{a} la \TeX.
+ }%
+ ; c'est l'option par d\'{e}faut
+\vers|\|\vers|tabbing|\-\vers|accents|\tabbingaccents. L'exem\-ple :
+\begin{tabbing}
+Les TYPES : \= Les matieres \= Les genres \kill
+Bidon : \> d'huile \>$A'=B''$\` normal \\
+Caisse : \> \`%
+ a outils \> rustique \\
+Toile : \> \a`%
+ a matelas \> confort
+\end{tabbing}
+\notabbingaccents
+doit s'imprimer ainsi :
+\begin{tabbing}
+Les TYPES : \= Les matieres \= Les genres \kill
+Bidon : \> d'huile \>$A'=B''$\` normal \\
+Caisse : \>\a`a outils \> rustique \\
+Toile : \>\a`a matelas \> confort \\
+\end{tabbing}
+\vspace*{-0.5\baselineskip}
+Nous l'avions saisi comme suit :
+\begin{versatim}
+\begin{tabbing}
+Les TYPES : \= Les matieres \= Les genres \kill
+Bidon : \> d'huile \>$A'=B''$\` normal \\
+Caisse : \> \`%
+ a outils \> rustique \\
+Toile : \> \a`%
+ a matelas \> confort
+\end{tabbing}
+\end{versatim}
+
+\section{Figurettes}
+Le style \verb|french| propose un environnement sp\'{e}cial, appel\'{e}
+\verb|figurette|,
+ pour placer les figures \`{a} l'enfroit exact o\`{u}
+ces figures se pr\'{e}sentent
+dans le texte. Cela est particuli\`{e}rement utile pour des petites figures,
+domaine o\`{u} \LaTeX{} n'est pas adapt\'{e} en standard.
+Pour r\'{e}aliser ceci :
+ \begin{figurette}
+ \center\fbox{essai}\endcenter% rajoute pour plain TeX
+ \caption{Ceci est une figurette}
+ \label{figurette}
+ \end{figurette}
+Nous avons \'{e}crit :
+\begin{verbatim}
+ \begin{figurette}
+ \center\fbox{essai}
+ \caption{Ceci est une figurette}
+ \label{figurette}
+ \end{figurette}
+\end{verbatim}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\english
+\section{Diacritics \& {\mdseries\tt tabbing}}
+There is no way in a \LaTeX{} \texttt{tabbing} to put diacritics on letters
+as we use them usually. Here is how is printed the {\tt tabbing}
+you can find in the french part:
+
+\begin{tabbing}
+Les TYPES : \= Les matieres \= Les genres \kill
+Bidon : \> d'huile \>$A'=B''$\` normal \\
+Caisse : \> \`%
+ a outils \> rustique \\
+Toile : \> \`%
+ a matelas \> confort
+\end{tabbing}
+
+and that would normally be printed as follows:
+
+\begin{tabbing}
+Les TYPES : \= Les matieres \= Les genres \kill
+Bidon : \> d'huile \>$A'=B''$\` normal \\
+Caisse : \>\a`a outils \> rustique \\
+Toile : \>\a`a matelas \> confort \\
+\end{tabbing}
+
+ \begin{figurette}
+ \center\fbox{essai}\endcenter% rajoute pour plain TeX
+ \caption{Originally a figurette}
+ \label{engfig}
+ \end{figurette}
+\NL{4}
+
+\section{Little figures}
+
+\FP\ offers a special environment called
+\verb|figurette| which allows to put little figures EXACTLY
+where they appear in the text. This is a lack in the present
+versions of \LaTeX{}. In English the environment \verb|figurette|
+is replaced by an environment \verb|figure[h]|; look at figure
+\ref{engfig} we tried to put here without success and we
+typed like this:
+
+\begin{verbatim}
+ \begin{figurette}
+ \center\fbox{essai}
+ \caption{Originally a figurette}
+ \label{engfig}
+ \end{figurette}
+\end{verbatim}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\ifx\drapeaufg\undefined\else
+\section{Composition \protect\linebreak en drapeau}
+\`{A} gauche on trouve une composition justifi\'{e}e standard \LaTeX.
+Dessous, une composition avec l'environnement \texttt{drapeaufg}
+propos\'{e} par l'extension \FP, il s'agit d'une composition
+\emph{en drapeau, au fer} \`{a} gauche. \`{A} droite, il s'agit aussi d'une
+composition \emph{en drapeau, au fer} \`{a} gauche mais cette fois-ci avec
+l'environnement \texttt{drapeaufgIN}, sans coupure de mots, comme cela
+est recommand\'{e} par l'imprimerie nationale.
+
+\subsection{Tests ordinaires}
+\textbf{\large Texte justifi\'{e} de r\'{e}f\'{e}rence}
+
+\medskip
+\def\GOfrench{\noindent{\fboxsep 0pt\fboxrule 0.2pt\fbox{\advance\hsize by -2pt
+ \hbox{\vbox{\noindent
+<< Par ailleurs, les lignes n'occupant pas toute la
+ justification (titres ou l\'{e}gendes le plus souvent) peuvent \^{e}tre
+ \emph{centr\'{e}es} ou se pr\'{e}senter align\'{e}es verticalement
+ par la gauche sur la
+ marge de gauche de la page, ou \XX
+ verticalement par la droite sur la marge de
+ droite de la page. On dira alors qu'elles sont compos\'{e}es
+\emph{en drapeau, au fer} \`{a} gauche ou \emph{en drapeau, au fer} \`{a} droite.
+Dans ce type de composition, les coupures de mots sont proscrites et les
+rejets \`{a} la ligne devront ob\'{e}ir \`{a} une certaine logique souvent dict\'{e}e par le
+sens. Ainsi on ne s\'{e}parera pas l'article du substantif, le pronom personnel
+sujet de son verbe, l'adjectif num\'{e}ral du nom auquel il se \XX
+rapporte, \etc. >>
+(r\`{e}gles Imprimerie Nationale, p~153)%
+}}\hss}}}
+
+\let\XX\relax
+\GOfrench
+
+\hbox{}
+
+\textbf{\large Drapeau, au fer \`{a} gauche}
+
+\medskip
+\begin{drapeaufg}
+\GOfrench
+\end{drapeaufg}
+
+\newpage
+\enlargethispage{20pt}\hbox{}\smallskip
+
+\hbox{}\smallskip\NL5
+Dans ce dernier cas, des d\'{e}bordements dans la marge droite
+sont possibles ; ils sont \`{a} traiter
+au cas par cas par de simples coupures de lignes plac\'{e}es aux endroits
+recommand\'{e}s par l'imprimerie nationale (selon texte encadr\'{e}). Le
+dernier texte est ainsi corrig\'{e}.\NL3\vspace*{-2.5pt}
+
+\textbf{\large Drapeau << fg >>, selon IN}
+
+\medskip
+\begin{drapeaufgIN}
+\GOfrench
+\end{drapeaufgIN}
+
+\medskip
+\textbf{\large Drapeau << fg IN >>, corrig\'{e}}
+
+\medskip
+\let\XX\\
+\begin{drapeaufgIN}
+\GOfrench
+\end{drapeaufgIN}
+
+\newpage
+\subsection{Tests en drapeau << fg >>, aux limites}
+Voici deux tests aux limites de la composition
+\emph{en drapeau, au fer} \`{a} gauche, sur une colonne
+\'{e}troite (2cm) tout d'abord avec l'environnement
+\texttt{drapeaufg} et ensuite avec la recommandation
+de l'imprimerie nationale appliqu\'{e}e \`{a}
+\FP\ (ou interpr\`{e}t\'{e}e par l'environnement \texttt{drapeaufgIN}).
+
+Les coefficients de laideur (\texttt{badness})
+accept\'{e}s sont \'{e}lev\'{e}s, c'est la raison pour laquelle
+aucun message d'\texttt{underfull hbox}
+(tout comme celui d'\texttt{overfull})
+n'est \'{e}mis dans les deux cas
+ci-dessous.
+
+\bigskip
+
+\def\temp{\noindent{\fboxsep 0pt\fboxrule 0.2pt\fbox{\advance\hsize by -2pt
+ \hbox{\vbox{\noindent
+ instit instits
+institut instituts
+institution institutions
+institutionnel institutionnels
+institutionnelle institutionnelles
+institutionnellement
+constitutionnellement
+inconstitutionnellement
+}}\hss}}}
+
+\let\XX\relax
+\parbox{2cm}{%
+\begin{drapeaufg}
+\hsize=2cm
+\temp
+\end{drapeaufg}
+}
+\hspace*{0.5cm}
+\parbox{2cm}{%
+\begin{drapeaufgIN}
+\hsize=2cm
+\temp
+\end{drapeaufgIN}
+}
+
+\newpage
+\subsection{Tests en drapeau << fd >>, aux limites}
+Nous effectuons ici les m\^{e}mes test mais avec
+les environnements \texttt{drapeaufd} (fer \`{a} droite)
+et \texttt{drapeaufdIN} (selon imprimerie nationale).
+En fait, l'environnement
+\texttt{drapeaufd} est tout simplement
+un \texttt{raggedleft}.
+\NL{9}
+
+\let\XX\relax
+\parbox{2cm}{%
+\begin{drapeaufd}
+%\mbox{Avec \the\rightskip :}
+\hsize=2cm
+\temp
+\end{drapeaufd}
+}
+\hspace*{0.5cm}
+\parbox{2cm}{%
+\begin{drapeaufdIN}
+%\mbox{Avec \the\rightskip :}
+\hsize=2cm
+\temp
+\end{drapeaufdIN}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\Large
+\let\XX\relax
+\subsection{Test << fd >> classique}
+
+\begin{drapeaufd}
+\GOfrench
+\end{drapeaufd}
+
+\normalsize\bigskip
+
+L'{\oe}il aiguis\'{e} sera troubl\'{e} car
+les deux colonnes ne sont pas align\'{e}es horizontalement ;
+cela est d\^{u} \`{a} la diff\'{e}rence de mat\'{e}riel \`{a} composer, au total,
+dans chacune des deux colonnes.
+
+\vfill
+
+\newpage
+\Large
+\subsection{Test << fd >> IN}
+\begin{drapeaufdIN}
+\GOfrench
+\end{drapeaufdIN}
+
+\normalsize\bigskip
+
+Quelque soit le corps de la police (dans les limites
+classiques de \LaTeX{}), avec cette largeur de colonne,
+on n'obtient pas de diff\'{e}rence
+de mise en page entre les deux environnements. Les r\`{e}gles
+de l'imprimerie nationale sont donc plus largement appliqu\'{e}es
+dans ce cas.
+
+\vfill
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\onecolumn
+\newpage\french
+\hbox{}
+\vfill
+\centerline{\Large Page intentionnellement laiss\'{e}e blanche}
+\vfill
+\twocolumn
+
+\fi% on a saute si drapeaufg est inconnu (frencht)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\section{Lettrines}
+\SmsG% lettrine reduite a 1 seule lettre !
+Voici le test des lettrines propos\'{e}es en mode semi-automatique
+avec \FP\ :
+
+\bigskip
+\verb| \flettrine{Quoi ?}|
+\flettrine{Quoi ?} {Paris}
+{sera toujours Paris}. Ceci est une lettrine obtenue
+gr\^{a}ce au coll\`{e}gue allemand E.~{\sc Scha\-l\"{u}ck} et
+ aux diff\'{e}rents codes qu'il
+m'a donn\'{e}s.
+
+<< Ici d\'{e}marre une lettrine dans une citation.
+
+\bigskip
+\lettrine{Paris}
+{sera toujours Paris}. Ceci est une lettrine obtenue
+gr\^{a}ce au coll\`{e}gue allemand E.~{\sc Scha\-l\"{u}ck} et
+ aux diff\'{e}rents codes qu'il
+m'a donn\'{e}s.
+
+\bigskip
+\flettrine{Paris}
+{sera toujours Paris}. Ceci est une lettrine obtenue
+gr\^{a}ce au coll\`{e}gue allemand E.~{\sc Scha\-l\"{u}ck} et
+ aux diff\'{e}rents codes qu'il
+m'a donn\'{e}s.
+
+et la citation se termine ici. >>
+
+\bigskip
+\verb| \font\lettrinefont=cmr17 scaled|\\
+{\font\lettrinefont=cmr17 scaled \magstep5
+\verb| \magstep5\lettrine[`` {Paris} '']|
+\lettrine[`` {Paris} '']
+{sera toujours Paris}. Ceci est une lettrine obtenue
+gr\^{a}ce au coll\`{e}gue allemand E.~{\sc Scha\-l\"{u}ck} et
+ aux diff\'{e}rents codes qu'il
+m'a donn\'{e}s.\par}
+
+\bigskip
+\verb| \lettrine[<< {Paris} >>]|
+\lettrine[<< {Paris} >>]
+{sera toujours Paris}. Ceci est une lettrine obtenue
+gr\^{a}ce au coll\`{e}gue allemand E.~{\sc Scha\-l\"{u}ck} et
+ aux diff\'{e}rents codes qu'il
+m'a donn\'{e}s.
+
+\bigskip
+\verb| \flettrine[<< {Paris} ]|
+\flettrine[<< {Paris} ]
+{sera toujours Paris}. Ceci est une lettrine obtenue
+gr\^{a}ce au coll\`{e}gue allemand E.~{\sc Scha\-l\"{u}ck} et
+ aux diff\'{e}rents codes qu'il
+m'a donn\'{e}s. >>
+
+\bigskip
+\tthyphenation\noindent
+\vers|\|\vers|font\lettrinefont=cmti12 scaled| \!\vers| \magstep4\lettrine|
+{\em \% v\'{e}rification d'italique.}
+\font\lettrinefont=cmti12 scaled \magstep4\lettrine
+Blalbla {\bf je blablate}, tu blablates, ils blablatent, b...
+(ceci est l'exemple m\^{e}me de ce qu'il ne faut pas faire car ainsi
+le mot n'est pas mis en petites capitales). Ceci avait pour but
+de tester une police italique.
+
+\bigskip
+\lettrine{L'absurdit\'{e}} de cette lettrine...
+
+\notthyphenation
+\FmsG
+
+\newpage\english
+
+\section{Illuminated letters}
+
+Look at the French part of this document because, in English,
+these macros have no effect:
+
+\bigskip
+\verb| \flettrine{Quoi ?}|
+\flettrine{Quoi ?} {Paris}
+{sera toujours Paris}. Ceci est une lettrine obtenue
+gr\^{a}ce au coll\`{e}gue allemand E.~{\sc Scha\-l\"{u}ck} et
+ aux diff\'{e}rents codes qu'il
+m'a donn\'{e}s.
+
+<< Ici d\'{e}marre une lettrine dans une citation.
+
+\bigskip
+\lettrine{Paris}
+{sera toujours Paris}. Ceci est une lettrine obtenue
+gr\^{a}ce au coll\`{e}gue allemand E.~{\sc Scha\-l\"{u}ck} et
+ aux diff\'{e}rents codes qu'il
+m'a donn\'{e}s.
+
+\bigskip
+\flettrine{Paris}
+{sera toujours Paris}. Ceci est une lettrine obtenue
+gr\^{a}ce au coll\`{e}gue allemand E.~{\sc Scha\-l\"{u}ck} et
+ aux diff\'{e}rents codes qu'il
+m'a donn\'{e}s.
+
+et la citation se termine ici. >>
+
+\bigskip
+\verb| \font\lettrinefont=cmr17 scaled|\\
+{\font\lettrinefont=cmr17 scaled \magstep5
+\verb| \magstep5\lettrine[`` {Paris} '']|
+\lettrine[`` {Paris} '']
+{sera toujours Paris}. Ceci est une lettrine obtenue
+gr\^{a}ce au coll\`{e}gue allemand E.~{\sc Scha\-l\"{u}ck} et
+ aux diff\'{e}rents codes qu'il
+m'a donn\'{e}s.\par}
+
+\bigskip
+\verb| \lettrine[<< {Paris} >>]|
+\lettrine[<< {Paris} >>]
+{sera toujours Paris}. Ceci est une lettrine obtenue
+gr\^{a}ce au coll\`{e}gue allemand E.~{\sc Scha\-l\"{u}ck} et
+ aux diff\'{e}rents codes qu'il
+m'a donn\'{e}s.
+
+\bigskip
+\verb| \flettrine[<< {Paris} ]|
+\flettrine[<< {Paris} ]
+{sera toujours Paris}. Ceci est une lettrine obtenue
+gr\^{a}ce au coll\`{e}gue allemand E.~{\sc Scha\-l\"{u}ck} et
+ aux diff\'{e}rents codes qu'il
+m'a donn\'{e}s. >>
+
+\bigskip
+\noindent
+\verb|\font\lettrinefont=cmti12 scaled| \verb| \magstep4\lettrine|
+%{\em \% v\'{e}rification d'italique.}
+\font\lettrinefont=cmti12 scaled \magstep4\lettrine
+Blalbla {\bf je blablate}, tu blablates, ils blablatent, b...
+(ceci est l'exemple m\^{e}me de ce qu'il ne faut pas faire car ainsi
+le mot n'est pas mis en petites capitales). Ceci avait pour but
+de tester une police italique.
+
+\bigskip
+\lettrine{L'absurdit\'{e}} de cette lettrine...
+
+\onecolumn\newpage%
+\french
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% ===>>>> Il n'y a plus d'anglais au del\`{a} de cette limite <<<<===
+\def\lastlinein#1{\expandafter\gdef\csname #1\endcsname{\relax}}
+\lastlinein{english}% this is for frencht.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\french
+\section{Lettrines automatiques ou non}
+
+\bigskip
+\lettrine{THIS IS A TEST} (a non-automatic one)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+\bigskip
+\flettrine{THIS IS A TEST} (a non-automatic one)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+\bigskip
+\automaticlettrine
+\lettrine{THIS IS A TEST} (a default automatic one)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+\bigskip
+\flettrine{THIS IS A TEST} (a default automatic one)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+
+\bigskip
+\def\lettrinefontname{cmr17}
+\lettrine{THIS IS A TEST} (a cmr17 automatic one)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+\bigskip
+\flettrine{THIS IS A TEST} (a cmr17 automatic one)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+\bigskip
+\lettrine{Que vaut ce test ?} (en automatique)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+\bigskip
+\noautomaticlettrine
+\lettrine{THIS IS A TEST} (a non-automatic one)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+\bigskip
+\lettrine{Que vaut ce test ?} (non-automatique)
+is a piece of text and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more and some more and some more and some more
+and some more and some more.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\section{\'{E}num\'{e}rations}
+L'espacement des \'{e}num\'{e}rations fran\c{c}aises est
+ profond\'{e}ment modifi\'{e} avec \FP, pour s'en
+convaincre voir le test des listes page \pageref{listes} ou
+l'environnement \texttt{order} ci-apr\`{e}s.
+
+\section{L'environnement << {\mdseries\texttt{order}} >>}
+Un environnement sp\'{e}cifique est propos\'{e}, il s'agit de l'environnement
+\verb|order| pour \LaTeX{} dont voici un petit exemple :
+
+\begin{order}
+\item Bien regarder ;
+\item l'espacement de chaque \'{e}l\'{e}ment est sp\'{e}cial ;
+\item l'espacement vertical est aussi diff\'{e}rent.
+\item A-D-O-P-T-E-Z \ \ L-E !
+\end{order}
+
+Ce prototype correspond bien aux \'{e}num\'{e}rations
+fran\c{c}aises (je ne
+parle pas uniquement des marqueurs -- primo, secundo, \etc. --
+mais aussi de la gestion des espaces). En voici un autre exemple
+concret :
+\NL1
+
+Les guillemets entrent aussi en ligne de compte : << Je citerai
+3 cas tr\`{e}s importants :
+\begin{order}
+\item le premier cas ;
+\item le second ;
+\item le dernier.
+\end{order}
+qui sont [...] >>
+\NL1
+
+\`{A} noter que ce m\'{e}canisme de rajout des guillemets en d\'{e}but de
+chaque \'{e}l\'{e}ment de liste marche aussi avec un environnement
+comme \texttt{itemize}.
+
+\expandafter\ifx\csname frenchTeXmods\endcsname\relax
+ \space% ce test ne marche pas en LaTeX standard.
+\else
+ \ifx\frenchTeXmods\empty\space% ni en dummy french !
+ \else
+\section{Tests aux limites des guillemets anglais}
+
+V\'{e}rifions qu'il est possible d'activer temporairement
+quelques caract\`{e}res sans perturber le traitement. Exemple :
+
+\begin{verbatim}
+{\catcode`\'=\active\catcode`\'=\active
+ `` Test guillemets anglais ''
+}
+\end{verbatim}
+
+{\catcode`\'=\active\catcode`\'=\active
+ `` Test guillemets anglais ''
+}
+ \fi
+\fi
+
+Un cas bien sp\'{e}cial avait \'{e}t\'{e} rencontr\'{e} avec l'extension \myverb|amstex|
+qui utilisait une r\'{e}f\'{e}rence avec des math\'{e}matiques dans une autre
+r\'{e}f\'{e}rence, ce qui entrainait une boucle infinie avec \FP. Voici
+le test en question :
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% this code generates a loop with versions of french < V3,42 %%%%%%
+\makeatletter
+\def\r@ref{{\ref{nulllabel}$'$}}{1}
+\makeatother
+\ref{ref} = 1 $'$ % boucle garantie si < V3,42
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Autre test aux limites ?
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\section{<< Autres tests >>}
+Nous sommes ici en une colonne.
+
+\bigskip
+Voici un test d'encadr\'{e} contenant le mode \verb|centering| :
+\begin{center}\fbox{%
+\parbox{6cm}{\begin{center}Information : si vous voulez me joindre,
+mon t\'{e}l. : 01 69 35 85 40. Je n'y suis qu'aux horaires de
+bureau.\end{center}}%
+ }\end{center}
+
+Bon ?\footnote{L'objet de cette note de bas de page est
+de v\'{e}rifier l'espacement des inf\'{e}rieurs et sup\'{e}rieurs,
+\primo en \texttt{\backslash tt} :
+\texttt{XXXX ===> <=== YYYY} et
+\secundo en {\tt verbatim} :
+\myverb|french V4 < french V5 > frenchOLD|%
+.}
+
+\begin{table*}[h]
+\caption{Dactylographie et typographie compar\'{e}es}
+\label{frenchdactylo}
+\vspace*{1cm}
+\huge
+\begin{tabular}{|r|r|}
+\hline
+dactylographie\ \ \ \ \hfill & \ \ \ typographie\ \ \ \hfill\\
+\hline
+ \verb|use \dots or \ldots| \ & use \dots\ or $\ldots{}$\ \\
+ \verb|utilisez...| \ & utilisez...\ \\
+ \verb|semi-colon;| \ & semi-colon;\ \\
+ \verb|point-virgule ;| \ & point-virgule ;\ \\
+ \verb|My god!| \ & My god!\ \\
+ \verb|Mon dieu !| \ & Mon Dieu !\ \\
+ \verb|Why not?| \ & Why not?\ \\
+ \verb|Pourquoi pas ?| \ & Pourquoi pas ?\ \\
+ \verb|``I say''| \ & ``I say''\ \\
+ \verb|<< Je dis >>| \ & << Je dis >>\ \\
+ \verb|He said: Yes| \ & He said: Yes\ \\
+ \verb|Il dit : non| \ & Il dit : non\ \\
+ \verb|$1\,234,567$| \ & $1\,234,567$\ \\
+ \verb|$f(x,\,y)$| \ & $f(x,\,y)$\ \\
+\hline
+\end{tabular}
+\normalsize
+\end{table*}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifx\itshape\undefined\else% avoid old frencht crash
+\subsection{Test des guillemets dans un \mdseries\texttt{\backslash edef}}
+
+Les guillemets peuvent \^{e}tre appel\'{e}s dans une d\'{e}finition de macro
+telle que \verb|\edef| mais comme les guillemets ne sont pas expansibles
+enti\`{e}rement il a donc fallu arriver \`{a} r\'{e}aliser une d\'{e}finition acceptable.
+
+Ainsi \verb|\edef\testedef{<< essai >>}|
+\edef\testedef{<< essai >>}
+donnera la curieuse d\'{e}finition suivante : \\
+\hbox{}\hfill\texttt{\meaning\testedef} ; \\
+elle reste compl\`{e}tement expansible (dans certaines conditions)
+ou pas du tout (comme ici appel\'{e}e en tt on obtiendra
+le r\'{e}sultat suivant : \texttt{\testedef}).
+\fi
+
+\subsection{{\mdseries\tt <{}} et {\mdseries\tt >{}} red\'{e}finis}
+
+Mes utilisateurs sont terribles ! Ils veulent le beurre, l'argent du
+beurre et aussi la fermi\`{e}re... S'ils codent
+\verb9\def\truc<#1|#2>{/#1 OU #2/}9
+ ils veulent pouvoir obtenir
+/Essai OU Erreur/ en saisissant \verb9\truc<Essai|Erreur>9. Faisons
+l'essai r\'{e}el :
+{\def\truc<#1|#2>{/#1 OU #2/} \truc<Essai|Erreur>}.
+
+Encore plus fort : nous voulons avoir une notation de Backus-Naur
+c'est-\`{a}-dire des \verb|\rangle| et \verb|\langle|. Voici la
+d\'{e}finition que nous avons entr\'{e}e avant le \verb|\begin{document}| :
+\begin{verbatim}
+{\catcode`\<=\active\catcode`\>=\active%
+\global\def<{\left\langle}\global\def>{\right\rangle}
+}
+\end{verbatim}
+
+Pour tester l'efficacit\'{e} de ces macros il suffit alors de faire
+par exemple :
+\begin{verbatim}
+<< $<assignement>$ >>
+\end{verbatim}
+\`{a} condition que l'option \verb|\frenchguillemets| soit
+active (en maths).
+
+Essayons cela :
+% en fait il faut reactiver cela maintenant :
+{%
+ \gdef\myinf{\left\langle}%
+ \gdef\mysup{\right\rangle}%
+<< $\frenchguillemets% on a \nofrenchguillemets avec AmSTeX
+ <assignement>$ >>.
+}%
+% Remettre ici pour frenchle
+\global\let\myinf\inferieura% A no-op def
+\global\let\mysup\superieura% for a temporary action
+
+\subsection{\mdseries\texttt{\textbackslash special}}
+L'inclusion d'une commande \verb|\special| est ici test\'{e}e :\\
+{%%%%%%%%%%%% attention : commentaires impossible dans cette partie.
+ \catcode`\%=12
+ \texttt{\backslash special}\verb|{ps:|{\tt %%%
+ }\verb| Texte bidon {`<<manuel:C;!?>>'}}|
+ \special{ps:%%%
+ Texte bidon {`<<manuel:C;!?>>'}}
+}
+
+\subsection{{\mdseries\texttt{\textbackslash refmark}} dans un tableau}
+
+O\`{u} l'on reparle encore de \verb|\refmark|...
+
+La note \ref{bas} est r\'{e}f\'{e}renc\'{e}e depuis le tableau ci-dessous, tout comme
+les notes du tableau lui-m\^{e}me.
+
+ \begin{table}[htbp]
+ \begin{center}
+ \begin{tabular}{|c|l|}
+ \hline
+ Lettre & Utilisation\\
+ \hline
+ {\tt h} & petit blabla gentil et anodin \refmark{bas}\\
+ {\tt l} & ici reblabla assez moyen\refmark{bas}$^,$\refmark{refnote}\\
+ {\tt L} & autre grand grand grand blabla
+ \footnote{La note du tableau << refmark >>.\label{refnote}}\\
+ \hline
+ \end{tabular}
+ \caption{Le titre du tableau.}
+ \end{center}
+\end{table}
+
+En dehors du tableau on peut faire appel\footnote{La note de page.\label{bas}}
+\`{a} une note qui est, par contre, r\'{e}f\'{e}renc\'{e}e dans le tableau. Tout cela
+est r\'{e}alis\'{e} gr\^{a}ce \`{a} l'ordre \verb|\refmark| introduit par l'extension
+\FP.
+
+\subsection{{\mdseries\texttt{\textbackslash nombre}} en argument}
+
+Voici un test simple permettant de valider \verb|\nombre| lorsqu'il
+est en argument d'une macro-instruction :
+
+\begin{verbatim}
+\noindent
+1\,234 un nombre simple !\\
+$*$\\
+\nombre{1 234} un nombre simple !\\
+\nombre{1 234,5} avec une d\'{e}cimale.\\
+\texttt{\nombre{1 234,56} avec fonte tt.}\\
+\emph{\nombre{1 234,567} en mode emphas\'{e}.}\\
+\nombre{1 234,567 8} avec encore une d\'{e}cimale.
+\end{verbatim}
+
+Il faut noter que l'ordre \verb|\nombre| est toujours compos\'{e} en mode
+math\'{e}matique ce qui force l'utilisation des fontes math\'{e}matiques.
+Tout changement de fonte doit donc \^{e}tre pr\'{e}cis\'{e} de fa\c{c}on ad hoc.
+Par ailleurs, la composition n'est garantie que si l'option
+\verb|\nofiles| n'a pas \'{e}t\'{e} indiqu\'{e}e en d\'{e}but de document.
+Voici ce que ce test donne :
+
+\noindent
+1\,234 un nombre simple !\\
+$*$\\
+\nombre{1 234} un nombre simple !\\
+\nombre{1 234,5} avec une d\'{e}cimale.\\
+\texttt{\nombre{1 234,56} avec fonte tt.}\\
+\emph{\nombre{1 234,567} en mode emphas\'{e}.}\\
+\nombre{1 234,567 8} avec encore une d\'{e}cimale.
+
+\ifx\documentclass\undefined % Still Plain! so no \DeclareFontFamily
+\else%
+\subsection{{\mdseries\texttt{\textbackslash label}} en mode math}
+
+Il s'agit ici de tester la commande \verb|\label| dans un environnement
+\verb|equation| :
+
+\begin{verbatim}
+V\'{e}rifions le num\'{e}ro de l'\'{e}quation \ref{labelequation} ci-dessous :
+\begin{equation}\label{labelequation}
+V_{Lm}=\frac{L}{t_p}
+\end{equation}
+\end{verbatim}
+
+Voici le r\'{e}sultat du test :
+
+V\'{e}rifions le num\'{e}ro de l'\'{e}quation \ref{labelequation} ci-dessous :
+\begin{equation}\label{labelequation}
+V_{Lm}=\frac{L}{t_p}
+\end{equation}
+\fi
+
+\csname TexteComplementaire\endcsname
+
+\subsection{Bibliographie}
+Voyons maintenant la bibliographie.
+Dans \cite{`<<manuel:Gaulle;!?>>'} on trouvera...
+\nocite{`<<merci:Ronan;!?>>'}
+Par contre
+\cite[pp.1--3, X \& consorts]{<<blabla>>}
+est beaucoup plus fourni en exemples et commentaires... Mais dans
+\cite[p. 25 \S~13 {{\it et seq.}}]{`<<torture:Gaulle;!?>>'}
+toutes ces informations
+sont plus d\'{e}taill\'{e}es.
+
+Ce qui suit n'est pas un exemple de belle bibliographie, juste une
+v\'{e}rification de bon fonctionnement.
+
+\bibliographystyle{plain}
+
+\begin{thebibliography}{Knuth 99}
+
+\section*{Bibliographie dans le document}
+
+\bibitem[Knuth 99]{<<blabla>>} Le \TeX book ou la << bible >>
+ des gourous \TeX
+\bibitem{`<<manuel:Gaulle;!?>>'} B. {\sc Gaulle}, {\em
+ Le r\'{e}sultat d'une << {\em dure} >> journ\'{e}e de travail !}
+\bibitem{`<<merci:Ronan;!?>>'} R. {\sc Keryell}, {\em
+ Le gentil normalien qui m'a beaucoup aid\'{e} gr\^{a}ce \`{a} sa th\`{e}se...}
+\bibitem{`<<torture:Gaulle;!?>>'} B. {\sc Gaulle}, {\em
+ Notice d'utilisation du style french}, 1991-1999.
+\bibitem{`<<tortureFP:Gaulle;!?>>'} B. {\sc Gaulle}, {\em
+ Notice d'utilisation de l'extension \FP\ pour \LaTeX}, 2000-20xx.
+\end{thebibliography}
+
+\ifx\documentclass\undefined % Still Plain! so skip
+\else%
+\section*{\phantom{\normalsize[Knuth 99]}Bibliographie en dehors du document}
+
+Avec certaines extensions de bibliographie il peut s'av\'{e}rer utile
+de prot\'{e}ger les caract\`{e}res actifs \`{a} l'int\'{e}rieur m\^{e}me de la base
+de donn\'{e}es bibliographique.
+
+\bibliography{testbib}
+\fi%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\listoffigures
+\listoftables
+\glossary{Fa\c{c}on cordon bleu}
+\glossaires
+\section*{Glossaire des mots techniques}
+\printglossary[\jobname.glo]
+
+\noindent -- magnification
+
+\noindent -- caract\`{e}res sp\'{e}ciaux : \NL1
+
+{\huge%\frenchmacros n'est pas utile ici
+\begin{tabular}{|c|c|}
+\hline
+Pour imprimer ceci & Saisir cela\\ \hline
+\at & \verb|\at|\\ \hline
+\texttt{\vert} & \verb|\texttt{\vert}|\\ \hline
+\tilde & \verb|\tilde|\\ \hline
+\texttt{\backslash}& \verb|\texttt{\backslash}|\\ \hline
+\chap & \verb|\chap|\\ \hline
+\degre & \verb|\degre| \\ \hline
+\degres & \verb|\degres| \\ \hline
+\normalsize
+1\ier{} \'{e}tage & \verb|1\ier{} \'{e}tage| \\ \hline
+\normalsize
+(2\ieme\!) & \verb|(2\ieme\!)| \\ \hline
+\primo & \verb|\primo|\\ \hline
+\secundo) & \verb|\secundo)|\\
+\hline
+\end{tabular}
+} \NL1
+
+On notera que le caract\`{e}re \verb|\degre| n'est pas le signe typographique
+usuellement utilis\'{e} pour exprimer
+des degr\'{e}s mais que \verb|\degres| est
+plus conforme \`{a} la tradition. On remarque bien les diff\'{e}rences entre
+\verb|\primo| et \verb|\secundo)|
+(la forme parenth\'{e}s\'{e}e n'est pas valable
+en {\em belle} typographie fran\c{c}aise).
+\primo... \secundo... \tertio... \quarto...
+\primo)... \secundo)... \tertio)... \quarto)...
+
+\section*{Glossaire argotique}
+Le pied
+
+\printindex
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\part{Ce qui ne marche pas (bien)...}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{Quelques questions \`{a} \'{e}tudier}
+
+Cette partie ne comporte que des << anomalies >> que l'auteur esp\`{e}re
+r\'{e}soudre d'ici quelque temps,
+gr\^{a}ce \`{a} votre aide... peut \^{e}tre ?
+
+En fait il ne reste vraiment
+pas grand chose \`{a} r\`{e}gler mais ce sont probablement des
+vieux probl\`{e}mes sacr\'{e}ment compliqu\'{e}s.
+
+\section{Le << 2 points >>}
+Le << 2 points >> a une f\^{a}cheuse tendance
+\`{a} rester en bas de page lorsqu'il est
+suivi d'un {\tt verbatim}. Il serait souhaitable d'en trouver la raison.
+
+\section{Les guillemets}
+
+Le probl\`{e}me avec \verb|quotation| page \pageref{quotation}.
+
+%Et la perte d'informations
+%dans le cas de \verb|\noeveryparguillemets| lorsque l'on d\'{e}marre
+%une citation dans un paragraphe d\'{e}j\`{a} commenc\'{e}.
+%
+%Vraiment tr\`{e}s {\em fragile} ce \verb|\noeveryparguillemets| ! (
+
+Voir le cas des notes
+de bas de page ou en marge qui produis(ai ?)ent des d\'{e}sastres
+avec \verb|\noeveryparguillemets|.
+
+\section{Le cas des extensions mal \'{e}crites ...}
+
+... ne se r\'{e}sout souvent que par la modification de l'extension en question.
+Cela a \'{e}t\'{e} le cas de nombreuses extensions depuis le d\'{e}but de \FP\
+et j'ai bien peur que cela continue
+\emph{\'{e}ternellement} (et \`{a} propos : qui me succ\`{e}dera ?).
+
+Certains cas sont insolubles, par exemple :
+l'extension \verb|here.sty|
+red\'{e}finissait << au vol >>
+l'ordre \LaTeX{} \verb|\table| au lieu
+de modifier l'existant ; cela posait un r\'{e}el probl\`{e}me \`{a} \FP\
+qui se base sur la modification d'une commande \verb|\table|
+existante. Heureusement ce style p\'{e}rim\'{e} peut \^{e}tre remplac\'{e}
+avantageusement par \verb|float|.
+
+\chapter{Am\'{e}liorations \`{a} envisager}
+
+\section{Index et bibliographie}
+Deux th\`{e}mes qui n'ont que tr\`{e}s peu \'{e}t\'{e} abord\'{e}s.
+
+\section{Abr\'{e}viations}
+Il est f\^{a}cheux d'avoir \`{a} conna\^{\i}tre quelles sont les mots
+abr\'{e}geables pour pouvoir demander leur abr\'{e}viation ; autant les saisir
+correctement d\`{e}s le d\'{e}but...
+
+Faut-il arr\^{e}ter la composition \LaTeX{} quand une abr\'{e}viation
+n'est pas trouv\'{e}e ?
+
+Faut-il offrir la possibilit\'{e} de lister toutes les abr\'{e}viations ?
+
+\annexes
+\hsize=18cm
+
+\chapter{Copyright}
+\Mylisting{copyrigh.tex}
+
+\chapter{Le fichier \mdseries{\tt language.dat}}
+\Mylisting{language.dat}
+
+\chapter{Le fichier \mdseries{\tt frabbrev.tex}}
+\Mylisting{frabbrev.tex}
+
+% retire pour mettre french.cmd 98/06
+%\chapter{Le fichier \mdseries{\tt french.dmy}}
+%My\listing{french.dmy}
+
+\chapter{Le fichier \mdseries{\tt french.cmd}}
+\Mylisting{french.cmd}
+
+\chapter{Le fichier \mdseries{\tt french.chk}}
+\Mylisting{french.chk}
+
+\chapter{Un style english (\mdseries{\tt fenglish})}
+\Mylisting{fenglish_doc}
+
+\chapter{Le code de l'extension \FP}
+
+\Mylisting{french_doc}
+
+\newpage
+\hsize=15cm
+\abbreviations\noenglishdoublequotes
+\tableofcontents
+\noabbreviations\englishdoublequotes% remove options set for toc.
+
+\english %=\relax if english text (see \lastlinein)
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/doc/test/mya4.sty b/language/french/e-french/texmf/doc/test/mya4.sty
new file mode 100644
index 0000000000..87626f4b28
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/mya4.sty
@@ -0,0 +1,502 @@
+% mya4.sty for those who don't have any a4.sty on their engine
+\def\fileversion{1.2}
+\def\filedate{26 Feb 90}
+\def\docdate {26 Feb 90}
+%
+%% \CheckSum{134}
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \| Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \º
+%% Right brace \} Tilde \%}
+%%
+%
+%\iffalse
+% Style option `A4' to be used with LaTeX V2.09
+%
+% Please report errors to: J.L. Braams
+% JL_Braams@pttrnl.nl (Braams@hlsdnl5.bitnet)
+% or: N.A.F.M. Poppelier
+% Poppelier@hutruu53.bitnet}
+%
+% \changes{v1.0}{10 Jan 90}{Changed the margins for one-sided printing}
+% \changes{v1.1}{23 Jan 90}{Added \WideMargins macros}
+% \changes{v1.2}{26 Feb 90}{Consolidated setting of \marginparwidth}
+%
+%\fi
+%
+% \title{A style option to adapt the standard \LaTeX\ document
+% styles to A4 paper\thanks{This file
+% has version number \fileversion --
+% last revision \filedate, documentation dated \docdate.}}
+%
+% \author{Nico Poppelier}
+% \address{\TeX nique \\
+% Washingtondreef 153\\
+% 3564 KD Utrecht}
+% \netaddress{Poppelier@hutruu53.bitnet}
+% \author{Johannes Braams}
+% \address{PTT Research Neher Laboratories\\
+% P.O. Box 421\\
+% 2260 AK Leidschendam}
+% \netaddress{JL_Braams@pttrnl.nl}
+%
+% \date{Printed \today}
+%
+% \maketitle
+%
+% \begin{abstract}
+% This article describes a new style option that can be used with the
+% document styles that are distributed with the \LaTeX\ distributions.
+% It modifies the page layout to conform to the paper format most
+% commonly used in Europe, portrait A4.
+% \end{abstract}
+%
+% \section{Introduction}
+%
+% This file is based on the document style options \verb+A4.sty+ and
+% \verb+A4wide.sty+, which can be found in the Rochester style archive.
+% The original style option \verb+A4.sty+ we started from was written by
+% John Pavel, and is dated May 1987. This option only changes the vertical
+% size of the text somewhat, by increasing the number of lines on a page.
+% The style option \verb+A4wide.sty+ was written by Jean-Francois Lamy,
+% and is dated July 1986. This option only increases the width of the text.
+%
+% \section{Goals and design decisions}
+%
+% As many people before us, we found the page layout as implemented in the
+% standard \LaTeX\ document styles too much geared towards the
+% American-sized paper, which is somewhat wider than A4 paper, but also
+% noticeably less high.
+%
+% Our goal was to get a page layout that was suitable for A4 paper, and
+% produced legible texts. There are a number of layout parameters that
+% influence the legibility of a text. A parameter of major importance is
+% the number of words (or characters) on a line. The maximum number of
+% words per line is ten to twelve for optimal legibility, a rule-of-thumb
+% that can be found in typographic literature (we used%\cite{treebus}).
+% This results in a number of characters per line which lies somewhere
+% between sixty and seventy.
+%
+% Another important parameter is the amount of white space surrounding the
+% text. Here we have to distinguish between texts that are printed
+% one-sided and texts that are printed two-sided (back to back). In the
+% first case the margins on odd and even pages should be equal; in the
+% latter case care should be taken that the texts on both sides of the
+% paper overlap.
+% Also a printed document is likely to be bound some way or another, so
+% there should be enough white space in the `inner' margin\footnote{For
+% two-sided printing, this is the left margin on odd-numbered pages and the
+% right margin on even-numbered ones; for one-sided printing, this is
+% always the left margin.} of the text to allow this.
+%
+% There is yet one more thing to take into account when designing a page
+% layout. \LaTeX\ offers the possibility of using marginal notes and if
+% someone wants to use marginal notes, they should of course fit on
+% the paper.
+%
+% So, we have the following goals:
+% \begin{enumerate}
+% \item Choose the text width such that there will be sixty to seventy
+% characters on a line;
+% \item See to it that in documents that are printed two-sided, the
+% texts which end up on two sides of one sheet of paper overlap;
+% \item Leave enough white space in the `inner' margin to allow for
+% the binding of the document;
+% \item Leave enough white space in the `outer' margin
+% for marginal notes if they are going to be used.
+% \end{enumerate}
+%
+%
+% \section{The implementation}
+%
+% \subsection{The starting point}
+%
+% Thus we set out to modify some of the design decisions in the standard
+% document styles. Because we knew that we were not the first to tackle
+% the problem, we started by having a look at what was already available.
+% We came up with the two options mentioned earlier, which are publicly
+% available. Undoubtedly there will exist many more such files, some of
+% them maybe modifications of those two files.
+%
+% We had a look at the layout produced by both options and were not
+% satisfied with it. For one thing, both of the original options \verb+A4+
+% and \verb+A4wide+ modify only one aspect of the page layout. The first
+% thing to do was to put these two files together. This resulted in a
+% layout which was still unsatisfactory, since for the 10-point and
+% 11-point options lines in the text contained on the average eighty
+% characters or more.
+%
+% \subsection{What else?}
+%
+% \DescribeMacro\textwidth
+% \DescribeMacro\marginparwidth
+% Because the result so far gave us lines that contained too many
+% characters, we decreased the \verb+\textwidth+ to get lines that
+% contain about sixty to seventy characters for all three size options.
+% Still more work had to be done. As it turned out, using our new
+% \verb+A4.sty+ together with the option \verb+twosided+ had a drawback:
+% when the document was printed two-sided the texts on both side of one
+% piece of paper overlapped only partly, which does not look good. We
+% solved this by modifying the width of the margins for two-sided
+% printing. At the same time we modified the \verb+\marginparwidth+ so
+% that if someone uses a marginal note it would completely fit on the
+% paper instead of falling off the page, which obviously would render
+% the note unreadable.
+%
+% \DescribeMacro\WideMargins
+% The decisions described above allow for marginal notes to be printed
+% along with the normal text, but if someone makes heavy use of marginal
+% notes, the resultant layout will not be very satisfactory, because if
+% the full width of the marginal notes is used, they will take up too
+% much space in the `outer' margin. For this case we provide the macro
+% \verb+\WideMargins+. This macro modifies the page-layout parameters in
+% such a way that the width reserved for marginal notes becomes 1.5
+% inches. To achieve this the width of the main body of the text is
+% decreased. This macro is meant to be used only in the preamble of the
+% document.
+%
+%\StopEventually{
+% \section{Conclusion}
+%
+% We have presented a new approach to adapt the page layout of the
+% document styles that are part of the standard \LaTeX\ distributions to
+% the dimensions of A4 paper. The width of marginal notes has been taken
+% into account and a means to get wider marginal notes at the cost of
+% shorter lines in the main body of the text has been provided.
+%
+% \begin{thebibliography}{9}
+% \bibitem{treebus} K.F. Treebus.
+% {\em Tekstwijzer, een gids voor het grafisch verwerken van tekst.}
+% SDU Uitgeverij ('s-Gravenhage, 1988). A Dutch book on layout
+% design and typography.
+% \end{thebibliography}
+%
+% \makesignature
+% }
+%
+% \subsection{The code}
+%
+% We begin by identifying the version of this file on the terminal and
+% in the transcript file.
+% \begin{macrocode}
+\typeout{Style option `A4' \fileversion\space<\filedate> (NP and JLB)}
+% \typeout{English documentation\space\space\space<\docdate> (JLB)}
+% \end{macrocode}
+%
+% \begin{macro}{\topmargin}
+% First, we redefine the \verb+\textheight+ and \verb+\topmargin+. The
+% \verb+\topmargin+ is the distance from the reference point on the page
+% to the top of the page of text. In most cases extra white space is not
+% necessary since one inch of white space at the top of the page suffices.
+% \begin{macrocode}
+\topmargin 0pt
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\textheight}
+% The dimension parameter \verb+\textheight+ gives the total height of the
+% text, including footnotes and figures, excluding the running head and
+% foot. This height is given as an integral number times the
+% \verb+\baselineskip+, which results in an integral number of lines on a
+% page.
+%
+% \noindent
+% We have to include definitions of all relevant dimension parameters for
+% each of the cases 10-point, 11-point and 12-point. We do this with a
+% case statement:
+%
+% \begin{macrocode}
+\ifcase \@ptsize
+ \textheight 53\baselineskip
+% \end{macrocode}
+% \noindent
+% which modifies the height of the text for texts to be produced
+% with the ten-point typeface:
+% \begin{macrocode}
+\or
+ \textheight 46\baselineskip
+% \end{macrocode}
+% \noindent
+% the same for eleven point:
+% \begin{macrocode}
+\or
+ \textheight 42\baselineskip
+% \end{macrocode}
+% \noindent
+% and for twelve point. Finally we close the \verb+\ifcase+ statement:
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+% \noindent
+% The only thing left to be done is to add the \verb+\topskip+ to
+% the \verb+\textheight+.
+% The value of \verb+\topskip+ appears always to be 10pt.
+%
+% \begin{macrocode}
+\advance\textheight by \topskip
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\textwidth}
+% \begin{macro}{\oddsidemargin}
+% \begin{macro}{\evensidemargin}
+% That was the `vertical part' of the work. Now we have some work to do
+% to get things right horizontally. Again we have to distinguish between
+% the various character sizes because sixty eleven-point characters take
+% up more space than sixty ten-point characters. But there's more to
+% take into account. If documents are printed two-sided, the texts on
+% both sides of the paper should overlap completely. This can be done be
+% assigning appropriate values to \verb+\oddsidemargin+ and
+% \verb+\evensidemargin+, the parameters that define the left margins on
+% odd and even pages respectively.
+%
+% \noindent
+% First we start a case statement to distinguish between the various
+% typeface sizes.
+% \begin{macrocode}
+\ifcase \@ptsize
+% \end{macrocode}
+% Then we specify the width of the text.
+% \begin{macrocode}
+ \textwidth 5.00in
+% \end{macrocode}
+% \noindent
+% Also specify the width of marginal notes. They must have a
+% reasonable width to be of any use, and this should be the same for
+% either one-sided or two-sided printing.
+% \begin{macrocode}
+ \marginparwidth 1.00in
+% \end{macrocode}
+% \noindent
+% Here we need an if statement to test whether the option \verb+twosided+
+% has been specified.
+% \begin{macrocode}
+ \if@twoside
+% \end{macrocode}
+% \noindent
+% If it was, assign appropriate values to the margin parameters
+% \begin{macrocode}
+ \oddsidemargin 0.55in
+ \evensidemargin 0.75in
+ \else
+% \end{macrocode}
+% \noindent
+% If the option \verb+twosided+ was not used, both margin parameters
+% must have the same value, for texts on consecutive pages have to
+% be put in the same place on the paper.
+% \begin{macrocode}
+ \oddsidemargin 0.55in
+ \evensidemargin 0.55in
+% \end{macrocode}
+% \noindent
+% Now we close the if statement.
+% \begin{macrocode}
+ \fi
+% \end{macrocode}
+% \noindent
+% We are ready with the modifications for the ten-point typeface size, so
+% now we do something similar for the eleven-point typeface.
+% \begin{macrocode}
+\or
+ \textwidth 5.20in
+ \marginparwidth 1.00in
+ \if@twoside
+ \oddsidemargin 0.45in
+ \evensidemargin 0.65in
+ \else
+ \oddsidemargin 0.45in
+ \evensidemargin 0.45in
+ \fi
+% \end{macrocode}
+% \noindent
+% One more time, now for the twelve-point typeface.
+% \begin{macrocode}
+\or
+ \textwidth 5.70in
+ \marginparwidth 0.80in
+ \if@twoside
+ \oddsidemargin 0.20in
+ \evensidemargin 0.40in
+ \else
+ \oddsidemargin 0.20in
+ \evensidemargin 0.20in
+ \fi
+% \end{macrocode}
+% \noindent
+% Finally we close the case statement.
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\WideMargins}
+% This macro is somewhat tricky: it has to find out
+% which typeface size is used, whether the document should be printed
+% two-sided, and whether the \verb+\reversemarginpar+ is in effect.
+% \verb+\reversemarginpar+ makes the marginal notes appear in the
+% margin on the opposite side of the normal placement.
+% \begin{macrocode}
+\def\WideMargins{%
+% \end{macrocode}
+% \noindent
+% Because for each typeface size the changes to the parameters that
+% need to be made are similar, the macro \verb+\WideMargins+
+% uses an internal macro \verb+\@widemargins+.
+%
+% \begin{macro}{\ExtraWidth}
+% In order to store the amount of extra width needed for the marginal
+% notes an extra dimension parameter is defined.
+%
+% \begin{macrocode}
+ \newdimen\ExtraWidth
+% \end{macrocode}
+% \end{macro}
+%
+% \noindent
+% First find out about the point size, then call \verb+\@widemargins+ to
+% modify the margin widths by the amount given in \verb+\ExtraWidth+.
+% \begin{macrocode}
+ \ifcase \@ptsize
+% \end{macrocode}
+%
+% \noindent
+% For both 10-point and 11-point texts the width for marginal notes is
+% already 1 inch, so we increase it by half an inch. We subtract half an
+% inch from the text width and modify the margins appropriately.
+%
+% \begin{macrocode}
+ \ExtraWidth = 0.5in
+ \@widemargins
+ \or
+ \ExtraWidth = 0.5in
+ \@widemargins
+ \or
+% \end{macrocode}
+%
+% \noindent
+% For 12-point texts the marginal notes are only 0.8 inch wide, so
+% now we have to add 0.7 inch to get them 1.5 inch wide.
+%
+% \begin{macrocode}
+ \ExtraWidth = 0.7in
+ \@widemargins
+% \end{macrocode}
+%
+% \noindent
+% This macro should only be called once, during the preamble of a
+% document, so we \verb+\let+ it be equal to \verb+\relax+ as soon
+% as the work is done.
+% \begin{macrocode}
+ \fi\let\WideMargins\relax\let\@widemargins\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@preamblecmds}
+% We add \verb+\WideMargins+ to \verb+\@preamblecmds+, which is a
+% list of commands to be used only in the preamble of a document.
+%
+% \begin{macrocode}
+{\def\do{\noexpand\do\noexpand}
+ \xdef\@preamblecmds{\@preamblecmds \do\WideMargins}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@widemargins}
+% This macro modifies the margin parameters. To do this it uses
+% the dimension variable \verb+\ExtraWidth+, which was defined by
+% \verb+\WideMargins+.
+%
+% \noindent
+% First the \verb+\ExtraWidth+ is subtracted from the \verb+\textwidth+
+% and added to the \verb+\marginparwidth+.
+% \begin{macrocode}
+\def\@widemargins{%
+ \global\advance\textwidth by -\ExtraWidth
+ \global\advance\marginparwidth by \ExtraWidth
+% \end{macrocode}
+%
+% \noindent
+% Then we modify the margins, but the value of the switch
+% \verb+\if@twoside+ has to be taken into account. Because
+% we have to test another switch (\verb+\if@reversemargin+)
+% we add another level of macros to modify the margin parameters%
+%
+% \begin{macrocode}
+ \if@twoside
+ \tw@sidedwidemargins
+ \else
+ \@nesidedwidemargins
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tw@sidedwidemargins}
+% Normally the marginal notes are printed in the `outer' margins, so
+% we have to increase the \verb+\evensidemargin+ to keep the text
+% balanced on both sides of the paper, but if \verb+\reversemarginpar+
+% is in effect we have to increase the \verb+\oddsidemargin+ and
+% decrease the \verb+\evensidemargin+ accordingly.
+%
+% \begin{macrocode}
+\def\tw@sidedwidemargins{%
+ \if@reversemargin
+% \end{macrocode}
+%
+% \noindent
+% Notice that for documents printed two-sided, the
+% \verb+\evensidemargin+ is wider than the \verb+\oddsidemargin+;
+% this difference in width is transferred to the other margin.
+%
+% \begin{macrocode}
+ \@tempdima=\evensidemargin
+ \advance\@tempdima by -\oddsidemargin
+ \advance\oddsidemargin by \ExtraWidth
+ \advance\oddsidemargin by \@tempdima
+ \advance\evensidemargin by -\@tempdima
+ \else
+% \end{macrocode}
+%
+% \noindent
+% If the marginal notes go on the normal side of the paper, only the
+% \verb+\evensidemargin+ has to be increased.
+%
+% \begin{macrocode}
+ \advance\evensidemargin by \ExtraWidth
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@nesidedwidemargins}
+% For documents that are printed one-sided, both margins have the same
+% width. The default placement for the marginal notes is in the right
+% margin, so if \verb+\reversemarginpar+ is {\em not\/} in effect the
+% margin parameters need not be modified. If it is in effect, both the
+% \verb+\oddsidemargin+ and the \verb+\evensidemargin+ need to be
+% increased.
+%
+% \begin{macrocode}
+\def\@nesidedwidemargins{%
+ \if@reversemargin
+ \advance\oddsidemargin by \ExtraWidth
+ \advance\evensidemargin by \ExtraWidth
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \Finale
+\endinput
diff --git a/language/french/e-french/texmf/doc/test/myfigure.eps b/language/french/e-french/texmf/doc/test/myfigure.eps
new file mode 100644
index 0000000000..d4dde79dd4
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/myfigure.eps
@@ -0,0 +1,12824 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (myfigure.eps)
+%%CreationDate: (2017-02-04T14:34:31+01:00)
+%%BoundingBox: -0 -0 360 453
+%%HiResBoundingBox: 0 0 360 453
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%EndComments
+
+%%BeginDefaults
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image. The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/DirectClassPacket
+{
+ %
+ % Get a DirectClass packet.
+ %
+ % Parameters:
+ % red.
+ % green.
+ % blue.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ compression 0 eq
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+ %
+ % Display a DirectClass image.
+ %
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { DirectClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayDirectClassPacket } image
+ } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+ %
+ % Get a DirectClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % red
+ % green
+ % blue
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 eq
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 eq
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ compression 0 eq
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+ %
+ % Display a PseudoClass image.
+ %
+ % Parameters:
+ % class: 0-PseudoClass or 1-Grayscale.
+ %
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ class 0 gt
+ {
+ currentfile buffer readline pop
+ token pop /depth exch def pop
+ /grays columns 8 add depth sub depth mul 8 idiv string def
+ columns rows depth
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { currentfile grays readhexstring pop } image
+ }
+ {
+ %
+ % Parameters:
+ % colors: number of colors in the colormap.
+ % colormap: red, green, blue color packets.
+ %
+ currentfile buffer readline pop
+ token pop /colors exch def pop
+ /colors colors 3 mul def
+ /colormap colors string def
+ currentfile colormap readhexstring pop pop
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { PseudoClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayPseudoClassPacket } image
+ } ifelse
+ } ifelse
+} bind def
+
+/DisplayImage
+{
+ %
+ % Display a DirectClass or PseudoClass image.
+ %
+ % Parameters:
+ % x & y translation.
+ % x & y scale.
+ % label pointsize.
+ % image label.
+ % image columns & rows.
+ % class: 0-DirectClass or 1-PseudoClass.
+ % compression: 0-none or 1-RunlengthEncoded.
+ % hex color packets.
+ %
+ gsave
+ /buffer 512 string def
+ /byte 1 string def
+ /color_packet 3 string def
+ /pixels 768 string def
+
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ x y translate
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ currentfile buffer readline pop
+ token pop /pointsize exch def pop
+ /Times-Roman findfont pointsize scalefont setfont
+ x y scale
+ currentfile buffer readline pop
+ token pop /columns exch def
+ token pop /rows exch def pop
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ currentfile buffer readline pop
+ token pop /compression exch def pop
+ class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+ grestore
+} bind def
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 0 360 453
+userdict begin
+DisplayImage
+0 0
+360 453
+12
+360 453
+0
+0
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFE
+FEFEFEFCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDEEEEEEEEEEEEEEEEEE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD
+FDFDFDFDFDFDEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDF5F5F5F5F5F5
+F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDF5F5F5F5F5F5F5F5F5FFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FBFBFBFBFBFBFBFBFBD2D2D2D2D2D2D2D2D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBD2D2D2
+D2D2D2D2D2D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBD2D2D2D2D2D2D2D2D2FFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFBFBFBFBFBFBFBFBFBD5D5D5D5D5D5D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFB
+D5D5D5D5D5D5D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBD5D5D5D5D5D5D5D5D5FFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFC
+F9F9F9F9F9F9F9F9F9FBFBFBFBFBFBFBFBFBFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9BFBFBFBFBFBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCF9F9F9F9F9F9F9F9F9FBFBFB
+FBFBFBFBFBFBFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9
+F9F9F9BFBFBFBFBFBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFDFDFDFDFDFDFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F1F1F1F1F1F1F1F1F1E2E2E2
+E2E2E2E2E2E2D3D3D3D3D3D3D3D3D3CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCD5D5D5
+D5D5D5D5D5D5E0E0E0E0E0E0E0E0E0EAEAEAEAEAEAEAEAEAF2F2F2F2F2F2F2F2F2F4F4F4F4F4F4
+F4F4F4F4F4F4E0E0E0E0E0E0E0E0E0C2C2C2C2C2C2C2C2C2C0C0C0C0C0C0C0C0C0D2D2D2D2D2D2
+D2D2D2D2D2D2E6E6E6E6E6E6E6E6E6F5F5F5F5F5F5F5F5F5F9F9F9F9F9F9F9F9F9FBFBFBFBFBFB
+FBFBFBFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCDDDDDDDDDDDDDDDDDD
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFD
+FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F1F1F1F1F1F1F1F1F1E2E2E2E2E2E2E2E2E2D3D3D3D3D3D3
+D3D3D3CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCD5D5D5D5D5D5D5D5D5E0E0E0E0E0E0
+E0E0E0EAEAEAEAEAEAEAEAEAF2F2F2F2F2F2F2F2F2F4F4F4F4F4F4F4F4F4F4F4F4E0E0E0E0E0E0
+E0E0E0C2C2C2C2C2C2C2C2C2C0C0C0C0C0C0C0C0C0D2D2D2D2D2D2D2D2D2D2D2D2E6E6E6E6E6E6
+E6E6E6F5F5F5F5F5F5F5F5F5F9F9F9F9F9F9F9F9F9FBFBFBFBFBFBFBFBFBFEFEFEFEFEFEFEFEFE
+FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCDDDDDDDDDDDDDDDDDDFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDF9F9F9F9F9F9F9F9F9
+F9F9F9F1F1F1F1F1F1F1F1F1E2E2E2E2E2E2E2E2E2D3D3D3D3D3D3D3D3D3CCCCCCCCCCCCCCCCCC
+CCCCCCCCCCCCCCCCCCCCCCCCD5D5D5D5D5D5D5D5D5E0E0E0E0E0E0E0E0E0EAEAEAEAEAEAEAEAEA
+F2F2F2F2F2F2F2F2F2F4F4F4F4F4F4F4F4F4F4F4F4E0E0E0E0E0E0E0E0E0C2C2C2C2C2C2C2C2C2
+C0C0C0C0C0C0C0C0C0D2D2D2D2D2D2D2D2D2D2D2D2E6E6E6E6E6E6E6E6E6F5F5F5F5F5F5F5F5F5
+F9F9F9F9F9F9F9F9F9FBFBFBFBFBFBFBFBFBFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC
+FCFCFCFCFCFCDDDDDDDDDDDDDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFAFAFAFAFAFAFAFAFAFAFAFAF3F3F3F3F3F3F3F3F3
+E4E4E4E4E4E4E4E4E4CECECECECECECECECEB7B7B7B7B7B7B7B7B7B7B7B79F9F9F9F9F9F9F9F9F
+858585858585858585707070707070707070696969696969696969696969696969696969696969
+717171717171717171818181818181818181949494949494949494A5A5A5A5A5A5A5A5A5AEAEAE
+AEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E787878787878787878676767676767676767707070
+707070707070707070888888888888888888ABABABABABABABABABC3C3C3C3C3C3C3C3C3D9D9D9
+D9D9D9D9D9D9F7F7F7F7F7F7F7F7F7F7F7F7FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBDBDBDBDBDBDB
+DBDBDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE
+FEFEFEFEFEFEFAFAFAFAFAFAFAFAFAFAFAFAF3F3F3F3F3F3F3F3F3E4E4E4E4E4E4E4E4E4CECECE
+CECECECECECEB7B7B7B7B7B7B7B7B7B7B7B79F9F9F9F9F9F9F9F9F858585858585858585707070
+707070707070696969696969696969696969696969696969696969717171717171717171818181
+818181818181949494949494949494A5A5A5A5A5A5A5A5A5AEAEAEAEAEAEAEAEAEAEAEAE9E9E9E
+9E9E9E9E9E9E787878787878787878676767676767676767707070707070707070707070888888
+888888888888ABABABABABABABABABC3C3C3C3C3C3C3C3C3D9D9D9D9D9D9D9D9D9F7F7F7F7F7F7
+F7F7F7F7F7F7FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFD
+FDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBDBDBDBDBDBDBDBDBDBFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFAFAFAFAFAFAFAFAFAE9E9E9E9E9E9E9E9E9CBCBCBCBCBCB
+CBCBCBCBCBCBA9A9A9A9A9A9A9A9A98B8B8B8B8B8B8B8B8B727272727272727272626262626262
+6262626262625656565656565656564E4E4E4E4E4E4E4E4E484848484848484848464646464646
+4646464545454545454545454545454949494949494949495050505050505050505A5A5A5A5A5A
+5A5A5A5D5D5D5D5D5D5D5D5D6161616161616161616161615E5E5E5E5E5E5E5E5E545454545454
+5454544E4E4E4E4E4E4E4E4E4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5A5A5A5A5A5A
+5A5A5A6D6D6D6D6D6D6D6D6D8A8A8A8A8A8A8A8A8AC7C7C7C7C7C7C7C7C7C7C7C7F3F3F3F3F3F3
+F3F3F3FDFDFDFDFDFDFDFDFDFBFBFBFBFBFBFBFBFBF5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6
+F6F6F6FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+F8F8F8F8F8F8F8F8F8B1B1B1B1B1B1B1B1B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFAFAFAFAFAFAFAFAFAE9E9E9E9E9E9E9E9E9CBCBCBCBCBCBCBCBCBCBCBCBA9A9A9A9A9A9
+A9A9A98B8B8B8B8B8B8B8B8B727272727272727272626262626262626262626262565656565656
+5656564E4E4E4E4E4E4E4E4E484848484848484848464646464646464646454545454545454545
+4545454949494949494949495050505050505050505A5A5A5A5A5A5A5A5A5D5D5D5D5D5D5D5D5D
+6161616161616161616161615E5E5E5E5E5E5E5E5E5454545454545454544E4E4E4E4E4E4E4E4E
+4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5A5A5A5A5A5A5A5A5A6D6D6D6D6D6D6D6D6D
+8A8A8A8A8A8A8A8A8AC7C7C7C7C7C7C7C7C7C7C7C7F3F3F3F3F3F3F3F3F3FDFDFDFDFDFDFDFDFD
+FBFBFBFBFBFBFBFBFBF5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6FDFDFDFDFDFDFDFDFD
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8F8F8F8F8F8B1B1B1
+B1B1B1B1B1B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFAFAFAFAFAFAFAFAFA
+E9E9E9E9E9E9E9E9E9CBCBCBCBCBCBCBCBCBCBCBCBA9A9A9A9A9A9A9A9A98B8B8B8B8B8B8B8B8B
+7272727272727272726262626262626262626262625656565656565656564E4E4E4E4E4E4E4E4E
+484848484848484848464646464646464646454545454545454545454545494949494949494949
+5050505050505050505A5A5A5A5A5A5A5A5A5D5D5D5D5D5D5D5D5D616161616161616161616161
+5E5E5E5E5E5E5E5E5E5454545454545454544E4E4E4E4E4E4E4E4E4C4C4C4C4C4C4C4C4C4C4C4C
+4C4C4C4C4C4C4C4C4C5A5A5A5A5A5A5A5A5A6D6D6D6D6D6D6D6D6D8A8A8A8A8A8A8A8A8AC7C7C7
+C7C7C7C7C7C7C7C7C7F3F3F3F3F3F3F3F3F3FDFDFDFDFDFDFDFDFDFBFBFBFBFBFBFBFBFBF5F5F5
+F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8F8F8F8F8F8B1B1B1B1B1B1B1B1B1FFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFD
+F8F8F8F8F8F8F8F8F8E5E5E5E5E5E5E5E5E5C5C5C5C5C5C5C5C5C59D9D9D9D9D9D9D9D9D777777
+7777777777777777775D5D5D5D5D5D5D5D5D505050505050505050494949494949494949484848
+4848484848484848484747474747474747474545454545454545454141414141414141413F3F3F
+3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E404040404040404040444444444444444444474747
+4747474747474848484848484848484949494949494949494949494B4B4B4B4B4B4B4B4B484848
+4848484848484D4D4D4D4D4D4D4D4D505050505050505050505050474747474747474747454545
+454545454545494949494949494949575757575757575757898989898989898989898989D0D0D0
+D0D0D0D0D0D0F1F1F1F1F1F1F1F1F1FCFCFCFCFCFCFCFCFCF9F9F9F9F9F9F9F9F9F3F3F3F3F3F3
+F3F3F3F3F3F3F7F7F7F7F7F7F7F7F7FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFF8F8F8F8F8F8F8F8F8B3B3B3B3B3B3B3B3B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDF8F8F8F8F8F8F8F8F8E5E5E5
+E5E5E5E5E5E5C5C5C5C5C5C5C5C5C59D9D9D9D9D9D9D9D9D7777777777777777777777775D5D5D
+5D5D5D5D5D5D505050505050505050494949494949494949484848484848484848484848474747
+4747474747474545454545454545454141414141414141413F3F3F3F3F3F3F3F3F3E3E3E3E3E3E
+3E3E3E3E3E3E404040404040404040444444444444444444474747474747474747484848484848
+4848484949494949494949494949494B4B4B4B4B4B4B4B4B4848484848484848484D4D4D4D4D4D
+4D4D4D505050505050505050505050474747474747474747454545454545454545494949494949
+494949575757575757575757898989898989898989898989D0D0D0D0D0D0D0D0D0F1F1F1F1F1F1
+F1F1F1FCFCFCFCFCFCFCFCFCF9F9F9F9F9F9F9F9F9F3F3F3F3F3F3F3F3F3F3F3F3F7F7F7F7F7F7
+F7F7F7FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8F8F8F8F8F8
+B3B3B3B3B3B3B3B3B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEF7F7F7F7F7F7
+F7F7F7DFE0DFDFE0DFDFE0DFDFE0DFBCBCBCBCBCBCBCBCBC9292929292929292926E6E6E6E6E6E
+6E6E6E5757575757575757574B4B4B4B4B4B4B4B4B4B4B4B474747474747474747444444444444
+444444414141414141414141424242424242424242424242424242424242424242424242424242
+4242423F3F3F3F3F3F3F3F3F3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C
+3C3C3C3F3F3F3F3F3F3F3F3F404040404040404040424242424242424242464646464646464646
+4646464949494949494949494B4B4B4B4B4B4B4B4B4949494949494949494B4B4B4B4B4B4B4B4B
+4B4B4B4B4B4B4B4B4B4B4B4B454545454545454545464646464646464646484848484848484848
+6161616161616161616161619C9C9C9C9C9C9C9C9CD9D9D9D9D9D9D9D9D9F9F9F9F9F9F9F9F9F9
+FEFEFEFEFEFEFEFEFEFBFBFBFBFBFBFBFBFBFBFBFBF2F2F2F2F2F2F2F2F2F9F9F9F9F9F9F9F9F9
+FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8F8F8F8F8F8B3B3B3B3B3B3B3B3B3FFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEF7F7F7F7F7F7F7F7F7DFE0DFDFE0DFDFE0DF
+DFE0DFBCBCBCBCBCBCBCBCBC9292929292929292926E6E6E6E6E6E6E6E6E575757575757575757
+4B4B4B4B4B4B4B4B4B4B4B4B474747474747474747444444444444444444414141414141414141
+4242424242424242424242424242424242424242424242424242424242423F3F3F3F3F3F3F3F3F
+3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3F3F3F3F3F3F3F3F3F
+404040404040404040424242424242424242464646464646464646464646494949494949494949
+4B4B4B4B4B4B4B4B4B4949494949494949494B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B
+454545454545454545464646464646464646484848484848484848616161616161616161616161
+9C9C9C9C9C9C9C9C9CD9D9D9D9D9D9D9D9D9F9F9F9F9F9F9F9F9F9FEFEFEFEFEFEFEFEFEFBFBFB
+FBFBFBFBFBFBFBFBFBF2F2F2F2F2F2F2F2F2F9F9F9F9F9F9F9F9F9FEFEFEFEFEFEFEFEFEFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFF8F8F8F8F8F8F8F8F8B3B3B3B3B3B3B3B3B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FEFEFEFEFEFEFEFEFEF7F7F7F7F7F7F7F7F7DFE0DFDFE0DFDFE0DFDFE0DFBCBCBCBCBCBCBCBCBC
+9292929292929292926E6E6E6E6E6E6E6E6E5757575757575757574B4B4B4B4B4B4B4B4B4B4B4B
+474747474747474747444444444444444444414141414141414141424242424242424242424242
+4242424242424242424242424242424242423F3F3F3F3F3F3F3F3F3C3C3C3C3C3C3C3C3C3B3B3B
+3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3F3F3F3F3F3F3F3F3F404040404040404040424242
+4242424242424646464646464646464646464949494949494949494B4B4B4B4B4B4B4B4B494949
+4949494949494B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B454545454545454545464646
+4646464646464848484848484848486161616161616161616161619C9C9C9C9C9C9C9C9CD9D9D9
+D9D9D9D9D9D9F9F9F9F9F9F9F9F9F9FEFEFEFEFEFEFEFEFEFBFBFBFBFBFBFBFBFBFBFBFBF2F2F2
+F2F2F2F2F2F2F9F9F9F9F9F9F9F9F9FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8F8F8
+F8F8F8B3B3B3B3B3B3B3B3B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDEDEDEDEDEDEDEDEDEDC5C5C5
+C5C5C5C5C5C59393939393939393939393936C6C6C6C6C6C6C6C6C5858585858585858584C4C4C
+4C4C4C4C4C4C464646464646464646454545454545454545454545454545454545454545464646
+464646464646454545454545454545464646464646464646464646454545454545454545444444
+4444444444444444444444444444444141414141414141413E3E3E3E3E3E3E3E3E3E3E3E3F3F3F
+3F3F3F3F3F3F4040404040404040403F3F3F3F3F3F3F3F3F414141414141414141444444444444
+4444444444444848484848484848484D4D4D4D4D4D4D4D4D4F4F4F4F4F4F4F4F4F484848484848
+484848484848454545454545454545444444444444444444454545454545454545464646464646
+464646515151515151515151515151707070707070707070B2B2B2B2B2B2B2B2B2EDEDEDEDEDED
+EDEDEDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEF5F5F5F5F5F5F5F5F5F5F5F5F5F5F5
+F5F5F5FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFAD1D1D1D1D1D1D1D1D1
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE
+FEFEFEFEFEFEFDFDFDFDFDFDFDFDFDEDEDEDEDEDEDEDEDEDC5C5C5C5C5C5C5C5C5939393939393
+9393939393936C6C6C6C6C6C6C6C6C5858585858585858584C4C4C4C4C4C4C4C4C464646464646
+464646454545454545454545454545454545454545454545464646464646464646454545454545
+454545464646464646464646464646454545454545454545444444444444444444444444444444
+4444444141414141414141413E3E3E3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040
+4040403F3F3F3F3F3F3F3F3F414141414141414141444444444444444444444444484848484848
+4848484D4D4D4D4D4D4D4D4D4F4F4F4F4F4F4F4F4F484848484848484848484848454545454545
+454545444444444444444444454545454545454545464646464646464646515151515151515151
+515151707070707070707070B2B2B2B2B2B2B2B2B2EDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFD
+FEFEFEFEFEFEFEFEFEFEFEFEF5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5FEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFAD1D1D1D1D1D1D1D1D1FFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFDFD
+FDFDFDEDEDEDEDEDEDEDEDEDC5C5C5C5C5C5C5C5C59393939393939393939393936C6C6C6C6C6C
+6C6C6C5858585858585858584C4C4C4C4C4C4C4C4C464646464646464646454545454545454545
+454545454545454545454545464646464646464646454545454545454545464646464646464646
+464646454545454545454545444444444444444444444444444444444444414141414141414141
+3E3E3E3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F4040404040404040403F3F3F3F3F3F3F3F3F
+4141414141414141414444444444444444444444444848484848484848484D4D4D4D4D4D4D4D4D
+4F4F4F4F4F4F4F4F4F484848484848484848484848454545454545454545444444444444444444
+454545454545454545464646464646464646515151515151515151515151707070707070707070
+B2B2B2B2B2B2B2B2B2EDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFE
+F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA
+FAFAFAFAFAFAD1D1D1D1D1D1D1D1D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FEFEFEFEFEFEFEFEFEFEFEFEF7F7F7F7F7F7F7F7F7DDDDDDDDDDDDDDDDDDABABABABABABABABAB
+7777777777777777775B5B5B5B5B5B5B5B5B5B5B5B5151515151515151514C4C4C4C4C4C4C4C4C
+474747474747474747454545454545454545444444444444444444444444444444444444444444
+424242424242424242424242424242424242424242424242424242424242424242424242424242
+4242424242424242424141414141414141414040404040404040403F3F3F3F3F3F3F3F3F3F3F3F
+4242424242424242424545454545454545454141414141414141413E3E3E3E3E3E3E3E3E3F3F3F
+3F3F3F3F3F3F3F3F3F4242424242424242424B4B4B4B4B4B4B4B4B515151515151515151515151
+515151515151515151474747474747474747414141414141414141424242424242424242484848
+4848484848485050505050505050505050505A5A5A5A5A5A5A5A5A818181818181818181CECECE
+CECECECECECEF3F3F3F3F3F3F3F3F3FDFDFDFDFDFDFDFDFDFDFDFDF9F9F9F9F9F9F9F9F9F0F0F0
+F0F0F0F0F0F0FCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F7F7F7F7ABABABABABAB
+ABABABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFE
+F7F7F7F7F7F7F7F7F7DDDDDDDDDDDDDDDDDDABABABABABABABABAB7777777777777777775B5B5B
+5B5B5B5B5B5B5B5B5B5151515151515151514C4C4C4C4C4C4C4C4C474747474747474747454545
+454545454545444444444444444444444444444444444444444444424242424242424242424242
+424242424242424242424242424242424242424242424242424242424242424242424242414141
+4141414141414040404040404040403F3F3F3F3F3F3F3F3F3F3F3F424242424242424242454545
+4545454545454141414141414141413E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F424242
+4242424242424B4B4B4B4B4B4B4B4B515151515151515151515151515151515151515151474747
+474747474747414141414141414141424242424242424242484848484848484848505050505050
+5050505050505A5A5A5A5A5A5A5A5A818181818181818181CECECECECECECECECEF3F3F3F3F3F3
+F3F3F3FDFDFDFDFDFDFDFDFDFDFDFDF9F9F9F9F9F9F9F9F9F0F0F0F0F0F0F0F0F0FCFCFCFCFCFC
+FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F7F7F7F7ABABABABABABABABABFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE
+FEFEFEFEFEFEFCFCFCFCFCFCFCFCFCEDEDEDEDEDEDEDEDEDEDEDEDC6C6C6C6C6C6C6C6C6909090
+9090909090906363636363636363634E4E4E4E4E4E4E4E4E484848484848484848484848464646
+464646464646444444444444444444414141414141414141414141414141414141424242424242
+4242424242424040404040404040403E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3C3C3C3C3C3C
+3C3C3C3C3C3C3939393939393939393939393939393939393939393939393939393A3A3A3A3A3A
+3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3E3E3E3E3E3E3E3E3E414141414141414141454545454545
+4545454040404040404040403B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3F3F3F3F3F3F
+3F3F3F4848484848484848485151515151515151515151514D4D4D4D4D4D4D4D4D454545454545
+4545454242424242424242424848484848484848484E4E4E4E4E4E4E4E4E4E4E4E515151515151
+5151515F605F5F605F5F605F9D9D9D9D9D9D9D9D9DD9D9D9D9D9D9D9D9D9F4F4F4F4F4F4F4F4F4
+F4F4F4FBFBFBFBFBFBFBFBFBEFEFEFEFEFEFEFEFEFF9F9F9F9F9F9F9F9F9FFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+F7F7F7F7F7F7F7F7F7A9A9A9A9A9A9A9A9A9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFC
+FCFCFCEDEDEDEDEDEDEDEDEDEDEDEDC6C6C6C6C6C6C6C6C6909090909090909090636363636363
+6363634E4E4E4E4E4E4E4E4E484848484848484848484848464646464646464646444444444444
+444444414141414141414141414141414141414141424242424242424242424242404040404040
+4040403E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3C3C3C3C3C3C3C3C3C3C3C3C393939393939
+3939393939393939393939393939393939393939393A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A
+3A3A3A3E3E3E3E3E3E3E3E3E414141414141414141454545454545454545404040404040404040
+3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3F3F3F3F3F3F3F3F3F484848484848484848
+5151515151515151515151514D4D4D4D4D4D4D4D4D454545454545454545424242424242424242
+4848484848484848484E4E4E4E4E4E4E4E4E4E4E4E5151515151515151515F605F5F605F5F605F
+9D9D9D9D9D9D9D9D9DD9D9D9D9D9D9D9D9D9F4F4F4F4F4F4F4F4F4F4F4F4FBFBFBFBFBFBFBFBFB
+EFEFEFEFEFEFEFEFEFF9F9F9F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F7F7F7F7A9A9A9
+A9A9A9A9A9A9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCEDEDEDEDEDEDEDEDED
+EDEDEDC6C6C6C6C6C6C6C6C69090909090909090906363636363636363634E4E4E4E4E4E4E4E4E
+484848484848484848484848464646464646464646444444444444444444414141414141414141
+4141414141414141414242424242424242424242424040404040404040403E3E3E3E3E3E3E3E3E
+3E3E3E3E3E3E3E3E3E3C3C3C3C3C3C3C3C3C3C3C3C393939393939393939393939393939393939
+3939393939393939393A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3E3E3E3E3E3E3E3E3E
+4141414141414141414545454545454545454040404040404040403B3B3B3B3B3B3B3B3B3B3B3B
+3A3A3A3A3A3A3A3A3A3F3F3F3F3F3F3F3F3F484848484848484848515151515151515151515151
+4D4D4D4D4D4D4D4D4D4545454545454545454242424242424242424848484848484848484E4E4E
+4E4E4E4E4E4E4E4E4E5151515151515151515F605F5F605F5F605F9D9D9D9D9D9D9D9D9DD9D9D9
+D9D9D9D9D9D9F4F4F4F4F4F4F4F4F4F4F4F4FBFBFBFBFBFBFBFBFBEFEFEFEFEFEFEFEFEFF9F9F9
+F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F7F7F7F7A9A9A9A9A9A9A9A9A9FFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFE
+F7F7F7F7F7F7F7F7F7DADADADADADADADADAA9A9A9A9A9A9A9A9A9A9A9A9787878787878787878
+565656565656565656474747474747474747444444444444444444444444444444444444444444
+4242424242424242423F3F3F3F3F3F3F3F3F3C3C3C3C3C3C3C3C3C3E3E3E3E3E3E3E3E3E404040
+4040404040404040403C3C3C3C3C3C3C3C3C393939393939393939373737373737373737343434
+3434343434343434343232323232323232323434343434343434343737373737373737373A3A3A
+3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B404040
+4040404040404545454545454545454242424242424242424242423B3B3B3B3B3B3B3B3B393939
+3939393939393E3E3E3E3E3E3E3E3E4B4B4B4B4B4B4B4B4B4B4B4B4F4F4F4F4F4F4F4F4F484848
+4848484848484444444444444444444141414141414141414B4B4B4B4B4B4B4B4B4B4B4B4E4E4E
+4E4E4E4E4E4E5151515151515151516F6F6F6F6F6F6F6F6FACACACACACACACACACDCDCDCDCDCDC
+DCDCDCDCDCDCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FBFBFBFBFBFBFBFBFBFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFF9F9F9F9F9F9F9F9F9CBCBCBCBCBCBCBCBCBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEF7F7F7F7F7F7F7F7F7DADADA
+DADADADADADAA9A9A9A9A9A9A9A9A9A9A9A9787878787878787878565656565656565656474747
+4747474747474444444444444444444444444444444444444444444242424242424242423F3F3F
+3F3F3F3F3F3F3C3C3C3C3C3C3C3C3C3E3E3E3E3E3E3E3E3E4040404040404040404040403C3C3C
+3C3C3C3C3C3C393939393939393939373737373737373737343434343434343434343434323232
+3232323232323434343434343434343737373737373737373A3A3A3A3A3A3A3A3A3A3A3A3A3A3A
+3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B404040404040404040454545454545
+4545454242424242424242424242423B3B3B3B3B3B3B3B3B3939393939393939393E3E3E3E3E3E
+3E3E3E4B4B4B4B4B4B4B4B4B4B4B4B4F4F4F4F4F4F4F4F4F484848484848484848444444444444
+4444444141414141414141414B4B4B4B4B4B4B4B4B4B4B4B4E4E4E4E4E4E4E4E4E515151515151
+5151516F6F6F6F6F6F6F6F6FACACACACACACACACACDCDCDCDCDCDCDCDCDCDCDCDCF1F1F1F1F1F1
+F1F1F1F1F1F1F1F1F1F1F1F1FBFBFBFBFBFBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9
+CBCBCBCBCBCBCBCBCBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFD
+FDFDFDFDFDFDF0F0F0F0F0F0F0F0F0CACACACACACACACACA909090909090909090626262626262
+6262626262624B4B4B4B4B4B4B4B4B454545454545454545424242424242424242424242424242
+4242424040404040404040404040403C3C3C3C3C3C3C3C3C393939393939393939353535353535
+353535363636363636363636353535353535353535353535323232323232323232303030303030
+303030313131313131313131323232323232323232323232343434343434343434353535353535
+353535363636363636363636363636363636363636363636363636363636363636393939393939
+3939393939393939393939393939393939393939393F3F3F3F3F3F3F3F3F484848484848484848
+4848484545454545454545453C3C3C3C3C3C3C3C3C3939393939393939393F3F3F3F3F3F3F3F3F
+3F3F3F4949494949494949494C4C4C4C4C4C4C4C4C4747474747474747473F3F3F3F3F3F3F3F3F
+4141414141414141414141414B4B4B4B4B4B4B4B4B484848484848484848525252525252525252
+818181818181818181BCBCBCBCBCBCBCBCBCBCBCBCE2E2E2E2E2E2E2E2E2F1F1F1F1F1F1F1F1F1
+FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C1C1C1C1C1C1C1C1C1FFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDFDFDFDF0F0F0F0F0F0
+F0F0F0CACACACACACACACACA9090909090909090906262626262626262626262624B4B4B4B4B4B
+4B4B4B454545454545454545424242424242424242424242424242424242404040404040404040
+4040403C3C3C3C3C3C3C3C3C393939393939393939353535353535353535363636363636363636
+353535353535353535353535323232323232323232303030303030303030313131313131313131
+323232323232323232323232343434343434343434353535353535353535363636363636363636
+363636363636363636363636363636363636363636393939393939393939393939393939393939
+3939393939393939393F3F3F3F3F3F3F3F3F484848484848484848484848454545454545454545
+3C3C3C3C3C3C3C3C3C3939393939393939393F3F3F3F3F3F3F3F3F3F3F3F494949494949494949
+4C4C4C4C4C4C4C4C4C4747474747474747473F3F3F3F3F3F3F3F3F414141414141414141414141
+4B4B4B4B4B4B4B4B4B484848484848484848525252525252525252818181818181818181BCBCBC
+BCBCBCBCBCBCBCBCBCE2E2E2E2E2E2E2E2E2F1F1F1F1F1F1F1F1F1FDFDFDFDFDFDFDFDFDFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C1C1C1C1C1C1C1C1C1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDFDFDFDF0F0F0F0F0F0F0F0F0CACACACACACACACACA
+9090909090909090906262626262626262626262624B4B4B4B4B4B4B4B4B454545454545454545
+4242424242424242424242424242424242424040404040404040404040403C3C3C3C3C3C3C3C3C
+393939393939393939353535353535353535363636363636363636353535353535353535353535
+323232323232323232303030303030303030313131313131313131323232323232323232323232
+343434343434343434353535353535353535363636363636363636363636363636363636363636
+3636363636363636363939393939393939393939393939393939393939393939393939393F3F3F
+3F3F3F3F3F3F4848484848484848484848484545454545454545453C3C3C3C3C3C3C3C3C393939
+3939393939393F3F3F3F3F3F3F3F3F3F3F3F4949494949494949494C4C4C4C4C4C4C4C4C474747
+4747474747473F3F3F3F3F3F3F3F3F4141414141414141414141414B4B4B4B4B4B4B4B4B484848
+484848484848525252525252525252818181818181818181BCBCBCBCBCBCBCBCBCBCBCBCE2E2E2
+E2E2E2E2E2E2F1F1F1F1F1F1F1F1F1FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9
+F9F9F9C1C1C1C1C1C1C1C1C1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDEAEAEA
+EAEAEAEAEAEAEAEAEAB8B8B8B8B8B8B8B8B87C7C7C7C7C7C7C7C7C565656565656565656454545
+4545454545454545454040404040404040404141414141414141413F3F3F3F3F3F3F3F3F3C3C3C
+3C3C3C3C3C3C393939393939393939393939363636363636363636353535353535353535343434
+343434343434363636363636363636353535353535353535353535343434343434343434343434
+343434343434343434343434343434363636363636363636363636363636363636363636323232
+3232323232322F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F313131313131313131313131343434
+3434343434343A3A3A3A3A3A3A3A3A3E3E3E3E3E3E3E3E3E3C3C3C3C3C3C3C3C3C404040404040
+4040404040404242424242424242423C3C3C3C3C3C3C3C3C393939393939393939363636363636
+3636363636363F3F3F3F3F3F3F3F3F4848484848484848484747474747474747473F3F3F3F3F3F
+3F3F3F3B3B3B3B3B3B3B3B3B3B3B3B444444444444444444464646464646464646474747474747
+474747686868686868686868959595959595959595959595CACACACACACACACACADFE0DFDFE0DF
+DFE0DFF5F5F5F5F5F5F5F5F5FEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C8C8C8C8C8C8C8C8C8
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDEAEAEAEAEAEAEAEAEAEAEAEAB8B8B8
+B8B8B8B8B8B87C7C7C7C7C7C7C7C7C565656565656565656454545454545454545454545404040
+4040404040404141414141414141413F3F3F3F3F3F3F3F3F3C3C3C3C3C3C3C3C3C393939393939
+393939393939363636363636363636353535353535353535343434343434343434363636363636
+363636353535353535353535353535343434343434343434343434343434343434343434343434
+3434343636363636363636363636363636363636363636363232323232323232322F2F2F2F2F2F
+2F2F2F2F2F2F2F2F2F2F2F2F3131313131313131313131313434343434343434343A3A3A3A3A3A
+3A3A3A3E3E3E3E3E3E3E3E3E3C3C3C3C3C3C3C3C3C404040404040404040404040424242424242
+4242423C3C3C3C3C3C3C3C3C3939393939393939393636363636363636363636363F3F3F3F3F3F
+3F3F3F4848484848484848484747474747474747473F3F3F3F3F3F3F3F3F3B3B3B3B3B3B3B3B3B
+3B3B3B444444444444444444464646464646464646474747474747474747686868686868686868
+959595959595959595959595CACACACACACACACACADFE0DFDFE0DFDFE0DFF5F5F5F5F5F5F5F5F5
+FEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C8C8C8C8C8C8C8C8C8FFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFDFDFDFDFDFDFDFDFDEAEAEAEAEAEAEAEAEAEAEAEAB8B8B8B8B8B8B8B8B87C7C7C7C7C7C
+7C7C7C565656565656565656454545454545454545454545404040404040404040414141414141
+4141413F3F3F3F3F3F3F3F3F3C3C3C3C3C3C3C3C3C393939393939393939393939363636363636
+363636353535353535353535343434343434343434363636363636363636353535353535353535
+353535343434343434343434343434343434343434343434343434343434363636363636363636
+3636363636363636363636363232323232323232322F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F
+3131313131313131313131313434343434343434343A3A3A3A3A3A3A3A3A3E3E3E3E3E3E3E3E3E
+3C3C3C3C3C3C3C3C3C4040404040404040404040404242424242424242423C3C3C3C3C3C3C3C3C
+3939393939393939393636363636363636363636363F3F3F3F3F3F3F3F3F484848484848484848
+4747474747474747473F3F3F3F3F3F3F3F3F3B3B3B3B3B3B3B3B3B3B3B3B444444444444444444
+464646464646464646474747474747474747686868686868686868959595959595959595959595
+CACACACACACACACACADFE0DFDFE0DFDFE0DFF5F5F5F5F5F5F5F5F5FEFEFEFEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9
+F9F9F9F9F9F9C8C8C8C8C8C8C8C8C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDEAEAEAEAEAEAEAEAEA
+B5B5B5B5B5B5B5B5B5B5B5B5777777777777777777505050505050505050444444444444444444
+4242424242424242424242424242424242424242424040404040404040403C3C3C3C3C3C3C3C3C
+3939393939393939393737373737373737373737373737373737373737373A3A3A3A3A3A3A3A3A
+3B3B3B3B3B3B3B3B3B3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3C3C3C3C3C3C3C3C3C
+3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3E3E3E3E3E3E3E3E3E3E3E3E3B3B3B3B3B3B3B3B3B
+373737373737373737343434343434343434323232323232323232343434343434343434343434
+3636363636363636363B3B3B3B3B3B3B3B3B3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F
+3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4040404040404040403E3E3E3E3E3E3E3E3E373737
+373737373737373737363636363636363636404040404040404040474747474747474747424242
+4242424242423939393939393939393939393C3C3C3C3C3C3C3C3C414141414141414141424242
+424242424242505050505050505050717171717171717171717171959595959595959595B0B0B0
+B0B0B0B0B0B0CECECECECECECECECEEDEDEDEDEDEDEDEDEDEDEDEDF9F9F9F9F9F9F9F9F9FDFDFD
+FDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFAD1D1D1D1D1D1
+D1D1D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDEAEAEAEAEAEAEAEAEAB5B5B5B5B5B5B5B5B5B5B5B5
+777777777777777777505050505050505050444444444444444444424242424242424242424242
+4242424242424242424040404040404040403C3C3C3C3C3C3C3C3C393939393939393939373737
+3737373737373737373737373737373737373A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3E3E3E
+3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3C3C3C
+3C3C3C3C3C3C3E3E3E3E3E3E3E3E3E3E3E3E3B3B3B3B3B3B3B3B3B373737373737373737343434
+3434343434343232323232323232323434343434343434343434343636363636363636363B3B3B
+3B3B3B3B3B3B3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F
+3F3F3F3F3F3F4040404040404040403E3E3E3E3E3E3E3E3E373737373737373737373737363636
+363636363636404040404040404040474747474747474747424242424242424242393939393939
+3939393939393C3C3C3C3C3C3C3C3C414141414141414141424242424242424242505050505050
+505050717171717171717171717171959595959595959595B0B0B0B0B0B0B0B0B0CECECECECECE
+CECECEEDEDEDEDEDEDEDEDEDEDEDEDF9F9F9F9F9F9F9F9F9FDFDFDFDFDFDFDFDFDFEFEFEFEFEFE
+FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFAD1D1D1D1D1D1D1D1D1FFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEF3F3F3
+F3F3F3F3F3F3BDBDBDBDBDBDBDBDBD7D7D7D7D7D7D7D7D7D7D7D7D565656565656565656464646
+4646464646464242424242424242424242424242424242424242424242424242424242423F3F3F
+3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C
+3C3C3C3C3C3C3E3E3E3E3E3E3E3E3E3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B
+3B3B3B3B3B3B3E3E3E3E3E3E3E3E3E3C3C3C3C3C3C3C3C3C3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F
+3F3F3F3F3F3F3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B
+3B3B3B3E3E3E3E3E3E3E3E3E3E3E3E4040404040404040404141414141414141413E3E3E3E3E3E
+3E3E3E3A3A3A3A3A3A3A3A3A3C3C3C3C3C3C3C3C3C3C3C3C414141414141414141444444444444
+4444444242424242424242423A3A3A3A3A3A3A3A3A3A3A3A3434343434343434343A3A3A3A3A3A
+3A3A3A4242424242424242424444444444444444443A3A3A3A3A3A3A3A3A3A3A3A373737373737
+3737373B3B3B3B3B3B3B3B3B3F3F3F3F3F3F3F3F3F414141414141414141505050505050505050
+5050506666666666666666667979797979797979798F8F8F8F8F8F8F8F8FB6B6B6B6B6B6B6B6B6
+B6B6B6D4D4D4D4D4D4D4D4D4E5E5E5E5E5E5E5E5E5F5F5F5F5F5F5F5F5F5FDFDFDFDFDFDFDFDFD
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FBFBFBFBFBFBFBFBFBDBDBDBDBDBDBDBDBDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEF3F3F3F3F3F3F3F3F3BDBDBDBDBDBD
+BDBDBD7D7D7D7D7D7D7D7D7D7D7D7D565656565656565656464646464646464646424242424242
+4242424242424242424242424242424242424242424242423F3F3F3F3F3F3F3F3F3E3E3E3E3E3E
+3E3E3E3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3E3E3E3E3E3E
+3E3E3E3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3E3E3E3E3E3E
+3E3E3E3C3C3C3C3C3C3C3C3C3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F3C3C3C3C3C3C
+3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3E3E3E3E3E3E3E3E3E
+3E3E3E4040404040404040404141414141414141413E3E3E3E3E3E3E3E3E3A3A3A3A3A3A3A3A3A
+3C3C3C3C3C3C3C3C3C3C3C3C414141414141414141444444444444444444424242424242424242
+3A3A3A3A3A3A3A3A3A3A3A3A3434343434343434343A3A3A3A3A3A3A3A3A424242424242424242
+4444444444444444443A3A3A3A3A3A3A3A3A3A3A3A3737373737373737373B3B3B3B3B3B3B3B3B
+3F3F3F3F3F3F3F3F3F414141414141414141505050505050505050505050666666666666666666
+7979797979797979798F8F8F8F8F8F8F8F8FB6B6B6B6B6B6B6B6B6B6B6B6D4D4D4D4D4D4D4D4D4
+E5E5E5E5E5E5E5E5E5F5F5F5F5F5F5F5F5F5FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBDBDBDB
+DBDBDBDBDBDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFEFEFEFEFEFEFEFEFEF3F3F3F3F3F3F3F3F3BDBDBDBDBDBDBDBDBD7D7D7D7D7D7D7D7D7D
+7D7D7D565656565656565656464646464646464646424242424242424242424242424242424242
+4242424242424242424242423F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3B3B3B3B3B3B3B3B3B
+3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3E3E3E3E3E3E3E3E3E3C3C3C3C3C3C3C3C3C
+3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3E3E3E3E3E3E3E3E3E3C3C3C3C3C3C3C3C3C
+3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B
+3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3E3E3E3E3E3E3E3E3E3E3E3E404040404040404040
+4141414141414141413E3E3E3E3E3E3E3E3E3A3A3A3A3A3A3A3A3A3C3C3C3C3C3C3C3C3C3C3C3C
+4141414141414141414444444444444444444242424242424242423A3A3A3A3A3A3A3A3A3A3A3A
+3434343434343434343A3A3A3A3A3A3A3A3A4242424242424242424444444444444444443A3A3A
+3A3A3A3A3A3A3A3A3A3737373737373737373B3B3B3B3B3B3B3B3B3F3F3F3F3F3F3F3F3F414141
+4141414141415050505050505050505050506666666666666666667979797979797979798F8F8F
+8F8F8F8F8F8FB6B6B6B6B6B6B6B6B6B6B6B6D4D4D4D4D4D4D4D4D4E5E5E5E5E5E5E5E5E5F5F5F5
+F5F5F5F5F5F5FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBDBDBDBDBDBDBDBDBDBFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9
+D2D2D2D2D2D2D2D2D28A8A8A8A8A8A8A8A8A5D5D5D5D5D5D5D5D5D5D5D5D4C4C4C4C4C4C4C4C4C
+4545454545454545454141414141414141413E3E3E3E3E3E3E3E3E3E3E3E3C3C3C3C3C3C3C3C3C
+3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3939393939393939393A3A3A3A3A3A3A3A3A3A3A3A
+3B3B3B3B3B3B3B3B3B3E3E3E3E3E3E3E3E3E3B3B3B3B3B3B3B3B3B3939393939393939393A3A3A
+3A3A3A3A3A3A3A3A3A3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3F3F3F
+3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B
+3B3B3B3B3B3B3E3E3E3E3E3E3E3E3E3E3E3E404040404040404040414141414141414141414141
+4141414141413B3B3B3B3B3B3B3B3B3636363636363636363636363B3B3B3B3B3B3B3B3B424242
+424242424242494949494949494949424242424242424242424242353535353535353535393939
+3939393939393C3C3C3C3C3C3C3C3C4141414141414141414040404040404040404040403A3A3A
+3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3C3C3C3C3C3C3C3C3C424242424242
+4242424242424F4F4F4F4F4F4F4F4F5D5D5D5D5D5D5D5D5D6C6C6C6C6C6C6C6C6C878787878787
+878787878787A8A8A8A8A8A8A8A8A8C5C5C5C5C5C5C5C5C5DBDBDBDBDBDBDBDBDBF0F0F0F0F0F0
+F0F0F0FDFDFDFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFF9F9F9F9F9F9F9F9F9CBCBCBCBCBCBCBCBCBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9D2D2D2D2D2D2D2D2D28A8A8A
+8A8A8A8A8A8A5D5D5D5D5D5D5D5D5D5D5D5D4C4C4C4C4C4C4C4C4C454545454545454545414141
+4141414141413E3E3E3E3E3E3E3E3E3E3E3E3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A
+3A3A3A3A3A3A3939393939393939393A3A3A3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3E3E3E
+3E3E3E3E3E3E3B3B3B3B3B3B3B3B3B3939393939393939393A3A3A3A3A3A3A3A3A3A3A3A3C3C3C
+3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E
+3E3E3E3E3E3E3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3E3E3E3E3E3E
+3E3E3E3E3E3E4040404040404040404141414141414141414141414141414141413B3B3B3B3B3B
+3B3B3B3636363636363636363636363B3B3B3B3B3B3B3B3B424242424242424242494949494949
+4949494242424242424242424242423535353535353535353939393939393939393C3C3C3C3C3C
+3C3C3C4141414141414141414040404040404040404040403A3A3A3A3A3A3A3A3A3A3A3A3A3A3A
+3A3A3A3A3A3A3A3A3A3A3A3A3C3C3C3C3C3C3C3C3C4242424242424242424242424F4F4F4F4F4F
+4F4F4F5D5D5D5D5D5D5D5D5D6C6C6C6C6C6C6C6C6C878787878787878787878787A8A8A8A8A8A8
+A8A8A8C5C5C5C5C5C5C5C5C5DBDBDBDBDBDBDBDBDBF0F0F0F0F0F0F0F0F0FDFDFDFDFDFDFDFDFD
+FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9
+CBCBCBCBCBCBCBCBCBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE
+FEFEFEFEFEFEE7E7E7E7E7E7E7E7E79F9F9F9F9F9F9F9F9F6565656565656565654E4E4E4E4E4E
+4E4E4E4E4E4E454545454545454545404040404040404040393939393939393939343434343434
+343434343434313131313131313131313131313131313131313131313131313131303030303030
+303030303030303030303030303030343434343434343434373737373737373737393939393939
+393939373737373737373737373737373737373737373737373737373737373737353535353535
+3535353636363636363636363737373737373737373737373939393939393939393A3A3A3A3A3A
+3A3A3A3939393939393939393939393939393939393A3A3A3A3A3A3A3A3A3A3A3A3C3C3C3C3C3C
+3C3C3C3F3F3F3F3F3F3F3F3F4141414141414141414242424242424242423E3E3E3E3E3E3E3E3E
+3E3E3E3939393939393939393A3A3A3A3A3A3A3A3A444444444444444444484848484848484848
+4848483C3C3C3C3C3C3C3C3C3636363636363636363A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B
+3E3E3E3E3E3E3E3E3E3E3E3E3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A373737373737373737
+3B3B3B3B3B3B3B3B3B3E3E3E3E3E3E3E3E3E3E3E3E4242424242424242424C4C4C4C4C4C4C4C4C
+5858585858585858586868686868686868686868687B7B7B7B7B7B7B7B7B9D9D9D9D9D9D9D9D9D
+CBCBCBCBCBCBCBCBCBE4E4E4E4E4E4E4E4E4F5F5F5F5F5F5F5F5F5F5F5F5FDFDFDFDFDFDFDFDFD
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBD8D8D8D8D8D8D8D8D8FFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEE7E7E7E7E7E7
+E7E7E79F9F9F9F9F9F9F9F9F6565656565656565654E4E4E4E4E4E4E4E4E4E4E4E454545454545
+454545404040404040404040393939393939393939343434343434343434343434313131313131
+313131313131313131313131313131313131313131303030303030303030303030303030303030
+303030343434343434343434373737373737373737393939393939393939373737373737373737
+373737373737373737373737373737373737373737353535353535353535363636363636363636
+3737373737373737373737373939393939393939393A3A3A3A3A3A3A3A3A393939393939393939
+3939393939393939393A3A3A3A3A3A3A3A3A3A3A3A3C3C3C3C3C3C3C3C3C3F3F3F3F3F3F3F3F3F
+4141414141414141414242424242424242423E3E3E3E3E3E3E3E3E3E3E3E393939393939393939
+3A3A3A3A3A3A3A3A3A4444444444444444444848484848484848484848483C3C3C3C3C3C3C3C3C
+3636363636363636363A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3E3E3E3E3E3E3E3E3E3E3E3E
+3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3737373737373737373B3B3B3B3B3B3B3B3B3E3E3E
+3E3E3E3E3E3E3E3E3E4242424242424242424C4C4C4C4C4C4C4C4C585858585858585858686868
+6868686868686868687B7B7B7B7B7B7B7B7B9D9D9D9D9D9D9D9D9DCBCBCBCBCBCBCBCBCBE4E4E4
+E4E4E4E4E4E4F5F5F5F5F5F5F5F5F5F5F5F5FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFBFBFBFBFBFBFBFBFBD8D8D8D8D8D8D8D8D8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEE7E7E7E7E7E7E7E7E79F9F9F9F9F9F9F9F9F
+6565656565656565654E4E4E4E4E4E4E4E4E4E4E4E454545454545454545404040404040404040
+393939393939393939343434343434343434343434313131313131313131313131313131313131
+313131313131313131303030303030303030303030303030303030303030343434343434343434
+373737373737373737393939393939393939373737373737373737373737373737373737373737
+373737373737373737353535353535353535363636363636363636373737373737373737373737
+3939393939393939393A3A3A3A3A3A3A3A3A3939393939393939393939393939393939393A3A3A
+3A3A3A3A3A3A3A3A3A3C3C3C3C3C3C3C3C3C3F3F3F3F3F3F3F3F3F414141414141414141424242
+4242424242423E3E3E3E3E3E3E3E3E3E3E3E3939393939393939393A3A3A3A3A3A3A3A3A444444
+4444444444444848484848484848484848483C3C3C3C3C3C3C3C3C3636363636363636363A3A3A
+3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3E3E3E3E3E3E3E3E3E3E3E3E3B3B3B3B3B3B3B3B3B3A3A3A
+3A3A3A3A3A3A3737373737373737373B3B3B3B3B3B3B3B3B3E3E3E3E3E3E3E3E3E3E3E3E424242
+4242424242424C4C4C4C4C4C4C4C4C5858585858585858586868686868686868686868687B7B7B
+7B7B7B7B7B7B9D9D9D9D9D9D9D9D9DCBCBCBCBCBCBCBCBCBE4E4E4E4E4E4E4E4E4F5F5F5F5F5F5
+F5F5F5F5F5F5FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFB
+FBFBFBD8D8D8D8D8D8D8D8D8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFE
+F9F9F9F9F9F9F9F9F9C4C4C4C4C4C4C4C4C4767676767676767676505050505050505050424242
+4242424242424242423C3C3C3C3C3C3C3C3C373737373737373737313131313131313131303030
+303030303030303030303030303030303030313131313131313131313131313131313131303030
+3030303030302D2D2D2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F313131
+3131313131313131313131313131313232323232323232323232323030303030303030302C2C2C
+2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D303030303030303030323232
+323232323232353535353535353535343434343434343434343434343434343434343434353535
+3535353535353737373737373737373B3B3B3B3B3B3B3B3B454545454545454545474747474747
+4747474747473E3E3E3E3E3E3E3E3E353535353535353535373737373737373737454545454545
+4545454545454848484848484848483A3A3A3A3A3A3A3A3A363636363636363636353535353535
+3535353737373737373737373737373B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3A3A3A3A3A3A
+3A3A3A3939393939393939393C3C3C3C3C3C3C3C3C3C3C3C3E3E3E3E3E3E3E3E3E404040404040
+4040404848484848484848484D4D4D4D4D4D4D4D4D4D4D4D5757575757575757576A6A6A6A6A6A
+6A6A6A969696969696969696CBCBCBCBCBCBCBCBCBE7E7E7E7E7E7E7E7E7E7E7E7F7F7F7F7F7F7
+F7F7F7FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDF4F4F4F4F4F4F4F4F4
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEF9F9F9F9F9F9F9F9F9C4C4C4
+C4C4C4C4C4C47676767676767676765050505050505050504242424242424242424242423C3C3C
+3C3C3C3C3C3C373737373737373737313131313131313131303030303030303030303030303030
+3030303030303131313131313131313131313131313131313030303030303030302D2D2D2D2D2D
+2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F313131313131313131313131313131
+3131313232323232323232323232323030303030303030302C2C2C2C2C2C2C2C2C2C2C2C2C2C2C
+2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D303030303030303030323232323232323232353535353535
+353535343434343434343434343434343434343434343434353535353535353535373737373737
+3737373B3B3B3B3B3B3B3B3B4545454545454545454747474747474747474747473E3E3E3E3E3E
+3E3E3E353535353535353535373737373737373737454545454545454545454545484848484848
+4848483A3A3A3A3A3A3A3A3A363636363636363636353535353535353535373737373737373737
+3737373B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3A3A3A3A3A3A3A3A3A393939393939393939
+3C3C3C3C3C3C3C3C3C3C3C3C3E3E3E3E3E3E3E3E3E404040404040404040484848484848484848
+4D4D4D4D4D4D4D4D4D4D4D4D5757575757575757576A6A6A6A6A6A6A6A6A969696969696969696
+CBCBCBCBCBCBCBCBCBE7E7E7E7E7E7E7E7E7E7E7E7F7F7F7F7F7F7F7F7F7FEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDF4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFDFDFDFDFDFDFDFDFDFDFDFDE1E1E1E1E1E1E1E1E1919191919191919191575757575757
+575757414141414141414141373737373737373737373737343434343434343434313131313131
+313131323232323232323232353535353535353535353535353535353535353535353535353535
+353535363636363636363636353535353535353535323232323232323232323232303030303030
+3030302F2F2F2F2F2F2F2F2F323232323232323232343434343434343434323232323232323232
+3232323131313131313131313030303030303030302D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D
+2D2D2D2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2F2F2F2F2F2F2F2F2F313131313131313131
+3434343434343434343434343636363636363636363939393939393939393C3C3C3C3C3C3C3C3C
+404040404040404040424242424242424242424242404040404040404040363636363636363636
+313131313131313131353535353535353535353535404040404040404040404040404040404040
+373737373737373737313131313131313131313131313131313131313131363636363636363636
+3A3A3A3A3A3A3A3A3A3C3C3C3C3C3C3C3C3C3A3A3A3A3A3A3A3A3A393939393939393939393939
+3C3C3C3C3C3C3C3C3C3939393939393939393F3F3F3F3F3F3F3F3F414141414141414141414141
+4545454545454545454D4D4D4D4D4D4D4D4D5F605F5F605F5F605F8A8A8A8A8A8A8A8A8AC0C0C0
+C0C0C0C0C0C0C0C0C0E0E0E0E0E0E0E0E0E0FBFBFBFBFBFBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC
+FCFCFCFCFCFCE4E4E4E4E4E4E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFD
+FDFDFDE1E1E1E1E1E1E1E1E1919191919191919191575757575757575757414141414141414141
+373737373737373737373737343434343434343434313131313131313131323232323232323232
+353535353535353535353535353535353535353535353535353535353535363636363636363636
+3535353535353535353232323232323232323232323030303030303030302F2F2F2F2F2F2F2F2F
+323232323232323232343434343434343434323232323232323232323232313131313131313131
+3030303030303030302D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B
+2B2B2B2B2B2B2B2B2B2F2F2F2F2F2F2F2F2F313131313131313131343434343434343434343434
+3636363636363636363939393939393939393C3C3C3C3C3C3C3C3C404040404040404040424242
+424242424242424242404040404040404040363636363636363636313131313131313131353535
+353535353535353535404040404040404040404040404040404040373737373737373737313131
+3131313131313131313131313131313131313636363636363636363A3A3A3A3A3A3A3A3A3C3C3C
+3C3C3C3C3C3C3A3A3A3A3A3A3A3A3A3939393939393939393939393C3C3C3C3C3C3C3C3C393939
+3939393939393F3F3F3F3F3F3F3F3F4141414141414141414141414545454545454545454D4D4D
+4D4D4D4D4D4D5F605F5F605F5F605F8A8A8A8A8A8A8A8A8AC0C0C0C0C0C0C0C0C0C0C0C0E0E0E0
+E0E0E0E0E0E0FBFBFBFBFBFBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCE4E4E4E4E4E4
+E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDFDFDFDE1E1E1E1E1E1E1E1E1
+919191919191919191575757575757575757414141414141414141373737373737373737373737
+343434343434343434313131313131313131323232323232323232353535353535353535353535
+353535353535353535353535353535353535363636363636363636353535353535353535323232
+3232323232323232323030303030303030302F2F2F2F2F2F2F2F2F323232323232323232343434
+3434343434343232323232323232323232323131313131313131313030303030303030302D2D2D
+2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2F2F2F
+2F2F2F2F2F2F313131313131313131343434343434343434343434363636363636363636393939
+3939393939393C3C3C3C3C3C3C3C3C404040404040404040424242424242424242424242404040
+404040404040363636363636363636313131313131313131353535353535353535353535404040
+404040404040404040404040404040373737373737373737313131313131313131313131313131
+3131313131313636363636363636363A3A3A3A3A3A3A3A3A3C3C3C3C3C3C3C3C3C3A3A3A3A3A3A
+3A3A3A3939393939393939393939393C3C3C3C3C3C3C3C3C3939393939393939393F3F3F3F3F3F
+3F3F3F4141414141414141414141414545454545454545454D4D4D4D4D4D4D4D4D5F605F5F605F
+5F605F8A8A8A8A8A8A8A8A8AC0C0C0C0C0C0C0C0C0C0C0C0E0E0E0E0E0E0E0E0E0FBFBFBFBFBFB
+FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCE4E4E4E4E4E4E4E4E4FFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE
+FEFEFEFEFEFEF2F2F2F2F2F2F2F2F2F2F2F2B1B1B1B1B1B1B1B1B1666666666666666666454545
+454545454545393939393939393939323232323232323232323232313131313131313131343434
+343434343434353535353535353535323232323232323232323232313131313131313131323232
+323232323232353535353535353535353535353535353535343434343434343434343434353535
+353535353535343434343434343434323232323232323232323232323232323232323232323232
+323232323232353535353535353535373737373737373737323232323232323232303030303030
+3030303030302C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D323232323232323232373737373737
+3737373939393939393939393939393636363636363636363636363636363636363A3A3A3A3A3A
+3A3A3A3E3E3E3E3E3E3E3E3E4141414141414141414141414545454545454545453F3F3F3F3F3F
+3F3F3F3232323232323232322F2F2F2F2F2F2F2F2F2F2F2F3232323232323232323B3B3B3B3B3B
+3B3B3B3B3B3B3B3B3B3B3B3B323232323232323232303030303030303030303030323232323232
+3232323636363636363636363C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B363636363636363636
+3636363939393939393939393737373737373737373939393939393939393C3C3C3C3C3C3C3C3C
+3C3C3C3E3E3E3E3E3E3E3E3E4242424242424242424C4C4C4C4C4C4C4C4C5C5C5C5C5C5C5C5C5C
+838383838383838383838383B7B7B7B7B7B7B7B7B7EFEFEFEFEFEFEFEFEFFEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FBFBFBFBFBFBFBFBFBDDDDDDDDDDDDDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEF2F2F2F2F2F2
+F2F2F2F2F2F2B1B1B1B1B1B1B1B1B1666666666666666666454545454545454545393939393939
+393939323232323232323232323232313131313131313131343434343434343434353535353535
+353535323232323232323232323232313131313131313131323232323232323232353535353535
+353535353535353535353535343434343434343434343434353535353535353535343434343434
+343434323232323232323232323232323232323232323232323232323232323232353535353535
+3535353737373737373737373232323232323232323030303030303030303030302C2C2C2C2C2C
+2C2C2C2D2D2D2D2D2D2D2D2D323232323232323232373737373737373737393939393939393939
+3939393636363636363636363636363636363636363A3A3A3A3A3A3A3A3A3E3E3E3E3E3E3E3E3E
+4141414141414141414141414545454545454545453F3F3F3F3F3F3F3F3F323232323232323232
+2F2F2F2F2F2F2F2F2F2F2F2F3232323232323232323B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B
+323232323232323232303030303030303030303030323232323232323232363636363636363636
+3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B363636363636363636363636393939393939393939
+3737373737373737373939393939393939393C3C3C3C3C3C3C3C3C3C3C3C3E3E3E3E3E3E3E3E3E
+4242424242424242424C4C4C4C4C4C4C4C4C5C5C5C5C5C5C5C5C5C838383838383838383838383
+B7B7B7B7B7B7B7B7B7EFEFEFEFEFEFEFEFEFFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBDDDDDD
+DDDDDDDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEF2F2F2F2F2F2F2F2F2F2F2F2B1B1B1B1B1B1
+B1B1B1666666666666666666454545454545454545393939393939393939323232323232323232
+323232313131313131313131343434343434343434353535353535353535323232323232323232
+323232313131313131313131323232323232323232353535353535353535353535353535353535
+343434343434343434343434353535353535353535343434343434343434323232323232323232
+323232323232323232323232323232323232323232353535353535353535373737373737373737
+3232323232323232323030303030303030303030302C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D
+323232323232323232373737373737373737393939393939393939393939363636363636363636
+3636363636363636363A3A3A3A3A3A3A3A3A3E3E3E3E3E3E3E3E3E414141414141414141414141
+4545454545454545453F3F3F3F3F3F3F3F3F3232323232323232322F2F2F2F2F2F2F2F2F2F2F2F
+3232323232323232323B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B323232323232323232303030
+3030303030303030303232323232323232323636363636363636363C3C3C3C3C3C3C3C3C3B3B3B
+3B3B3B3B3B3B363636363636363636363636393939393939393939373737373737373737393939
+3939393939393C3C3C3C3C3C3C3C3C3C3C3C3E3E3E3E3E3E3E3E3E4242424242424242424C4C4C
+4C4C4C4C4C4C5C5C5C5C5C5C5C5C5C838383838383838383838383B7B7B7B7B7B7B7B7B7EFEFEF
+EFEFEFEFEFEFFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBDDDDDDDDDDDDDDDDDDFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FCFCFCFCFCFCFCFCFCD4D4D4D4D4D4D4D4D4D4D4D4838383838383838383505050505050505050
+3E3E3E3E3E3E3E3E3E363636363636363636323232323232323232323232303030303030303030
+3030303030303030303131313131313131312D2D2D2D2D2D2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B
+2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F303030303030303030303030
+343434343434343434393939393939393939373737373737373737363636363636363636343434
+343434343434343434353535353535353535373737373737373737363636363636363636363636
+3636363636363636363535353535353535353535353535353535353737373737373737373A3A3A
+3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A424242
+4242424242424646464646464646464242424242424242424242424040404040404040403E3E3E
+3E3E3E3E3E3E3737373737373737373232323232323232323232322D2D2D2D2D2D2D2D2D2F2F2F
+2F2F2F2F2F2F343434343434343434353535353535353535323232323232323232323232313131
+3131313131313232323232323232323939393939393939393E3E3E3E3E3E3E3E3E393939393939
+393939393939353535353535353535373737373737373737373737373737373737393939393939
+3939393939393A3A3A3A3A3A3A3A3A3F3F3F3F3F3F3F3F3F4646464646464646464C4C4C4C4C4C
+4C4C4C5A5A5A5A5A5A5A5A5A5A5A5A7E7E7E7E7E7E7E7E7ED2D2D2D2D2D2D2D2D2FCFCFCFCFCFC
+FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFAFAFAFAFAFAFAFAFADBDBDBDBDBDBDBDBDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCD4D4D4
+D4D4D4D4D4D4D4D4D48383838383838383835050505050505050503E3E3E3E3E3E3E3E3E363636
+363636363636323232323232323232323232303030303030303030303030303030303030313131
+3131313131312D2D2D2D2D2D2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D
+2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F303030303030303030303030343434343434343434393939
+393939393939373737373737373737363636363636363636343434343434343434343434353535
+353535353535373737373737373737363636363636363636363636363636363636363636353535
+3535353535353535353535353535353737373737373737373A3A3A3A3A3A3A3A3A3B3B3B3B3B3B
+3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A424242424242424242464646464646
+4646464242424242424242424242424040404040404040403E3E3E3E3E3E3E3E3E373737373737
+3737373232323232323232323232322D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F343434343434
+343434353535353535353535323232323232323232323232313131313131313131323232323232
+3232323939393939393939393E3E3E3E3E3E3E3E3E393939393939393939393939353535353535
+3535353737373737373737373737373737373737373939393939393939393939393A3A3A3A3A3A
+3A3A3A3F3F3F3F3F3F3F3F3F4646464646464646464C4C4C4C4C4C4C4C4C5A5A5A5A5A5A5A5A5A
+5A5A5A7E7E7E7E7E7E7E7E7ED2D2D2D2D2D2D2D2D2FCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFA
+DBDBDBDBDBDBDBDBDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFEFEFEFEFEFEFEFEFEECECECECECECECECECA4A4A4A4A4A4A4A4A4A4A4A45E5E5E
+5E5E5E5E5E5E4545454545454545453C3C3C3C3C3C3C3C3C363636363636363636343434343434
+343434343434343434343434343434343434343434343434343434343434343434313131313131
+3131313131312D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F
+2F2F2F2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C303030303030303030343434343434
+343434343434343434343434323232323232323232323232353535353535353535393939393939
+393939373737373737373737373737373737373737373737373737373737373737373737373737
+373737393939393939393939393939393939393939363636363636363636363636363636363636
+3636363A3A3A3A3A3A3A3A3A444444444444444444494949494949494949464646464646464646
+4646463C3C3C3C3C3C3C3C3C363636363636363636323232323232323232323232323232323232
+3232322F2F2F2F2F2F2F2F2F2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C303030303030303030
+353535353535353535353535323232323232323232303030303030303030343434343434343434
+393939393939393939393939393939393939393939343434343434343434363636363636363636
+3737373737373737373636363636363636363636363737373737373737373E3E3E3E3E3E3E3E3E
+4242424242424242424646464646464646464E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E
+A1A1A1A1A1A1A1A1A1EEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFADBDBDBDBDBDBDBDBDBFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFE
+FEFEFEECECECECECECECECECA4A4A4A4A4A4A4A4A4A4A4A45E5E5E5E5E5E5E5E5E454545454545
+4545453C3C3C3C3C3C3C3C3C363636363636363636343434343434343434343434343434343434
+3434343434343434343434343434343434343434343131313131313131313131312D2D2D2D2D2D
+2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D
+2D2D2D2C2C2C2C2C2C2C2C2C303030303030303030343434343434343434343434343434343434
+323232323232323232323232353535353535353535393939393939393939373737373737373737
+373737373737373737373737373737373737373737373737373737373737393939393939393939
+3939393939393939393636363636363636363636363636363636363636363A3A3A3A3A3A3A3A3A
+4444444444444444444949494949494949494646464646464646464646463C3C3C3C3C3C3C3C3C
+3636363636363636363232323232323232323232323232323232323232322F2F2F2F2F2F2F2F2F
+2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C303030303030303030353535353535353535353535
+323232323232323232303030303030303030343434343434343434393939393939393939393939
+393939393939393939343434343434343434363636363636363636373737373737373737363636
+3636363636363636363737373737373737373E3E3E3E3E3E3E3E3E424242424242424242464646
+4646464646464E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5EA1A1A1A1A1A1A1A1A1EEEEEE
+EEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFAFAFAFAFAFAFAFAFADBDBDBDBDBDBDBDBDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEECECECECECECECECEC
+A4A4A4A4A4A4A4A4A4A4A4A45E5E5E5E5E5E5E5E5E4545454545454545453C3C3C3C3C3C3C3C3C
+363636363636363636343434343434343434343434343434343434343434343434343434343434
+3434343434343434343131313131313131313131312D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D
+2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C
+303030303030303030343434343434343434343434343434343434323232323232323232323232
+353535353535353535393939393939393939373737373737373737373737373737373737373737
+373737373737373737373737373737373737393939393939393939393939393939393939363636
+3636363636363636363636363636363636363A3A3A3A3A3A3A3A3A444444444444444444494949
+4949494949494646464646464646464646463C3C3C3C3C3C3C3C3C363636363636363636323232
+3232323232323232323232323232323232322F2F2F2F2F2F2F2F2F2B2B2B2B2B2B2B2B2B2C2C2C
+2C2C2C2C2C2C303030303030303030353535353535353535353535323232323232323232303030
+303030303030343434343434343434393939393939393939393939393939393939393939343434
+343434343434363636363636363636373737373737373737363636363636363636363636373737
+3737373737373E3E3E3E3E3E3E3E3E4242424242424242424646464646464646464E4E4E4E4E4E
+4E4E4E4E4E4E5E5E5E5E5E5E5E5E5EA1A1A1A1A1A1A1A1A1EEEEEEEEEEEEEEEEEEFEFEFEFEFEFE
+FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFA
+FAFAFADBDBDBDBDBDBDBDBDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C6C6C6C6C6C6C6C6C6737373737373737373737373
+4848484848484848484040404040404040403B3B3B3B3B3B3B3B3B353535353535353535363636
+3636363636363636363939393939393939393A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A373737
+373737373737373737323232323232323232303030303030303030303030303030303030323232
+3232323232322F2F2F2F2F2F2F2F2F2F2F2F282828282828282828272727272727272727292929
+2929292929292C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D313131313131313131353535
+353535353535353535353535353535353535353535353535353535353535353535353535363636
+3636363636363535353535353535353030303030303030302D2D2D2D2D2D2D2D2D2D2D2D2F2F2F
+2F2F2F2F2F2F363636363636363636404040404040404040464646464646464646444444444444
+4444444444443E3E3E3E3E3E3E3E3E3737373737373737373232323232323232322F2F2F2F2F2F
+2F2F2F2F2F2F2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C
+2C2C2C303030303030303030303030303030303030303030303030303030303030323232323232
+323232353535353535353535393939393939393939393939393939393939393939373737373737
+3737373636363636363636363535353535353535353535353535353535353535353A3A3A3A3A3A
+3A3A3A4040404040404040404545454545454545454B4B4B4B4B4B4B4B4B4B4B4B545454545454
+545454737373737373737373C7C7C7C7C7C7C7C7C7FAFAFAFAFAFAFAFAFAFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C7C7C7C7C7C7C7C7C7
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9
+F9F9F9F9F9F9C6C6C6C6C6C6C6C6C6737373737373737373737373484848484848484848404040
+4040404040403B3B3B3B3B3B3B3B3B353535353535353535363636363636363636363636393939
+3939393939393A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A373737373737373737373737323232
+3232323232323030303030303030303030303030303030303232323232323232322F2F2F2F2F2F
+2F2F2F2F2F2F2828282828282828282727272727272727272929292929292929292C2C2C2C2C2C
+2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D313131313131313131353535353535353535353535353535
+353535353535353535353535353535353535353535353535363636363636363636353535353535
+3535353030303030303030302D2D2D2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F363636363636
+3636364040404040404040404646464646464646464444444444444444444444443E3E3E3E3E3E
+3E3E3E3737373737373737373232323232323232322F2F2F2F2F2F2F2F2F2F2F2F2C2C2C2C2C2C
+2C2C2C2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C303030303030303030
+303030303030303030303030303030303030303030323232323232323232353535353535353535
+393939393939393939393939393939393939393939373737373737373737363636363636363636
+3535353535353535353535353535353535353535353A3A3A3A3A3A3A3A3A404040404040404040
+4545454545454545454B4B4B4B4B4B4B4B4B4B4B4B545454545454545454737373737373737373
+C7C7C7C7C7C7C7C7C7FAFAFAFAFAFAFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C7C7C7C7C7C7C7C7C7FFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEE5E5E5E5E5E5E5E5E5969696969696
+9696965656565656565656565656564444444444444444444040404040404040403B3B3B3B3B3B
+3B3B3B3939393939393939393A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A
+3A3A3A3A3A3A3A3A3A3A3A3A363636363636363636363636343434343434343434313131313131
+3131313030303030303030303232323232323232323131313131313131313131312D2D2D2D2D2D
+2D2D2D292929292929292929282828282828282828272727272727272727282828282828282828
+2828282C2C2C2C2C2C2C2C2C303030303030303030323232323232323232323232323232323232
+3232323030303030303030303131313131313131313030303030303030302C2C2C2C2C2C2C2C2C
+2B2B2B2B2B2B2B2B2B2B2B2B2D2D2D2D2D2D2D2D2D323232323232323232393939393939393939
+3E3E3E3E3E3E3E3E3E3B3B3B3B3B3B3B3B3B3B3B3B373737373737373737363636363636363636
+3434343434343434343030303030303030303030302B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B
+2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2D2D2D2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F
+2F2F2F2F2F2F2F2F2F313131313131313131313131313131313131353535353535353535353535
+3737373737373737373B3B3B3B3B3B3B3B3B363636363636363636313131313131313131313131
+3232323232323232323636363636363636363C3C3C3C3C3C3C3C3C4545454545454545454D4D4D
+4D4D4D4D4D4D4D4D4D5252525252525252525D5D5D5D5D5D5D5D5D939393939393939393E7E7E7
+E7E7E7E7E7E7FEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9
+F9F9F9F9F9F9BFBFBFBFBFBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFEFEFEFEFEFEFEFEFEE5E5E5E5E5E5E5E5E5969696969696969696565656565656565656
+5656564444444444444444444040404040404040403B3B3B3B3B3B3B3B3B393939393939393939
+3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A
+363636363636363636363636343434343434343434313131313131313131303030303030303030
+3232323232323232323131313131313131313131312D2D2D2D2D2D2D2D2D292929292929292929
+2828282828282828282727272727272727272828282828282828282828282C2C2C2C2C2C2C2C2C
+303030303030303030323232323232323232323232323232323232323232303030303030303030
+3131313131313131313030303030303030302C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B
+2D2D2D2D2D2D2D2D2D3232323232323232323939393939393939393E3E3E3E3E3E3E3E3E3B3B3B
+3B3B3B3B3B3B3B3B3B373737373737373737363636363636363636343434343434343434303030
+3030303030303030302B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2B2B2B
+2B2B2B2B2B2B2D2D2D2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F313131
+3131313131313131313131313131313535353535353535353535353737373737373737373B3B3B
+3B3B3B3B3B3B363636363636363636313131313131313131313131323232323232323232363636
+3636363636363C3C3C3C3C3C3C3C3C4545454545454545454D4D4D4D4D4D4D4D4D4D4D4D525252
+5252525252525D5D5D5D5D5D5D5D5D939393939393939393E7E7E7E7E7E7E7E7E7FEFEFEFEFEFE
+FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9BFBFBFBFBFBF
+BFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFE
+E5E5E5E5E5E5E5E5E5969696969696969696565656565656565656565656444444444444444444
+4040404040404040403B3B3B3B3B3B3B3B3B3939393939393939393A3A3A3A3A3A3A3A3A3A3A3A
+3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A363636363636363636363636
+343434343434343434313131313131313131303030303030303030323232323232323232313131
+3131313131313131312D2D2D2D2D2D2D2D2D292929292929292929282828282828282828272727
+2727272727272828282828282828282828282C2C2C2C2C2C2C2C2C303030303030303030323232
+323232323232323232323232323232323232303030303030303030313131313131313131303030
+3030303030302C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2D2D2D2D2D2D2D2D2D323232
+3232323232323939393939393939393E3E3E3E3E3E3E3E3E3B3B3B3B3B3B3B3B3B3B3B3B373737
+3737373737373636363636363636363434343434343434343030303030303030303030302B2B2B
+2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2D2D2D2D2D2D
+2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F313131313131313131313131313131
+3131313535353535353535353535353737373737373737373B3B3B3B3B3B3B3B3B363636363636
+3636363131313131313131313131313232323232323232323636363636363636363C3C3C3C3C3C
+3C3C3C4545454545454545454D4D4D4D4D4D4D4D4D4D4D4D5252525252525252525D5D5D5D5D5D
+5D5D5D939393939393939393E7E7E7E7E7E7E7E7E7FEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9BFBFBFBFBFBFBFBFBFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFAC4C4C4C4C4C4C4C4C46F6F6F
+6F6F6F6F6F6F4949494949494949494949494444444444444444444040404040404040403C3C3C
+3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C393939393939393939353535
+3535353535353434343434343434343131313131313131313131313030303030303030302D2D2D
+2D2D2D2D2D2D303030303030303030323232323232323232323232323232323232323232313131
+3131313131313131313131313131312C2C2C2C2C2C2C2C2C282828282828282828292929292929
+2929292929292D2D2D2D2D2D2D2D2D313131313131313131363636363636363636363636363636
+3636363636363232323232323232323131313131313131312F2F2F2F2F2F2F2F2F2F2F2F2F2F2F
+2F2F2F3232323232323232323232323A3A3A3A3A3A3A3A3A3C3C3C3C3C3C3C3C3C3E3E3E3E3E3E
+3E3E3E3C3C3C3C3C3C3C3C3C393939393939393939393939353535353535353535313131313131
+3131313030303030303030303030303030303030303030302F2F2F2F2F2F2F2F2F2C2C2C2C2C2C
+2C2C2C2828282828282828282929292929292929292C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D
+2D2D2D2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F313131313131313131
+3131313535353535353535353A3A3A3A3A3A3A3A3A373737373737373737323232323232323232
+323232313131313131313131343434343434343434373737373737373737404040404040404040
+4949494949494949494949495151515151515151515959595959595959596E6E6E6E6E6E6E6E6E
+BDBDBDBDBDBDBDBDBDF8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+F9F9F9F9F9F9F9F9F9C9C9C9C9C9C9C9C9C9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFAFAFAFAFAFAFAFAFAC4C4C4C4C4C4C4C4C46F6F6F6F6F6F6F6F6F494949494949
+4949494949494444444444444444444040404040404040403C3C3C3C3C3C3C3C3C3C3C3C3C3C3C
+3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C393939393939393939353535353535353535343434343434
+3434343131313131313131313131313030303030303030302D2D2D2D2D2D2D2D2D303030303030
+303030323232323232323232323232323232323232323232313131313131313131313131313131
+3131312C2C2C2C2C2C2C2C2C2828282828282828282929292929292929292929292D2D2D2D2D2D
+2D2D2D313131313131313131363636363636363636363636363636363636363636323232323232
+3232323131313131313131312F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F323232323232323232
+3232323A3A3A3A3A3A3A3A3A3C3C3C3C3C3C3C3C3C3E3E3E3E3E3E3E3E3E3C3C3C3C3C3C3C3C3C
+393939393939393939393939353535353535353535313131313131313131303030303030303030
+3030303030303030303030302F2F2F2F2F2F2F2F2F2C2C2C2C2C2C2C2C2C282828282828282828
+2929292929292929292C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F
+2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F313131313131313131313131353535353535353535
+3A3A3A3A3A3A3A3A3A373737373737373737323232323232323232323232313131313131313131
+343434343434343434373737373737373737404040404040404040494949494949494949494949
+5151515151515151515959595959595959596E6E6E6E6E6E6E6E6EBDBDBDBDBDBDBDBDBDF8F8F8
+F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C9C9C9
+C9C9C9C9C9C9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEEDEDEDEDEDED
+EDEDED9D9D9D9D9D9D9D9D9D575757575757575757474747474747474747474747454545454545
+4545453F3F3F3F3F3F3F3F3F3C3C3C3C3C3C3C3C3C393939393939393939373737373737373737
+3737373535353535353535353232323232323232323131313131313131312D2D2D2D2D2D2D2D2D
+2D2D2D2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F303030303030303030323232323232323232
+323232323232323232323232343434343434343434343434343434343434303030303030303030
+2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F2F2F2F303030303030303030313131313131313131
+353535353535353535393939393939393939393939353535353535353535313131313131313131
+2F2F2F2F2F2F2F2F2F3030303030303030303535353535353535353535353E3E3E3E3E3E3E3E3E
+4141414141414141414040404040404040403C3C3C3C3C3C3C3C3C373737373737373737373737
+3535353535353535353434343434343434343030303030303030302D2D2D2D2D2D2D2D2D2D2D2D
+2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B282828282828282828272727272727272727292929
+2929292929292929292B2B2B2B2B2B2B2B2B2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2D2D2D
+2D2D2D2D2D2D303030303030303030303030353535353535353535393939393939393939393939
+393939393939343434343434343434343434323232323232323232353535353535353535373737
+3737373737373B3B3B3B3B3B3B3B3B4242424242424242424242424D4D4D4D4D4D4D4D4D555555
+555555555555616161616161616161939393939393939393E5E5E5E5E5E5E5E5E5E5E5E5FEFEFE
+FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8F8F8F8F8F8B9B9B9B9B9B9B9B9B9FFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEEDEDEDEDEDEDEDEDED9D9D9D9D9D9D9D9D9D
+5757575757575757574747474747474747474747474545454545454545453F3F3F3F3F3F3F3F3F
+3C3C3C3C3C3C3C3C3C393939393939393939373737373737373737373737353535353535353535
+3232323232323232323131313131313131312D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D
+2F2F2F2F2F2F2F2F2F303030303030303030323232323232323232323232323232323232323232
+3434343434343434343434343434343434343030303030303030302D2D2D2D2D2D2D2D2D2F2F2F
+2F2F2F2F2F2F2F2F2F303030303030303030313131313131313131353535353535353535393939
+3939393939393939393535353535353535353131313131313131312F2F2F2F2F2F2F2F2F303030
+3030303030303535353535353535353535353E3E3E3E3E3E3E3E3E414141414141414141404040
+4040404040403C3C3C3C3C3C3C3C3C373737373737373737373737353535353535353535343434
+3434343434343030303030303030302D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B
+2B2B2B2B2B2B2828282828282828282727272727272727272929292929292929292929292B2B2B
+2B2B2B2B2B2B2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D303030303030
+303030303030353535353535353535393939393939393939393939393939393939343434343434
+3434343434343232323232323232323535353535353535353737373737373737373B3B3B3B3B3B
+3B3B3B4242424242424242424242424D4D4D4D4D4D4D4D4D555555555555555555616161616161
+616161939393939393939393E5E5E5E5E5E5E5E5E5E5E5E5FEFEFEFEFEFEFEFEFEFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFF8F8F8F8F8F8F8F8F8B9B9B9B9B9B9B9B9B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FEFEFEFEFEFEFEFEFEEDEDEDEDEDEDEDEDED9D9D9D9D9D9D9D9D9D575757575757575757474747
+4747474747474747474545454545454545453F3F3F3F3F3F3F3F3F3C3C3C3C3C3C3C3C3C393939
+393939393939373737373737373737373737353535353535353535323232323232323232313131
+3131313131312D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F303030
+303030303030323232323232323232323232323232323232323232343434343434343434343434
+3434343434343030303030303030302D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F2F2F2F303030
+303030303030313131313131313131353535353535353535393939393939393939393939353535
+3535353535353131313131313131312F2F2F2F2F2F2F2F2F303030303030303030353535353535
+3535353535353E3E3E3E3E3E3E3E3E4141414141414141414040404040404040403C3C3C3C3C3C
+3C3C3C373737373737373737373737353535353535353535343434343434343434303030303030
+3030302D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B282828282828
+2828282727272727272727272929292929292929292929292B2B2B2B2B2B2B2B2B2F2F2F2F2F2F
+2F2F2F2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D303030303030303030303030353535353535
+353535393939393939393939393939393939393939343434343434343434343434323232323232
+3232323535353535353535353737373737373737373B3B3B3B3B3B3B3B3B424242424242424242
+4242424D4D4D4D4D4D4D4D4D555555555555555555616161616161616161939393939393939393
+E5E5E5E5E5E5E5E5E5E5E5E5FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8F8F8F8F8F8
+B9B9B9B9B9B9B9B9B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFACACACA
+CACACACACACA7575757575757575754C4C4C4C4C4C4C4C4C464646464646464646464646404040
+4040404040403939393939393939393535353535353535353030303030303030302D2D2D2D2D2D
+2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F3030303030303030302F2F2F2F2F2F
+2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F313131313131313131343434343434343434353535353535
+353535323232323232323232323232323232323232323232313131313131313131303030303030
+3030303030303030303030303030303030303030303030302D2D2D2D2D2D2D2D2D2B2B2B2B2B2B
+2B2B2B2D2D2D2D2D2D2D2D2D323232323232323232323232323232323232323232303030303030
+3030302F2F2F2F2F2F2F2F2F2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F2F2F2F353535353535
+3535353A3A3A3A3A3A3A3A3A373737373737373737343434343434343434303030303030303030
+3030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B
+2B2B2B2B2B2B2B2B2B2B2B2B292929292929292929272727272727272727252525252525252525
+2727272727272727272727272B2B2B2B2B2B2B2B2B2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F
+2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2D2D2D323232323232323232373737373737373737
+3A3A3A3A3A3A3A3A3A373737373737373737373737323232323232323232323232323232323232
+3535353535353535353939393939393939393E3E3E3E3E3E3E3E3E3E3E3E474747474747474747
+4C4C4C4C4C4C4C4C4C585858585858585858737373737373737373C3C3C3C3C3C3C3C3C3C3C3C3
+F9F9F9F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C3C3C3C3C3C3C3C3C3FFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFACACACACACACACACACA757575757575
+7575754C4C4C4C4C4C4C4C4C464646464646464646464646404040404040404040393939393939
+3939393535353535353535353030303030303030302D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D
+2D2D2D2F2F2F2F2F2F2F2F2F3030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F
+2F2F2F313131313131313131343434343434343434353535353535353535323232323232323232
+323232323232323232323232313131313131313131303030303030303030303030303030303030
+3030303030303030303030302D2D2D2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B2D2D2D2D2D2D2D2D2D
+3232323232323232323232323232323232323232323030303030303030302F2F2F2F2F2F2F2F2F
+2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F2F2F2F3535353535353535353A3A3A3A3A3A3A3A3A
+3737373737373737373434343434343434343030303030303030303030302F2F2F2F2F2F2F2F2F
+2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B
+292929292929292929272727272727272727252525252525252525272727272727272727272727
+2B2B2B2B2B2B2B2B2B2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2D2D2D
+2D2D2D2D2D2D2D2D2D3232323232323232323737373737373737373A3A3A3A3A3A3A3A3A373737
+373737373737373737323232323232323232323232323232323232353535353535353535393939
+3939393939393E3E3E3E3E3E3E3E3E3E3E3E4747474747474747474C4C4C4C4C4C4C4C4C585858
+585858585858737373737373737373C3C3C3C3C3C3C3C3C3C3C3C3F9F9F9F9F9F9F9F9F9FFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C3C3C3C3C3C3C3C3C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFAFAFAFAFAFAFAFAFACACACACACACACACACA7575757575757575754C4C4C4C4C4C4C4C4C
+464646464646464646464646404040404040404040393939393939393939353535353535353535
+3030303030303030302D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F
+3030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F313131313131313131
+343434343434343434353535353535353535323232323232323232323232323232323232323232
+313131313131313131303030303030303030303030303030303030303030303030303030303030
+2D2D2D2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B2D2D2D2D2D2D2D2D2D323232323232323232323232
+3232323232323232323030303030303030302F2F2F2F2F2F2F2F2F2C2C2C2C2C2C2C2C2C2F2F2F
+2F2F2F2F2F2F2F2F2F3535353535353535353A3A3A3A3A3A3A3A3A373737373737373737343434
+3434343434343030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2D2D2D
+2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B292929292929292929272727
+2727272727272525252525252525252727272727272727272727272B2B2B2B2B2B2B2B2B2D2D2D
+2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2D2D2D323232
+3232323232323737373737373737373A3A3A3A3A3A3A3A3A373737373737373737373737323232
+3232323232323232323232323232323535353535353535353939393939393939393E3E3E3E3E3E
+3E3E3E3E3E3E4747474747474747474C4C4C4C4C4C4C4C4C585858585858585858737373737373
+737373C3C3C3C3C3C3C3C3C3C3C3C3F9F9F9F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9
+F9F9F9C3C3C3C3C3C3C3C3C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDEDEDEDEDEDED
+A3A3A3A3A3A3A3A3A35C5C5C5C5C5C5C5C5C474747474747474747414141414141414141414141
+3939393939393939393131313131313131312F2F2F2F2F2F2F2F2F2C2C2C2C2C2C2C2C2C2B2B2B
+2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F323232323232323232303030
+303030303030303030303030303030303030313131313131313131393939393939393939393939
+393939393939343434343434343434343434323232323232323232313131313131313131303030
+3030303030303131313131313131313232323232323232323232322F2F2F2F2F2F2F2F2F2D2D2D
+2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2F2F2F
+2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F2F2F2F303030
+3030303030303232323232323232323636363636363636363A3A3A3A3A3A3A3A3A3C3C3C3C3C3C
+3C3C3C3C3C3C3737373737373737373232323232323232322D2D2D2D2D2D2D2D2D292929292929
+292929292929292929292929292929282828282828282828272727272727272727252525252525
+2525252828282828282828282828282B2B2B2B2B2B2B2B2B2F2F2F2F2F2F2F2F2F303030303030
+3030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F303030303030303030323232323232
+323232363636363636363636373737373737373737373737343434343434343434313131313131
+3131313434343434343434343939393939393939393C3C3C3C3C3C3C3C3C3C3C3C414141414141
+414141474747474747474747505050505050505050616161616161616161989898989898989898
+989898E9E9E9E9E9E9E9E9E9FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFAD2D2D2D2D2D2D2D2D2
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDEDEDEDEDEDEDA3A3A3A3A3A3A3A3A35C5C5C
+5C5C5C5C5C5C474747474747474747414141414141414141414141393939393939393939313131
+3131313131312F2F2F2F2F2F2F2F2F2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C
+2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F323232323232323232303030303030303030303030303030
+303030303030313131313131313131393939393939393939393939393939393939343434343434
+343434343434323232323232323232313131313131313131303030303030303030313131313131
+3131313232323232323232323232322F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D
+2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F
+2F2F2F2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F2F2F2F303030303030303030323232323232
+3232323636363636363636363A3A3A3A3A3A3A3A3A3C3C3C3C3C3C3C3C3C3C3C3C373737373737
+3737373232323232323232322D2D2D2D2D2D2D2D2D292929292929292929292929292929292929
+292929282828282828282828272727272727272727252525252525252525282828282828282828
+2828282B2B2B2B2B2B2B2B2B2F2F2F2F2F2F2F2F2F303030303030303030303030303030303030
+2F2F2F2F2F2F2F2F2F2F2F2F303030303030303030323232323232323232363636363636363636
+373737373737373737373737343434343434343434313131313131313131343434343434343434
+3939393939393939393C3C3C3C3C3C3C3C3C3C3C3C414141414141414141474747474747474747
+505050505050505050616161616161616161989898989898989898989898E9E9E9E9E9E9E9E9E9
+FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFAD2D2D2D2D2D2D2D2D2FFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFD
+FDFDFDFDFDFDDCDCDCDCDCDCDCDCDC8282828282828282824E4E4E4E4E4E4E4E4E404040404040
+4040403737373737373737373737373030303030303030302D2D2D2D2D2D2D2D2D2D2D2D2D2D2D
+2D2D2D2D2D2D2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C
+2C2C2C2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C
+2C2C2C303030303030303030323232323232323232323232323232323232323232323232323232
+323232323232323232323232313131313131313131323232323232323232313131313131313131
+3131312F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C282828282828282828
+2828282C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B
+2929292929292929292929292B2B2B2B2B2B2B2B2B2D2D2D2D2D2D2D2D2D313131313131313131
+3A3A3A3A3A3A3A3A3A4141414141414141414141414242424242424242423C3C3C3C3C3C3C3C3C
+3636363636363636363131313131313131313131312D2D2D2D2D2D2D2D2D292929292929292929
+2727272727272727272828282828282828282B2B2B2B2B2B2B2B2B2B2B2B303030303030303030
+353535353535353535373737373737373737363636363636363636363636363636363636363636
+343434343434343434313131313131313131323232323232323232343434343434343434343434
+3535353535353535353131313131313131313232323232323232323636363636363636363E3E3E
+3E3E3E3E3E3E3E3E3E414141414141414141424242424242424242494949494949494949565656
+565656565656767676767676767676767676CACACACACACACACACAFAFAFAFAFAFAFAFAFAFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC
+FCFCFCFCFCFCE4E4E4E4E4E4E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDFDFDFDDCDCDCDCDCDC
+DCDCDC8282828282828282824E4E4E4E4E4E4E4E4E404040404040404040373737373737373737
+3737373030303030303030302D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D
+2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F
+2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C303030303030303030
+323232323232323232323232323232323232323232323232323232323232323232323232323232
+3131313131313131313232323232323232323131313131313131313131312F2F2F2F2F2F2F2F2F
+2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2828282828282828282828282C2C2C2C2C2C2C2C2C
+2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B292929292929292929292929
+2B2B2B2B2B2B2B2B2B2D2D2D2D2D2D2D2D2D3131313131313131313A3A3A3A3A3A3A3A3A414141
+4141414141414141414242424242424242423C3C3C3C3C3C3C3C3C363636363636363636313131
+3131313131313131312D2D2D2D2D2D2D2D2D292929292929292929272727272727272727282828
+2828282828282B2B2B2B2B2B2B2B2B2B2B2B303030303030303030353535353535353535373737
+373737373737363636363636363636363636363636363636363636343434343434343434313131
+313131313131323232323232323232343434343434343434343434353535353535353535313131
+3131313131313232323232323232323636363636363636363E3E3E3E3E3E3E3E3E3E3E3E414141
+414141414141424242424242424242494949494949494949565656565656565656767676767676
+767676767676CACACACACACACACACAFAFAFAFAFAFAFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCE4E4E4E4E4E4
+E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDFDFDFDDCDCDCDCDCDCDCDCDC828282828282828282
+4E4E4E4E4E4E4E4E4E404040404040404040373737373737373737373737303030303030303030
+2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B2B2B2B
+2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2D2D2D
+2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C303030303030303030323232323232323232323232
+323232323232323232323232323232323232323232323232323232313131313131313131323232
+3232323232323131313131313131313131312F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2C2C2C
+2C2C2C2C2C2C2828282828282828282828282C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2C2C2C
+2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2929292929292929292929292B2B2B2B2B2B2B2B2B2D2D2D
+2D2D2D2D2D2D3131313131313131313A3A3A3A3A3A3A3A3A414141414141414141414141424242
+4242424242423C3C3C3C3C3C3C3C3C3636363636363636363131313131313131313131312D2D2D
+2D2D2D2D2D2D2929292929292929292727272727272727272828282828282828282B2B2B2B2B2B
+2B2B2B2B2B2B303030303030303030353535353535353535373737373737373737363636363636
+363636363636363636363636363636343434343434343434313131313131313131323232323232
+323232343434343434343434343434353535353535353535313131313131313131323232323232
+3232323636363636363636363E3E3E3E3E3E3E3E3E3E3E3E414141414141414141424242424242
+424242494949494949494949565656565656565656767676767676767676767676CACACACACACA
+CACACAFAFAFAFAFAFAFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCE4E4E4E4E4E4E4E4E4FFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEF9F9F9
+F9F9F9F9F9F9F9F9F9BFBFBFBFBFBFBFBFBF686868686868686868424242424242424242373737
+3737373737373030303030303030303030302D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C
+2C2C2C2C2C2C2929292929292929292828282828282828282828282929292929292929292B2B2B
+2B2B2B2B2B2B2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D292929
+2929292929292727272727272727272B2B2B2B2B2B2B2B2B2F2F2F2F2F2F2F2F2F2F2F2F303030
+3030303030303131313131313131313131313131313131313232323232323232322F2F2F2F2F2F
+2F2F2F2F2F2F292929292929292929272727272727272727272727272727272727282828282828
+2828282828283131313131313131313535353535353535353434343434343434342D2D2D2D2D2D
+2D2D2D2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2D2D2D2D2D2D2D2D2D323232323232
+3232323434343434343434343737373737373737373737373C3C3C3C3C3C3C3C3C3B3B3B3B3B3B
+3B3B3B3737373737373737373434343434343434343434342F2F2F2F2F2F2F2F2F2C2C2C2C2C2C
+2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B303030303030303030303030373737373737
+373737404040404040404040464646464646464646464646464646464646444444444444444444
+4444443F3F3F3F3F3F3F3F3F3535353535353535353030303030303030302D2D2D2D2D2D2D2D2D
+2D2D2D303030303030303030323232323232323232323232323232323232323232323232323232
+373737373737373737373737404040404040404040444444444444444444464646464646464646
+4F4F4F4F4F4F4F4F4F626262626262626262626262A0A0A0A0A0A0A0A0A0EDEDEDEDEDEDEDEDED
+FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FBFBFBFBFBFBFBFBFBD9D9D9D9D9D9D9D9D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEF9F9F9F9F9F9F9F9F9F9F9F9BFBFBF
+BFBFBFBFBFBF686868686868686868424242424242424242373737373737373737303030303030
+3030303030302D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C292929292929
+2929292828282828282828282828282929292929292929292B2B2B2B2B2B2B2B2B2D2D2D2D2D2D
+2D2D2D2F2F2F2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D292929292929292929272727272727
+2727272B2B2B2B2B2B2B2B2B2F2F2F2F2F2F2F2F2F2F2F2F303030303030303030313131313131
+3131313131313131313131313232323232323232322F2F2F2F2F2F2F2F2F2F2F2F292929292929
+292929272727272727272727272727272727272727282828282828282828282828313131313131
+3131313535353535353535353434343434343434342D2D2D2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B
+2B2B2B2B2B2B2B2B2B2B2B2B2D2D2D2D2D2D2D2D2D323232323232323232343434343434343434
+3737373737373737373737373C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B373737373737373737
+3434343434343434343434342F2F2F2F2F2F2F2F2F2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B
+2B2B2B2B2B2B2B2B2B303030303030303030303030373737373737373737404040404040404040
+4646464646464646464646464646464646464444444444444444444444443F3F3F3F3F3F3F3F3F
+3535353535353535353030303030303030302D2D2D2D2D2D2D2D2D2D2D2D303030303030303030
+323232323232323232323232323232323232323232323232323232373737373737373737373737
+4040404040404040404444444444444444444646464646464646464F4F4F4F4F4F4F4F4F626262
+626262626262626262A0A0A0A0A0A0A0A0A0EDEDEDEDEDEDEDEDEDFEFEFEFEFEFEFEFEFEFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBD9D9D9
+D9D9D9D9D9D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFEFEFEFEFEFEFEFEFEE8E9E8E8E9E8E8E9E8E8E9E8979797979797979797505050505050
+5050503B3B3B3B3B3B3B3B3B3434343434343434342F2F2F2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D
+2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C
+2C2C2C2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F323232323232323232323232323232323232
+3232322F2F2F2F2F2F2F2F2F2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C
+2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C
+2F2F2F2F2F2F2F2F2F3030303030303030303030302D2D2D2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B
+2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F2F2F2F3535353535353535353A3A3A3A3A3A3A3A3A
+3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E393939393939393939393939393939393939393939
+3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3939393939393939393A3A3A3A3A3A3A3A3A3A3A3A
+3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A363636363636363636343434343434343434343434
+3131313131313131313131313131313131313030303030303030303232323232323232323C3C3C
+3C3C3C3C3C3C3C3C3C4B4B4B4B4B4B4B4B4B565656565656565656616161616161616161636363
+6363636363635D5D5D5D5D5D5D5D5D5D5D5D565656565656565656454545454545454545363636
+3636363636362F2F2F2F2F2F2F2F2F2F2F2F2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F353535
+3535353535353434343434343434343636363636363636363636363B3B3B3B3B3B3B3B3B414141
+4141414141414646464646464646464B4B4B4B4B4B4B4B4B545454545454545454545454777777
+777777777777CECECECECECECECECEFAFAFAFAFAFAFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C9C9C9C9C9C9C9C9C9FFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFE
+E8E9E8E8E9E8E8E9E8E8E9E89797979797979797975050505050505050503B3B3B3B3B3B3B3B3B
+3434343434343434342F2F2F2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D
+2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C
+2F2F2F2F2F2F2F2F2F3232323232323232323232323232323232323232322F2F2F2F2F2F2F2F2F
+2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C
+2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F303030
+3030303030303030302D2D2D2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2F2F2F
+2F2F2F2F2F2F2F2F2F3535353535353535353A3A3A3A3A3A3A3A3A3F3F3F3F3F3F3F3F3F3E3E3E
+3E3E3E3E3E3E3939393939393939393939393939393939393939393A3A3A3A3A3A3A3A3A3A3A3A
+3A3A3A3A3A3A3939393939393939393A3A3A3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3A3A3A
+3A3A3A3A3A3A363636363636363636343434343434343434343434313131313131313131313131
+3131313131313030303030303030303232323232323232323C3C3C3C3C3C3C3C3C3C3C3C4B4B4B
+4B4B4B4B4B4B5656565656565656566161616161616161616363636363636363635D5D5D5D5D5D
+5D5D5D5D5D5D5656565656565656564545454545454545453636363636363636362F2F2F2F2F2F
+2F2F2F2F2F2F2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F353535353535353535343434343434
+3434343636363636363636363636363B3B3B3B3B3B3B3B3B414141414141414141464646464646
+4646464B4B4B4B4B4B4B4B4B545454545454545454545454777777777777777777CECECECECECE
+CECECEFAFAFAFAFAFAFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFF9F9F9F9F9F9F9F9F9C9C9C9C9C9C9C9C9C9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEE8E9E8E8E9E8E8E9E8E8E9E8
+9797979797979797975050505050505050503B3B3B3B3B3B3B3B3B3434343434343434342F2F2F
+2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D
+2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F323232
+3232323232323232323232323232323232322F2F2F2F2F2F2F2F2F2B2B2B2B2B2B2B2B2B2C2C2C
+2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2C2C2C
+2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F3030303030303030303030302D2D2D
+2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F2F2F2F353535
+3535353535353A3A3A3A3A3A3A3A3A3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E393939393939
+3939393939393939393939393939393A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939393939
+3939393A3A3A3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A363636363636
+363636343434343434343434343434313131313131313131313131313131313131303030303030
+3030303232323232323232323C3C3C3C3C3C3C3C3C3C3C3C4B4B4B4B4B4B4B4B4B565656565656
+5656566161616161616161616363636363636363635D5D5D5D5D5D5D5D5D5D5D5D565656565656
+5656564545454545454545453636363636363636362F2F2F2F2F2F2F2F2F2F2F2F2C2C2C2C2C2C
+2C2C2C2F2F2F2F2F2F2F2F2F353535353535353535343434343434343434363636363636363636
+3636363B3B3B3B3B3B3B3B3B4141414141414141414646464646464646464B4B4B4B4B4B4B4B4B
+545454545454545454545454777777777777777777CECECECECECECECECEFAFAFAFAFAFAFAFAFA
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9
+C9C9C9C9C9C9C9C9C9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFF8F8F8F8F8F8F8F8F8C3C3C3C3C3C3C3C3C3C3C3C36C6C6C6C6C6C6C6C6C3F3F3F
+3F3F3F3F3F3F3535353535353535353131313131313131312F2F2F2F2F2F2F2F2F2F2F2F303030
+3030303030303030303030303030303131313131313131313030303030303030302C2C2C2C2C2C
+2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F3232323232323232323232323232323232322D2D2D2D2D2D
+2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D
+2D2D2D2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C
+2C2C2C2F2F2F2F2F2F2F2F2F323232323232323232323232353535353535353535343434343434
+343434343434343434343434303030303030303030303030323232323232323232363636363636
+3636363E3E3E3E3E3E3E3E3E444444444444444444404040404040404040404040404040404040
+4040404141414141414141413F3F3F3F3F3F3F3F3F3B3B3B3B3B3B3B3B3B393939393939393939
+393939363636363636363636343434343434343434313131313131313131303030303030303030
+303030313131313131313131313131313131313131363636363636363636404040404040404040
+5151515151515151515151516A6A6A6A6A6A6A6A6A777777777777777777818181818181818181
+8787878787878787877C7C7C7C7C7C7C7C7C7C7C7C6E6E6E6E6E6E6E6E6E5A5A5A5A5A5A5A5A5A
+4141414141414141413232323232323232323232322C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D
+3434343434343434343535353535353535353636363636363636363636363A3A3A3A3A3A3A3A3A
+3F3F3F3F3F3F3F3F3F4646464646464646464C4C4C4C4C4C4C4C4C505050505050505050505050
+5D5D5D5D5D5D5D5D5D9D9D9D9D9D9D9D9D9DEDEDEDEDEDEDEDEDEDFEFEFEFEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDEDEDEDEDEDEDEDEDEDFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8F8F8
+F8F8F8C3C3C3C3C3C3C3C3C3C3C3C36C6C6C6C6C6C6C6C6C3F3F3F3F3F3F3F3F3F353535353535
+3535353131313131313131312F2F2F2F2F2F2F2F2F2F2F2F303030303030303030303030303030
+3030303131313131313131313030303030303030302C2C2C2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F
+2F2F2F3232323232323232323232323232323232322D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C
+2C2C2C2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B
+2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F
+323232323232323232323232353535353535353535343434343434343434343434343434343434
+3030303030303030303030303232323232323232323636363636363636363E3E3E3E3E3E3E3E3E
+444444444444444444404040404040404040404040404040404040404040414141414141414141
+3F3F3F3F3F3F3F3F3F3B3B3B3B3B3B3B3B3B393939393939393939393939363636363636363636
+343434343434343434313131313131313131303030303030303030303030313131313131313131
+313131313131313131363636363636363636404040404040404040515151515151515151515151
+6A6A6A6A6A6A6A6A6A7777777777777777778181818181818181818787878787878787877C7C7C
+7C7C7C7C7C7C7C7C7C6E6E6E6E6E6E6E6E6E5A5A5A5A5A5A5A5A5A414141414141414141323232
+3232323232323232322C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D343434343434343434353535
+3535353535353636363636363636363636363A3A3A3A3A3A3A3A3A3F3F3F3F3F3F3F3F3F464646
+4646464646464C4C4C4C4C4C4C4C4C5050505050505050505050505D5D5D5D5D5D5D5D5D9D9D9D
+9D9D9D9D9D9DEDEDEDEDEDEDEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFDFDFDFDFDFDFDFDFDEDEDEDEDEDEDEDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEE7E7E7E7E7E7E7E7E7969696969696969696
+9696964D4D4D4D4D4D4D4D4D353535353535353535303030303030303030313131313131313131
+313131313131313131313131313131313131313131313131313131313131313131313131313131
+3030303030303030302F2F2F2F2F2F2F2F2F2F2F2F313131313131313131323232323232323232
+3030303030303030302B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C
+2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C
+2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D313131313131313131313131
+353535353535353535363636363636363636343434343434343434303030303030303030303030
+2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F343434343434343434373737373737373737373737
+3737373737373737373A3A3A3A3A3A3A3A3A3E3E3E3E3E3E3E3E3E3A3A3A3A3A3A3A3A3A353535
+353535353535323232323232323232323232323232323232323232313131313131313131303030
+3030303030302F2F2F2F2F2F2F2F2F2F2F2F303030303030303030363636363636363636454545
+4545454545455959595959595959597575757575757575757575759191919191919191919D9D9D
+9D9D9D9D9D9DA2A2A2A2A2A2A2A2A2A6A6A6A6A6A6A6A6A69C9C9C9C9C9C9C9C9C9C9C9C888888
+8888888888887171717171717171715252525252525252523939393939393939393939392F2F2F
+2F2F2F2F2F2F2C2C2C2C2C2C2C2C2C313131313131313131363636363636363636363636363636
+3636363636363939393939393939393C3C3C3C3C3C3C3C3C424242424242424242474747474747
+4747474F4F4F4F4F4F4F4F4F4F4F4F565656565656565656747474747474747474CFCFCFCFCFCF
+CFCFCFFDFDFDFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFD
+FDFDFDEDEDEDEDEDEDEDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FEFEFEFEFEFEFEFEFEE7E7E7E7E7E7E7E7E79696969696969696969696964D4D4D4D4D4D4D4D4D
+353535353535353535303030303030303030313131313131313131313131313131313131313131
+3131313131313131313131313131313131313131313131313131313030303030303030302F2F2F
+2F2F2F2F2F2F2F2F2F3131313131313131313232323232323232323030303030303030302B2B2B
+2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F2D2D2D
+2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2C2C2C
+2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D313131313131313131313131353535353535353535363636
+3636363636363434343434343434343030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F
+2F2F2F2F2F2F3434343434343434343737373737373737373737373737373737373737373A3A3A
+3A3A3A3A3A3A3E3E3E3E3E3E3E3E3E3A3A3A3A3A3A3A3A3A353535353535353535323232323232
+3232323232323232323232323232323131313131313131313030303030303030302F2F2F2F2F2F
+2F2F2F2F2F2F303030303030303030363636363636363636454545454545454545595959595959
+5959597575757575757575757575759191919191919191919D9D9D9D9D9D9D9D9DA2A2A2A2A2A2
+A2A2A2A6A6A6A6A6A6A6A6A69C9C9C9C9C9C9C9C9C9C9C9C888888888888888888717171717171
+7171715252525252525252523939393939393939393939392F2F2F2F2F2F2F2F2F2C2C2C2C2C2C
+2C2C2C313131313131313131363636363636363636363636363636363636363636393939393939
+3939393C3C3C3C3C3C3C3C3C4242424242424242424747474747474747474F4F4F4F4F4F4F4F4F
+4F4F4F565656565656565656747474747474747474CFCFCFCFCFCFCFCFCFFDFDFDFDFDFDFDFDFD
+FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDEDEDEDEDEDEDEDEDED
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEE7E7E7
+E7E7E7E7E7E79696969696969696969696964D4D4D4D4D4D4D4D4D353535353535353535303030
+303030303030313131313131313131313131313131313131313131313131313131313131313131
+3131313131313131313131313131313030303030303030302F2F2F2F2F2F2F2F2F2F2F2F313131
+3131313131313232323232323232323030303030303030302B2B2B2B2B2B2B2B2B2B2B2B2B2B2B
+2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D
+2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D
+2D2D2D313131313131313131313131353535353535353535363636363636363636343434343434
+3434343030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F343434343434
+3434343737373737373737373737373737373737373737373A3A3A3A3A3A3A3A3A3E3E3E3E3E3E
+3E3E3E3A3A3A3A3A3A3A3A3A353535353535353535323232323232323232323232323232323232
+3232323131313131313131313030303030303030302F2F2F2F2F2F2F2F2F2F2F2F303030303030
+303030363636363636363636454545454545454545595959595959595959757575757575757575
+7575759191919191919191919D9D9D9D9D9D9D9D9DA2A2A2A2A2A2A2A2A2A6A6A6A6A6A6A6A6A6
+9C9C9C9C9C9C9C9C9C9C9C9C888888888888888888717171717171717171525252525252525252
+3939393939393939393939392F2F2F2F2F2F2F2F2F2C2C2C2C2C2C2C2C2C313131313131313131
+3636363636363636363636363636363636363636363939393939393939393C3C3C3C3C3C3C3C3C
+4242424242424242424747474747474747474F4F4F4F4F4F4F4F4F4F4F4F565656565656565656
+747474747474747474CFCFCFCFCFCFCFCFCFFDFDFDFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDEDEDEDEDEDEDEDEDEDFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBCBCBCBCBCBCBCBCBCB717171717171
+7171717171713E3E3E3E3E3E3E3E3E313131313131313131303030303030303030303030303030
+3030303131313131313131313131313131313131313131313030303030303030302D2D2D2D2D2D
+2D2D2D2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F2F2F2F313131313131313131313131313131
+3131313030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C
+2C2C2C2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B292929292929
+2929292B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F313131313131313131
+3131313030303030303030302D2D2D2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B292929292929292929
+2929292929292929292929292929292929292929292C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C
+303030303030303030303030323232323232323232323232323232323232343434343434343434
+343434343434343434353535353535353535353535343434343434343434323232323232323232
+313131313131313131343434343434343434343434373737373737373737474747474747474747
+5E5E5E5E5E5E5E5E5E797979797979797979959595959595959595959595B4B4B4B4B4B4B4B4B4
+BABABABABABABABABAB9B9B9B9B9B9B9B9B9B8B8B8B8B8B8B8B8B8B0B0B0B0B0B0B0B0B0B0B0B0
+A1A1A1A1A1A1A1A1A1878787878787878787676767676767676767464646464646464646464646
+3131313131313131312C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F363636363636363636393939
+3939393939393939393939393939393939393B3B3B3B3B3B3B3B3B3F3F3F3F3F3F3F3F3F424242
+4242424242424848484848484848484848484E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5EA9A9A9
+A9A9A9A9A9A9F4F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB
+FBFBFBFBFBFBDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFBFBFBFBFBFBFBFBFBCBCBCBCBCBCBCBCBCB7171717171717171717171713E3E3E3E3E3E
+3E3E3E313131313131313131303030303030303030303030303030303030313131313131313131
+3131313131313131313131313030303030303030302D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C
+2F2F2F2F2F2F2F2F2F2F2F2F313131313131313131313131313131313131303030303030303030
+2F2F2F2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D
+2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2929292929292929292B2B2B2B2B2B2B2B2B
+2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F313131313131313131313131303030303030303030
+2D2D2D2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B292929292929292929292929292929292929292929
+2929292929292929292C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C303030303030303030303030
+323232323232323232323232323232323232343434343434343434343434343434343434353535
+353535353535353535343434343434343434323232323232323232313131313131313131343434
+3434343434343434343737373737373737374747474747474747475E5E5E5E5E5E5E5E5E797979
+797979797979959595959595959595959595B4B4B4B4B4B4B4B4B4BABABABABABABABABAB9B9B9
+B9B9B9B9B9B9B8B8B8B8B8B8B8B8B8B0B0B0B0B0B0B0B0B0B0B0B0A1A1A1A1A1A1A1A1A1878787
+8787878787876767676767676767674646464646464646464646463131313131313131312C2C2C
+2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F363636363636363636393939393939393939393939393939
+3939393939393B3B3B3B3B3B3B3B3B3F3F3F3F3F3F3F3F3F424242424242424242484848484848
+4848484848484E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5EA9A9A9A9A9A9A9A9A9F4F4F4F4F4F4
+F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBDFDFDFDFDFDF
+DFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFB
+CBCBCBCBCBCBCBCBCB7171717171717171717171713E3E3E3E3E3E3E3E3E313131313131313131
+303030303030303030303030303030303030313131313131313131313131313131313131313131
+3030303030303030302D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F2F2F2F
+3131313131313131313131313131313131313030303030303030302F2F2F2F2F2F2F2F2F2F2F2F
+2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B
+2B2B2B2B2B2B2B2B2B2929292929292929292B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2F2F2F
+2F2F2F2F2F2F3131313131313131313131313030303030303030302D2D2D2D2D2D2D2D2D2B2B2B
+2B2B2B2B2B2B2929292929292929292929292929292929292929292929292929292929292C2C2C
+2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C303030303030303030303030323232323232323232323232
+323232323232343434343434343434343434343434343434353535353535353535353535343434
+343434343434323232323232323232313131313131313131343434343434343434343434373737
+3737373737374747474747474747475E5E5E5E5E5E5E5E5E797979797979797979959595959595
+959595959595B4B4B4B4B4B4B4B4B4BABABABABABABABABAB9B9B9B9B9B9B9B9B9B8B8B8B8B8B8
+B8B8B8B0B0B0B0B0B0B0B0B0B0B0B0A1A1A1A1A1A1A1A1A1878787878787878787676767676767
+6767674646464646464646464646463131313131313131312C2C2C2C2C2C2C2C2C2F2F2F2F2F2F
+2F2F2F3636363636363636363939393939393939393939393939393939393939393B3B3B3B3B3B
+3B3B3B3F3F3F3F3F3F3F3F3F4242424242424242424848484848484848484848484E4E4E4E4E4E
+4E4E4E5E5E5E5E5E5E5E5E5EA9A9A9A9A9A9A9A9A9F4F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEF4F4F4F4F4F4F4F4F4A8A8A8A8A8A8A8A8A8555555
+5555555555555555553636363636363636363131313131313131313030303030303030302D2D2D
+2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D292929
+2929292929292828282828282828282B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D
+2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F3232323232323232323232322F2F2F2F2F2F2F2F2F2B2B2B
+2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C292929
+292929292929282828282828282828292929292929292929303030303030303030323232323232
+3232323232323131313131313131312C2C2C2C2C2C2C2C2C272727272727272727272727272727
+2727272727272828282828282828282929292929292929292C2C2C2C2C2C2C2C2C2C2C2C2C2C2C
+2C2C2C2F2F2F2F2F2F2F2F2F2F2F2F323232323232323232343434343434343434343434343434
+3434343737373737373737373C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3A3A3A3A3A3A
+3A3A3A3939393939393939393B3B3B3B3B3B3B3B3B3B3B3B464646464646464646616161616161
+6161618080808080808080809B9B9B9B9B9B9B9B9BB0B0B0B0B0B0B0B0B0B0B0B0CACACACACACA
+CACACACFCFCFCFCFCFCFCFCFCBCBCBCBCBCBCBCBCBC3C3C3C3C3C3C3C3C3BABABABABABABABABA
+BABABAB0B1B0B0B1B0B0B1B09E9E9E9E9E9E9E9E9E7F7F7F7F7F7F7F7F7F595959595959595959
+5959593A3A3A3A3A3A3A3A3A2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C323232323232323232
+3737373737373737373737373C3C3C3C3C3C3C3C3C3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F
+424242424242424242464646464646464646464646484848484848484848525252525252525252
+848484848484848484DCDCDCDCDCDCDCDCDCDCDCDCFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FAFAFAFAFAFAFAFAFAD3D3D3D3D3D3D3D3D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE
+FEFEFEFEFEFEF4F4F4F4F4F4F4F4F4A8A8A8A8A8A8A8A8A8555555555555555555555555363636
+3636363636363131313131313131313030303030303030302D2D2D2D2D2D2D2D2D2D2D2D2D2D2D
+2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D292929292929292929282828282828
+2828282B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F
+2F2F2F3232323232323232323232322F2F2F2F2F2F2F2F2F2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B
+2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C292929292929292929282828282828
+282828292929292929292929303030303030303030323232323232323232323232313131313131
+3131312C2C2C2C2C2C2C2C2C272727272727272727272727272727272727272727282828282828
+2828282929292929292929292C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F
+2F2F2F323232323232323232343434343434343434343434343434343434373737373737373737
+3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3A3A3A3A3A3A3A3A3A393939393939393939
+3B3B3B3B3B3B3B3B3B3B3B3B464646464646464646616161616161616161808080808080808080
+9B9B9B9B9B9B9B9B9BB0B0B0B0B0B0B0B0B0B0B0B0CACACACACACACACACACFCFCFCFCFCFCFCFCF
+CBCBCBCBCBCBCBCBCBC3C3C3C3C3C3C3C3C3BABABABABABABABABABABABAB0B1B0B0B1B0B0B1B0
+9E9E9E9E9E9E9E9E9E7F7F7F7F7F7F7F7F7F5959595959595959595959593A3A3A3A3A3A3A3A3A
+2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C323232323232323232373737373737373737373737
+3C3C3C3C3C3C3C3C3C3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F424242424242424242464646
+464646464646464646484848484848484848525252525252525252848484848484848484DCDCDC
+DCDCDCDCDCDCDCDCDCFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFAD3D3D3
+D3D3D3D3D3D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEE6E6E6E6E6E6
+E6E6E6888888888888888888424242424242424242424242353535353535353535323232323232
+3232322F2F2F2F2F2F2F2F2F2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B
+2B2B2B292929292929292929282828282828282828252525252525252525252525252525252525
+2525252727272727272727272828282828282828282D2D2D2D2D2D2D2D2D313131313131313131
+3131313030303030303030302B2B2B2B2B2B2B2B2B2828282828282828282C2C2C2C2C2C2C2C2C
+2D2D2D2D2D2D2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B252525252525252525222222222222222222
+2828282828282828282D2D2D2D2D2D2D2D2D2D2D2D3030303030303030302F2F2F2F2F2F2F2F2F
+2B2B2B2B2B2B2B2B2B2929292929292929292929292C2C2C2C2C2C2C2C2C303030303030303030
+303030303030303030313131313131313131353535353535353535353535393939393939393939
+3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F
+3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F484848484848484848484848
+5D5D5D5D5D5D5D5D5D7E7E7E7E7E7E7E7E7E9F9F9F9F9F9F9F9F9FBABABABABABABABABACBCBCB
+CBCBCBCBCBCBCBCBCBD5D5D5D5D5D5D5D5D5D7D7D7D7D7D7D7D7D7D3D3D3D3D3D3D3D3D3CBCBCB
+CBCBCBCBCBCBC1C1C1C1C1C1C1C1C1C1C1C1B8B8B8B8B8B8B8B8B8ABABABABABABABABAB949494
+9494949494947474747474747474747474744E4E4E4E4E4E4E4E4E3232323232323232322C2C2C
+2C2C2C2C2C2C3030303030303030303434343434343434343434343B3B3B3B3B3B3B3B3B3F3F3F
+3F3F3F3F3F3F404040404040404040464646464646464646474747474747474747474747474747
+4747474747474F4F4F4F4F4F4F4F4F727272727272727272B8B8B8B8B8B8B8B8B8B8B8B8F0F0F0
+F0F0F0F0F0F0FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDEAEAEAEAEAEAEAEAEAFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEE6E6E6E6E6E6E6E6E6888888888888888888
+4242424242424242424242423535353535353535353232323232323232322F2F2F2F2F2F2F2F2F
+2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B292929292929292929
+282828282828282828252525252525252525252525252525252525252525272727272727272727
+2828282828282828282D2D2D2D2D2D2D2D2D313131313131313131313131303030303030303030
+2B2B2B2B2B2B2B2B2B2828282828282828282C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D
+2B2B2B2B2B2B2B2B2B2525252525252525252222222222222222222828282828282828282D2D2D
+2D2D2D2D2D2D2D2D2D3030303030303030302F2F2F2F2F2F2F2F2F2B2B2B2B2B2B2B2B2B292929
+2929292929292929292C2C2C2C2C2C2C2C2C303030303030303030303030303030303030313131
+3131313131313535353535353535353535353939393939393939393E3E3E3E3E3E3E3E3E3F3F3F
+3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E
+3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F4848484848484848484848485D5D5D5D5D5D5D5D5D7E7E7E
+7E7E7E7E7E7E9F9F9F9F9F9F9F9F9FBABABABABABABABABACBCBCBCBCBCBCBCBCBCBCBCBD5D5D5
+D5D5D5D5D5D5D7D7D7D7D7D7D7D7D7D3D3D3D3D3D3D3D3D3CBCBCBCBCBCBCBCBCBC1C1C1C1C1C1
+C1C1C1C1C1C1B8B8B8B8B8B8B8B8B8ABABABABABABABABAB949494949494949494747474747474
+7474747474744E4E4E4E4E4E4E4E4E3232323232323232322C2C2C2C2C2C2C2C2C303030303030
+3030303434343434343434343434343B3B3B3B3B3B3B3B3B3F3F3F3F3F3F3F3F3F404040404040
+4040404646464646464646464747474747474747474747474747474747474747474F4F4F4F4F4F
+4F4F4F727272727272727272B8B8B8B8B8B8B8B8B8B8B8B8F0F0F0F0F0F0F0F0F0FEFEFEFEFEFE
+FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFDFDFDFDFDFDFDFDFDEAEAEAEAEAEAEAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FEFEFEFEFEFEFEFEFEE6E6E6E6E6E6E6E6E6888888888888888888424242424242424242424242
+3535353535353535353232323232323232322F2F2F2F2F2F2F2F2F2C2C2C2C2C2C2C2C2C2B2B2B
+2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B292929292929292929282828282828282828252525
+2525252525252525252525252525252525252727272727272727272828282828282828282D2D2D
+2D2D2D2D2D2D3131313131313131313131313030303030303030302B2B2B2B2B2B2B2B2B282828
+2828282828282C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B252525
+2525252525252222222222222222222828282828282828282D2D2D2D2D2D2D2D2D2D2D2D303030
+3030303030302F2F2F2F2F2F2F2F2F2B2B2B2B2B2B2B2B2B2929292929292929292929292C2C2C
+2C2C2C2C2C2C303030303030303030303030303030303030313131313131313131353535353535
+3535353535353939393939393939393E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E
+3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F
+3F3F3F4848484848484848484848485D5D5D5D5D5D5D5D5D7E7E7E7E7E7E7E7E7E9F9F9F9F9F9F
+9F9F9FBABABABABABABABABACBCBCBCBCBCBCBCBCBCBCBCBD5D5D5D5D5D5D5D5D5D7D7D7D7D7D7
+D7D7D7D3D3D3D3D3D3D3D3D3CBCBCBCBCBCBCBCBCBC1C1C1C1C1C1C1C1C1C1C1C1B8B8B8B8B8B8
+B8B8B8ABABABABABABABABAB9494949494949494947474747474747474747474744E4E4E4E4E4E
+4E4E4E3232323232323232322C2C2C2C2C2C2C2C2C303030303030303030343434343434343434
+3434343B3B3B3B3B3B3B3B3B3F3F3F3F3F3F3F3F3F404040404040404040464646464646464646
+4747474747474747474747474747474747474747474F4F4F4F4F4F4F4F4F727272727272727272
+B8B8B8B8B8B8B8B8B8B8B8B8F0F0F0F0F0F0F0F0F0FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFD
+EAEAEAEAEAEAEAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCCECECE
+CECECECECECE6C6C6C6C6C6C6C6C6C3C3C3C3C3C3C3C3C3C3C3C3C353535353535353535303030
+303030303030292929292929292929282828282828282828282828282828282828282828272727
+272727272727282828282828282828272727272727272727252525252525252525252525252525
+2525252525252727272727272727272828282828282828282C2C2C2C2C2C2C2C2C2F2F2F2F2F2F
+2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2B2B2B2B2B2B2B2B2B292929292929292929292929292929
+292929292929292929292929292929272727272727272727242424242424242424212121212121
+2121212222222222222222222525252525252525252525252828282828282828282B2B2B2B2B2B
+2B2B2B2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F
+2F2F2F303030303030303030313131313131313131353535353535353535353535373737373737
+3737373F3F3F3F3F3F3F3F3F454545454545454545464646464646464646424242424242424242
+4242424242424242424242424444444444444444444C4C4C4C4C4C4C4C4C616161616161616161
+6161617C7C7C7C7C7C7C7C7C9F9F9F9F9F9F9F9F9FC1C1C1C1C1C1C1C1C1D3D3D3D3D3D3D3D3D3
+DADADADADADADADADADADADAD8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D5D5D5D5D5D5D5D5D5
+D0D0D0D0D0D0D0D0D0C6C6C6C6C6C6C6C6C6C6C6C6BABABABABABABABABAAFAFAFAFAFAFAFAFAF
+A2A2A2A2A2A2A2A2A29191919191919191919191916C6C6C6C6C6C6C6C6C404040404040404040
+303030303030303030303030303030303030313131313131313131313131353535353535353535
+3B3B3B3B3B3B3B3B3B4141414141414141414747474747474747474B4B4B4B4B4B4B4B4B4B4B4B
+4848484848484848484F4F4F4F4F4F4F4F4F737373737373737373AFAFAFAFAFAFAFAFAFAFAFAF
+E6E6E6E6E6E6E6E6E6FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBDEDEDEDEDEDEDEDEDEFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCCECECECECECECECECE6C6C6C6C6C6C
+6C6C6C3C3C3C3C3C3C3C3C3C3C3C3C353535353535353535303030303030303030292929292929
+292929282828282828282828282828282828282828282828272727272727272727282828282828
+282828272727272727272727252525252525252525252525252525252525252525272727272727
+2727272828282828282828282C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F
+2F2F2F2B2B2B2B2B2B2B2B2B292929292929292929292929292929292929292929292929292929
+292929272727272727272727242424242424242424212121212121212121222222222222222222
+2525252525252525252525252828282828282828282B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C
+2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F303030303030303030
+3131313131313131313535353535353535353535353737373737373737373F3F3F3F3F3F3F3F3F
+454545454545454545464646464646464646424242424242424242424242424242424242424242
+4444444444444444444C4C4C4C4C4C4C4C4C6161616161616161616161617C7C7C7C7C7C7C7C7C
+9F9F9F9F9F9F9F9F9FC1C1C1C1C1C1C1C1C1D3D3D3D3D3D3D3D3D3DADADADADADADADADADADADA
+D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D5D5D5D5D5D5D5D5D5D0D0D0D0D0D0D0D0D0C6C6C6
+C6C6C6C6C6C6C6C6C6BABABABABABABABABAAFAFAFAFAFAFAFAFAFA2A2A2A2A2A2A2A2A2919191
+9191919191919191916C6C6C6C6C6C6C6C6C404040404040404040303030303030303030303030
+3030303030303131313131313131313131313535353535353535353B3B3B3B3B3B3B3B3B414141
+4141414141414747474747474747474B4B4B4B4B4B4B4B4B4B4B4B4848484848484848484F4F4F
+4F4F4F4F4F4F737373737373737373AFAFAFAFAFAFAFAFAFAFAFAFE6E6E6E6E6E6E6E6E6FDFDFD
+FDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFBFBFBFBFBFBFBFBFBDEDEDEDEDEDEDEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFF2F2F2F2F2F2F2F2F2ADADADADADADADADAD575757575757575757393939393939393939
+3939393434343434343434342D2D2D2D2D2D2D2D2D282828282828282828272727272727272727
+242424242424242424242424252525252525252525252525252525252525252525252525252525
+272727272727272727282828282828282828282828282828282828282828282828282828282828
+2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C
+2B2B2B2B2B2B2B2B2B282828282828282828252525252525252525252525242424242424242424
+242424242424242424242424242424242424242424242424242424272727272727272727272727
+252525252525252525252525252525252525282828282828282828272727272727272727272727
+2525252525252525252828282828282828282929292929292929292C2C2C2C2C2C2C2C2C2D2D2D
+2D2D2D2D2D2D2D2D2D3030303030303030303434343434343434343C3C3C3C3C3C3C3C3C454545
+454545454545494949494949494949494949525252525252525252626262626262626262777777
+777777777777919191919191919191919191ADADADADADADADADADCBCBCBCBCBCBCBCBCBDFDFDF
+DFDFDFDFDFDFE2E2E2E2E2E2E2E2E2DFE0DFDFE0DFDFE0DFDFE0DFDBDBDBDBDBDBDBDBDBD9D9D9
+D9D9D9D9D9D9D7D7D7D7D7D7D7D7D7D4D4D4D4D4D4D4D4D4CBCBCBCBCBCBCBCBCBCBCBCBBEBEBE
+BEBEBEBEBEBEB3B3B3B3B3B3B3B3B3ACACACACACACACACACA4A4A4A4A4A4A4A4A4A4A4A48B8B8B
+8B8B8B8B8B8B595959595959595959363636363636363636303030303030303030313131313131
+3131313131313030303030303030303636363636363636363F3F3F3F3F3F3F3F3F454545454545
+4545454848484848484848484848484545454545454545454D4D4D4D4D4D4D4D4D6E6E6E6E6E6E
+6E6E6EA7A7A7A7A7A7A7A7A7A7A7A7E3E3E3E3E3E3E3E3E3F9F9F9F9F9F9F9F9F9FEFEFEFEFEFE
+FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9
+F9F9F9C5C5C5C5C5C5C5C5C5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2F2F2F2F2F2F2
+ADADADADADADADADAD575757575757575757393939393939393939393939343434343434343434
+2D2D2D2D2D2D2D2D2D282828282828282828272727272727272727242424242424242424242424
+252525252525252525252525252525252525252525252525252525272727272727272727282828
+2828282828282828282828282828282828282828282828282828282C2C2C2C2C2C2C2C2C2D2D2D
+2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B282828
+282828282828252525252525252525252525242424242424242424242424242424242424242424
+242424242424242424242424242424272727272727272727272727252525252525252525252525
+252525252525282828282828282828272727272727272727272727252525252525252525282828
+2828282828282929292929292929292C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D303030
+3030303030303434343434343434343C3C3C3C3C3C3C3C3C454545454545454545494949494949
+494949494949525252525252525252626262626262626262777777777777777777919191919191
+919191919191ADADADADADADADADADCBCBCBCBCBCBCBCBCBDFDFDFDFDFDFDFDFDFE2E2E2E2E2E2
+E2E2E2DFE0DFDFE0DFDFE0DFDFE0DFDBDBDBDBDBDBDBDBDBD9D9D9D9D9D9D9D9D9D7D7D7D7D7D7
+D7D7D7D4D4D4D4D4D4D4D4D4CBCBCBCBCBCBCBCBCBCBCBCBBEBEBEBEBEBEBEBEBEB3B3B3B3B3B3
+B3B3B3ACACACACACACACACACA4A4A4A4A4A4A4A4A4A4A4A48B8B8B8B8B8B8B8B8B595959595959
+595959363636363636363636303030303030303030313131313131313131313131303030303030
+3030303636363636363636363F3F3F3F3F3F3F3F3F454545454545454545484848484848484848
+4848484545454545454545454D4D4D4D4D4D4D4D4D6E6E6E6E6E6E6E6E6EA7A7A7A7A7A7A7A7A7
+A7A7A7E3E3E3E3E3E3E3E3E3F9F9F9F9F9F9F9F9F9FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C5C5C5C5C5C5C5C5C5
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2F2F2F2F2F2F2ADADADADADADADADAD575757
+5757575757573939393939393939393939393434343434343434342D2D2D2D2D2D2D2D2D282828
+282828282828272727272727272727242424242424242424242424252525252525252525252525
+252525252525252525252525252525272727272727272727282828282828282828282828282828
+2828282828282828282828282828282C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D
+2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B282828282828282828252525252525
+252525252525242424242424242424242424242424242424242424242424242424242424242424
+242424272727272727272727272727252525252525252525252525252525252525282828282828
+282828272727272727272727272727252525252525252525282828282828282828292929292929
+2929292C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D303030303030303030343434343434
+3434343C3C3C3C3C3C3C3C3C454545454545454545494949494949494949494949525252525252
+525252626262626262626262777777777777777777919191919191919191919191ADADADADADAD
+ADADADCBCBCBCBCBCBCBCBCBDFDFDFDFDFDFDFDFDFE2E2E2E2E2E2E2E2E2DFE0DFDFE0DFDFE0DF
+DFE0DFDBDBDBDBDBDBDBDBDBD9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D7D7D4D4D4D4D4D4D4D4D4
+CBCBCBCBCBCBCBCBCBCBCBCBBEBEBEBEBEBEBEBEBEB3B3B3B3B3B3B3B3B3ACACACACACACACACAC
+A4A4A4A4A4A4A4A4A4A4A4A48B8B8B8B8B8B8B8B8B595959595959595959363636363636363636
+303030303030303030313131313131313131313131303030303030303030363636363636363636
+3F3F3F3F3F3F3F3F3F454545454545454545484848484848484848484848454545454545454545
+4D4D4D4D4D4D4D4D4D6E6E6E6E6E6E6E6E6EA7A7A7A7A7A7A7A7A7A7A7A7E3E3E3E3E3E3E3E3E3
+F9F9F9F9F9F9F9F9F9FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C5C5C5C5C5C5C5C5C5FFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFD
+FDFDFDFDFDFDE0E0E0E0E0E0E0E0E08A8A8A8A8A8A8A8A8A484848484848484848363636363636
+3636363636363030303030303030302B2B2B2B2B2B2B2B2B282828282828282828252525252525
+252525242424242424242424242424242424242424242424242424242424242424252525252525
+252525282828282828282828282828282828282828282828272727272727272727292929292929
+2929292D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B292929292929
+292929272727272727272727252525252525252525242424242424242424242424242424242424
+242424252525252525252525252525252525252525282828282828282828292929292929292929
+2929292828282828282828282929292929292929292C2C2C2C2C2C2C2C2C292929292929292929
+2929292727272727272727272828282828282828282929292929292929292B2B2B2B2B2B2B2B2B
+2B2B2B2B2B2B2B2B2B2B2B2B2F2F2F2F2F2F2F2F2F313131313131313131393939393939393939
+4545454545454545455B5B5B5B5B5B5B5B5B5B5B5B787878787878787878919191919191919191
+A7A7A7A7A7A7A7A7A7BCBCBCBCBCBCBCBCBCBCBCBCD3D3D3D3D3D3D3D3D3DFE0DFDFE0DFDFE0DF
+E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E0E0E0E0E0E0E0E0E0E0E0E0DEDEDEDEDEDEDEDEDE
+DADADADADADADADADAD8D8D8D8D8D8D8D8D8D6D6D6D6D6D6D6D6D6CDCDCDCDCDCDCDCDCDCDCDCD
+C1C1C1C1C1C1C1C1C1B8B8B8B8B8B8B8B8B8B2B2B2B2B2B2B2B2B2AEAEAEAEAEAEAEAEAEAEAEAE
+9F9F9F9F9F9F9F9F9F767676767676767676424242424242424242313131313131313131323232
+3232323232323232322F2F2F2F2F2F2F2F2F303030303030303030393939393939393939404040
+4040404040404141414141414141414141414040404040404040404747474747474747475F605F
+5F605F5F605F959595959595959595959595DBDBDBDBDBDBDBDBDBF4F4F4F4F4F4F4F4F4FDFDFD
+FDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB
+FBFBFBFBFBFBDADADADADADADADADAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDFDFDFDE0E0E0E0E0E0
+E0E0E08A8A8A8A8A8A8A8A8A484848484848484848363636363636363636363636303030303030
+3030302B2B2B2B2B2B2B2B2B282828282828282828252525252525252525242424242424242424
+242424242424242424242424242424242424242424252525252525252525282828282828282828
+2828282828282828282828282727272727272727272929292929292929292D2D2D2D2D2D2D2D2D
+2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B292929292929292929272727272727272727
+252525252525252525242424242424242424242424242424242424242424252525252525252525
+252525252525252525282828282828282828292929292929292929292929282828282828282828
+2929292929292929292C2C2C2C2C2C2C2C2C292929292929292929292929272727272727272727
+2828282828282828282929292929292929292B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B
+2F2F2F2F2F2F2F2F2F3131313131313131313939393939393939394545454545454545455B5B5B
+5B5B5B5B5B5B5B5B5B787878787878787878919191919191919191A7A7A7A7A7A7A7A7A7BCBCBC
+BCBCBCBCBCBCBCBCBCD3D3D3D3D3D3D3D3D3DFE0DFDFE0DFDFE0DFE5E5E5E5E5E5E5E5E5E4E4E4
+E4E4E4E4E4E4E0E0E0E0E0E0E0E0E0E0E0E0DEDEDEDEDEDEDEDEDEDADADADADADADADADAD8D8D8
+D8D8D8D8D8D8D6D6D6D6D6D6D6D6D6CDCDCDCDCDCDCDCDCDCDCDCDC1C1C1C1C1C1C1C1C1B8B8B8
+B8B8B8B8B8B8B2B2B2B2B2B2B2B2B2AEAEAEAEAEAEAEAEAEAEAEAE9F9F9F9F9F9F9F9F9F767676
+7676767676764242424242424242423131313131313131313232323232323232323232322F2F2F
+2F2F2F2F2F2F303030303030303030393939393939393939404040404040404040414141414141
+4141414141414040404040404040404747474747474747475F605F5F605F5F605F959595959595
+959595959595DBDBDBDBDBDBDBDBDBF4F4F4F4F4F4F4F4F4FDFDFDFDFDFDFDFDFDFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBDADADADADADA
+DADADAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDFDFDFDE0E0E0E0E0E0E0E0E08A8A8A8A8A8A8A8A8A
+4848484848484848483636363636363636363636363030303030303030302B2B2B2B2B2B2B2B2B
+282828282828282828252525252525252525242424242424242424242424242424242424242424
+242424242424242424252525252525252525282828282828282828282828282828282828282828
+2727272727272727272929292929292929292D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C
+2B2B2B2B2B2B2B2B2B292929292929292929272727272727272727252525252525252525242424
+242424242424242424242424242424242424252525252525252525252525252525252525282828
+2828282828282929292929292929292929292828282828282828282929292929292929292C2C2C
+2C2C2C2C2C2C292929292929292929292929272727272727272727282828282828282828292929
+2929292929292B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2F2F2F2F2F2F2F2F2F313131
+3131313131313939393939393939394545454545454545455B5B5B5B5B5B5B5B5B5B5B5B787878
+787878787878919191919191919191A7A7A7A7A7A7A7A7A7BCBCBCBCBCBCBCBCBCBCBCBCD3D3D3
+D3D3D3D3D3D3DFE0DFDFE0DFDFE0DFE5E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E0E0E0E0E0E0
+E0E0E0E0E0E0DEDEDEDEDEDEDEDEDEDADADADADADADADADAD8D8D8D8D8D8D8D8D8D6D6D6D6D6D6
+D6D6D6CDCDCDCDCDCDCDCDCDCDCDCDC1C1C1C1C1C1C1C1C1B8B8B8B8B8B8B8B8B8B2B2B2B2B2B2
+B2B2B2AEAEAEAEAEAEAEAEAEAEAEAE9F9F9F9F9F9F9F9F9F767676767676767676424242424242
+4242423131313131313131313232323232323232323232322F2F2F2F2F2F2F2F2F303030303030
+303030393939393939393939404040404040404040414141414141414141414141404040404040
+4040404747474747474747475F605F5F605F5F605F959595959595959595959595DBDBDBDBDBDB
+DBDBDBF4F4F4F4F4F4F4F4F4FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBDADADADADADADADADAFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA
+FAFAFAFAFAFAFAFAFAC5C5C5C5C5C5C5C5C56F6F6F6F6F6F6F6F6F404040404040404040323232
+3232323232323232322F2F2F2F2F2F2F2F2F282828282828282828272727272727272727252525
+252525252525272727272727272727272727272727272727272727252525252525252525252525
+252525252525252525252525252525252525252525252525252525242424242424242424252525
+252525252525282828282828282828292929292929292929292929282828282828282828272727
+272727272727252525252525252525252525252525252525272727272727272727272727282828
+2828282828282828282828282828282929292929292929292B2B2B2B2B2B2B2B2B2B2B2B2B2B2B
+2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B3030303030303030303434343434343434342D2D2D2D2D2D
+2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D303030303030
+3030303232323232323232323232323737373737373737373E3E3E3E3E3E3E3E3E464646464646
+4646465757575757575757577B7B7B7B7B7B7B7B7B7B7B7B9C9C9C9C9C9C9C9C9CB2B2B2B2B2B2
+B2B2B2C5C5C5C5C5C5C5C5C5D8D8D8D8D8D8D8D8D8D8D8D8E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6
+E6E6E6E3E3E3E3E3E3E3E3E3E2E2E2E2E2E2E2E2E2DFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DF
+DFE0DFDBDBDBDBDBDBDBDBDBD9D9D9D9D9D9D9D9D9D6D6D6D6D6D6D6D6D6CDCDCDCDCDCDCDCDCD
+CDCDCDC6C6C6C6C6C6C6C6C6BFBFBFBFBFBFBFBFBFB6B6B6B6B6B6B6B6B6B1B1B1B1B1B1B1B1B1
+B1B1B1ACACACACACACACACAC9191919191919191915B5B5B5B5B5B5B5B5B373737373737373737
+353535353535353535353535313131313131313131303030303030303030353535353535353535
+3B3B3B3B3B3B3B3B3B3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E454545454545454545
+5E5E5E5E5E5E5E5E5E8B8B8B8B8B8B8B8B8B8B8B8BCACACACACACACACACAF2F2F2F2F2F2F2F2F2
+FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+F9F9F9F9F9F9F9F9F9CCCCCCCCCCCCCCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFAFAFAFAC5C5C5
+C5C5C5C5C5C56F6F6F6F6F6F6F6F6F4040404040404040403232323232323232323232322F2F2F
+2F2F2F2F2F2F282828282828282828272727272727272727252525252525252525272727272727
+272727272727272727272727272727252525252525252525252525252525252525252525252525
+252525252525252525252525252525242424242424242424252525252525252525282828282828
+282828292929292929292929292929282828282828282828272727272727272727252525252525
+252525252525252525252525272727272727272727272727282828282828282828282828282828
+2828282929292929292929292B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B
+2B2B2B3030303030303030303434343434343434342D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D
+2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D303030303030303030323232323232323232
+3232323737373737373737373E3E3E3E3E3E3E3E3E464646464646464646575757575757575757
+7B7B7B7B7B7B7B7B7B7B7B7B9C9C9C9C9C9C9C9C9CB2B2B2B2B2B2B2B2B2C5C5C5C5C5C5C5C5C5
+D8D8D8D8D8D8D8D8D8D8D8D8E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E3E3E3E3E3E3E3E3E3
+E2E2E2E2E2E2E2E2E2DFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDBDBDBDBDBDBDBDBDB
+D9D9D9D9D9D9D9D9D9D6D6D6D6D6D6D6D6D6CDCDCDCDCDCDCDCDCDCDCDCDC6C6C6C6C6C6C6C6C6
+BFBFBFBFBFBFBFBFBFB6B6B6B6B6B6B6B6B6B1B1B1B1B1B1B1B1B1B1B1B1ACACACACACACACACAC
+9191919191919191915B5B5B5B5B5B5B5B5B373737373737373737353535353535353535353535
+3131313131313131313030303030303030303535353535353535353B3B3B3B3B3B3B3B3B3E3E3E
+3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4545454545454545455E5E5E5E5E5E5E5E5E8B8B8B
+8B8B8B8B8B8B8B8B8BCACACACACACACACACAF2F2F2F2F2F2F2F2F2FDFDFDFDFDFDFDFDFDFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9CCCCCC
+CCCCCCCCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFEFEFEFEFEFEFEFEFEF3F3F3F3F3F3F3F3F3F3F3F3ACACACACACACACACAC5C5C5C5C5C5C
+5C5C5C3A3A3A3A3A3A3A3A3A3131313131313131313131312C2C2C2C2C2C2C2C2C282828282828
+282828272727272727272727272727272727272727272727272727272727272727272727272727
+272727282828282828282828252525252525252525222222222222222222212121212121212121
+2121212222222222222222222727272727272727272B2B2B2B2B2B2B2B2B292929292929292929
+2929292828282828282828282828282828282828282B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C
+2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D
+2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F313131313131313131
+3030303030303030302C2C2C2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F313131313131313131
+3232323232323232323636363636363636363A3A3A3A3A3A3A3A3A3A3A3A444444444444444444
+4D4D4D4D4D4D4D4D4D575757575757575757707070707070707070979797979797979797979797
+B8B8B8B8B8B8B8B8B8CBCBCBCBCBCBCBCBCBDCDCDCDCDCDCDCDCDCE9E9E9E9E9E9E9E9E9E9E9E9
+EEEEEEEEEEEEEEEEEEEBEBEBEBEBEBEBEBEBE4E4E4E4E4E4E4E4E4E1E1E1E1E1E1E1E1E1E1E1E1
+E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DDDDDDDDDDDDDDDDDDD9D9D9D9D9D9D9D9D9D6D6D5
+D6D6D5D6D6D5D0D0D0D0D0D0D0D0D0D0D0D0CBCBCBCBCBCBCBCBCBC5C5C5C5C5C5C5C5C5BBBBBB
+BBBBBBBBBBBBB4B4B4B4B4B4B4B4B4B4B4B4B2B2B2B2B2B2B2B2B2A3A3A3A3A3A3A3A3A3767676
+767676767676444444444444444444363636363636363636363636363636363636363636353535
+3535353535353636363636363636363B3B3B3B3B3B3B3B3B3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E
+3E3E3E3E3E3E464646464646464646707070707070707070A6A6A6A6A6A6A6A6A6A6A6A6D9D9D9
+D9D9D9D9D9D9F8F8F8F8F8F8F8F8F8FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFACFCFCFCFCFCFCFCFCFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFE
+F3F3F3F3F3F3F3F3F3F3F3F3ACACACACACACACACAC5C5C5C5C5C5C5C5C5C3A3A3A3A3A3A3A3A3A
+3131313131313131313131312C2C2C2C2C2C2C2C2C282828282828282828272727272727272727
+272727272727272727272727272727272727272727272727272727272727282828282828282828
+252525252525252525222222222222222222212121212121212121212121222222222222222222
+2727272727272727272B2B2B2B2B2B2B2B2B292929292929292929292929282828282828282828
+2828282828282828282B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D
+2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D
+2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F3131313131313131313030303030303030302C2C2C
+2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F313131313131313131323232323232323232363636
+3636363636363A3A3A3A3A3A3A3A3A3A3A3A4444444444444444444D4D4D4D4D4D4D4D4D575757
+575757575757707070707070707070979797979797979797979797B8B8B8B8B8B8B8B8B8CBCBCB
+CBCBCBCBCBCBDCDCDCDCDCDCDCDCDCE9E9E9E9E9E9E9E9E9E9E9E9EEEEEEEEEEEEEEEEEEEBEBEB
+EBEBEBEBEBEBE4E4E4E4E4E4E4E4E4E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1
+E1E1E1E1E1E1DDDDDDDDDDDDDDDDDDD9D9D9D9D9D9D9D9D9D6D6D5D6D6D5D6D6D5D0D0D0D0D0D0
+D0D0D0D0D0D0CBCBCBCBCBCBCBCBCBC5C5C5C5C5C5C5C5C5BBBBBBBBBBBBBBBBBBB4B4B4B4B4B4
+B4B4B4B4B4B4B2B2B2B2B2B2B2B2B2A3A3A3A3A3A3A3A3A3767676767676767676444444444444
+444444363636363636363636363636363636363636363636353535353535353535363636363636
+3636363B3B3B3B3B3B3B3B3B3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E464646464646
+464646707070707070707070A6A6A6A6A6A6A6A6A6A6A6A6D9D9D9D9D9D9D9D9D9F8F8F8F8F8F8
+F8F8F8FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFAFAFAFAFAFAFAFAFACFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEF3F3F3F3F3F3F3F3F3F3F3F3
+ACACACACACACACACAC5C5C5C5C5C5C5C5C5C3A3A3A3A3A3A3A3A3A313131313131313131313131
+2C2C2C2C2C2C2C2C2C282828282828282828272727272727272727272727272727272727272727
+272727272727272727272727272727272727282828282828282828252525252525252525222222
+2222222222222121212121212121212121212222222222222222222727272727272727272B2B2B
+2B2B2B2B2B2B2929292929292929292929292828282828282828282828282828282828282B2B2B
+2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D
+2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2F2F2F
+2F2F2F2F2F2F3131313131313131313030303030303030302C2C2C2C2C2C2C2C2C2C2C2C2F2F2F
+2F2F2F2F2F2F3131313131313131313232323232323232323636363636363636363A3A3A3A3A3A
+3A3A3A3A3A3A4444444444444444444D4D4D4D4D4D4D4D4D575757575757575757707070707070
+707070979797979797979797979797B8B8B8B8B8B8B8B8B8CBCBCBCBCBCBCBCBCBDCDCDCDCDCDC
+DCDCDCE9E9E9E9E9E9E9E9E9E9E9E9EEEEEEEEEEEEEEEEEEEBEBEBEBEBEBEBEBEBE4E4E4E4E4E4
+E4E4E4E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DDDDDDDDDDDD
+DDDDDDD9D9D9D9D9D9D9D9D9D6D6D5D6D6D5D6D6D5D0D0D0D0D0D0D0D0D0D0D0D0CBCBCBCBCBCB
+CBCBCBC5C5C5C5C5C5C5C5C5BBBBBBBBBBBBBBBBBBB4B4B4B4B4B4B4B4B4B4B4B4B2B2B2B2B2B2
+B2B2B2A3A3A3A3A3A3A3A3A3767676767676767676444444444444444444363636363636363636
+3636363636363636363636363535353535353535353636363636363636363B3B3B3B3B3B3B3B3B
+3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E464646464646464646707070707070707070
+A6A6A6A6A6A6A6A6A6A6A6A6D9D9D9D9D9D9D9D9D9F8F8F8F8F8F8F8F8F8FEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFA
+CFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFDFDFDFDFDFDFDFDFDE1E1E1E1E1E1E1E1E1E1E1E18E8E8E8E8E8E8E8E8E4F4F4F
+4F4F4F4F4F4F3737373737373737373030303030303030303030302B2B2B2B2B2B2B2B2B282828
+282828282828282828282828282828252525252525252525252525252525252525252525272727
+272727272727282828282828282828252525252525252525222222222222222222212121212121
+212121212121222222222222222222252525252525252525282828282828282828272727272727
+2727272727272727272727272727272929292929292929292D2D2D2D2D2D2D2D2D313131313131
+3131313232323232323232323232323232323232323232323030303030303030302D2D2D2D2D2D
+2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C
+2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F343434343434
+3434343737373737373737373939393939393939393F3F3F3F3F3F3F3F3F3F3F3F4B4B4B4B4B4B
+4B4B4B5757575757575757576A6A6A6A6A6A6A6A6A8B8B8B8B8B8B8B8B8BB1B1B1B1B1B1B1B1B1
+B1B1B1CECECECECECECECECEDEDEDEDEDEDEDEDEDEE8E8E8E8E8E8E8E8E8EDEDEDEDEDEDEDEDED
+EDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE9E9E9E9E9E9E9E9E9E3E3E3E3E3E3E3E3E3
+E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DEDEDEDEDEDEDEDEDEDADADADADADADADADA
+D6D6D6D6D6D6D6D6D6D5D5D5D5D5D5D5D5D5D5D5D5D0D0D0D0D0D0D0D0D0C8C8C8C8C8C8C8C8C8
+BEBEBEBEBEBEBEBEBEB8B8B8B8B8B8B8B8B8B8B8B8B4B4B4B4B4B4B4B4B4ABABABABABABABABAB
+8A8A8A8A8A8A8A8A8A515151515151515151373737373737373737373737373737373737373737
+3939393939393939393A3A3A3A3A3A3A3A3A3F3F3F3F3F3F3F3F3F444444444444444444444444
+4040404040404040404C4C4C4C4C4C4C4C4C8E8E8E8E8E8E8E8E8ED4D4D4D4D4D4D4D4D4D4D4D4
+F7F7F7F7F7F7F7F7F7FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFACFCFCFCFCFCFCFCFCFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFD
+FDFDFDE1E1E1E1E1E1E1E1E1E1E1E18E8E8E8E8E8E8E8E8E4F4F4F4F4F4F4F4F4F373737373737
+3737373030303030303030303030302B2B2B2B2B2B2B2B2B282828282828282828282828282828
+282828252525252525252525252525252525252525252525272727272727272727282828282828
+282828252525252525252525222222222222222222212121212121212121212121222222222222
+222222252525252525252525282828282828282828272727272727272727272727272727272727
+2727272929292929292929292D2D2D2D2D2D2D2D2D313131313131313131323232323232323232
+3232323232323232323232323030303030303030302D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C
+2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C
+2C2C2C2C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F343434343434343434373737373737373737
+3939393939393939393F3F3F3F3F3F3F3F3F3F3F3F4B4B4B4B4B4B4B4B4B575757575757575757
+6A6A6A6A6A6A6A6A6A8B8B8B8B8B8B8B8B8BB1B1B1B1B1B1B1B1B1B1B1B1CECECECECECECECECE
+DEDEDEDEDEDEDEDEDEE8E8E8E8E8E8E8E8E8EDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEE
+EEEEEEEEEEEEEEEEEEE9E9E9E9E9E9E9E9E9E3E3E3E3E3E3E3E3E3E1E1E1E1E1E1E1E1E1E1E1E1
+E1E1E1E1E1E1E1E1E1DEDEDEDEDEDEDEDEDEDADADADADADADADADAD6D6D6D6D6D6D6D6D6D5D5D5
+D5D5D5D5D5D5D5D5D5D0D0D0D0D0D0D0D0D0C8C8C8C8C8C8C8C8C8BEBEBEBEBEBEBEBEBEB8B8B8
+B8B8B8B8B8B8B8B8B8B4B4B4B4B4B4B4B4B4ABABABABABABABABAB8A8A8A8A8A8A8A8A8A515151
+5151515151513737373737373737373737373737373737373737373939393939393939393A3A3A
+3A3A3A3A3A3A3F3F3F3F3F3F3F3F3F4444444444444444444444444040404040404040404C4C4C
+4C4C4C4C4C4C8E8E8E8E8E8E8E8E8ED4D4D4D4D4D4D4D4D4D4D4D4F7F7F7F7F7F7F7F7F7FEFEFE
+FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFAFAFAFAFAFAFAFAFACFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBCBCBCBCBCBCBCBCBCB
+CBCBCB747474747474747474464646464646464646363636363636363636303030303030303030
+3030302B2B2B2B2B2B2B2B2B282828282828282828272727272727272727242424242424242424
+242424242424242424242424272727272727272727282828282828282828272727272727272727
+242424242424242424222222222222222222222222222222222222222222242424242424242424
+2525252525252525252525252525252525252525252828282828282828282B2B2B2B2B2B2B2B2B
+2D2D2D2D2D2D2D2D2D303030303030303030313131313131313131313131303030303030303030
+3030303030303030302C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B
+2B2B2B2B2B2B2B2B2B2929292929292929292828282828282828282C2C2C2C2C2C2C2C2C2C2C2C
+3030303030303030303434343434343434343737373737373737373C3C3C3C3C3C3C3C3C464646
+4646464646464646465757575757575757576D6D6D6D6D6D6D6D6D8A8A8A8A8A8A8A8A8AADADAD
+ADADADADADADCBCBCBCBCBCBCBCBCBCBCBCBDDDDDDDDDDDDDDDDDDE5E5E5E5E5E5E5E5E5E8E8E8
+E8E8E8E8E8E8EAEAEAEAEAEAEAEAEAEAEAEAECECECECECECECECECEDEDEDEDEDEDEDEDEDECECEC
+ECECECECECECE5E5E5E5E5E5E5E5E5E3E3E3E3E3E3E3E3E3E3E3E3E1E1E1E1E1E1E1E1E1DFDFDF
+DFDFDFDFDFDFDBDBDBDBDBDBDBDBDBD8D8D8D8D8D8D8D8D8D6D6D6D6D6D6D6D6D6D6D6D6D2D2D2
+D2D2D2D2D2D2CBCBCBCBCBCBCBCBCBBFBFBFBFBFBFBFBFBFB9B9B9B9B9B9B9B9B9B9B9B9B8B8B8
+B8B8B8B8B8B8B0B0B0B0B0B0B0B0B09696969696969696966262626262626262623C3C3C3C3C3C
+3C3C3C3C3C3C3737373737373737373737373737373737373C3C3C3C3C3C3C3C3C414141414141
+414141474747474747474747474747444444444444444444545454545454545454ABABABABABAB
+ABABABF4F4F4F4F4F4F4F4F4F4F4F4FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFB
+FBFBFBDBDBDBDBDBDBDBDBDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBCBCBCBCBCBCBCBCBCBCBCBCB747474747474747474
+4646464646464646463636363636363636363030303030303030303030302B2B2B2B2B2B2B2B2B
+282828282828282828272727272727272727242424242424242424242424242424242424242424
+272727272727272727282828282828282828272727272727272727242424242424242424222222
+222222222222222222222222222222222222242424242424242424252525252525252525252525
+2525252525252525252828282828282828282B2B2B2B2B2B2B2B2B2D2D2D2D2D2D2D2D2D303030
+3030303030303131313131313131313131313030303030303030303030303030303030302C2C2C
+2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B292929
+2929292929292828282828282828282C2C2C2C2C2C2C2C2C2C2C2C303030303030303030343434
+3434343434343737373737373737373C3C3C3C3C3C3C3C3C464646464646464646464646575757
+5757575757576D6D6D6D6D6D6D6D6D8A8A8A8A8A8A8A8A8AADADADADADADADADADCBCBCBCBCBCB
+CBCBCBCBCBCBDDDDDDDDDDDDDDDDDDE5E5E5E5E5E5E5E5E5E8E8E8E8E8E8E8E8E8EAEAEAEAEAEA
+EAEAEAEAEAEAECECECECECECECECECEDEDEDEDEDEDEDEDEDECECECECECECECECECE5E5E5E5E5E5
+E5E5E5E3E3E3E3E3E3E3E3E3E3E3E3E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDFDFDBDBDBDBDBDB
+DBDBDBD8D8D8D8D8D8D8D8D8D6D6D6D6D6D6D6D6D6D6D6D6D2D2D2D2D2D2D2D2D2CBCBCBCBCBCB
+CBCBCBBFBFBFBFBFBFBFBFBFB9B9B9B9B9B9B9B9B9B9B9B9B8B8B8B8B8B8B8B8B8B0B0B0B0B0B0
+B0B0B09696969696969696966262626262626262623C3C3C3C3C3C3C3C3C3C3C3C373737373737
+3737373737373737373737373C3C3C3C3C3C3C3C3C414141414141414141474747474747474747
+474747444444444444444444545454545454545454ABABABABABABABABABF4F4F4F4F4F4F4F4F4
+F4F4F4FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBDBDBDBDBDBDBDBDBDB
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB
+FBFBFBFBFBFBCBCBCBCBCBCBCBCBCBCBCBCB747474747474747474464646464646464646363636
+3636363636363030303030303030303030302B2B2B2B2B2B2B2B2B282828282828282828272727
+272727272727242424242424242424242424242424242424242424272727272727272727282828
+282828282828272727272727272727242424242424242424222222222222222222222222222222
+222222222222242424242424242424252525252525252525252525252525252525252525282828
+2828282828282B2B2B2B2B2B2B2B2B2D2D2D2D2D2D2D2D2D303030303030303030313131313131
+3131313131313030303030303030303030303030303030302C2C2C2C2C2C2C2C2C2B2B2B2B2B2B
+2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B292929292929292929282828282828
+2828282C2C2C2C2C2C2C2C2C2C2C2C303030303030303030343434343434343434373737373737
+3737373C3C3C3C3C3C3C3C3C4646464646464646464646465757575757575757576D6D6D6D6D6D
+6D6D6D8A8A8A8A8A8A8A8A8AADADADADADADADADADCBCBCBCBCBCBCBCBCBCBCBCBDDDDDDDDDDDD
+DDDDDDE5E5E5E5E5E5E5E5E5E8E8E8E8E8E8E8E8E8EAEAEAEAEAEAEAEAEAEAEAEAECECECECECEC
+ECECECEDEDEDEDEDEDEDEDEDECECECECECECECECECE5E5E5E5E5E5E5E5E5E3E3E3E3E3E3E3E3E3
+E3E3E3E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDFDFDBDBDBDBDBDBDBDBDBD8D8D8D8D8D8D8D8D8
+D6D6D6D6D6D6D6D6D6D6D6D6D2D2D2D2D2D2D2D2D2CBCBCBCBCBCBCBCBCBBFBFBFBFBFBFBFBFBF
+B9B9B9B9B9B9B9B9B9B9B9B9B8B8B8B8B8B8B8B8B8B0B0B0B0B0B0B0B0B0969696969696969696
+6262626262626262623C3C3C3C3C3C3C3C3C3C3C3C373737373737373737373737373737373737
+3C3C3C3C3C3C3C3C3C414141414141414141474747474747474747474747444444444444444444
+545454545454545454ABABABABABABABABABF4F4F4F4F4F4F4F4F4F4F4F4FEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBDBDBDBDBDBDBDBDBDBFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6F6F6F6F6F6F6B8B8B8B8B8B8
+B8B8B8B8B8B86464646464646464644141414141414141413434343434343434342F2F2F2F2F2F
+2F2F2F2F2F2F292929292929292929282828282828282828252525252525252525242424242424
+242424242424242424242424242424272727272727272727282828282828282828272727272727
+272727242424242424242424222222222222222222222222222222222222222222242424242424
+242424252525252525252525272727272727272727272727282828282828282828292929292929
+2929292B2B2B2B2B2B2B2B2B292929292929292929282828282828282828282828282828282828
+2828282C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B292929292929292929
+2929292929292929292929292929292929292929292B2B2B2B2B2B2B2B2B2F2F2F2F2F2F2F2F2F
+2F2F2F3131313131313131313636363636363636363F3F3F3F3F3F3F3F3F4D4D4D4D4D4D4D4D4D
+626262626262626262626262777777777777777777909090909090909090ADADADADADADADADAD
+C7C7C7C7C7C7C7C7C7D9D9D9D9D9D9D9D9D9D9D9D9E0E0E0E0E0E0E0E0E0E3E3E3E3E3E3E3E3E3
+E4E4E4E4E4E4E4E4E4E8E8E8E8E8E8E8E8E8E8E8E8EBEBEBEBEBEBEBEBEBEDEDEDEDEDEDEDEDED
+EBEBEBEBEBEBEBEBEBE8E9E8E8E9E8E8E9E8E5E5E5E5E5E5E5E5E5E5E5E5DFE0DFDFE0DFDFE0DF
+DDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDADADADADADADADADAD8D8D8D8D8D8D8D8D8D8D8D8
+D2D2D2D2D2D2D2D2D2C9C9C9C9C9C9C9C9C9BFBFBFBFBFBFBFBFBFBBBBBBBBBBBBBBBBBBBBBBBB
+BABABABABABABABABAB1B1B1B1B1B1B1B1B19E9E9E9E9E9E9E9E9E717171717171717171424242
+4242424242424242423939393939393939393A3A3A3A3A3A3A3A3A3C3C3C3C3C3C3C3C3C414141
+414141414141484848484848484848484848474747474747474747575757575757575757B7B7B7
+B7B7B7B7B7B7F9F9F9F9F9F9F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA
+FAFAFAFAFAFAD0D0D0D0D0D0D0D0D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFF6F6F6F6F6F6F6F6F6B8B8B8B8B8B8B8B8B8B8B8B8646464646464
+6464644141414141414141413434343434343434342F2F2F2F2F2F2F2F2F2F2F2F292929292929
+292929282828282828282828252525252525252525242424242424242424242424242424242424
+242424272727272727272727282828282828282828272727272727272727242424242424242424
+222222222222222222222222222222222222222222242424242424242424252525252525252525
+2727272727272727272727272828282828282828282929292929292929292B2B2B2B2B2B2B2B2B
+2929292929292929292828282828282828282828282828282828282828282C2C2C2C2C2C2C2C2C
+2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B292929292929292929292929292929292929292929
+2929292929292929292B2B2B2B2B2B2B2B2B2F2F2F2F2F2F2F2F2F2F2F2F313131313131313131
+3636363636363636363F3F3F3F3F3F3F3F3F4D4D4D4D4D4D4D4D4D626262626262626262626262
+777777777777777777909090909090909090ADADADADADADADADADC7C7C7C7C7C7C7C7C7D9D9D9
+D9D9D9D9D9D9D9D9D9E0E0E0E0E0E0E0E0E0E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E8E8E8
+E8E8E8E8E8E8E8E8E8EBEBEBEBEBEBEBEBEBEDEDEDEDEDEDEDEDEDEBEBEBEBEBEBEBEBEBE8E9E8
+E8E9E8E8E9E8E5E5E5E5E5E5E5E5E5E5E5E5DFE0DFDFE0DFDFE0DFDDDDDDDDDDDDDDDDDDDCDCDC
+DCDCDCDCDCDCDADADADADADADADADAD8D8D8D8D8D8D8D8D8D8D8D8D2D2D2D2D2D2D2D2D2C9C9C9
+C9C9C9C9C9C9BFBFBFBFBFBFBFBFBFBBBBBBBBBBBBBBBBBBBBBBBBBABABABABABABABABAB1B1B1
+B1B1B1B1B1B19E9E9E9E9E9E9E9E9E717171717171717171424242424242424242424242393939
+3939393939393A3A3A3A3A3A3A3A3A3C3C3C3C3C3C3C3C3C414141414141414141484848484848
+484848484848474747474747474747575757575757575757B7B7B7B7B7B7B7B7B7F9F9F9F9F9F9
+F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFAD0D0D0D0D0D0
+D0D0D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+EFEFEFEFEFEFEFEFEFA5A5A5A5A5A5A5A5A5A5A5A55B5B5B5B5B5B5B5B5B3E3E3E3E3E3E3E3E3E
+3131313131313131312C2C2C2C2C2C2C2C2C2C2C2C282828282828282828272727272727272727
+252525252525252525242424242424242424252525252525252525252525252525252525252525
+272727272727272727252525252525252525242424242424242424222222222222222222222222
+222222222222222222252525252525252525272727272727272727272727272727272727272727
+252525252525252525272727272727272727292929292929292929292929292929292929282828
+282828282828282828282828282828282828292929292929292929282828282828282828292929
+2929292929292B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D303030
+303030303030323232323232323232323232373737373737373737444444444444444444585858
+5858585858587070707070707070708888888888888888888888889D9D9D9D9D9D9D9D9DB0B0B0
+B0B0B0B0B0B0C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1DADADADADADADADADADADADADCDCDC
+DCDCDCDCDCDCDFE0DFDFE0DFDFE0DFE3E3E3E3E3E3E3E3E3E6E6E6E6E6E6E6E6E6E6E6E6E9E9E9
+E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAE7E7E7E7E7E7
+E7E7E7E7E7E7E0E0E0E0E0E0E0E0E0DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDCDCDCDCDCDC
+DCDCDCD8D8D8D8D8D8D8D8D8D8D8D8D1D1D1D1D1D1D1D1D1C7C7C7C7C7C7C7C7C7C0C0C0C0C0C0
+C0C0C0BDBDBDBDBDBDBDBDBDBDBDBDBBBBBBBBBBBBBBBBBBB4B4B4B4B4B4B4B4B4A2A2A2A2A2A2
+A2A2A27A7A7A7A7A7A7A7A7A4848484848484848484848483B3B3B3B3B3B3B3B3B3A3A3A3A3A3A
+3A3A3A3636363636363636363C3C3C3C3C3C3C3C3C444444444444444444444444474747474747
+474747555555555555555555AAAAAAAAAAAAAAAAAAF5F5F5F5F5F5F5F5F5F5F5F5FFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBDBDBDBDBDBDBDBDBDBFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFA5A5A5
+A5A5A5A5A5A5A5A5A55B5B5B5B5B5B5B5B5B3E3E3E3E3E3E3E3E3E3131313131313131312C2C2C
+2C2C2C2C2C2C2C2C2C282828282828282828272727272727272727252525252525252525242424
+242424242424252525252525252525252525252525252525252525272727272727272727252525
+252525252525242424242424242424222222222222222222222222222222222222222222252525
+252525252525272727272727272727272727272727272727272727252525252525252525272727
+272727272727292929292929292929292929292929292929282828282828282828282828282828
+2828282828282929292929292929292828282828282828282929292929292929292B2B2B2B2B2B
+2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D303030303030303030323232323232
+323232323232373737373737373737444444444444444444585858585858585858707070707070
+7070708888888888888888888888889D9D9D9D9D9D9D9D9DB0B0B0B0B0B0B0B0B0C1C1C1C1C1C1
+C1C1C1D1D1D1D1D1D1D1D1D1DADADADADADADADADADADADADCDCDCDCDCDCDCDCDCDFE0DFDFE0DF
+DFE0DFE3E3E3E3E3E3E3E3E3E6E6E6E6E6E6E6E6E6E6E6E6E9E9E9E9E9E9E9E9E9EAEAEAEAEAEA
+EAEAEAEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAE7E7E7E7E7E7E7E7E7E7E7E7E0E0E0E0E0E0
+E0E0E0DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDCDCDCDCDCDCDCDCDCD8D8D8D8D8D8D8D8D8
+D8D8D8D1D1D1D1D1D1D1D1D1C7C7C7C7C7C7C7C7C7C0C0C0C0C0C0C0C0C0BDBDBDBDBDBDBDBDBD
+BDBDBDBBBBBBBBBBBBBBBBBBB4B4B4B4B4B4B4B4B4A2A2A2A2A2A2A2A2A27A7A7A7A7A7A7A7A7A
+4848484848484848484848483B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A363636363636363636
+3C3C3C3C3C3C3C3C3C444444444444444444444444474747474747474747555555555555555555
+AAAAAAAAAAAAAAAAAAF5F5F5F5F5F5F5F5F5F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FBFBFBFBFBFBFBFBFBDBDBDBDBDBDBDBDBDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFA5A5A5A5A5A5A5A5A5A5A5A55B5B5B
+5B5B5B5B5B5B3E3E3E3E3E3E3E3E3E3131313131313131312C2C2C2C2C2C2C2C2C2C2C2C282828
+282828282828272727272727272727252525252525252525242424242424242424252525252525
+252525252525252525252525252525272727272727272727252525252525252525242424242424
+242424222222222222222222222222222222222222222222252525252525252525272727272727
+272727272727272727272727272727252525252525252525272727272727272727292929292929
+292929292929292929292929282828282828282828282828282828282828282828292929292929
+2929292828282828282828282929292929292929292B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C
+2C2C2C2D2D2D2D2D2D2D2D2D303030303030303030323232323232323232323232373737373737
+373737444444444444444444585858585858585858707070707070707070888888888888888888
+8888889D9D9D9D9D9D9D9D9DB0B0B0B0B0B0B0B0B0C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1
+DADADADADADADADADADADADADCDCDCDCDCDCDCDCDCDFE0DFDFE0DFDFE0DFE3E3E3E3E3E3E3E3E3
+E6E6E6E6E6E6E6E6E6E6E6E6E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEB
+EAEAEAEAEAEAEAEAEAE7E7E7E7E7E7E7E7E7E7E7E7E0E0E0E0E0E0E0E0E0DEDEDEDEDEDEDEDEDE
+DEDEDEDEDEDEDEDEDEDCDCDCDCDCDCDCDCDCD8D8D8D8D8D8D8D8D8D8D8D8D1D1D1D1D1D1D1D1D1
+C7C7C7C7C7C7C7C7C7C0C0C0C0C0C0C0C0C0BDBDBDBDBDBDBDBDBDBDBDBDBBBBBBBBBBBBBBBBBB
+B4B4B4B4B4B4B4B4B4A2A2A2A2A2A2A2A2A27A7A7A7A7A7A7A7A7A484848484848484848484848
+3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3636363636363636363C3C3C3C3C3C3C3C3C444444
+444444444444444444474747474747474747555555555555555555AAAAAAAAAAAAAAAAAAF5F5F5
+F5F5F5F5F5F5F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBDBDBDB
+DBDBDBDBDBDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFE
+FEFEFEE7E7E7E7E7E7E7E7E79191919191919191919191915252525252525252523C3C3C3C3C3C
+3C3C3C3030303030303030302B2B2B2B2B2B2B2B2B2B2B2B282828282828282828252525252525
+252525242424242424242424252525252525252525282828282828282828282828282828282828
+282828292929292929292929282828282828282828272727272727272727242424242424242424
+242424252525252525252525252525252525252525252525252525252525242424242424242424
+2424242424242424242424242525252525252525252828282828282828282B2B2B2B2B2B2B2B2B
+2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C282828282828282828
+2B2B2B2B2B2B2B2B2B2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F313131313131313131
+353535353535353535393939393939393939393939464646464646464646616161616161616161
+7D7D7D7D7D7D7D7D7D929292929292929292A6A6A6A6A6A6A6A6A6A6A6A6B2B2B2B2B2B2B2B2B2
+BEBEBEBEBEBEBEBEBECACACACACACACACACAD4D4D4D4D4D4D4D4D4DADADADADADADADADADADADA
+DEDEDEDEDEDEDEDEDEE6E6E6E6E6E6E6E6E6EAEAEAEAEAEAEAEAEAEDEDEDEDEDEDEDEDEDEDEDED
+EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EAEAEA
+EAEAEAEAEAEAEAEAEAE4E4E4E4E4E4E4E4E4E1E1E1E1E1E1E1E1E1DFE0DFDFE0DFDFE0DFDFDFDF
+DFDFDFDFDFDFDBDBDBDBDBDBDBDBDBDBDBDBD1D1D1D1D1D1D1D1D1C7C7C7C7C7C7C7C7C7C1C1C1
+C1C1C1C1C1C1BDBDBDBDBDBDBDBDBDBDBDBDB9B9B9B9B9B9B9B9B9B6B6B6B6B6B6B6B6B6A6A6A6
+A6A6A6A6A6A68282828282828282824E4E4E4E4E4E4E4E4E4E4E4E3C3C3C3C3C3C3C3C3C3A3A3A
+3A3A3A3A3A3A3131313131313131313636363636363636363E3E3E3E3E3E3E3E3E3E3E3E424242
+4242424242424E4E4E4E4E4E4E4E4E939393939393939393EDEDEDEDEDEDEDEDEDEDEDEDFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCE3E3E3E3E3E3E3E3E3FFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEE7E7E7E7E7E7E7E7E7
+9191919191919191919191915252525252525252523C3C3C3C3C3C3C3C3C303030303030303030
+2B2B2B2B2B2B2B2B2B2B2B2B282828282828282828252525252525252525242424242424242424
+252525252525252525282828282828282828282828282828282828282828292929292929292929
+282828282828282828272727272727272727242424242424242424242424252525252525252525
+252525252525252525252525252525252525242424242424242424242424242424242424242424
+2525252525252525252828282828282828282B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B
+2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2828282828282828282B2B2B2B2B2B2B2B2B2F2F2F
+2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F313131313131313131353535353535353535393939
+3939393939393939394646464646464646466161616161616161617D7D7D7D7D7D7D7D7D929292
+929292929292A6A6A6A6A6A6A6A6A6A6A6A6B2B2B2B2B2B2B2B2B2BEBEBEBEBEBEBEBEBECACACA
+CACACACACACAD4D4D4D4D4D4D4D4D4DADADADADADADADADADADADADEDEDEDEDEDEDEDEDEE6E6E6
+E6E6E6E6E6E6EAEAEAEAEAEAEAEAEAEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEE
+EEEEEEEEEEEEF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EAEAEAEAEAEAEAEAEAEAEAEAE4E4E4
+E4E4E4E4E4E4E1E1E1E1E1E1E1E1E1DFE0DFDFE0DFDFE0DFDFDFDFDFDFDFDFDFDFDBDBDBDBDBDB
+DBDBDBDBDBDBD1D1D1D1D1D1D1D1D1C7C7C7C7C7C7C7C7C7C1C1C1C1C1C1C1C1C1BDBDBDBDBDBD
+BDBDBDBDBDBDB9B9B9B9B9B9B9B9B9B6B6B6B6B6B6B6B6B6A6A6A6A6A6A6A6A6A6828282828282
+8282824E4E4E4E4E4E4E4E4E4E4E4E3C3C3C3C3C3C3C3C3C3A3A3A3A3A3A3A3A3A313131313131
+3131313636363636363636363E3E3E3E3E3E3E3E3E3E3E3E4242424242424242424E4E4E4E4E4E
+4E4E4E939393939393939393EDEDEDEDEDEDEDEDEDEDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFCFCFCFCFCFCFCFCFCE3E3E3E3E3E3E3E3E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEE7E7E7E7E7E7E7E7E7919191919191919191919191
+5252525252525252523C3C3C3C3C3C3C3C3C3030303030303030302B2B2B2B2B2B2B2B2B2B2B2B
+282828282828282828252525252525252525242424242424242424252525252525252525282828
+282828282828282828282828282828282828292929292929292929282828282828282828272727
+272727272727242424242424242424242424252525252525252525252525252525252525252525
+252525252525242424242424242424242424242424242424242424252525252525252525282828
+2828282828282B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C
+2C2C2C2C2C2C2828282828282828282B2B2B2B2B2B2B2B2B2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F
+2F2F2F2F2F2F313131313131313131353535353535353535393939393939393939393939464646
+4646464646466161616161616161617D7D7D7D7D7D7D7D7D929292929292929292A6A6A6A6A6A6
+A6A6A6A6A6A6B2B2B2B2B2B2B2B2B2BEBEBEBEBEBEBEBEBECACACACACACACACACAD4D4D4D4D4D4
+D4D4D4DADADADADADADADADADADADADEDEDEDEDEDEDEDEDEE6E6E6E6E6E6E6E6E6EAEAEAEAEAEA
+EAEAEAEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEF0F0F0F0F0F0
+F0F0F0F0F0F0F0F0F0F0F0F0EAEAEAEAEAEAEAEAEAEAEAEAE4E4E4E4E4E4E4E4E4E1E1E1E1E1E1
+E1E1E1DFE0DFDFE0DFDFE0DFDFDFDFDFDFDFDFDFDFDBDBDBDBDBDBDBDBDBDBDBDBD1D1D1D1D1D1
+D1D1D1C7C7C7C7C7C7C7C7C7C1C1C1C1C1C1C1C1C1BDBDBDBDBDBDBDBDBDBDBDBDB9B9B9B9B9B9
+B9B9B9B6B6B6B6B6B6B6B6B6A6A6A6A6A6A6A6A6A68282828282828282824E4E4E4E4E4E4E4E4E
+4E4E4E3C3C3C3C3C3C3C3C3C3A3A3A3A3A3A3A3A3A313131313131313131363636363636363636
+3E3E3E3E3E3E3E3E3E3E3E3E4242424242424242424E4E4E4E4E4E4E4E4E939393939393939393
+EDEDEDEDEDEDEDEDEDEDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFC
+E3E3E3E3E3E3E3E3E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD
+FDFDFDFDFDFDD8D8D8D8D8D8D8D8D87C7C7C7C7C7C7C7C7C7C7C7C4B4B4B4B4B4B4B4B4B393939
+3939393939392F2F2F2F2F2F2F2F2F2B2B2B2B2B2B2B2B2B2B2B2B282828282828282828242424
+2424242424242424242424242424242B2B2B2B2B2B2B2B2B323232323232323232323232353535
+3535353535353434343434343434343232323232323232322D2D2D2D2D2D2D2D2D2B2B2B2B2B2B
+2B2B2B2B2B2B282828282828282828252525252525252525252525252525252525242424242424
+2424242424242222222222222222222424242424242424242727272727272727272B2B2B2B2B2B
+2B2B2B2F2F2F2F2F2F2F2F2F2F2F2F3030303030303030302C2C2C2C2C2C2C2C2C292929292929
+2929292C2C2C2C2C2C2C2C2C313131313131313131313131353535353535353535373737373737
+3737373E3E3E3E3E3E3E3E3E494949494949494949494949666666666666666666858585858585
+8585859D9D9D9D9D9D9D9D9DAAAAAAAAAAAAAAAAAAB6B6B6B6B6B6B6B6B6B6B6B6BCBCBCBCBCBC
+BCBCBCC2C2C2C2C2C2C2C2C2CCCCCCCCCCCCCCCCCCD5D5D5D5D5D5D5D5D5DBDBDBDBDBDBDBDBDB
+DBDBDBE4E4E4E4E4E4E4E4E4EDEDEDEDEDEDEDEDEDF1F1F1F1F1F1F1F1F1F6F6F6F6F6F6F6F6F6
+F6F6F6F7F7F7F7F7F7F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F6F6F6F6F6F6F6F6F6
+F0F0F0F0F0F0F0F0F0F0F0F0EAEAEAEAEAEAEAEAEAE6E6E6E6E6E6E6E6E6E2E2E2E2E2E2E2E2E2
+DFDFDFDFDFDFDFDFDFDBDBDBDBDBDBDBDBDBDBDBDBD4D4D4D4D4D4D4D4D4C9C9C9C9C9C9C9C9C9
+C3C3C3C3C3C3C3C3C3BEBEBEBEBEBEBEBEBEBEBEBEB8B8B8B8B8B8B8B8B8B3B3B3B3B3B3B3B3B3
+A7A7A7A7A7A7A7A7A7878787878787878787555555555555555555555555404040404040404040
+3C3C3C3C3C3C3C3C3C303030303030303030313131313131313131373737373737373737373737
+3E3E3E3E3E3E3E3E3E474747474747474747838383838383838383E6E6E6E6E6E6E6E6E6E6E6E6
+FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C6C6C6C6C6C6C6C6C6FFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDD8D8D8D8D8D8
+D8D8D87C7C7C7C7C7C7C7C7C7C7C7C4B4B4B4B4B4B4B4B4B3939393939393939392F2F2F2F2F2F
+2F2F2F2B2B2B2B2B2B2B2B2B2B2B2B282828282828282828242424242424242424242424242424
+2424242B2B2B2B2B2B2B2B2B323232323232323232323232353535353535353535343434343434
+3434343232323232323232322D2D2D2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B2B2B2B282828282828
+282828252525252525252525252525252525252525242424242424242424242424222222222222
+2222222424242424242424242727272727272727272B2B2B2B2B2B2B2B2B2F2F2F2F2F2F2F2F2F
+2F2F2F3030303030303030302C2C2C2C2C2C2C2C2C2929292929292929292C2C2C2C2C2C2C2C2C
+3131313131313131313131313535353535353535353737373737373737373E3E3E3E3E3E3E3E3E
+4949494949494949494949496666666666666666668585858585858585859D9D9D9D9D9D9D9D9D
+AAAAAAAAAAAAAAAAAAB6B6B6B6B6B6B6B6B6B6B6B6BCBCBCBCBCBCBCBCBCC2C2C2C2C2C2C2C2C2
+CCCCCCCCCCCCCCCCCCD5D5D5D5D5D5D5D5D5DBDBDBDBDBDBDBDBDBDBDBDBE4E4E4E4E4E4E4E4E4
+EDEDEDEDEDEDEDEDEDF1F1F1F1F1F1F1F1F1F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7
+F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F6F6F6F6F6F6F6F6F6F0F0F0F0F0F0F0F0F0F0F0F0
+EAEAEAEAEAEAEAEAEAE6E6E6E6E6E6E6E6E6E2E2E2E2E2E2E2E2E2DFDFDFDFDFDFDFDFDFDBDBDB
+DBDBDBDBDBDBDBDBDBD4D4D4D4D4D4D4D4D4C9C9C9C9C9C9C9C9C9C3C3C3C3C3C3C3C3C3BEBEBE
+BEBEBEBEBEBEBEBEBEB8B8B8B8B8B8B8B8B8B3B3B3B3B3B3B3B3B3A7A7A7A7A7A7A7A7A7878787
+8787878787875555555555555555555555554040404040404040403C3C3C3C3C3C3C3C3C303030
+3030303030303131313131313131313737373737373737373737373E3E3E3E3E3E3E3E3E474747
+474747474747838383838383838383E6E6E6E6E6E6E6E6E6E6E6E6FEFEFEFEFEFEFEFEFEFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C6C6C6C6C6C6C6C6C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9BFBFBFBFBFBFBFBFBF696969696969696969
+6969694545454545454545453737373737373737373131313131313131312D2D2D2D2D2D2D2D2D
+2D2D2D282828282828282828242424242424242424272727272727272727373737373737373737
+4C4C4C4C4C4C4C4C4C4C4C4C505050505050505050474747474747474747404040404040404040
+3E3E3E3E3E3E3E3E3E3A3A3A3A3A3A3A3A3A3A3A3A323232323232323232292929292929292929
+272727272727272727242424242424242424242424242424242424242424272727272727272727
+2828282828282828282B2B2B2B2B2B2B2B2B313131313131313131313131313131313131313131
+2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B303030303030303030363636363636363636363636
+3E3E3E3E3E3E3E3E3E474747474747474747505050505050505050676767676767676767676767
+898989898989898989A2A2A2A2A2A2A2A2A2B0B0B0B0B0B0B0B0B0B8B8B8B8B8B8B8B8B8BCBCBC
+BCBCBCBCBCBCBCBCBCC0C0C0C0C0C0C0C0C0C5C5C5C5C5C5C5C5C5CCCCCCCCCCCCCCCCCCD5D5D5
+D5D5D5D5D5D5DEDEDEDEDEDEDEDEDEDEDEDEE8E9E8E8E9E8E8E9E8F1F1F1F1F1F1F1F1F1F5F5F5
+F5F5F5F5F5F5FAFAFAFAFAFAFAFAFAFAFAFAFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFAFAFAFAFAFAFAFAFAF4F4F4F4F4F4F4F4F4F4F4F4EDEDEDEDEDEDEDEDEDE8E8E8
+E8E8E8E8E8E8E4E4E4E4E4E4E4E4E4DFDFDFDFDFDFDFDFDFDBDBDBDBDBDBDBDBDBDBDBDBD6D6D5
+D6D6D5D6D6D5CFCFCFCFCFCFCFCFCFC6C6C6C6C6C6C6C6C6BFBFBFBFBFBFBFBFBFBFBFBFB8B8B8
+B8B8B8B8B8B8B3B3B3B3B3B3B3B3B3A6A6A6A6A6A6A6A6A68A8A8A8A8A8A8A8A8A5A5A5A5A5A5A
+5A5A5A5A5A5A4242424242424242423F3F3F3F3F3F3F3F3F313131313131313131303030303030
+3030303232323232323232323232323A3A3A3A3A3A3A3A3A424242424242424242767676767676
+767676DFE0DFDFE0DFDFE0DFDFE0DFFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFA
+FAFAFAD3D3D3D3D3D3D3D3D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+F9F9F9F9F9F9F9F9F9BFBFBFBFBFBFBFBFBF696969696969696969696969454545454545454545
+3737373737373737373131313131313131312D2D2D2D2D2D2D2D2D2D2D2D282828282828282828
+2424242424242424242727272727272727273737373737373737374C4C4C4C4C4C4C4C4C4C4C4C
+5050505050505050504747474747474747474040404040404040403E3E3E3E3E3E3E3E3E3A3A3A
+3A3A3A3A3A3A3A3A3A323232323232323232292929292929292929272727272727272727242424
+2424242424242424242424242424242424242727272727272727272828282828282828282B2B2B
+2B2B2B2B2B2B3131313131313131313131313131313131313131312C2C2C2C2C2C2C2C2C2B2B2B
+2B2B2B2B2B2B3030303030303030303636363636363636363636363E3E3E3E3E3E3E3E3E474747
+474747474747505050505050505050676767676767676767676767898989898989898989A2A2A2
+A2A2A2A2A2A2B0B0B0B0B0B0B0B0B0B8B8B8B8B8B8B8B8B8BCBCBCBCBCBCBCBCBCBCBCBCC0C0C0
+C0C0C0C0C0C0C5C5C5C5C5C5C5C5C5CCCCCCCCCCCCCCCCCCD5D5D5D5D5D5D5D5D5DEDEDEDEDEDE
+DEDEDEDEDEDEE8E9E8E8E9E8E8E9E8F1F1F1F1F1F1F1F1F1F5F5F5F5F5F5F5F5F5FAFAFAFAFAFA
+FAFAFAFAFAFAFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFAFAFAFAFAFA
+FAFAFAF4F4F4F4F4F4F4F4F4F4F4F4EDEDEDEDEDEDEDEDEDE8E8E8E8E8E8E8E8E8E4E4E4E4E4E4
+E4E4E4DFDFDFDFDFDFDFDFDFDBDBDBDBDBDBDBDBDBDBDBDBD6D6D5D6D6D5D6D6D5CFCFCFCFCFCF
+CFCFCFC6C6C6C6C6C6C6C6C6BFBFBFBFBFBFBFBFBFBFBFBFB8B8B8B8B8B8B8B8B8B3B3B3B3B3B3
+B3B3B3A6A6A6A6A6A6A6A6A68A8A8A8A8A8A8A8A8A5A5A5A5A5A5A5A5A5A5A5A5A424242424242
+4242423F3F3F3F3F3F3F3F3F313131313131313131303030303030303030323232323232323232
+3232323A3A3A3A3A3A3A3A3A424242424242424242767676767676767676DFE0DFDFE0DFDFE0DF
+DFE0DFFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFAD3D3D3D3D3D3D3D3D3
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9BFBFBF
+BFBFBFBFBFBF696969696969696969696969454545454545454545373737373737373737313131
+3131313131312D2D2D2D2D2D2D2D2D2D2D2D282828282828282828242424242424242424272727
+2727272727273737373737373737374C4C4C4C4C4C4C4C4C4C4C4C505050505050505050474747
+4747474747474040404040404040403E3E3E3E3E3E3E3E3E3A3A3A3A3A3A3A3A3A3A3A3A323232
+323232323232292929292929292929272727272727272727242424242424242424242424242424
+2424242424242727272727272727272828282828282828282B2B2B2B2B2B2B2B2B313131313131
+3131313131313131313131313131312C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B303030303030
+3030303636363636363636363636363E3E3E3E3E3E3E3E3E474747474747474747505050505050
+505050676767676767676767676767898989898989898989A2A2A2A2A2A2A2A2A2B0B0B0B0B0B0
+B0B0B0B8B8B8B8B8B8B8B8B8BCBCBCBCBCBCBCBCBCBCBCBCC0C0C0C0C0C0C0C0C0C5C5C5C5C5C5
+C5C5C5CCCCCCCCCCCCCCCCCCD5D5D5D5D5D5D5D5D5DEDEDEDEDEDEDEDEDEDEDEDEE8E9E8E8E9E8
+E8E9E8F1F1F1F1F1F1F1F1F1F5F5F5F5F5F5F5F5F5FAFAFAFAFAFAFAFAFAFAFAFAFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFAFAFAFAFAFAFAFAFAF4F4F4F4F4F4F4F4F4
+F4F4F4EDEDEDEDEDEDEDEDEDE8E8E8E8E8E8E8E8E8E4E4E4E4E4E4E4E4E4DFDFDFDFDFDFDFDFDF
+DBDBDBDBDBDBDBDBDBDBDBDBD6D6D5D6D6D5D6D6D5CFCFCFCFCFCFCFCFCFC6C6C6C6C6C6C6C6C6
+BFBFBFBFBFBFBFBFBFBFBFBFB8B8B8B8B8B8B8B8B8B3B3B3B3B3B3B3B3B3A6A6A6A6A6A6A6A6A6
+8A8A8A8A8A8A8A8A8A5A5A5A5A5A5A5A5A5A5A5A5A4242424242424242423F3F3F3F3F3F3F3F3F
+3131313131313131313030303030303030303232323232323232323232323A3A3A3A3A3A3A3A3A
+424242424242424242767676767676767676DFE0DFDFE0DFDFE0DFDFE0DFFEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFAD3D3D3D3D3D3D3D3D3FFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5F5F5F5F5F5F5A9A9A9A9A9A9A9A9A9565656565656
+5656565656563E3E3E3E3E3E3E3E3E3636363636363636363131313131313131312F2F2F2F2F2F
+2F2F2F2F2F2F2929292929292929292424242424242424242B2B2B2B2B2B2B2B2B454545454545
+4545455D5D5D5D5D5D5D5D5D5D5D5D6666666666666666665F605F5F605F5F605F585858585858
+5858585959595959595959595858585858585858585858584B4B4B4B4B4B4B4B4B393939393939
+3939393131313131313131312B2B2B2B2B2B2B2B2B2B2B2B2828282828282828282C2C2C2C2C2C
+2C2C2C2929292929292929292929292929292929292D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D
+2D2D2D2B2B2B2B2B2B2B2B2B2F2F2F2F2F2F2F2F2F3636363636363636363F3F3F3F3F3F3F3F3F
+3F3F3F4D4D4D4D4D4D4D4D4D5B5B5B5B5B5B5B5B5B666666666666666666878787878787878787
+878787A6A6A6A6A6A6A6A6A6B7B7B7B7B7B7B7B7B7BCBCBCBCBCBCBCBCBCBEBEBEBEBEBEBEBEBE
+C0C0C0C0C0C0C0C0C0C0C0C0C5C5C5C5C5C5C5C5C5CBCBCBCBCBCBCBCBCBD2D2D2D2D2D2D2D2D2
+DDDDDDDDDDDDDDDDDDE8E8E8E8E8E8E8E8E8E8E8E8F1F1F1F1F1F1F1F1F1F9F9F9F9F9F9F9F9F9
+FBFBFBFBFBFBFBFBFBFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCF6F6F6F6F6F6F6F6F6F6F6F6EDEDEDEDEDEDEDEDED
+E8E8E8E8E8E8E8E8E8E4E4E4E4E4E4E4E4E4DDDDDDDDDDDDDDDDDDD9D9D9D9D9D9D9D9D9D9D9D9
+D6D6D5D6D6D5D6D6D5D1D1D1D1D1D1D1D1D1CBCBCBCBCBCBCBCBCBC3C3C3C3C3C3C3C3C3C3C3C3
+BBBBBBBBBBBBBBBBBBB2B2B2B2B2B2B2B2B2A4A4A4A4A4A4A4A4A48C8C8C8C8C8C8C8C8C5C5C5C
+5C5C5C5C5C5C5C5C5C4242424242424242423E3E3E3E3E3E3E3E3E3030303030303030302C2C2C
+2C2C2C2C2C2C303030303030303030303030393939393939393939404040404040404040707070
+707070707070DBDBDBDBDBDBDBDBDBDBDBDBFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB
+FBFBFBFBFBFBDBDBDBDBDBDBDBDBDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFF5F5F5F5F5F5F5F5F5A9A9A9A9A9A9A9A9A95656565656565656565656563E3E3E3E3E3E
+3E3E3E3636363636363636363131313131313131312F2F2F2F2F2F2F2F2F2F2F2F292929292929
+2929292424242424242424242B2B2B2B2B2B2B2B2B4545454545454545455D5D5D5D5D5D5D5D5D
+5D5D5D6666666666666666665F605F5F605F5F605F585858585858585858595959595959595959
+5858585858585858585858584B4B4B4B4B4B4B4B4B393939393939393939313131313131313131
+2B2B2B2B2B2B2B2B2B2B2B2B2828282828282828282C2C2C2C2C2C2C2C2C292929292929292929
+2929292929292929292D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B
+2F2F2F2F2F2F2F2F2F3636363636363636363F3F3F3F3F3F3F3F3F3F3F3F4D4D4D4D4D4D4D4D4D
+5B5B5B5B5B5B5B5B5B666666666666666666878787878787878787878787A6A6A6A6A6A6A6A6A6
+B7B7B7B7B7B7B7B7B7BCBCBCBCBCBCBCBCBCBEBEBEBEBEBEBEBEBEC0C0C0C0C0C0C0C0C0C0C0C0
+C5C5C5C5C5C5C5C5C5CBCBCBCBCBCBCBCBCBD2D2D2D2D2D2D2D2D2DDDDDDDDDDDDDDDDDDE8E8E8
+E8E8E8E8E8E8E8E8E8F1F1F1F1F1F1F1F1F1F9F9F9F9F9F9F9F9F9FBFBFBFBFBFBFBFBFBFDFDFD
+FDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFCFCFC
+FCFCFCFCFCFCF6F6F6F6F6F6F6F6F6F6F6F6EDEDEDEDEDEDEDEDEDE8E8E8E8E8E8E8E8E8E4E4E4
+E4E4E4E4E4E4DDDDDDDDDDDDDDDDDDD9D9D9D9D9D9D9D9D9D9D9D9D6D6D5D6D6D5D6D6D5D1D1D1
+D1D1D1D1D1D1CBCBCBCBCBCBCBCBCBC3C3C3C3C3C3C3C3C3C3C3C3BBBBBBBBBBBBBBBBBBB2B2B2
+B2B2B2B2B2B2A4A4A4A4A4A4A4A4A48C8C8C8C8C8C8C8C8C5C5C5C5C5C5C5C5C5C5C5C5C424242
+4242424242423E3E3E3E3E3E3E3E3E3030303030303030302C2C2C2C2C2C2C2C2C303030303030
+303030303030393939393939393939404040404040404040707070707070707070DBDBDBDBDBDB
+DBDBDBDBDBDBFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBDBDBDBDBDBDB
+DBDBDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEEBEBEBEBEBEBEBEBEB
+939393939393939393484848484848484848484848393939393939393939323232323232323232
+3131313131313131313131313131313131313131312B2B2B2B2B2B2B2B2B252525252525252525
+2F2F2F2F2F2F2F2F2F4B4B4B4B4B4B4B4B4B666666666666666666666666717171717171717171
+7171717171717171716D6D6D6D6D6D6D6D6D6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F
+6767676767676767675858585858585858584E4E4E4E4E4E4E4E4E444444444444444444444444
+3737373737373737372F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2D2D2D
+2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3030303030303030303636363636363636363F3F3F
+3F3F3F3F3F3F4E4E4E4E4E4E4E4E4E4E4E4E6262626262626262626C6C6C6C6C6C6C6C6C828282
+828282828282A6A6A6A6A6A6A6A6A6A6A6A6BABABABABABABABABAC5C5C5C5C5C5C5C5C5C6C6C6
+C6C6C6C6C6C6C5C5C5C5C5C5C5C5C5C9C9C9C9C9C9C9C9C9C9C9C9CDCDCDCDCDCDCDCDCDD5D5D5
+D5D5D5D5D5D5E1E1E1E1E1E1E1E1E1EAEAEAEAEAEAEAEAEAF1F1F1F1F1F1F1F1F1F1F1F1F5F5F5
+F5F5F5F5F5F5FCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCF7F7F7F7F7F7
+F7F7F7F7F7F7EEEEEEEEEEEEEEEEEEE7E7E7E7E7E7E7E7E7E3E3E3E3E3E3E3E3E3DCDCDCDCDCDC
+DCDCDCD9D9D9D9D9D9D9D9D9D9D9D9D6D6D6D6D6D6D6D6D6D2D2D2D2D2D2D2D2D2CCCCCCCCCCCC
+CCCCCCC5C5C5C5C5C5C5C5C5C5C5C5BDBDBDBDBDBDBDBDBDB1B1B1B1B1B1B1B1B1A4A4A4A4A4A4
+A4A4A48F8F8F8F8F8F8F8F8F5F605F5F605F5F605F5F605F4242424242424242423B3B3B3B3B3B
+3B3B3B2F2F2F2F2F2F2F2F2F2B2B2B2B2B2B2B2B2B303030303030303030303030373737373737
+3737373F3F3F3F3F3F3F3F3F6D6D6D6D6D6D6D6D6DDADADADADADADADADADADADAFDFDFDFDFDFD
+FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFAD5D5D5D5D5D5D5D5D5FFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEEBEBEBEBEBEBEBEBEB939393939393939393484848
+484848484848484848393939393939393939323232323232323232313131313131313131313131
+3131313131313131312B2B2B2B2B2B2B2B2B2525252525252525252F2F2F2F2F2F2F2F2F4B4B4B
+4B4B4B4B4B4B6666666666666666666666667171717171717171717171717171717171716D6D6D
+6D6D6D6D6D6D6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F676767676767676767585858
+5858585858584E4E4E4E4E4E4E4E4E4444444444444444444444443737373737373737372F2F2F
+2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D
+2D2D2D2D2D2D3030303030303030303636363636363636363F3F3F3F3F3F3F3F3F4E4E4E4E4E4E
+4E4E4E4E4E4E6262626262626262626C6C6C6C6C6C6C6C6C828282828282828282A6A6A6A6A6A6
+A6A6A6A6A6A6BABABABABABABABABAC5C5C5C5C5C5C5C5C5C6C6C6C6C6C6C6C6C6C5C5C5C5C5C5
+C5C5C5C9C9C9C9C9C9C9C9C9C9C9C9CDCDCDCDCDCDCDCDCDD5D5D5D5D5D5D5D5D5E1E1E1E1E1E1
+E1E1E1EAEAEAEAEAEAEAEAEAF1F1F1F1F1F1F1F1F1F1F1F1F5F5F5F5F5F5F5F5F5FCFCFCFCFCFC
+FCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFF
+FFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCF7F7F7F7F7F7F7F7F7F7F7F7EEEEEEEEEEEE
+EEEEEEE7E7E7E7E7E7E7E7E7E3E3E3E3E3E3E3E3E3DCDCDCDCDCDCDCDCDCD9D9D9D9D9D9D9D9D9
+D9D9D9D6D6D6D6D6D6D6D6D6D2D2D2D2D2D2D2D2D2CCCCCCCCCCCCCCCCCCC5C5C5C5C5C5C5C5C5
+C5C5C5BDBDBDBDBDBDBDBDBDB1B1B1B1B1B1B1B1B1A4A4A4A4A4A4A4A4A48F8F8F8F8F8F8F8F8F
+5F605F5F605F5F605F5F605F4242424242424242423B3B3B3B3B3B3B3B3B2F2F2F2F2F2F2F2F2F
+2B2B2B2B2B2B2B2B2B3030303030303030303030303737373737373737373F3F3F3F3F3F3F3F3F
+6D6D6D6D6D6D6D6D6DDADADADADADADADADADADADAFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FAFAFAFAFAFAFAFAFAD5D5D5D5D5D5D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE
+FEFEFEFEFEFEEBEBEBEBEBEBEBEBEB939393939393939393484848484848484848484848393939
+3939393939393232323232323232323131313131313131313131313131313131313131312B2B2B
+2B2B2B2B2B2B2525252525252525252F2F2F2F2F2F2F2F2F4B4B4B4B4B4B4B4B4B666666666666
+6666666666667171717171717171717171717171717171716D6D6D6D6D6D6D6D6D6F6F6F6F6F6F
+6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6767676767676767675858585858585858584E4E4E4E4E4E
+4E4E4E4444444444444444444444443737373737373737372F2F2F2F2F2F2F2F2F2F2F2F2F2F2F
+2F2F2F2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D303030303030
+3030303636363636363636363F3F3F3F3F3F3F3F3F4E4E4E4E4E4E4E4E4E4E4E4E626262626262
+6262626C6C6C6C6C6C6C6C6C828282828282828282A6A6A6A6A6A6A6A6A6A6A6A6BABABABABABA
+BABABAC5C5C5C5C5C5C5C5C5C6C6C6C6C6C6C6C6C6C5C5C5C5C5C5C5C5C5C9C9C9C9C9C9C9C9C9
+C9C9C9CDCDCDCDCDCDCDCDCDD5D5D5D5D5D5D5D5D5E1E1E1E1E1E1E1E1E1EAEAEAEAEAEAEAEAEA
+F1F1F1F1F1F1F1F1F1F1F1F1F5F5F5F5F5F5F5F5F5FCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFE
+FCFCFCFCFCFCFCFCFCF7F7F7F7F7F7F7F7F7F7F7F7EEEEEEEEEEEEEEEEEEE7E7E7E7E7E7E7E7E7
+E3E3E3E3E3E3E3E3E3DCDCDCDCDCDCDCDCDCD9D9D9D9D9D9D9D9D9D9D9D9D6D6D6D6D6D6D6D6D6
+D2D2D2D2D2D2D2D2D2CCCCCCCCCCCCCCCCCCC5C5C5C5C5C5C5C5C5C5C5C5BDBDBDBDBDBDBDBDBD
+B1B1B1B1B1B1B1B1B1A4A4A4A4A4A4A4A4A48F8F8F8F8F8F8F8F8F5F605F5F605F5F605F5F605F
+4242424242424242423B3B3B3B3B3B3B3B3B2F2F2F2F2F2F2F2F2F2B2B2B2B2B2B2B2B2B303030
+3030303030303030303737373737373737373F3F3F3F3F3F3F3F3F6D6D6D6D6D6D6D6D6DDADADA
+DADADADADADADADADAFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFAD5D5D5
+D5D5D5D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDDBDBDBDBDBDB
+DBDBDB7D7D7D7D7D7D7D7D7D3E3E3E3E3E3E3E3E3E3E3E3E323232323232323232303030303030
+3030303030303030303030303232323232323232323232322B2B2B2B2B2B2B2B2B252525252525
+2525253131313131313131314E4E4E4E4E4E4E4E4E686868686868686868686868737373737373
+737373767676767676767676777777777777777777797979797979797979797979797979797979
+7979797676767676767676767272727272727272726B6B6B6B6B6B6B6B6B626262626262626262
+6262625151515151515151514444444444444444443F3F3F3F3F3F3F3F3F3B3B3B3B3B3B3B3B3B
+3A3A3A3A3A3A3A3A3A3A3A3A3C3C3C3C3C3C3C3C3C3F3F3F3F3F3F3F3F3F444444444444444444
+4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F6F878787878787878787
+A9A9A9A9A9A9A9A9A9BDBDBDBDBDBDBDBDBDBDBDBDC6C6C6C6C6C6C6C6C6CDCDCDCDCDCDCDCDCD
+D1D1D1D1D1D1D1D1D1D6D6D5D6D6D5D6D6D5DBDBDBDBDBDBDBDBDBDBDBDBDEDEDEDEDEDEDEDEDE
+E3E3E3E3E3E3E3E3E3EDEDEDEDEDEDEDEDEDF1F1F1F1F1F1F1F1F1F3F3F3F3F3F3F3F3F3F3F3F3
+F8F8F8F8F8F8F8F8F8FDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCF7F7F7
+F7F7F7F7F7F7F7F7F7F0F0F0F0F0F0F0F0F0EAEAEAEAEAEAEAEAEAE5E5E5E5E5E5E5E5E5DFDFDF
+DFDFDFDFDFDFDBDBDBDBDBDBDBDBDBDBDBDBD9D9D9D9D9D9D9D9D9D5D5D5D5D5D5D5D5D5CECECE
+CECECECECECEC7C7C7C7C7C7C7C7C7C7C7C7BFBFBFBFBFBFBFBFBFB3B3B3B3B3B3B3B3B3A7A7A7
+A7A7A7A7A7A79090909090909090905F605F5F605F5F605F5F605F4242424242424242423A3A3A
+3A3A3A3A3A3A303030303030303030292929292929292929303030303030303030303030363636
+3636363636363E3E3E3E3E3E3E3E3E717171717171717171DEDEDEDEDEDEDEDEDEDEDEDEFEFEFE
+FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9BFBFBFBFBFBFBFBFBFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDDBDBDBDBDBDBDBDBDB7D7D7D7D7D7D7D7D7D
+3E3E3E3E3E3E3E3E3E3E3E3E323232323232323232303030303030303030303030303030303030
+3232323232323232323232322B2B2B2B2B2B2B2B2B252525252525252525313131313131313131
+4E4E4E4E4E4E4E4E4E686868686868686868686868737373737373737373767676767676767676
+777777777777777777797979797979797979797979797979797979797979767676767676767676
+7272727272727272726B6B6B6B6B6B6B6B6B626262626262626262626262515151515151515151
+4444444444444444443F3F3F3F3F3F3F3F3F3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A
+3C3C3C3C3C3C3C3C3C3F3F3F3F3F3F3F3F3F4444444444444444444E4E4E4E4E4E4E4E4E5E5E5E
+5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F6F878787878787878787A9A9A9A9A9A9A9A9A9BDBDBD
+BDBDBDBDBDBDBDBDBDC6C6C6C6C6C6C6C6C6CDCDCDCDCDCDCDCDCDD1D1D1D1D1D1D1D1D1D6D6D5
+D6D6D5D6D6D5DBDBDBDBDBDBDBDBDBDBDBDBDEDEDEDEDEDEDEDEDEE3E3E3E3E3E3E3E3E3EDEDED
+EDEDEDEDEDEDF1F1F1F1F1F1F1F1F1F3F3F3F3F3F3F3F3F3F3F3F3F8F8F8F8F8F8F8F8F8FDFDFD
+FDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCF7F7F7F7F7F7F7F7F7F7F7F7F0F0F0
+F0F0F0F0F0F0EAEAEAEAEAEAEAEAEAE5E5E5E5E5E5E5E5E5DFDFDFDFDFDFDFDFDFDBDBDBDBDBDB
+DBDBDBDBDBDBD9D9D9D9D9D9D9D9D9D5D5D5D5D5D5D5D5D5CECECECECECECECECEC7C7C7C7C7C7
+C7C7C7C7C7C7BFBFBFBFBFBFBFBFBFB3B3B3B3B3B3B3B3B3A7A7A7A7A7A7A7A7A7909090909090
+9090905F605F5F605F5F605F5F605F4242424242424242423A3A3A3A3A3A3A3A3A303030303030
+3030302929292929292929293030303030303030303030303636363636363636363E3E3E3E3E3E
+3E3E3E717171717171717171DEDEDEDEDEDEDEDEDEDEDEDEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFF9F9F9F9F9F9F9F9F9BFBFBFBFBFBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FDFDFDFDFDFDFDFDFDD6D6D5D6D6D5D6D6D57373737373737373733A3A3A3A3A3A3A3A3A3A3A3A
+2F2F2F2F2F2F2F2F2F2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D323232323232323232323232
+2C2C2C2C2C2C2C2C2C2727272727272727273030303030303030304C4C4C4C4C4C4C4C4C666666
+6666666666666666667272727272727272727676767676767676767979797979797979797C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7D7D7D7D7D7D7D7D7D7F7F7F7F7F7F7F7F7F7C7C7C
+7C7C7C7C7C7C7979797979797979797979796E6E6E6E6E6E6E6E6E646464646464646464616161
+6161616161615F605F5F605F5F605F5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5E5E5E
+5E5E5E5E5E5E5F605F5F605F5F605F6767676767676767677575757575757575757575758D8D8D
+8D8D8D8D8D8DADADADADADADADADADC3C3C3C3C3C3C3C3C3CCCCCCCCCCCCCCCCCCCCCCCCD4D4D4
+D4D4D4D4D4D4DCDCDCDCDCDCDCDCDCE4E4E4E4E4E4E4E4E4E8E9E8E8E9E8E8E9E8ECECECECECEC
+ECECECECECECEBEBEBEBEBEBEBEBEBECECECECECECECECECF0F0F0F0F0F0F0F0F0F2F2F2F2F2F2
+F2F2F2F6F6F6F6F6F6F6F6F6F6F6F6FCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFDFDFDFDFDFDFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F2F2F2F2F2F2F2F2F2EEEEEEEEEEEE
+EEEEEEE8E9E8E8E9E8E8E9E8E0E0E0E0E0E0E0E0E0DFE0DFDFE0DFDFE0DFDFE0DFDFDFDFDFDFDF
+DFDFDFDBDBDBDBDBDBDBDBDBD4D4D4D4D4D4D4D4D4CACACACACACACACACACACACAC1C1C1C1C1C1
+C1C1C1B6B6B6B6B6B6B6B6B6AAAAAAAAAAAAAAAAAA949494949494949494626262626262626262
+6262624444444444444444443C3C3C3C3C3C3C3C3C303030303030303030292929292929292929
+3030303030303030303030303535353535353535353B3B3B3B3B3B3B3B3B6F6F6F6F6F6F6F6F6F
+DBDBDBDBDBDBDBDBDBDBDBDBFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9
+C4C4C4C4C4C4C4C4C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDD6D6D5
+D6D6D5D6D6D57373737373737373733A3A3A3A3A3A3A3A3A3A3A3A2F2F2F2F2F2F2F2F2F2C2C2C
+2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D3232323232323232323232322C2C2C2C2C2C2C2C2C272727
+2727272727273030303030303030304C4C4C4C4C4C4C4C4C666666666666666666666666727272
+7272727272727676767676767676767979797979797979797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7D7D7D7D7D7D7D7D7D7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C797979797979
+7979797979796E6E6E6E6E6E6E6E6E6464646464646464646161616161616161615F605F5F605F
+5F605F5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5E5E5E5E5E5E5E5E5E5F605F5F605F
+5F605F6767676767676767677575757575757575757575758D8D8D8D8D8D8D8D8DADADADADADAD
+ADADADC3C3C3C3C3C3C3C3C3CCCCCCCCCCCCCCCCCCCCCCCCD4D4D4D4D4D4D4D4D4DCDCDCDCDCDC
+DCDCDCE4E4E4E4E4E4E4E4E4E8E9E8E8E9E8E8E9E8ECECECECECECECECECECECECEBEBEBEBEBEB
+EBEBEBECECECECECECECECECF0F0F0F0F0F0F0F0F0F2F2F2F2F2F2F2F2F2F6F6F6F6F6F6F6F6F6
+F6F6F6FCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFD
+F9F9F9F9F9F9F9F9F9F9F9F9F2F2F2F2F2F2F2F2F2EEEEEEEEEEEEEEEEEEE8E9E8E8E9E8E8E9E8
+E0E0E0E0E0E0E0E0E0DFE0DFDFE0DFDFE0DFDFE0DFDFDFDFDFDFDFDFDFDFDBDBDBDBDBDBDBDBDB
+D4D4D4D4D4D4D4D4D4CACACACACACACACACACACACAC1C1C1C1C1C1C1C1C1B6B6B6B6B6B6B6B6B6
+AAAAAAAAAAAAAAAAAA949494949494949494626262626262626262626262444444444444444444
+3C3C3C3C3C3C3C3C3C303030303030303030292929292929292929303030303030303030303030
+3535353535353535353B3B3B3B3B3B3B3B3B6F6F6F6F6F6F6F6F6FDBDBDBDBDBDBDBDBDBDBDBDB
+FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C4C4C4C4C4C4C4C4C4FFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDD6D6D5D6D6D5D6D6D5737373737373
+7373733A3A3A3A3A3A3A3A3A3A3A3A2F2F2F2F2F2F2F2F2F2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D
+2D2D2D3232323232323232323232322C2C2C2C2C2C2C2C2C272727272727272727303030303030
+3030304C4C4C4C4C4C4C4C4C666666666666666666666666727272727272727272767676767676
+7676767979797979797979797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7D7D7D7D7D7D
+7D7D7D7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7979797979797979797979796E6E6E6E6E6E
+6E6E6E6464646464646464646161616161616161615F605F5F605F5F605F5C5C5C5C5C5C5C5C5C
+5C5C5C5C5C5C5C5C5C5C5C5C5E5E5E5E5E5E5E5E5E5F605F5F605F5F605F676767676767676767
+7575757575757575757575758D8D8D8D8D8D8D8D8DADADADADADADADADADC3C3C3C3C3C3C3C3C3
+CCCCCCCCCCCCCCCCCCCCCCCCD4D4D4D4D4D4D4D4D4DCDCDCDCDCDCDCDCDCE4E4E4E4E4E4E4E4E4
+E8E9E8E8E9E8E8E9E8ECECECECECECECECECECECECEBEBEBEBEBEBEBEBEBECECECECECECECECEC
+F0F0F0F0F0F0F0F0F0F2F2F2F2F2F2F2F2F2F6F6F6F6F6F6F6F6F6F6F6F6FCFCFCFCFCFCFCFCFC
+FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9
+F2F2F2F2F2F2F2F2F2EEEEEEEEEEEEEEEEEEE8E9E8E8E9E8E8E9E8E0E0E0E0E0E0E0E0E0DFE0DF
+DFE0DFDFE0DFDFE0DFDFDFDFDFDFDFDFDFDFDBDBDBDBDBDBDBDBDBD4D4D4D4D4D4D4D4D4CACACA
+CACACACACACACACACAC1C1C1C1C1C1C1C1C1B6B6B6B6B6B6B6B6B6AAAAAAAAAAAAAAAAAA949494
+9494949494946262626262626262626262624444444444444444443C3C3C3C3C3C3C3C3C303030
+3030303030302929292929292929293030303030303030303030303535353535353535353B3B3B
+3B3B3B3B3B3B6F6F6F6F6F6F6F6F6FDBDBDBDBDBDBDBDBDBDBDBDBFEFEFEFEFEFEFEFEFEFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C4C4C4C4C4C4C4C4C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFCFCFCFCFCFCFCFCFCD0D0D0D0D0D0D0D0D06C6C6C6C6C6C6C6C6C363636363636363636
+3636362C2C2C2C2C2C2C2C2C2929292929292929292B2B2B2B2B2B2B2B2B303030303030303030
+3030302D2D2D2D2D2D2D2D2D2828282828282828283030303030303030304B4B4B4B4B4B4B4B4B
+6464646464646464646464647272727272727272727676767676767676767A7A7A7A7A7A7A7A7A
+7D7D7D7D7D7D7D7D7D7E7E7E7E7E7E7E7E7E7E7E7E808080808080808080828282828282828282
+8383838383838383838585858585858585858585858282828282828282827E7E7E7E7E7E7E7E7E
+7F7F7F7F7F7F7F7F7F818181818181818181818181818181818181818181838383838383838383
+868686868686868686888888888888888888919191919191919191A3A3A3A3A3A3A3A3A3A3A3A3
+B8B8B8B8B8B8B8B8B8CBCBCBCBCBCBCBCBCBD6D6D5D6D6D5D6D6D5DDDDDDDDDDDDDDDDDDDDDDDD
+E6E6E6E6E6E6E6E6E6EDEDEDEDEDEDEDEDEDF1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F3F3F3
+F3F3F3F3F3F3F3F3F3F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F4F4F4
+F4F4F4F4F4F4F8F8F8F8F8F8F8F8F8F8F8F8FDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F4F4F4F4F4F4F4F4F4EFEFEF
+EFEFEFEFEFEFE8E8E8E8E8E8E8E8E8E2E2E2E2E2E2E2E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1
+E1E1E1E1E1E1DDDDDDDDDDDDDDDDDDD8D8D8D8D8D8D8D8D8D0D0D0D0D0D0D0D0D0D0D0D0C4C4C4
+C4C4C4C4C4C4B8B8B8B8B8B8B8B8B8AAAAAAAAAAAAAAAAAA9494949494949494945F605F5F605F
+5F605F5F605F3F3F3F3F3F3F3F3F3F3C3C3C3C3C3C3C3C3C3030303030303030302B2B2B2B2B2B
+2B2B2B2F2F2F2F2F2F2F2F2F2F2F2F3434343434343434343939393939393939396C6C6C6C6C6C
+6C6C6CD8D8D8D8D8D8D8D8D8D8D8D8FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFB
+FBFBFBD9D9D9D9D9D9D9D9D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFC
+D0D0D0D0D0D0D0D0D06C6C6C6C6C6C6C6C6C3636363636363636363636362C2C2C2C2C2C2C2C2C
+2929292929292929292B2B2B2B2B2B2B2B2B3030303030303030303030302D2D2D2D2D2D2D2D2D
+2828282828282828283030303030303030304B4B4B4B4B4B4B4B4B646464646464646464646464
+7272727272727272727676767676767676767A7A7A7A7A7A7A7A7A7D7D7D7D7D7D7D7D7D7E7E7E
+7E7E7E7E7E7E7E7E7E808080808080808080828282828282828282838383838383838383858585
+8585858585858585858282828282828282827E7E7E7E7E7E7E7E7E7F7F7F7F7F7F7F7F7F818181
+818181818181818181818181818181818181838383838383838383868686868686868686888888
+888888888888919191919191919191A3A3A3A3A3A3A3A3A3A3A3A3B8B8B8B8B8B8B8B8B8CBCBCB
+CBCBCBCBCBCBD6D6D5D6D6D5D6D6D5DDDDDDDDDDDDDDDDDDDDDDDDE6E6E6E6E6E6E6E6E6EDEDED
+EDEDEDEDEDEDF1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F1F1F1
+F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F4F4F4F4F4F4F4F4F4F8F8F8F8F8F8
+F8F8F8F8F8F8FDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F4F4F4F4F4F4F4F4F4EFEFEFEFEFEFEFEFEFE8E8E8E8E8E8
+E8E8E8E2E2E2E2E2E2E2E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DDDDDDDDDDDD
+DDDDDDD8D8D8D8D8D8D8D8D8D0D0D0D0D0D0D0D0D0D0D0D0C4C4C4C4C4C4C4C4C4B8B8B8B8B8B8
+B8B8B8AAAAAAAAAAAAAAAAAA9494949494949494945F605F5F605F5F605F5F605F3F3F3F3F3F3F
+3F3F3F3C3C3C3C3C3C3C3C3C3030303030303030302B2B2B2B2B2B2B2B2B2F2F2F2F2F2F2F2F2F
+2F2F2F3434343434343434343939393939393939396C6C6C6C6C6C6C6C6CD8D8D8D8D8D8D8D8D8
+D8D8D8FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBD9D9D9D9D9D9D9D9D9
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCD0D0D0D0D0D0D0D0D06C6C6C
+6C6C6C6C6C6C3636363636363636363636362C2C2C2C2C2C2C2C2C2929292929292929292B2B2B
+2B2B2B2B2B2B3030303030303030303030302D2D2D2D2D2D2D2D2D282828282828282828303030
+3030303030304B4B4B4B4B4B4B4B4B646464646464646464646464727272727272727272767676
+7676767676767A7A7A7A7A7A7A7A7A7D7D7D7D7D7D7D7D7D7E7E7E7E7E7E7E7E7E7E7E7E808080
+808080808080828282828282828282838383838383838383858585858585858585858585828282
+8282828282827E7E7E7E7E7E7E7E7E7F7F7F7F7F7F7F7F7F818181818181818181818181818181
+818181818181838383838383838383868686868686868686888888888888888888919191919191
+919191A3A3A3A3A3A3A3A3A3A3A3A3B8B8B8B8B8B8B8B8B8CBCBCBCBCBCBCBCBCBD6D6D5D6D6D5
+D6D6D5DDDDDDDDDDDDDDDDDDDDDDDDE6E6E6E6E6E6E6E6E6EDEDEDEDEDEDEDEDEDF1F1F1F1F1F1
+F1F1F1F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1
+F1F1F1F2F2F2F2F2F2F2F2F2F4F4F4F4F4F4F4F4F4F8F8F8F8F8F8F8F8F8F8F8F8FDFDFDFDFDFD
+FDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFE
+FEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF9F9F9F9F9F9F9F9F9
+F9F9F9F4F4F4F4F4F4F4F4F4EFEFEFEFEFEFEFEFEFE8E8E8E8E8E8E8E8E8E2E2E2E2E2E2E2E2E2
+E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DDDDDDDDDDDDDDDDDDD8D8D8D8D8D8D8D8D8
+D0D0D0D0D0D0D0D0D0D0D0D0C4C4C4C4C4C4C4C4C4B8B8B8B8B8B8B8B8B8AAAAAAAAAAAAAAAAAA
+9494949494949494945F605F5F605F5F605F5F605F3F3F3F3F3F3F3F3F3F3C3C3C3C3C3C3C3C3C
+3030303030303030302B2B2B2B2B2B2B2B2B2F2F2F2F2F2F2F2F2F2F2F2F343434343434343434
+3939393939393939396C6C6C6C6C6C6C6C6CD8D8D8D8D8D8D8D8D8D8D8D8FDFDFDFDFDFDFDFDFD
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBD9D9D9D9D9D9D9D9D9FFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFBFBFBFBFBFBFBFBFBC5C5C5C5C5C5C5C5C55F605F5F605F5F605F323232323232
+3232323232322B2B2B2B2B2B2B2B2B2828282828282828282929292929292929292F2F2F2F2F2F
+2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2929292929292929292F2F2F2F2F2F2F2F2F484848484848
+4848486363636363636363636363637272727272727272727777777777777777777C7C7C7C7C7C
+7C7C7C7E7E7E7E7E7E7E7E7E7F7F7F7F7F7F7F7F7F7F7F7F818181818181818181838383838383
+8383838686868686868686868888888888888888888888888A8A8A8A8A8A8A8A8A8B8B8B8B8B8B
+8B8B8B8D8D8D8D8D8D8D8D8D9191919191919191919797979797979797979797979E9E9E9E9E9E
+9E9E9EA3A3A3A3A3A3A3A3A3A9A9A9A9A9A9A9A9A9BABABABABABABABABACCCCCCCCCCCCCCCCCC
+CCCCCCD6D6D6D6D6D6D6D6D6DFDFDFDFDFDFDFDFDFE4E4E4E4E4E4E4E4E4EBEBEBEBEBEBEBEBEB
+EBEBEBF1F1F1F1F1F1F1F1F1F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5
+F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F4F4F4F4F4F4F4F4F4F6F6F6F6F6F6F6F6F6
+F7F7F7F7F7F7F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9FDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDF6F6F6F6F6F6F6F6F6
+F7F7F7F7F7F7F7F7F7FBFBFBFBFBFBFBFBFBF9F9F9F9F9F9F9F9F9F9F9F9F5F5F5F5F5F5F5F5F5
+F0F0F0F0F0F0F0F0F0E8E8E8E8E8E8E8E8E8E0E0E0E0E0E0E0E0E0DFE0DFDFE0DFDFE0DFDFE0DF
+E0E0E0E0E0E0E0E0E0DDDDDDDDDDDDDDDDDDD9D9D9D9D9D9D9D9D9D2D2D2D2D2D2D2D2D2D2D2D2
+C7C7C7C7C7C7C7C7C7B9B9B9B9B9B9B9B9B9ABABABABABABABABAB9595959595959595955E5E5E
+5E5E5E5E5E5E5E5E5E3B3B3B3B3B3B3B3B3B3737373737373737373030303030303030302D2D2D
+2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F2F2F2F323232323232323232363636363636363636686868
+686868686868D6D6D5D6D6D5D6D6D5D6D6D5FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9
+F9F9F9F9F9F9C7C7C7C7C7C7C7C7C7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFB
+FBFBFBC5C5C5C5C5C5C5C5C55F605F5F605F5F605F3232323232323232323232322B2B2B2B2B2B
+2B2B2B2828282828282828282929292929292929292F2F2F2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D
+2D2D2D2929292929292929292F2F2F2F2F2F2F2F2F484848484848484848636363636363636363
+6363637272727272727272727777777777777777777C7C7C7C7C7C7C7C7C7E7E7E7E7E7E7E7E7E
+7F7F7F7F7F7F7F7F7F7F7F7F818181818181818181838383838383838383868686868686868686
+8888888888888888888888888A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8D8D8D8D8D8D8D8D8D
+9191919191919191919797979797979797979797979E9E9E9E9E9E9E9E9EA3A3A3A3A3A3A3A3A3
+A9A9A9A9A9A9A9A9A9BABABABABABABABABACCCCCCCCCCCCCCCCCCCCCCCCD6D6D6D6D6D6D6D6D6
+DFDFDFDFDFDFDFDFDFE4E4E4E4E4E4E4E4E4EBEBEBEBEBEBEBEBEBEBEBEBF1F1F1F1F1F1F1F1F1
+F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5
+F5F5F5F5F5F5F5F5F5F4F4F4F4F4F4F4F4F4F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F9F9F9
+F9F9F9F9F9F9F9F9F9FDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDF6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7FBFBFB
+FBFBFBFBFBFBF9F9F9F9F9F9F9F9F9F9F9F9F5F5F5F5F5F5F5F5F5F0F0F0F0F0F0F0F0F0E8E8E8
+E8E8E8E8E8E8E0E0E0E0E0E0E0E0E0DFE0DFDFE0DFDFE0DFDFE0DFE0E0E0E0E0E0E0E0E0DDDDDD
+DDDDDDDDDDDDD9D9D9D9D9D9D9D9D9D2D2D2D2D2D2D2D2D2D2D2D2C7C7C7C7C7C7C7C7C7B9B9B9
+B9B9B9B9B9B9ABABABABABABABABAB9595959595959595955E5E5E5E5E5E5E5E5E5E5E5E3B3B3B
+3B3B3B3B3B3B3737373737373737373030303030303030302D2D2D2D2D2D2D2D2D2F2F2F2F2F2F
+2F2F2F2F2F2F323232323232323232363636363636363636686868686868686868D6D6D5D6D6D5
+D6D6D5D6D6D5FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C7C7C7C7C7C7
+C7C7C7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFAC0C0C0C0C0C0C0C0C0
+5A5A5A5A5A5A5A5A5A3131313131313131313131312C2C2C2C2C2C2C2C2C282828282828282828
+2828282828282828282D2D2D2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F2B2B2B2B2B2B2B2B2B
+2D2D2D2D2D2D2D2D2D4141414141414141415C5C5C5C5C5C5C5C5C5C5C5C707070707070707070
+7979797979797979797D7D7D7D7D7D7D7D7D7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+8282828282828282828585858585858585858888888888888888888B8B8B8B8B8B8B8B8B8B8B8B
+8D8D8D8D8D8D8D8D8D8F8F8F8F8F8F8F8F8F9393939393939393939B9B9B9B9B9B9B9B9BA3A3A3
+A3A3A3A3A3A3A3A3A3AAAAAAAAAAAAAAAAAAB1B1B1B1B1B1B1B1B1BCBCBCBCBCBCBCBCBCCCCCCC
+CCCCCCCCCCCCDBDBDBDBDBDBDBDBDBDBDBDBE3E3E3E3E3E3E3E3E3E9E9E9E9E9E9E9E9E9EDEDED
+EDEDEDEDEDEDF1F1F1F1F1F1F1F1F1F1F1F1F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F7F7F7
+F7F7F7F7F7F7F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F7F7F7F7F7F7F7F7F7F8F8F8
+F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFCFCFCFCFCFCFCFCFCFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFD
+FDFDFDFDFDFDF9F9F9F9F9F9F9F9F9F7F7F7F7F7F7F7F7F7F9F9F9F9F9F9F9F9F9F5F5F5F5F5F5
+F5F5F5F5F5F5F0F0F0F0F0F0F0F0F0EDEDEDEDEDEDEDEDEDE5E5E5E5E5E5E5E5E5DBDBDBDBDBDB
+DBDBDBD7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4
+D4D4D4D0D0D0D0D0D0D0D0D0D0D0D0CACACACACACACACACABDBDBDBDBDBDBDBDBDAFAFAFAFAFAF
+AFAFAF9A9A9A9A9A9A9A9A9A6565656565656565656565653C3C3C3C3C3C3C3C3C373737373737
+3737373131313131313131312D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F2F2F2F313131313131
+3131313434343434343434345A5A5A5A5A5A5A5A5AC6C6C6C6C6C6C6C6C6C6C6C6FCFCFCFCFCFC
+FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C6C6C6C6C6C6C6C6C6FFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFAC0C0C0C0C0C0C0C0C05A5A5A5A5A5A5A5A5A313131
+3131313131313131312C2C2C2C2C2C2C2C2C2828282828282828282828282828282828282D2D2D
+2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F2B2B2B2B2B2B2B2B2B2D2D2D2D2D2D2D2D2D414141
+4141414141415C5C5C5C5C5C5C5C5C5C5C5C7070707070707070707979797979797979797D7D7D
+7D7D7D7D7D7D7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F828282828282828282858585
+8585858585858888888888888888888B8B8B8B8B8B8B8B8B8B8B8B8D8D8D8D8D8D8D8D8D8F8F8F
+8F8F8F8F8F8F9393939393939393939B9B9B9B9B9B9B9B9BA3A3A3A3A3A3A3A3A3A3A3A3AAAAAA
+AAAAAAAAAAAAB1B1B1B1B1B1B1B1B1BCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCCCCCDBDBDBDBDBDB
+DBDBDBDBDBDBE3E3E3E3E3E3E3E3E3E9E9E9E9E9E9E9E9E9EDEDEDEDEDEDEDEDEDF1F1F1F1F1F1
+F1F1F1F1F1F1F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F6F6F6F6F6F6
+F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9
+F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDF9F9F9F9F9F9
+F9F9F9F7F7F7F7F7F7F7F7F7F9F9F9F9F9F9F9F9F9F5F5F5F5F5F5F5F5F5F5F5F5F0F0F0F0F0F0
+F0F0F0EDEDEDEDEDEDEDEDEDE5E5E5E5E5E5E5E5E5DBDBDBDBDBDBDBDBDBD7D7D7D7D7D7D7D7D7
+D7D7D7D6D6D6D6D6D6D6D6D6D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D0D0D0D0D0D0D0D0D0
+D0D0D0CACACACACACACACACABDBDBDBDBDBDBDBDBDAFAFAFAFAFAFAFAFAF9A9A9A9A9A9A9A9A9A
+6565656565656565656565653C3C3C3C3C3C3C3C3C373737373737373737313131313131313131
+2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F2F2F2F313131313131313131343434343434343434
+5A5A5A5A5A5A5A5A5AC6C6C6C6C6C6C6C6C6C6C6C6FCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+F9F9F9F9F9F9F9F9F9C6C6C6C6C6C6C6C6C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA
+FAFAFAFAFAFAC0C0C0C0C0C0C0C0C05A5A5A5A5A5A5A5A5A3131313131313131313131312C2C2C
+2C2C2C2C2C2C2828282828282828282828282828282828282D2D2D2D2D2D2D2D2D2D2D2D2F2F2F
+2F2F2F2F2F2F2B2B2B2B2B2B2B2B2B2D2D2D2D2D2D2D2D2D4141414141414141415C5C5C5C5C5C
+5C5C5C5C5C5C7070707070707070707979797979797979797D7D7D7D7D7D7D7D7D7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F828282828282828282858585858585858585888888888888
+8888888B8B8B8B8B8B8B8B8B8B8B8B8D8D8D8D8D8D8D8D8D8F8F8F8F8F8F8F8F8F939393939393
+9393939B9B9B9B9B9B9B9B9BA3A3A3A3A3A3A3A3A3A3A3A3AAAAAAAAAAAAAAAAAAB1B1B1B1B1B1
+B1B1B1BCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCCCCCDBDBDBDBDBDBDBDBDBDBDBDBE3E3E3E3E3E3
+E3E3E3E9E9E9E9E9E9E9E9E9EDEDEDEDEDEDEDEDEDF1F1F1F1F1F1F1F1F1F1F1F1F5F5F5F5F5F5
+F5F5F5F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5
+F5F5F5F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
+FCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDF9F9F9F9F9F9F9F9F9F7F7F7F7F7F7F7F7F7
+F9F9F9F9F9F9F9F9F9F5F5F5F5F5F5F5F5F5F5F5F5F0F0F0F0F0F0F0F0F0EDEDEDEDEDEDEDEDED
+E5E5E5E5E5E5E5E5E5DBDBDBDBDBDBDBDBDBD7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6
+D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D0D0D0D0D0D0D0D0D0D0D0D0CACACACACACACACACA
+BDBDBDBDBDBDBDBDBDAFAFAFAFAFAFAFAFAF9A9A9A9A9A9A9A9A9A656565656565656565656565
+3C3C3C3C3C3C3C3C3C3737373737373737373131313131313131312D2D2D2D2D2D2D2D2D2F2F2F
+2F2F2F2F2F2F2F2F2F3131313131313131313434343434343434345A5A5A5A5A5A5A5A5AC6C6C6
+C6C6C6C6C6C6C6C6C6FCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C6C6C6
+C6C6C6C6C6C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8F8F8F8F8F8B9B9B9B9B9B9
+B9B9B95555555555555555553131313131313131313131312C2C2C2C2C2C2C2C2C282828282828
+2828282727272727272727272C2C2C2C2C2C2C2C2C2C2C2C3131313131313131312C2C2C2C2C2C
+2C2C2C2B2B2B2B2B2B2B2B2B3A3A3A3A3A3A3A3A3A5858585858585858585858586D6D6D6D6D6D
+6D6D6D7878787878787878787D7D7D7D7D7D7D7D7D7F7F7F7F7F7F7F7F7F808080808080808080
+8080808282828282828282828585858585858585858989898989898989898D8D8D8D8D8D8D8D8D
+8D8D8D9191919191919191919494949494949494949B9B9B9B9B9B9B9B9BA2A2A2A2A2A2A2A2A2
+AAAAAAAAAAAAAAAAAAAAAAAAB1B1B1B1B1B1B1B1B1BABABABABABABABABAC4C4C4C4C4C4C4C4C4
+D1D1D1D1D1D1D1D1D1DDDDDDDDDDDDDDDDDDDDDDDDE7E7E7E7E7E7E7E7E7EDEDEDEDEDEDEDEDED
+F1F1F1F1F1F1F1F1F1F3F3F3F3F3F3F3F3F3F3F3F3F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5
+F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7
+F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
+F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FAFAFAFAFAFAFAFAFAF6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F3EAEAEA
+EAEAEAEAEAEAEAEAEAE1E1E1E1E1E1E1E1E1DCDCDCDCDCDCDCDCDCD0D0D0D0D0D0D0D0D0C5C5C5
+C5C5C5C5C5C5BDBDBDBDBDBDBDBDBDBDBDBDB8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8C0C0C0
+C0C0C0C0C0C0C9C9C9C9C9C9C9C9C9C9C9C9C7C7C7C7C7C7C7C7C7BEBEBEBEBEBEBEBEBEB1B1B1
+B1B1B1B1B1B19E9E9E9E9E9E9E9E9E6B6B6B6B6B6B6B6B6B6B6B6B3C3C3C3C3C3C3C3C3C363636
+3636363636363131313131313131312D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2F2F2F
+2F2F2F2F2F2F3232323232323232324F4F4F4F4F4F4F4F4FB8B8B8B8B8B8B8B8B8B8B8B8FAFAFA
+FAFAFAFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9BBBBBBBBBBBBBBBBBBFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8F8F8F8F8F8B9B9B9B9B9B9B9B9B9555555555555555555
+3131313131313131313131312C2C2C2C2C2C2C2C2C282828282828282828272727272727272727
+2C2C2C2C2C2C2C2C2C2C2C2C3131313131313131312C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B
+3A3A3A3A3A3A3A3A3A5858585858585858585858586D6D6D6D6D6D6D6D6D787878787878787878
+7D7D7D7D7D7D7D7D7D7F7F7F7F7F7F7F7F7F808080808080808080808080828282828282828282
+8585858585858585858989898989898989898D8D8D8D8D8D8D8D8D8D8D8D919191919191919191
+9494949494949494949B9B9B9B9B9B9B9B9BA2A2A2A2A2A2A2A2A2AAAAAAAAAAAAAAAAAAAAAAAA
+B1B1B1B1B1B1B1B1B1BABABABABABABABABAC4C4C4C4C4C4C4C4C4D1D1D1D1D1D1D1D1D1DDDDDD
+DDDDDDDDDDDDDDDDDDE7E7E7E7E7E7E7E7E7EDEDEDEDEDEDEDEDEDF1F1F1F1F1F1F1F1F1F3F3F3
+F3F3F3F3F3F3F3F3F3F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5
+F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9
+F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
+F9F9F9F9F9F9FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFAFAFAFAFAFAFAFAFAF6F6F6
+F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F3EAEAEAEAEAEAEAEAEAEAEAEAE1E1E1
+E1E1E1E1E1E1DCDCDCDCDCDCDCDCDCD0D0D0D0D0D0D0D0D0C5C5C5C5C5C5C5C5C5BDBDBDBDBDBD
+BDBDBDBDBDBDB8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8C0C0C0C0C0C0C0C0C0C9C9C9C9C9C9
+C9C9C9C9C9C9C7C7C7C7C7C7C7C7C7BEBEBEBEBEBEBEBEBEB1B1B1B1B1B1B1B1B19E9E9E9E9E9E
+9E9E9E6B6B6B6B6B6B6B6B6B6B6B6B3C3C3C3C3C3C3C3C3C363636363636363636313131313131
+3131312D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F323232323232
+3232324F4F4F4F4F4F4F4F4FB8B8B8B8B8B8B8B8B8B8B8B8FAFAFAFAFAFAFAFAFAFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFF9F9F9F9F9F9F9F9F9BBBBBBBBBBBBBBBBBBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+F3F3F3F3F3F3F3F3F3ABABABABABABABABAB4E4E4E4E4E4E4E4E4E2F2F2F2F2F2F2F2F2F2F2F2F
+2828282828282828282727272727272727272727272727272727272C2C2C2C2C2C2C2C2C2C2C2C
+313131313131313131292929292929292929252525252525252525353535353535353535545454
+5454545454545454546A6A6A6A6A6A6A6A6A7676767676767676767C7C7C7C7C7C7C7C7C7F7F7F
+7F7F7F7F7F7F8282828282828282828282828282828282828282828686868686868686868B8B8B
+8B8B8B8B8B8B9090909090909090909090909696969696969696969B9B9B9B9B9B9B9B9BA1A1A1
+A1A1A1A1A1A1A7A7A7A7A7A7A7A7A7AEAEAEAEAEAEAEAEAEAEAEAEB4B4B4B4B4B4B4B4B4BCBCBC
+BCBCBCBCBCBCC5C5C5C5C5C5C5C5C5D0D0D0D0D0D0D0D0D0DADADADADADADADADADADADAE3E3E3
+E3E3E3E3E3E3E6E6E6E6E6E6E6E6E6ECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDF1F1F1
+F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F1F1F1F1F1F1F1F1F1F3F3F3F3F3F3
+F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6
+F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F8F8F8F8F8F8
+F8F8F8F5F5F5F5F5F5F5F5F5F5F5F5EEEEEEEEEEEEEEEEEEE9E9E9E9E9E9E9E9E9E5E5E5E5E5E5
+E5E5E5DBDBDBDBDBDBDBDBDBCBCBCBCBCBCBCBCBCBCBCBCBBDBDBDBDBDBDBDBDBDB0B1B0B0B1B0
+B0B1B0A1A1A1A1A1A1A1A1A19595959595959595958F8F8F8F8F8F8F8F8F8F8F8F888888888888
+888888898989898989898989949494949494949494A8A8A8A8A8A8A8A8A8A8A8A8B7B7B7B7B7B7
+B7B7B7B8B8B8B8B8B8B8B8B8B0B1B0B0B1B0B0B1B09E9E9E9E9E9E9E9E9E6D6D6D6D6D6D6D6D6D
+6D6D6D3B3B3B3B3B3B3B3B3B3434343434343434343030303030303030302B2B2B2B2B2B2B2B2B
+2929292929292929292929292C2C2C2C2C2C2C2C2C3030303030303030304C4C4C4C4C4C4C4C4C
+B2B2B2B2B2B2B2B2B2B2B2B2F9F9F9F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9
+C5C5C5C5C5C5C5C5C5FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF3F3F3F3F3F3F3F3F3ABABAB
+ABABABABABAB4E4E4E4E4E4E4E4E4E2F2F2F2F2F2F2F2F2F2F2F2F282828282828282828272727
+2727272727272727272727272727272C2C2C2C2C2C2C2C2C2C2C2C313131313131313131292929
+2929292929292525252525252525253535353535353535355454545454545454545454546A6A6A
+6A6A6A6A6A6A7676767676767676767C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F828282828282
+8282828282828282828282828282828686868686868686868B8B8B8B8B8B8B8B8B909090909090
+9090909090909696969696969696969B9B9B9B9B9B9B9B9BA1A1A1A1A1A1A1A1A1A7A7A7A7A7A7
+A7A7A7AEAEAEAEAEAEAEAEAEAEAEAEB4B4B4B4B4B4B4B4B4BCBCBCBCBCBCBCBCBCC5C5C5C5C5C5
+C5C5C5D0D0D0D0D0D0D0D0D0DADADADADADADADADADADADAE3E3E3E3E3E3E3E3E3E6E6E6E6E6E6
+E6E6E6ECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDF1F1F1F1F1F1F1F1F1F2F2F2F2F2F2
+F2F2F2F2F2F2F2F2F2F2F2F2F1F1F1F1F1F1F1F1F1F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4
+F4F4F4F4F4F4F4F4F4F4F4F4F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5
+F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F8F8F8F8F8F8F8F8F8F5F5F5F5F5F5F5F5F5
+F5F5F5EEEEEEEEEEEEEEEEEEE9E9E9E9E9E9E9E9E9E5E5E5E5E5E5E5E5E5DBDBDBDBDBDBDBDBDB
+CBCBCBCBCBCBCBCBCBCBCBCBBDBDBDBDBDBDBDBDBDB0B1B0B0B1B0B0B1B0A1A1A1A1A1A1A1A1A1
+9595959595959595958F8F8F8F8F8F8F8F8F8F8F8F888888888888888888898989898989898989
+949494949494949494A8A8A8A8A8A8A8A8A8A8A8A8B7B7B7B7B7B7B7B7B7B8B8B8B8B8B8B8B8B8
+B0B1B0B0B1B0B0B1B09E9E9E9E9E9E9E9E9E6D6D6D6D6D6D6D6D6D6D6D6D3B3B3B3B3B3B3B3B3B
+3434343434343434343030303030303030302B2B2B2B2B2B2B2B2B292929292929292929292929
+2C2C2C2C2C2C2C2C2C3030303030303030304C4C4C4C4C4C4C4C4CB2B2B2B2B2B2B2B2B2B2B2B2
+F9F9F9F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C5C5C5C5C5C5C5C5C5FEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF3F3F3F3F3F3F3F3F3ABABABABABABABABAB4E4E4E4E4E4E
+4E4E4E2F2F2F2F2F2F2F2F2F2F2F2F282828282828282828272727272727272727272727272727
+2727272C2C2C2C2C2C2C2C2C2C2C2C313131313131313131292929292929292929252525252525
+2525253535353535353535355454545454545454545454546A6A6A6A6A6A6A6A6A767676767676
+7676767C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F828282828282828282828282828282828282
+8282828686868686868686868B8B8B8B8B8B8B8B8B909090909090909090909090969696969696
+9696969B9B9B9B9B9B9B9B9BA1A1A1A1A1A1A1A1A1A7A7A7A7A7A7A7A7A7AEAEAEAEAEAEAEAEAE
+AEAEAEB4B4B4B4B4B4B4B4B4BCBCBCBCBCBCBCBCBCC5C5C5C5C5C5C5C5C5D0D0D0D0D0D0D0D0D0
+DADADADADADADADADADADADAE3E3E3E3E3E3E3E3E3E6E6E6E6E6E6E6E6E6ECECECECECECECECEC
+EDEDEDEDEDEDEDEDEDEDEDEDF1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2
+F1F1F1F1F1F1F1F1F1F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4
+F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5
+F5F5F5F5F5F5F5F5F5F8F8F8F8F8F8F8F8F8F5F5F5F5F5F5F5F5F5F5F5F5EEEEEEEEEEEEEEEEEE
+E9E9E9E9E9E9E9E9E9E5E5E5E5E5E5E5E5E5DBDBDBDBDBDBDBDBDBCBCBCBCBCBCBCBCBCBCBCBCB
+BDBDBDBDBDBDBDBDBDB0B1B0B0B1B0B0B1B0A1A1A1A1A1A1A1A1A19595959595959595958F8F8F
+8F8F8F8F8F8F8F8F8F888888888888888888898989898989898989949494949494949494A8A8A8
+A8A8A8A8A8A8A8A8A8B7B7B7B7B7B7B7B7B7B8B8B8B8B8B8B8B8B8B0B1B0B0B1B0B0B1B09E9E9E
+9E9E9E9E9E9E6D6D6D6D6D6D6D6D6D6D6D6D3B3B3B3B3B3B3B3B3B343434343434343434303030
+3030303030302B2B2B2B2B2B2B2B2B2929292929292929292929292C2C2C2C2C2C2C2C2C303030
+3030303030304C4C4C4C4C4C4C4C4CB2B2B2B2B2B2B2B2B2B2B2B2F9F9F9F9F9F9F9F9F9FFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C5C5C5C5C5C5C5C5C5FDFDFDFDFDFDFDFDFDFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDF0F0F0F0F0F0F0F0F0A8A8A8A8A8A8A8A8A84E4E4E4E4E4E4E4E4E2F2F2F2F2F2F2F2F2F
+2F2F2F2828282828282828282828282828282828282929292929292929292F2F2F2F2F2F2F2F2F
+2F2F2F3232323232323232322B2B2B2B2B2B2B2B2B252525252525252525303030303030303030
+4D4D4D4D4D4D4D4D4D4D4D4D6767676767676767677676767676767676767D7D7D7D7D7D7D7D7D
+8080808080808080808282828282828282828282828484848484848484848A8A8A8A8A8A8A8A8A
+8F8F8F8F8F8F8F8F8F9595959595959595959595959C9C9C9C9C9C9C9C9CA0A0A0A0A0A0A0A0A0
+A5A5A5A5A5A5A5A5A5AAAAAAAAAAAAAAAAAAB0B1B0B0B1B0B0B1B0B0B1B0B5B5B5B5B5B5B5B5B5
+BBBBBBBBBBBBBBBBBBC2C2C2C2C2C2C2C2C2C9C9C9C9C9C9C9C9C9D0D0D0D0D0D0D0D0D0D0D0D0
+D8D8D8D8D8D8D8D8D8DCDCDCDCDCDCDCDCDCE1E1E1E1E1E1E1E1E1E4E4E4E4E4E4E4E4E4E4E4E4
+E7E7E7E7E7E7E7E7E7EBEBEBEBEBEBEBEBEBEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEFEFEF
+EFEFEFEFEFEFEFEFEFEEEEEEEEEEEEEEEEEEECECECECECECECECECEDEDEDEDEDEDEDEDEDF0F0F0
+F0F0F0F0F0F0F2F2F2F2F2F2F2F2F2F2F2F2F1F1F1F1F1F1F1F1F1EFEFEFEFEFEFEFEFEFEAEAEA
+EAEAEAEAEAEAE4E4E4E4E4E4E4E4E4E4E4E4DFDFDFDFDFDFDFDFDFD6D6D6D6D6D6D6D6D6C4C4C4
+C4C4C4C4C4C4ACACACACACACACACAC9191919191919191919191917F7F7F7F7F7F7F7F7F767676
+7676767676766D6D6D6D6D6D6D6D6D6666666666666666666464646464646464646464645E5E5E
+5E5E5E5E5E5E6161616161616161616666666666666666667575757575757575757575758B8B8B
+8B8B8B8B8B8B9F9F9F9F9F9F9F9F9FA8A8A8A8A8A8A8A8A89F9F9F9F9F9F9F9F9F747474747474
+7474747474743E3E3E3E3E3E3E3E3E3434343434343434342F2F2F2F2F2F2F2F2F2B2B2B2B2B2B
+2B2B2B2929292929292929292929292C2C2C2C2C2C2C2C2C303030303030303030494949494949
+494949AFAFAFAFAFAFAFAFAFAFAFAFF9F9F9F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9
+F9F9F9C6C6C6C6C6C6C6C6C6FDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF0F0F0F0F0F0F0F0F0
+A8A8A8A8A8A8A8A8A84E4E4E4E4E4E4E4E4E2F2F2F2F2F2F2F2F2F2F2F2F282828282828282828
+2828282828282828282929292929292929292F2F2F2F2F2F2F2F2F2F2F2F323232323232323232
+2B2B2B2B2B2B2B2B2B2525252525252525253030303030303030304D4D4D4D4D4D4D4D4D4D4D4D
+6767676767676767677676767676767676767D7D7D7D7D7D7D7D7D808080808080808080828282
+8282828282828282828484848484848484848A8A8A8A8A8A8A8A8A8F8F8F8F8F8F8F8F8F959595
+9595959595959595959C9C9C9C9C9C9C9C9CA0A0A0A0A0A0A0A0A0A5A5A5A5A5A5A5A5A5AAAAAA
+AAAAAAAAAAAAB0B1B0B0B1B0B0B1B0B0B1B0B5B5B5B5B5B5B5B5B5BBBBBBBBBBBBBBBBBBC2C2C2
+C2C2C2C2C2C2C9C9C9C9C9C9C9C9C9D0D0D0D0D0D0D0D0D0D0D0D0D8D8D8D8D8D8D8D8D8DCDCDC
+DCDCDCDCDCDCE1E1E1E1E1E1E1E1E1E4E4E4E4E4E4E4E4E4E4E4E4E7E7E7E7E7E7E7E7E7EBEBEB
+EBEBEBEBEBEBEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEFEFEFEFEFEFEFEFEFEFEFEFEEEEEE
+EEEEEEEEEEEEECECECECECECECECECEDEDEDEDEDEDEDEDEDF0F0F0F0F0F0F0F0F0F2F2F2F2F2F2
+F2F2F2F2F2F2F1F1F1F1F1F1F1F1F1EFEFEFEFEFEFEFEFEFEAEAEAEAEAEAEAEAEAE4E4E4E4E4E4
+E4E4E4E4E4E4DFDFDFDFDFDFDFDFDFD6D6D6D6D6D6D6D6D6C4C4C4C4C4C4C4C4C4ACACACACACAC
+ACACAC9191919191919191919191917F7F7F7F7F7F7F7F7F7676767676767676766D6D6D6D6D6D
+6D6D6D6666666666666666666464646464646464646464645E5E5E5E5E5E5E5E5E616161616161
+6161616666666666666666667575757575757575757575758B8B8B8B8B8B8B8B8B9F9F9F9F9F9F
+9F9F9FA8A8A8A8A8A8A8A8A89F9F9F9F9F9F9F9F9F7474747474747474747474743E3E3E3E3E3E
+3E3E3E3434343434343434342F2F2F2F2F2F2F2F2F2B2B2B2B2B2B2B2B2B292929292929292929
+2929292C2C2C2C2C2C2C2C2C303030303030303030494949494949494949AFAFAFAFAFAFAFAFAF
+AFAFAFF9F9F9F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C6C6C6C6C6C6C6C6C6
+FCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFD
+FCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
+FCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA
+FAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBEFEFEFEFEFEFEFEFEFA9A9A9A9A9A9A9A9A9505050
+5050505050502F2F2F2F2F2F2F2F2F2F2F2F2828282828282828282828282828282828282B2B2B
+2B2B2B2B2B2B3131313131313131313131313535353535353535352B2B2B2B2B2B2B2B2B242424
+2424242424242C2C2C2C2C2C2C2C2C474747474747474747474747646464646464646464737373
+7373737373737C7C7C7C7C7C7C7C7C818181818181818181838383838383838383838383858585
+8585858585858C8C8C8C8C8C8C8C8C9393939393939393939B9B9B9B9B9B9B9B9B9B9B9B9F9F9F
+9F9F9F9F9F9FA3A3A3A3A3A3A3A3A3A7A7A7A7A7A7A7A7A7ADADADADADADADADADB1B1B1B1B1B1
+B1B1B1B1B1B1B5B5B5B5B5B5B5B5B5B8B8B8B8B8B8B8B8B8BDBDBDBDBDBDBDBDBDC3C3C3C3C3C3
+C3C3C3C8C8C8C8C8C8C8C8C8C8C8C8CECECECECECECECECED0D0D0D0D0D0D0D0D0D5D5D5D5D5D5
+D5D5D5DADADADADADADADADADADADADDDDDDDDDDDDDDDDDDE2E2E2E2E2E2E2E2E2E7E7E7E7E7E7
+E7E7E7E7E7E7E7E7E7E7E7E7E9E9E9E9E9E9E9E9E9E9E9E9E7E7E7E7E7E7E7E7E7E4E4E4E4E4E4
+E4E4E4E3E3E3E3E3E3E3E3E3E7E7E7E7E7E7E7E7E7EAEAEAEAEAEAEAEAEAEAEAEAE8E8E8E8E8E8
+E8E8E8E2E2E2E2E2E2E2E2E2DBDBDBDBDBDBDBDBDBD0D0D0D0D0D0D0D0D0D0D0D0C7C7C7C7C7C7
+C7C7C7B2B2B2B2B2B2B2B2B29191919191919191917575757575757575755B5B5B5B5B5B5B5B5B
+5B5B5B5050505050505050504E4E4E4E4E4E4E4E4E4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C
+4C4C4C4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4C4C4C4C4C4C4C4C4C505050505050505050
+595959595959595959595959646464646464646464737373737373737373888888888888888888
+9595959595959595957A7A7A7A7A7A7A7A7A7A7A7A414141414141414141323232323232323232
+2D2D2D2D2D2D2D2D2D2828282828282828282828282828282828282828282B2B2B2B2B2B2B2B2B
+2F2F2F2F2F2F2F2F2F464646464646464646A8A8A8A8A8A8A8A8A8A8A8A8F8F8F8F8F8F8F8F8F8
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C3C3C3C3C3C3C3C3C3FCFCFCFCFCFCFCFCFCFDFDFD
+FDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFDFDFD
+FDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFB
+FBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFBFBFB
+FBFBFBFBFBFBEFEFEFEFEFEFEFEFEFA9A9A9A9A9A9A9A9A95050505050505050502F2F2F2F2F2F
+2F2F2F2F2F2F2828282828282828282828282828282828282B2B2B2B2B2B2B2B2B313131313131
+3131313131313535353535353535352B2B2B2B2B2B2B2B2B2424242424242424242C2C2C2C2C2C
+2C2C2C4747474747474747474747476464646464646464647373737373737373737C7C7C7C7C7C
+7C7C7C8181818181818181818383838383838383838383838585858585858585858C8C8C8C8C8C
+8C8C8C9393939393939393939B9B9B9B9B9B9B9B9B9B9B9B9F9F9F9F9F9F9F9F9FA3A3A3A3A3A3
+A3A3A3A7A7A7A7A7A7A7A7A7ADADADADADADADADADB1B1B1B1B1B1B1B1B1B1B1B1B5B5B5B5B5B5
+B5B5B5B8B8B8B8B8B8B8B8B8BDBDBDBDBDBDBDBDBDC3C3C3C3C3C3C3C3C3C8C8C8C8C8C8C8C8C8
+C8C8C8CECECECECECECECECED0D0D0D0D0D0D0D0D0D5D5D5D5D5D5D5D5D5DADADADADADADADADA
+DADADADDDDDDDDDDDDDDDDDDE2E2E2E2E2E2E2E2E2E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7
+E9E9E9E9E9E9E9E9E9E9E9E9E7E7E7E7E7E7E7E7E7E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3
+E7E7E7E7E7E7E7E7E7EAEAEAEAEAEAEAEAEAEAEAEAE8E8E8E8E8E8E8E8E8E2E2E2E2E2E2E2E2E2
+DBDBDBDBDBDBDBDBDBD0D0D0D0D0D0D0D0D0D0D0D0C7C7C7C7C7C7C7C7C7B2B2B2B2B2B2B2B2B2
+9191919191919191917575757575757575755B5B5B5B5B5B5B5B5B5B5B5B505050505050505050
+4E4E4E4E4E4E4E4E4E4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C
+4B4B4B4B4B4B4B4B4B4C4C4C4C4C4C4C4C4C505050505050505050595959595959595959595959
+6464646464646464647373737373737373738888888888888888889595959595959595957A7A7A
+7A7A7A7A7A7A7A7A7A4141414141414141413232323232323232322D2D2D2D2D2D2D2D2D282828
+2828282828282828282828282828282828282B2B2B2B2B2B2B2B2B2F2F2F2F2F2F2F2F2F464646
+464646464646A8A8A8A8A8A8A8A8A8A8A8A8F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9
+F9F9F9F9F9F9C3C3C3C3C3C3C3C3C3FCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFCFCFCFCFCFC
+FCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFCFCFCFCFCFC
+FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFAFAFAFAFAFA
+FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBEFEFEFEFEFEF
+EFEFEFA9A9A9A9A9A9A9A9A95050505050505050502F2F2F2F2F2F2F2F2F2F2F2F282828282828
+2828282828282828282828282B2B2B2B2B2B2B2B2B313131313131313131313131353535353535
+3535352B2B2B2B2B2B2B2B2B2424242424242424242C2C2C2C2C2C2C2C2C474747474747474747
+4747476464646464646464647373737373737373737C7C7C7C7C7C7C7C7C818181818181818181
+8383838383838383838383838585858585858585858C8C8C8C8C8C8C8C8C939393939393939393
+9B9B9B9B9B9B9B9B9B9B9B9B9F9F9F9F9F9F9F9F9FA3A3A3A3A3A3A3A3A3A7A7A7A7A7A7A7A7A7
+ADADADADADADADADADB1B1B1B1B1B1B1B1B1B1B1B1B5B5B5B5B5B5B5B5B5B8B8B8B8B8B8B8B8B8
+BDBDBDBDBDBDBDBDBDC3C3C3C3C3C3C3C3C3C8C8C8C8C8C8C8C8C8C8C8C8CECECECECECECECECE
+D0D0D0D0D0D0D0D0D0D5D5D5D5D5D5D5D5D5DADADADADADADADADADADADADDDDDDDDDDDDDDDDDD
+E2E2E2E2E2E2E2E2E2E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E9E9E9E9E9E9E9E9E9E9E9E9
+E7E7E7E7E7E7E7E7E7E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3E7E7E7E7E7E7E7E7E7EAEAEA
+EAEAEAEAEAEAEAEAEAE8E8E8E8E8E8E8E8E8E2E2E2E2E2E2E2E2E2DBDBDBDBDBDBDBDBDBD0D0D0
+D0D0D0D0D0D0D0D0D0C7C7C7C7C7C7C7C7C7B2B2B2B2B2B2B2B2B2919191919191919191757575
+7575757575755B5B5B5B5B5B5B5B5B5B5B5B5050505050505050504E4E4E4E4E4E4E4E4E4C4C4C
+4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4C4C4C
+4C4C4C4C4C4C505050505050505050595959595959595959595959646464646464646464737373
+7373737373738888888888888888889595959595959595957A7A7A7A7A7A7A7A7A7A7A7A414141
+4141414141413232323232323232322D2D2D2D2D2D2D2D2D282828282828282828282828282828
+2828282828282B2B2B2B2B2B2B2B2B2F2F2F2F2F2F2F2F2F464646464646464646A8A8A8A8A8A8
+A8A8A8A8A8A8F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C3C3C3C3C3C3
+C3C3C3F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
+F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8
+F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8
+F8F8F8F8F8F8F8F8F8F8F8F8F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5
+F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7EAEAEAEAEAEAEAEAEAA6A6A6A6A6A6A6A6A6
+515151515151515151303030303030303030303030292929292929292929292929292929292929
+2D2D2D2D2D2D2D2D2D3131313131313131313131313232323232323232322B2B2B2B2B2B2B2B2B
+2525252525252525252929292929292929294141414141414141414141415F605F5F605F5F605F
+7070707070707070707979797979797979797F7F7F7F7F7F7F7F7F838383838383838383838383
+8686868686868686868C8C8C8C8C8C8C8C8C9696969696969696969E9E9E9E9E9E9E9E9E9E9E9E
+A1A1A1A1A1A1A1A1A1A4A4A4A4A4A4A4A4A4A8A8A8A8A8A8A8A8A8ACACACACACACACACACAFAFAF
+AFAFAFAFAFAFAFAFAFB0B1B0B0B1B0B0B1B0B4B4B4B4B4B4B4B4B4B8B8B8B8B8B8B8B8B8BCBCBC
+BCBCBCBCBCBCBEBEBEBEBEBEBEBEBEBEBEBEC0C0C0C0C0C0C0C0C0C1C1C1C1C1C1C1C1C1C5C5C5
+C5C5C5C5C5C5CDCDCDCDCDCDCDCDCDCDCDCDD3D3D3D3D3D3D3D3D3D6D6D6D6D6D6D6D6D6DDDDDD
+DDDDDDDDDDDDDFE0DFDFE0DFDFE0DFE3E3E3E3E3E3E3E3E3E3E3E3E0E0E0E0E0E0E0E0E0DBDBDB
+DBDBDBDBDBDBD9D9D9D9D9D9D9D9D9DCDCDCDCDCDCDCDCDCDFE0DFDFE0DFDFE0DFDFE0DFDBDBDB
+DBDBDBDBDBDBD1D1D1D1D1D1D1D1D1C9C9C9C9C9C9C9C9C9BCBCBCBCBCBCBCBCBCBCBCBCA8A8A8
+A8A8A8A8A8A8888888888888888888676767676767676767525252525252525252454545454545
+4545454545453F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F454545454545
+4545454B4B4B4B4B4B4B4B4B4B4B4B4D4D4D4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E525252525252
+5252525656565656565656565656565A5A5A5A5A5A5A5A5A6161616161616161616D6D6D6D6D6D
+6D6D6D8383838383838383837D7D7D7D7D7D7D7D7D7D7D7D464646464646464646313131313131
+3131312D2D2D2D2D2D2D2D2D2828282828282828282828282828282828282828282B2B2B2B2B2B
+2B2B2B2D2D2D2D2D2D2D2D2D4141414141414141419E9E9E9E9E9E9E9E9E9E9E9EF5F5F5F5F5F5
+F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F7F7F7F7B4B4B4B4B4B4B4B4B4F9F9F9F9F9F9F9F9F9
+F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
+F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8
+F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8
+F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6
+F7F7F7F7F7F7F7F7F7EAEAEAEAEAEAEAEAEAA6A6A6A6A6A6A6A6A6515151515151515151303030
+3030303030303030302929292929292929292929292929292929292D2D2D2D2D2D2D2D2D313131
+3131313131313131313232323232323232322B2B2B2B2B2B2B2B2B252525252525252525292929
+2929292929294141414141414141414141415F605F5F605F5F605F707070707070707070797979
+7979797979797F7F7F7F7F7F7F7F7F8383838383838383838383838686868686868686868C8C8C
+8C8C8C8C8C8C9696969696969696969E9E9E9E9E9E9E9E9E9E9E9EA1A1A1A1A1A1A1A1A1A4A4A4
+A4A4A4A4A4A4A8A8A8A8A8A8A8A8A8ACACACACACACACACACAFAFAFAFAFAFAFAFAFAFAFAFB0B1B0
+B0B1B0B0B1B0B4B4B4B4B4B4B4B4B4B8B8B8B8B8B8B8B8B8BCBCBCBCBCBCBCBCBCBEBEBEBEBEBE
+BEBEBEBEBEBEC0C0C0C0C0C0C0C0C0C1C1C1C1C1C1C1C1C1C5C5C5C5C5C5C5C5C5CDCDCDCDCDCD
+CDCDCDCDCDCDD3D3D3D3D3D3D3D3D3D6D6D6D6D6D6D6D6D6DDDDDDDDDDDDDDDDDDDFE0DFDFE0DF
+DFE0DFE3E3E3E3E3E3E3E3E3E3E3E3E0E0E0E0E0E0E0E0E0DBDBDBDBDBDBDBDBDBD9D9D9D9D9D9
+D9D9D9DCDCDCDCDCDCDCDCDCDFE0DFDFE0DFDFE0DFDFE0DFDBDBDBDBDBDBDBDBDBD1D1D1D1D1D1
+D1D1D1C9C9C9C9C9C9C9C9C9BCBCBCBCBCBCBCBCBCBCBCBCA8A8A8A8A8A8A8A8A8888888888888
+8888886767676767676767675252525252525252524545454545454545454545453F3F3F3F3F3F
+3F3F3F3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F4545454545454545454B4B4B4B4B4B4B4B4B
+4B4B4B4D4D4D4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E525252525252525252565656565656565656
+5656565A5A5A5A5A5A5A5A5A6161616161616161616D6D6D6D6D6D6D6D6D838383838383838383
+7D7D7D7D7D7D7D7D7D7D7D7D4646464646464646463131313131313131312D2D2D2D2D2D2D2D2D
+2828282828282828282828282828282828282828282B2B2B2B2B2B2B2B2B2D2D2D2D2D2D2D2D2D
+4141414141414141419E9E9E9E9E9E9E9E9E9E9E9EF5F5F5F5F5F5F5F5F5FFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+F7F7F7F7F7F7F7F7F7B4B4B4B4B4B4B4B4B4F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
+F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
+F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F8F8F8
+F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F6F6F6F6F6F6F6F6F6F5F5F5
+F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7EAEAEA
+EAEAEAEAEAEAA6A6A6A6A6A6A6A6A6515151515151515151303030303030303030303030292929
+2929292929292929292929292929292D2D2D2D2D2D2D2D2D313131313131313131313131323232
+3232323232322B2B2B2B2B2B2B2B2B252525252525252525292929292929292929414141414141
+4141414141415F605F5F605F5F605F7070707070707070707979797979797979797F7F7F7F7F7F
+7F7F7F8383838383838383838383838686868686868686868C8C8C8C8C8C8C8C8C969696969696
+9696969E9E9E9E9E9E9E9E9E9E9E9EA1A1A1A1A1A1A1A1A1A4A4A4A4A4A4A4A4A4A8A8A8A8A8A8
+A8A8A8ACACACACACACACACACAFAFAFAFAFAFAFAFAFAFAFAFB0B1B0B0B1B0B0B1B0B4B4B4B4B4B4
+B4B4B4B8B8B8B8B8B8B8B8B8BCBCBCBCBCBCBCBCBCBEBEBEBEBEBEBEBEBEBEBEBEC0C0C0C0C0C0
+C0C0C0C1C1C1C1C1C1C1C1C1C5C5C5C5C5C5C5C5C5CDCDCDCDCDCDCDCDCDCDCDCDD3D3D3D3D3D3
+D3D3D3D6D6D6D6D6D6D6D6D6DDDDDDDDDDDDDDDDDDDFE0DFDFE0DFDFE0DFE3E3E3E3E3E3E3E3E3
+E3E3E3E0E0E0E0E0E0E0E0E0DBDBDBDBDBDBDBDBDBD9D9D9D9D9D9D9D9D9DCDCDCDCDCDCDCDCDC
+DFE0DFDFE0DFDFE0DFDFE0DFDBDBDBDBDBDBDBDBDBD1D1D1D1D1D1D1D1D1C9C9C9C9C9C9C9C9C9
+BCBCBCBCBCBCBCBCBCBCBCBCA8A8A8A8A8A8A8A8A8888888888888888888676767676767676767
+5252525252525252524545454545454545454545453F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E
+3F3F3F3F3F3F3F3F3F4545454545454545454B4B4B4B4B4B4B4B4B4B4B4B4D4D4D4D4D4D4D4D4D
+4E4E4E4E4E4E4E4E4E5252525252525252525656565656565656565656565A5A5A5A5A5A5A5A5A
+6161616161616161616D6D6D6D6D6D6D6D6D8383838383838383837D7D7D7D7D7D7D7D7D7D7D7D
+4646464646464646463131313131313131312D2D2D2D2D2D2D2D2D282828282828282828282828
+2828282828282828282B2B2B2B2B2B2B2B2B2D2D2D2D2D2D2D2D2D4141414141414141419E9E9E
+9E9E9E9E9E9E9E9E9EF5F5F5F5F5F5F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F7F7F7F7B4B4B4
+B4B4B4B4B4B4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6
+F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5
+F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4
+F4F4F4F4F4F4F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3
+F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F1F1F1F1F1F1F1F1F1E2E2E2E2E2E2E2E2E2A1A1A1A1A1A1
+A1A1A1525252525252525252323232323232323232323232292929292929292929292929292929
+2929292C2C2C2C2C2C2C2C2C2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2B2B2B2B2B2B
+2B2B2B252525252525252525272727272727272727373737373737373737373737585858585858
+5858586D6D6D6D6D6D6D6D6D7777777777777777777E7E7E7E7E7E7E7E7E828282828282828282
+8282828787878787878787878D8D8D8D8D8D8D8D8D9595959595959595959D9D9D9D9D9D9D9D9D
+9D9D9DA1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A5A5A5A5A5A5A5A5A5
+A7A7A7A7A7A7A7A7A7A7A7A7AAAAAAAAAAAAAAAAAAADADADADADADADADADADADADADADADADADAD
+ADADADADADADADADADAFAFAFAFAFAFAFAFAFAFAFAFB0B0B0B0B0B0B0B0B0B3B3B3B3B3B3B3B3B3
+B8B8B8B8B8B8B8B8B8BDBDBDBDBDBDBDBDBDBDBDBDC4C4C4C4C4C4C4C4C4CBCBCBCBCBCBCBCBCB
+D2D2D2D2D2D2D2D2D2D6D6D6D6D6D6D6D6D6D9D9D9D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8
+D3D3D3D3D3D3D3D3D3D0D0D0D0D0D0D0D0D0D3D3D3D3D3D3D3D3D3D5D5D5D5D5D5D5D5D5D5D5D5
+CFCFCFCFCFCFCFCFCFC5C5C5C5C5C5C5C5C5B9B9B9B9B9B9B9B9B9A3A3A3A3A3A3A3A3A3A3A3A3
+8686868686868686866969696969696969695454545454545454544646464646464646463C3C3C
+3C3C3C3C3C3C3C3C3C3939393939393939393C3C3C3C3C3C3C3C3C4B4B4B4B4B4B4B4B4B5C5C5C
+5C5C5C5C5C5C6767676767676767676767676D6D6D6D6D6D6D6D6D6F6F6F6F6F6F6F6F6F6E6E6E
+6E6E6E6E6E6E6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6A6A6A6A6A6A6A6A6A686868
+6868686868687676767676767676767E7E7E7E7E7E7E7E7E7E7E7E4F4F4F4F4F4F4F4F4F313131
+3131313131312C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2929292929292929292929292B2B2B
+2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C3A3A3A3A3A3A3A3A3A8D8D8D8D8D8D8D8D8D8D8D8DEFEFEF
+EFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C1C1C1C1C1C1C1C1C1F5F5F5F5F5F5
+F5F5F5F5F5F5F5F5F5F5F5F5F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5
+F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5
+F5F5F5F5F5F5F5F5F5F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F3F3F3F3F3F3
+F3F3F3F3F3F3F3F3F3F3F3F3F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3
+F3F3F3F1F1F1F1F1F1F1F1F1E2E2E2E2E2E2E2E2E2A1A1A1A1A1A1A1A1A1525252525252525252
+3232323232323232323232322929292929292929292929292929292929292C2C2C2C2C2C2C2C2C
+2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2B2B2B2B2B2B2B2B2B252525252525252525
+2727272727272727273737373737373737373737375858585858585858586D6D6D6D6D6D6D6D6D
+7777777777777777777E7E7E7E7E7E7E7E7E828282828282828282828282878787878787878787
+8D8D8D8D8D8D8D8D8D9595959595959595959D9D9D9D9D9D9D9D9D9D9D9DA1A1A1A1A1A1A1A1A1
+A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A5A5A5A5A5A5A5A5A5A7A7A7A7A7A7A7A7A7A7A7A7
+AAAAAAAAAAAAAAAAAAADADADADADADADADADADADADADADADADADADADADADADADADADADADAFAFAF
+AFAFAFAFAFAFAFAFAFB0B0B0B0B0B0B0B0B0B3B3B3B3B3B3B3B3B3B8B8B8B8B8B8B8B8B8BDBDBD
+BDBDBDBDBDBDBDBDBDC4C4C4C4C4C4C4C4C4CBCBCBCBCBCBCBCBCBD2D2D2D2D2D2D2D2D2D6D6D6
+D6D6D6D6D6D6D9D9D9D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D3D3D3D3D3D3D3D3D3D0D0D0
+D0D0D0D0D0D0D3D3D3D3D3D3D3D3D3D5D5D5D5D5D5D5D5D5D5D5D5CFCFCFCFCFCFCFCFCFC5C5C5
+C5C5C5C5C5C5B9B9B9B9B9B9B9B9B9A3A3A3A3A3A3A3A3A3A3A3A3868686868686868686696969
+6969696969695454545454545454544646464646464646463C3C3C3C3C3C3C3C3C3C3C3C393939
+3939393939393C3C3C3C3C3C3C3C3C4B4B4B4B4B4B4B4B4B5C5C5C5C5C5C5C5C5C676767676767
+6767676767676D6D6D6D6D6D6D6D6D6F6F6F6F6F6F6F6F6F6E6E6E6E6E6E6E6E6E6B6B6B6B6B6B
+6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6A6A6A6A6A6A6A6A6A686868686868686868767676767676
+7676767E7E7E7E7E7E7E7E7E7E7E7E4F4F4F4F4F4F4F4F4F3131313131313131312C2C2C2C2C2C
+2C2C2C2B2B2B2B2B2B2B2B2B2929292929292929292929292B2B2B2B2B2B2B2B2B2C2C2C2C2C2C
+2C2C2C3A3A3A3A3A3A3A3A3A8D8D8D8D8D8D8D8D8D8D8D8DEFEFEFEFEFEFEFEFEFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFF9F9F9F9F9F9F9F9F9C1C1C1C1C1C1C1C1C1F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4
+F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F3F3F3F3F3F3F3F3F3F2F2F2F2F2F2F2F2F2
+F2F2F2F2F2F2F2F2F2F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F1F1F1F1F1F1F1F1F1
+F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1
+F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EFEFEFEFEFEFEFEFEFEFEFEFEDEDEDEDEDEDEDEDED
+D9D9D9D9D9D9D9D9D99C9C9C9C9C9C9C9C9C555555555555555555353535353535353535353535
+2C2C2C2C2C2C2C2C2C2929292929292929292B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C
+2C2C2C2C2C2C2C2C2C292929292929292929252525252525252525272727272727272727313131
+3131313131313131315050505050505050506A6A6A6A6A6A6A6A6A7676767676767676767D7D7D
+7D7D7D7D7D7D8181818181818181818181818888888888888888888F8F8F8F8F8F8F8F8F949494
+9494949494949A9A9A9A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B969696969696969696949494
+9494949494949292929292929292928F8F8F8F8F8F8F8F8F8F8F8F909090909090909090919191
+9191919191918E8E8E8E8E8E8E8E8E8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D939393
+9393939393939E9E9E9E9E9E9E9E9EA5A5A5A5A5A5A5A5A5A8A8A8A8A8A8A8A8A8A8A8A8B2B2B2
+B2B2B2B2B2B2BEBEBEBEBEBEBEBEBEC5C5C5C5C5C5C5C5C5C9C9C9C9C9C9C9C9C9CDCDCDCDCDCD
+CDCDCDCDCDCDD0D0D0D0D0D0D0D0D0CBCBCBCBCBCBCBCBCBCACACACACACACACACACBCBCBCBCBCB
+CBCBCBCCCCCCCCCCCCCCCCCCCCCCCCC7C7C7C7C7C7C7C7C7BDBDBDBDBDBDBDBDBDAAAAAAAAAAAA
+AAAAAA8A8A8A8A8A8A8A8A8A8A8A8A6B6B6B6B6B6B6B6B6B555555555555555555474747474747
+4747474141414141414141413E3E3E3E3E3E3E3E3E3E3E3E444444444444444444565656565656
+5656566E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E8888888888888888888888888E8E8E8E8E8E
+8E8E8E8D8D8D8D8D8D8D8D8D8A8A8A8A8A8A8A8A8A878787878787878787878787828282828282
+8282827979797979797979797474747474747474747B7B7B7B7B7B7B7B7B838383838383838383
+8383835C5C5C5C5C5C5C5C5C3535353535353535352D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F
+3030303030303030303030302D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F373737373737373737
+7B7B7B7B7B7B7B7B7B7B7B7BE4E4E4E4E4E4E4E4E4FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFA
+D0D0D0D0D0D0D0D0D0F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4
+F4F4F4F4F4F4F4F4F4F3F3F3F3F3F3F3F3F3F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F1F1F1
+F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1
+F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F0F0F0F0F0F0F0F0F0F0F0F0
+F0F0F0F0F0F0EFEFEFEFEFEFEFEFEFEFEFEFEDEDEDEDEDEDEDEDEDD9D9D9D9D9D9D9D9D99C9C9C
+9C9C9C9C9C9C5555555555555555553535353535353535353535352C2C2C2C2C2C2C2C2C292929
+2929292929292B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C292929
+292929292929252525252525252525272727272727272727313131313131313131313131505050
+5050505050506A6A6A6A6A6A6A6A6A7676767676767676767D7D7D7D7D7D7D7D7D818181818181
+8181818181818888888888888888888F8F8F8F8F8F8F8F8F9494949494949494949A9A9A9A9A9A
+9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B969696969696969696949494949494949494929292929292
+9292928F8F8F8F8F8F8F8F8F8F8F8F9090909090909090909191919191919191918E8E8E8E8E8E
+8E8E8E8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D9393939393939393939E9E9E9E9E9E
+9E9E9EA5A5A5A5A5A5A5A5A5A8A8A8A8A8A8A8A8A8A8A8A8B2B2B2B2B2B2B2B2B2BEBEBEBEBEBE
+BEBEBEC5C5C5C5C5C5C5C5C5C9C9C9C9C9C9C9C9C9CDCDCDCDCDCDCDCDCDCDCDCDD0D0D0D0D0D0
+D0D0D0CBCBCBCBCBCBCBCBCBCACACACACACACACACACBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCCCC
+CCCCCCC7C7C7C7C7C7C7C7C7BDBDBDBDBDBDBDBDBDAAAAAAAAAAAAAAAAAA8A8A8A8A8A8A8A8A8A
+8A8A8A6B6B6B6B6B6B6B6B6B555555555555555555474747474747474747414141414141414141
+3E3E3E3E3E3E3E3E3E3E3E3E4444444444444444445656565656565656566E6E6E6E6E6E6E6E6E
+7E7E7E7E7E7E7E7E7E8888888888888888888888888E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D
+8A8A8A8A8A8A8A8A8A878787878787878787878787828282828282828282797979797979797979
+7474747474747474747B7B7B7B7B7B7B7B7B8383838383838383838383835C5C5C5C5C5C5C5C5C
+3535353535353535352D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F303030303030303030303030
+2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F3737373737373737377B7B7B7B7B7B7B7B7B7B7B7B
+E4E4E4E4E4E4E4E4E4FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFAD0D0D0D0D0D0D0D0D0F3F3F3
+F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F3F3F3
+F3F3F3F3F3F3F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2
+F2F2F2F2F2F2F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1
+F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EFEFEFEFEFEF
+EFEFEFEFEFEFEDEDEDEDEDEDEDEDEDD9D9D9D9D9D9D9D9D99C9C9C9C9C9C9C9C9C555555555555
+5555553535353535353535353535352C2C2C2C2C2C2C2C2C2929292929292929292B2B2B2B2B2B
+2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C292929292929292929252525252525
+2525252727272727272727273131313131313131313131315050505050505050506A6A6A6A6A6A
+6A6A6A7676767676767676767D7D7D7D7D7D7D7D7D818181818181818181818181888888888888
+8888888F8F8F8F8F8F8F8F8F9494949494949494949A9A9A9A9A9A9A9A9A9A9A9A9B9B9B9B9B9B
+9B9B9B9696969696969696969494949494949494949292929292929292928F8F8F8F8F8F8F8F8F
+8F8F8F9090909090909090909191919191919191918E8E8E8E8E8E8E8E8E8C8C8C8C8C8C8C8C8C
+8D8D8D8D8D8D8D8D8D8D8D8D9393939393939393939E9E9E9E9E9E9E9E9EA5A5A5A5A5A5A5A5A5
+A8A8A8A8A8A8A8A8A8A8A8A8B2B2B2B2B2B2B2B2B2BEBEBEBEBEBEBEBEBEC5C5C5C5C5C5C5C5C5
+C9C9C9C9C9C9C9C9C9CDCDCDCDCDCDCDCDCDCDCDCDD0D0D0D0D0D0D0D0D0CBCBCBCBCBCBCBCBCB
+CACACACACACACACACACBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCCCCCCCCCCC7C7C7C7C7C7C7C7C7
+BDBDBDBDBDBDBDBDBDAAAAAAAAAAAAAAAAAA8A8A8A8A8A8A8A8A8A8A8A8A6B6B6B6B6B6B6B6B6B
+5555555555555555554747474747474747474141414141414141413E3E3E3E3E3E3E3E3E3E3E3E
+4444444444444444445656565656565656566E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E888888
+8888888888888888888E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D8A8A8A8A8A8A8A8A8A878787
+8787878787878787878282828282828282827979797979797979797474747474747474747B7B7B
+7B7B7B7B7B7B8383838383838383838383835C5C5C5C5C5C5C5C5C3535353535353535352D2D2D
+2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F3030303030303030303030302D2D2D2D2D2D2D2D2D2F2F2F
+2F2F2F2F2F2F3737373737373737377B7B7B7B7B7B7B7B7B7B7B7BE4E4E4E4E4E4E4E4E4FEFEFE
+FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFAFAFAFAFAFAFAFAFAD0D0D0D0D0D0D0D0D0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1
+F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F0F0F0F0F0F0
+F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
+F0F0F0EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
+EEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEAEAEAEAEAEA
+EAEAEAD6D6D5D6D6D5D6D6D59D9D9D9D9D9D9D9D9D575757575757575757353535353535353535
+3535352C2C2C2C2C2C2C2C2C292929292929292929292929292929292929292929292929292929
+292929282828282828282828272727272727272727252525252525252525242424242424242424
+2B2B2B2B2B2B2B2B2B2B2B2B464646464646464646656565656565656565747474747474747474
+7C7C7C7C7C7C7C7C7C8080808080808080808080808686868686868686868F8F8F8F8F8F8F8F8F
+9393939393939393939191919191919191919191918989898989898989897C7C7C7C7C7C7C7C7C
+7373737373737373736F6F6F6F6F6F6F6F6F6A6A6A6A6A6A6A6A6A6A6A6A696969696969696969
+6868686868686868686262626262626262625F605F5F605F5F605F646464646464646464646464
+6C6C6C6C6C6C6C6C6C7B7B7B7B7B7B7B7B7B8484848484848484848B8B8B8B8B8B8B8B8B8B8B8B
+9A9A9A9A9A9A9A9A9AABABABABABABABABABB7B7B7B7B7B7B7B7B7BBBBBBBBBBBBBBBBBBC3C3C3
+C3C3C3C3C3C3C3C3C3C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C9C9C9
+C9C9C9C9C9C9C8C8C8C8C8C8C8C8C8C8C8C8C0C0C0C0C0C0C0C0C0B2B2B2B2B2B2B2B2B29D9D9D
+9D9D9D9D9D9D7C7C7C7C7C7C7C7C7C7C7C7C5F605F5F605F5F605F505050505050505050484848
+4848484848484545454545454545454B4B4B4B4B4B4B4B4B4B4B4B5959595959595959596B6B6B
+6B6B6B6B6B6B7C7C7C7C7C7C7C7C7C8686868686868686868D8D8D8D8D8D8D8D8D8D8D8D949494
+9494949494949494949494949494949191919191919191918F8F8F8F8F8F8F8F8F8F8F8F8C8C8C
+8C8C8C8C8C8C8686868686868686868383838383838383838B8B8B8B8B8B8B8B8B929292929292
+9292929292927070707070707070703A3A3A3A3A3A3A3A3A303030303030303030323232323232
+323232353535353535353535353535313131313131313131313131313131313131393939393939
+3939396B6B6B6B6B6B6B6B6B6B6B6BD7D7D7D7D7D7D7D7D7FDFDFDFDFDFDFDFDFDFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9
+F9F9F9CACACACACACACACACAF0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1
+F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
+F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EFEFEFEFEFEFEFEFEF
+EFEFEFEFEFEFEFEFEFEFEFEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEAEAEAEAEAEAEAEAEAD6D6D5D6D6D5D6D6D5
+9D9D9D9D9D9D9D9D9D5757575757575757573535353535353535353535352C2C2C2C2C2C2C2C2C
+292929292929292929292929292929292929292929292929292929292929282828282828282828
+2727272727272727272525252525252525252424242424242424242B2B2B2B2B2B2B2B2B2B2B2B
+4646464646464646466565656565656565657474747474747474747C7C7C7C7C7C7C7C7C808080
+8080808080808080808686868686868686868F8F8F8F8F8F8F8F8F939393939393939393919191
+9191919191919191918989898989898989897C7C7C7C7C7C7C7C7C7373737373737373736F6F6F
+6F6F6F6F6F6F6A6A6A6A6A6A6A6A6A6A6A6A696969696969696969686868686868686868626262
+6262626262625F605F5F605F5F605F6464646464646464646464646C6C6C6C6C6C6C6C6C7B7B7B
+7B7B7B7B7B7B8484848484848484848B8B8B8B8B8B8B8B8B8B8B8B9A9A9A9A9A9A9A9A9AABABAB
+ABABABABABABB7B7B7B7B7B7B7B7B7BBBBBBBBBBBBBBBBBBC3C3C3C3C3C3C3C3C3C3C3C3C8C8C8
+C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C9C9C9C9C9C9C9C9C9C8C8C8C8C8C8
+C8C8C8C8C8C8C0C0C0C0C0C0C0C0C0B2B2B2B2B2B2B2B2B29D9D9D9D9D9D9D9D9D7C7C7C7C7C7C
+7C7C7C7C7C7C5F605F5F605F5F605F505050505050505050484848484848484848454545454545
+4545454B4B4B4B4B4B4B4B4B4B4B4B5959595959595959596B6B6B6B6B6B6B6B6B7C7C7C7C7C7C
+7C7C7C8686868686868686868D8D8D8D8D8D8D8D8D8D8D8D949494949494949494949494949494
+9494949191919191919191918F8F8F8F8F8F8F8F8F8F8F8F8C8C8C8C8C8C8C8C8C868686868686
+8686868383838383838383838B8B8B8B8B8B8B8B8B929292929292929292929292707070707070
+7070703A3A3A3A3A3A3A3A3A303030303030303030323232323232323232353535353535353535
+3535353131313131313131313131313131313131313939393939393939396B6B6B6B6B6B6B6B6B
+6B6B6BD7D7D7D7D7D7D7D7D7FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9CACACACACACACACACA
+EEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
+EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EBEBEBEBEBEBEBEBEBECECECECECECECECECEBEBEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9EAEAEA
+EAEAEAEAEAEAEAEAEAE8E8E8E8E8E8E8E8E8D6D6D6D6D6D6D6D6D69E9E9E9E9E9E9E9E9E575757
+5757575757573434343434343434343434342C2C2C2C2C2C2C2C2C292929292929292929272727
+272727272727272727272727272727272727272727272727272727252525252525252525222222
+2222222222222121212121212121212525252525252525252525253E3E3E3E3E3E3E3E3E5F605F
+5F605F5F605F7272727272727272727B7B7B7B7B7B7B7B7B808080808080808080808080858585
+8585858585858B8B8B8B8B8B8B8B8B8787878787878787877A7A7A7A7A7A7A7A7A7A7A7A6E6E6E
+6E6E6E6E6E6E5F605F5F605F5F605F5252525252525252524E4E4E4E4E4E4E4E4E4C4C4C4C4C4C
+4C4C4C4C4C4C494949494949494949464646464646464646414141414141414141424242424242
+4242424848484848484848484848484C4C4C4C4C4C4C4C4C5555555555555555555D5D5D5D5D5D
+5D5D5D6868686868686868686868687B7B7B7B7B7B7B7B7B929292929292929292A4A4A4A4A4A4
+A4A4A4ADADADADADADADADADB8B8B8B8B8B8B8B8B8B8B8B8C2C2C2C2C2C2C2C2C2CACACACACACA
+CACACACFCFCFCFCFCFCFCFCFCECECECECECECECECECACACACACACACACACACACACABFBFBFBFBFBF
+BFBFBFACACACACACACACACAC939393939393939393787878787878787878787878626262626262
+6262625959595959595959595454545454545454544E4E4E4E4E4E4E4E4E525252525252525252
+5252525B5B5B5B5B5B5B5B5B686868686868686868757575757575757575787878787878787878
+777777777777777777777777828282828282828282878787878787878787898989898989898989
+8B8B8B8B8B8B8B8B8B8B8B8B8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D
+9797979797979797979E9E9E9E9E9E9E9E9E9E9E9E7F7F7F7F7F7F7F7F7F404040404040404040
+2F2F2F2F2F2F2F2F2F343434343434343434373737373737373737373737363636363636363636
+3636363636363636363C3C3C3C3C3C3C3C3C656565656565656565656565CECECECECECECECECE
+FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9BDBDBDBDBDBDBDBDBDEEEEEEEEEEEEEEEEEEEFEFEF
+EFEFEFEFEFEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
+EEEEEEEEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEBEBEBEBEBEBEBEBEBECECEC
+ECECECECECECEBEBEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAE8E8E8
+E8E8E8E8E8E8D6D6D6D6D6D6D6D6D69E9E9E9E9E9E9E9E9E575757575757575757343434343434
+3434343434342C2C2C2C2C2C2C2C2C292929292929292929272727272727272727272727272727
+272727272727272727272727272727252525252525252525222222222222222222212121212121
+2121212525252525252525252525253E3E3E3E3E3E3E3E3E5F605F5F605F5F605F727272727272
+7272727B7B7B7B7B7B7B7B7B8080808080808080808080808585858585858585858B8B8B8B8B8B
+8B8B8B8787878787878787877A7A7A7A7A7A7A7A7A7A7A7A6E6E6E6E6E6E6E6E6E5F605F5F605F
+5F605F5252525252525252524E4E4E4E4E4E4E4E4E4C4C4C4C4C4C4C4C4C4C4C4C494949494949
+494949464646464646464646414141414141414141424242424242424242484848484848484848
+4848484C4C4C4C4C4C4C4C4C5555555555555555555D5D5D5D5D5D5D5D5D686868686868686868
+6868687B7B7B7B7B7B7B7B7B929292929292929292A4A4A4A4A4A4A4A4A4ADADADADADADADADAD
+B8B8B8B8B8B8B8B8B8B8B8B8C2C2C2C2C2C2C2C2C2CACACACACACACACACACFCFCFCFCFCFCFCFCF
+CECECECECECECECECECACACACACACACACACACACACABFBFBFBFBFBFBFBFBFACACACACACACACACAC
+939393939393939393787878787878787878787878626262626262626262595959595959595959
+5454545454545454544E4E4E4E4E4E4E4E4E5252525252525252525252525B5B5B5B5B5B5B5B5B
+686868686868686868757575757575757575787878787878787878777777777777777777777777
+8282828282828282828787878787878787878989898989898989898B8B8B8B8B8B8B8B8B8B8B8B
+8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D9797979797979797979E9E9E
+9E9E9E9E9E9E9E9E9E7F7F7F7F7F7F7F7F7F4040404040404040402F2F2F2F2F2F2F2F2F343434
+3434343434343737373737373737373737373636363636363636363636363636363636363C3C3C
+3C3C3C3C3C3C656565656565656565656565CECECECECECECECECEFDFDFDFDFDFDFDFDFDFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9
+F9F9F9F9F9F9BDBDBDBDBDBDBDBDBDEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEEEEEEEEEEEE
+EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEBEBEBEBEBEBEBEBEBECECECECECECECECECEBEBEBEBEBEB
+EBEBEBE9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAE8E8E8E8E8E8E8E8E8D6D6D6D6D6D6
+D6D6D69E9E9E9E9E9E9E9E9E5757575757575757573434343434343434343434342C2C2C2C2C2C
+2C2C2C292929292929292929272727272727272727272727272727272727272727272727272727
+272727252525252525252525222222222222222222212121212121212121252525252525252525
+2525253E3E3E3E3E3E3E3E3E5F605F5F605F5F605F7272727272727272727B7B7B7B7B7B7B7B7B
+8080808080808080808080808585858585858585858B8B8B8B8B8B8B8B8B878787878787878787
+7A7A7A7A7A7A7A7A7A7A7A7A6E6E6E6E6E6E6E6E6E5F605F5F605F5F605F525252525252525252
+4E4E4E4E4E4E4E4E4E4C4C4C4C4C4C4C4C4C4C4C4C494949494949494949464646464646464646
+4141414141414141414242424242424242424848484848484848484848484C4C4C4C4C4C4C4C4C
+5555555555555555555D5D5D5D5D5D5D5D5D6868686868686868686868687B7B7B7B7B7B7B7B7B
+929292929292929292A4A4A4A4A4A4A4A4A4ADADADADADADADADADB8B8B8B8B8B8B8B8B8B8B8B8
+C2C2C2C2C2C2C2C2C2CACACACACACACACACACFCFCFCFCFCFCFCFCFCECECECECECECECECECACACA
+CACACACACACACACACABFBFBFBFBFBFBFBFBFACACACACACACACACAC939393939393939393787878
+7878787878787878786262626262626262625959595959595959595454545454545454544E4E4E
+4E4E4E4E4E4E5252525252525252525252525B5B5B5B5B5B5B5B5B686868686868686868757575
+757575757575787878787878787878777777777777777777777777828282828282828282878787
+8787878787878989898989898989898B8B8B8B8B8B8B8B8B8B8B8B8D8D8D8D8D8D8D8D8D8C8C8C
+8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D9797979797979797979E9E9E9E9E9E9E9E9E9E9E9E7F7F7F
+7F7F7F7F7F7F4040404040404040402F2F2F2F2F2F2F2F2F343434343434343434373737373737
+3737373737373636363636363636363636363636363636363C3C3C3C3C3C3C3C3C656565656565
+656565656565CECECECECECECECECEFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9BDBDBDBDBDBD
+BDBDBDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDEBEBEBEBEBEBEBEBEBECECECECECECECECEC
+ECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECEC
+ECECECEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8
+E8E8E8E8E8E8E8E8E8E8E8E8E5E5E5E5E5E5E5E5E5D6D6D5D6D6D5D6D6D59F9F9F9F9F9F9F9F9F
+5656565656565656563434343434343434343434342D2D2D2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B
+282828282828282828252525252525252525252525252525252525252525242424242424242424
+242424242424242424222222222222222222242424242424242424242424373737373737373737
+5C5C5C5C5C5C5C5C5C7272727272727272727C7C7C7C7C7C7C7C7C818181818181818181818181
+8383838383838383837E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E5D5D5D5D5D5D5D5D5D5D5D5D
+5151515151515151514747474747474747474040404040404040403B3B3B3B3B3B3B3B3B393939
+393939393939393939373737373737373737343434343434343434323232323232323232353535
+3535353535353A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3C3C3C3C3C3C3C3C3C444444
+4444444444444E4E4E4E4E4E4E4E4E4E4E4E6262626262626262627A7A7A7A7A7A7A7A7A909090
+909090909090A0A0A0A0A0A0A0A0A0B1B1B1B1B1B1B1B1B1B1B1B1C0C0C0C0C0C0C0C0C0CCCCCC
+CCCCCCCCCCCCD7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7CFCFCFCFCFCFCFCFCFCFCFCFBFBFBF
+BFBFBFBFBFBFABABABABABABABABAB9292929292929292927D7D7D7D7D7D7D7D7D7D7D7D6B6B6B
+6B6B6B6B6B6B5D5D5D5D5D5D5D5D5D555555555555555555545454545454545454585858585858
+5858585858585C5C5C5C5C5C5C5C5C5F605F5F605F5F605F656565656565656565646464646464
+6464646565656565656565656565656E6E6E6E6E6E6E6E6E717171717171717171717171717171
+7171717C7C7C7C7C7C7C7C7C7C7C7C8888888888888888888C8C8C8C8C8C8C8C8C909090909090
+9090909B9B9B9B9B9B9B9B9BA3A3A3A3A3A3A3A3A3A3A3A38D8D8D8D8D8D8D8D8D4B4B4B4B4B4B
+4B4B4B2F2F2F2F2F2F2F2F2F3232323232323232323939393939393939393939393B3B3B3B3B3B
+3B3B3B3A3A3A3A3A3A3A3A3A3C3C3C3C3C3C3C3C3C636363636363636363636363CBCBCBCBCBCB
+CBCBCBFCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C7C7C7C7C7C7C7C7C7EEEEEEEEEEEEEEEEEE
+EEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEE
+EDEDEDEDEDEDEDEDEDEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECEBEBEBEBEBEBEBEBEB
+EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECEAEAEAEAEAEAEAEAEA
+E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8
+E5E5E5E5E5E5E5E5E5D6D6D5D6D6D5D6D6D59F9F9F9F9F9F9F9F9F565656565656565656343434
+3434343434343434342D2D2D2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B282828282828282828252525
+252525252525252525252525252525252525242424242424242424242424242424242424222222
+2222222222222424242424242424242424243737373737373737375C5C5C5C5C5C5C5C5C727272
+7272727272727C7C7C7C7C7C7C7C7C8181818181818181818181818383838383838383837E7E7E
+7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E5D5D5D5D5D5D5D5D5D5D5D5D515151515151515151474747
+4747474747474040404040404040403B3B3B3B3B3B3B3B3B393939393939393939393939373737
+3737373737373434343434343434343232323232323232323535353535353535353A3A3A3A3A3A
+3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3C3C3C3C3C3C3C3C3C4444444444444444444E4E4E4E4E4E
+4E4E4E4E4E4E6262626262626262627A7A7A7A7A7A7A7A7A909090909090909090A0A0A0A0A0A0
+A0A0A0B1B1B1B1B1B1B1B1B1B1B1B1C0C0C0C0C0C0C0C0C0CCCCCCCCCCCCCCCCCCD7D7D7D7D7D7
+D7D7D7D7D7D7D7D7D7D7D7D7CFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFABABABABABAB
+ABABAB9292929292929292927D7D7D7D7D7D7D7D7D7D7D7D6B6B6B6B6B6B6B6B6B5D5D5D5D5D5D
+5D5D5D5555555555555555555454545454545454545858585858585858585858585C5C5C5C5C5C
+5C5C5C5F605F5F605F5F605F656565656565656565646464646464646464656565656565656565
+6565656E6E6E6E6E6E6E6E6E7171717171717171717171717171717171717C7C7C7C7C7C7C7C7C
+7C7C7C8888888888888888888C8C8C8C8C8C8C8C8C9090909090909090909B9B9B9B9B9B9B9B9B
+A3A3A3A3A3A3A3A3A3A3A3A38D8D8D8D8D8D8D8D8D4B4B4B4B4B4B4B4B4B2F2F2F2F2F2F2F2F2F
+3232323232323232323939393939393939393939393B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A
+3C3C3C3C3C3C3C3C3C636363636363636363636363CBCBCBCBCBCBCBCBCBFCFCFCFCFCFCFCFCFC
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+F9F9F9F9F9F9F9F9F9C7C7C7C7C7C7C7C7C7EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDEBEBEB
+EBEBEBEBEBEBECECECECECECECECECECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB
+EBEBEBEBEBEBECECECECECECECECECECECECEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E8E9E8
+E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E5E5E5E5E5E5E5E5E5D6D6D5
+D6D6D5D6D6D59F9F9F9F9F9F9F9F9F5656565656565656563434343434343434343434342D2D2D
+2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B282828282828282828252525252525252525252525252525
+252525252525242424242424242424242424242424242424222222222222222222242424242424
+2424242424243737373737373737375C5C5C5C5C5C5C5C5C7272727272727272727C7C7C7C7C7C
+7C7C7C8181818181818181818181818383838383838383837E7E7E7E7E7E7E7E7E6E6E6E6E6E6E
+6E6E6E5D5D5D5D5D5D5D5D5D5D5D5D515151515151515151474747474747474747404040404040
+4040403B3B3B3B3B3B3B3B3B393939393939393939393939373737373737373737343434343434
+3434343232323232323232323535353535353535353A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A
+3A3A3A3C3C3C3C3C3C3C3C3C4444444444444444444E4E4E4E4E4E4E4E4E4E4E4E626262626262
+6262627A7A7A7A7A7A7A7A7A909090909090909090A0A0A0A0A0A0A0A0A0B1B1B1B1B1B1B1B1B1
+B1B1B1C0C0C0C0C0C0C0C0C0CCCCCCCCCCCCCCCCCCD7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
+CFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFABABABABABABABABAB929292929292929292
+7D7D7D7D7D7D7D7D7D7D7D7D6B6B6B6B6B6B6B6B6B5D5D5D5D5D5D5D5D5D555555555555555555
+5454545454545454545858585858585858585858585C5C5C5C5C5C5C5C5C5F605F5F605F5F605F
+6565656565656565656464646464646464646565656565656565656565656E6E6E6E6E6E6E6E6E
+7171717171717171717171717171717171717C7C7C7C7C7C7C7C7C7C7C7C888888888888888888
+8C8C8C8C8C8C8C8C8C9090909090909090909B9B9B9B9B9B9B9B9BA3A3A3A3A3A3A3A3A3A3A3A3
+8D8D8D8D8D8D8D8D8D4B4B4B4B4B4B4B4B4B2F2F2F2F2F2F2F2F2F323232323232323232393939
+3939393939393939393B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3C3C3C3C3C3C3C3C3C636363
+636363636363636363CBCBCBCBCBCBCBCBCBFCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C7C7C7
+C7C7C7C7C7C7EDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDEDEDEDECECEC
+ECECECECECECEDEDEDEDEDEDEDEDEDEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEBEBEBEBEBEB
+EBEBEBEBEBEBE9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9
+E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6
+E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E2E2E2E2E2E2E2E2E2CFCFCFCFCFCFCFCFCF999999999999
+9999995454545454545454543636363636363636363636363030303030303030302C2C2C2C2C2C
+2C2C2C292929292929292929272727272727272727272727252525252525252525242424242424
+242424222222222222222222212121212121212121212121212121212121212121313131313131
+3131315959595959595959597272727272727272727B7B7B7B7B7B7B7B7B7F7F7F7F7F7F7F7F7F
+7F7F7F7C7C7C7C7C7C7C7C7C6A6A6A6A6A6A6A6A6A525252525252525252464646464646464646
+4646464040404040404040403A3A3A3A3A3A3A3A3A363636363636363636343434343434343434
+3434343434343434343434343232323232323232322F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D
+313131313131313131353535353535353535353535363636363636363636393939393939393939
+3B3B3B3B3B3B3B3B3B444444444444444444444444555555555555555555696969696969696969
+7F7F7F7F7F7F7F7F7F929292929292929292A9A9A9A9A9A9A9A9A9A9A9A9C0C0C0C0C0C0C0C0C0
+D3D3D3D3D3D3D3D3D3DDDDDDDDDDDDDDDDDDDEDEDEDEDEDEDEDEDED6D6D5D6D6D5D6D6D5D6D6D5
+C2C2C2C2C2C2C2C2C2ACACACACACACACACAC979797979797979797818181818181818181818181
+6B6B6B6B6B6B6B6B6B5C5C5C5C5C5C5C5C5C5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A555555
+5555555555555555554E4E4E4E4E4E4E4E4E4C4C4C4C4C4C4C4C4C5959595959595959594D4D4D
+4D4D4D4D4D4D5858585858585858585858585D5D5D5D5D5D5D5D5D646464646464646464626262
+6262626262626767676767676767676767677B7B7B7B7B7B7B7B7B888888888888888888919191
+9191919191919D9D9D9D9D9D9D9D9DA6A6A6A6A6A6A6A6A6A6A6A6969696969696969696585858
+585858585858323232323232323232343434343434343434363636363636363636363636393939
+3939393939393939393939393939393A3A3A3A3A3A3A3A3A656565656565656565656565CDCDCD
+CDCDCDCDCDCDFCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBD7D7D7D7D7D7D7D7D7EDEDEDEDEDED
+EDEDEDEEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDEDEDEDECECECECECECECECECEDEDEDEDEDED
+EDEDEDEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBE9E9E9E9E9E9
+E9E9E9EAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8
+E8E9E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6
+E6E6E6E2E2E2E2E2E2E2E2E2CFCFCFCFCFCFCFCFCF999999999999999999545454545454545454
+3636363636363636363636363030303030303030302C2C2C2C2C2C2C2C2C292929292929292929
+272727272727272727272727252525252525252525242424242424242424222222222222222222
+212121212121212121212121212121212121212121313131313131313131595959595959595959
+7272727272727272727B7B7B7B7B7B7B7B7B7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C
+6A6A6A6A6A6A6A6A6A525252525252525252464646464646464646464646404040404040404040
+3A3A3A3A3A3A3A3A3A363636363636363636343434343434343434343434343434343434343434
+3232323232323232322F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D313131313131313131353535
+3535353535353535353636363636363636363939393939393939393B3B3B3B3B3B3B3B3B444444
+4444444444444444445555555555555555556969696969696969697F7F7F7F7F7F7F7F7F929292
+929292929292A9A9A9A9A9A9A9A9A9A9A9A9C0C0C0C0C0C0C0C0C0D3D3D3D3D3D3D3D3D3DDDDDD
+DDDDDDDDDDDDDEDEDEDEDEDEDEDEDED6D6D5D6D6D5D6D6D5D6D6D5C2C2C2C2C2C2C2C2C2ACACAC
+ACACACACACAC9797979797979797978181818181818181818181816B6B6B6B6B6B6B6B6B5C5C5C
+5C5C5C5C5C5C5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5555555555555555555555554E4E4E
+4E4E4E4E4E4E4C4C4C4C4C4C4C4C4C5959595959595959594D4D4D4D4D4D4D4D4D585858585858
+5858585858585D5D5D5D5D5D5D5D5D646464646464646464626262626262626262676767676767
+6767676767677B7B7B7B7B7B7B7B7B8888888888888888889191919191919191919D9D9D9D9D9D
+9D9D9DA6A6A6A6A6A6A6A6A6A6A6A6969696969696969696585858585858585858323232323232
+323232343434343434343434363636363636363636363636393939393939393939393939393939
+3939393A3A3A3A3A3A3A3A3A656565656565656565656565CDCDCDCDCDCDCDCDCDFCFCFCFCFCFC
+FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFBFBFBFBFBFBFBFBFBD7D7D7D7D7D7D7D7D7EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA
+EBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAE8E9E8E8E9E8E8E9E8E9E9E9E9E9E9E9E9E9
+E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7
+E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E1E1E1E1E1E1E1E1E1
+CDCDCDCDCDCDCDCDCD959595959595959595505050505050505050343434343434343434343434
+2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2B2B2B2B2B2B2B2B2B282828282828282828282828
+252525252525252525222222222222222222222222222222222222222222222222222222222222
+2222222222222222222D2D2D2D2D2D2D2D2D5555555555555555557272727272727272727B7B7B
+7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A7A7A7A6E6E6E6E6E6E6E6E6E565656565656565656424242
+4242424242423B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3C3C3C
+3C3C3C3C3C3C3F3F3F3F3F3F3F3F3F4242424242424242424242424141414141414141413E3E3E
+3E3E3E3E3E3E3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C
+3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3E3E3E3E3E3E3E3E3E464646464646464646464646545454
+5454545454545F605F5F605F5F605F717171717171717171868686868686868686A1A1A1A1A1A1
+A1A1A1A1A1A1BFBFBFBFBFBFBFBFBFD8D8D8D8D8D8D8D8D8E6E6E6E6E6E6E6E6E6E9E9E9E9E9E9
+E9E9E9DFDFDFDFDFDFDFDFDFDFDFDFC5C5C5C5C5C5C5C5C5ADADADADADADADADAD989898989898
+9898988181818181818181818181816B6B6B6B6B6B6B6B6B636363636363636363626262626262
+6262625B5B5B5B5B5B5B5B5B5454545454545454545454545252525252525252524D4D4D4D4D4D
+4D4D4D7A7A7A7A7A7A7A7A7A585858585858585858686868686868686868686868636363636363
+6363635555555555555555555858585858585858586161616161616161616161616E6E6E6E6E6E
+6E6E6E8282828282828282829191919191919191919E9E9E9E9E9E9E9E9EA7A7A7A7A7A7A7A7A7
+A7A7A79F9F9F9F9F9F9F9F9F676767676767676767373737373737373737363636363636363636
+363636363636363636363636373737373737373737363636363636363636393939393939393939
+6F6F6F6F6F6F6F6F6F6F6F6FD6D6D6D6D6D6D6D6D6FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9
+CACACACACACACACACAEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEBEBEBEBEBEBEBEBEBEBEBEB
+EBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEAEAEA
+EAEAEAEAEAEAEAEAEAE8E9E8E8E9E8E8E9E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9
+E9E9E9E9E9E9E9E9E9E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E6E6E6
+E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E1E1E1E1E1E1E1E1E1CDCDCDCDCDCDCDCDCD959595
+9595959595955050505050505050503434343434343434343434342F2F2F2F2F2F2F2F2F2F2F2F
+2F2F2F2F2F2F2B2B2B2B2B2B2B2B2B282828282828282828282828252525252525252525222222
+2222222222222222222222222222222222222222222222222222222222222222222222222D2D2D
+2D2D2D2D2D2D5555555555555555557272727272727272727B7B7B7B7B7B7B7B7B7A7A7A7A7A7A
+7A7A7A7A7A7A6E6E6E6E6E6E6E6E6E5656565656565656564242424242424242423B3B3B3B3B3B
+3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3C3C3C3C3C3C3C3C3C3F3F3F3F3F3F
+3F3F3F4242424242424242424242424141414141414141413E3E3E3E3E3E3E3E3E3B3B3B3B3B3B
+3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C
+3C3C3C3E3E3E3E3E3E3E3E3E4646464646464646464646465454545454545454545F605F5F605F
+5F605F717171717171717171868686868686868686A1A1A1A1A1A1A1A1A1A1A1A1BFBFBFBFBFBF
+BFBFBFD8D8D8D8D8D8D8D8D8E6E6E6E6E6E6E6E6E6E9E9E9E9E9E9E9E9E9DFDFDFDFDFDFDFDFDF
+DFDFDFC5C5C5C5C5C5C5C5C5ADADADADADADADADAD989898989898989898818181818181818181
+8181816B6B6B6B6B6B6B6B6B6363636363636363636262626262626262625B5B5B5B5B5B5B5B5B
+5454545454545454545454545252525252525252524D4D4D4D4D4D4D4D4D7A7A7A7A7A7A7A7A7A
+585858585858585858686868686868686868686868636363636363636363555555555555555555
+5858585858585858586161616161616161616161616E6E6E6E6E6E6E6E6E828282828282828282
+9191919191919191919E9E9E9E9E9E9E9E9EA7A7A7A7A7A7A7A7A7A7A7A79F9F9F9F9F9F9F9F9F
+676767676767676767373737373737373737363636363636363636363636363636363636363636
+3737373737373737373636363636363636363939393939393939396F6F6F6F6F6F6F6F6F6F6F6F
+D6D6D6D6D6D6D6D6D6FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9CACACACACACACACACAEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEAEAEA
+EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAE8E9E8
+E8E9E8E8E9E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E8E8E8
+E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6
+E6E6E6E6E6E6E1E1E1E1E1E1E1E1E1CDCDCDCDCDCDCDCDCD959595959595959595505050505050
+5050503434343434343434343434342F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2B2B2B2B2B2B
+2B2B2B282828282828282828282828252525252525252525222222222222222222222222222222
+2222222222222222222222222222222222222222222222222D2D2D2D2D2D2D2D2D555555555555
+5555557272727272727272727B7B7B7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A7A7A7A6E6E6E6E6E6E
+6E6E6E5656565656565656564242424242424242423B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A
+3A3A3A3A3A3A3A3A3A3A3A3A3C3C3C3C3C3C3C3C3C3F3F3F3F3F3F3F3F3F424242424242424242
+4242424141414141414141413E3E3E3E3E3E3E3E3E3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B
+3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3E3E3E3E3E3E3E3E3E
+4646464646464646464646465454545454545454545F605F5F605F5F605F717171717171717171
+868686868686868686A1A1A1A1A1A1A1A1A1A1A1A1BFBFBFBFBFBFBFBFBFD8D8D8D8D8D8D8D8D8
+E6E6E6E6E6E6E6E6E6E9E9E9E9E9E9E9E9E9DFDFDFDFDFDFDFDFDFDFDFDFC5C5C5C5C5C5C5C5C5
+ADADADADADADADADAD9898989898989898988181818181818181818181816B6B6B6B6B6B6B6B6B
+6363636363636363636262626262626262625B5B5B5B5B5B5B5B5B545454545454545454545454
+5252525252525252524D4D4D4D4D4D4D4D4D7A7A7A7A7A7A7A7A7A585858585858585858686868
+686868686868686868636363636363636363555555555555555555585858585858585858616161
+6161616161616161616E6E6E6E6E6E6E6E6E8282828282828282829191919191919191919E9E9E
+9E9E9E9E9E9EA7A7A7A7A7A7A7A7A7A7A7A79F9F9F9F9F9F9F9F9F676767676767676767373737
+373737373737363636363636363636363636363636363636363636373737373737373737363636
+3636363636363939393939393939396F6F6F6F6F6F6F6F6F6F6F6FD6D6D6D6D6D6D6D6D6FDFDFD
+FDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9CACACACACACACACACAECECECECECECECECECECECECECECEC
+ECECECEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9EAEAEAEAEAEA
+EAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8
+E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7
+E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E6E6E6E0E0E0E0E0E0
+E0E0E0CBCBCBCBCBCBCBCBCB9090909090909090904F4F4F4F4F4F4F4F4F343434343434343434
+3434342D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D292929292929292929
+292929252525252525252525222222222222222222222222222222222222222222222222222222
+2020202020202020202020202B2B2B2B2B2B2B2B2B525252525252525252727272727272727272
+7979797979797979796F6F6F6F6F6F6F6F6F6F6F6F5B5B5B5B5B5B5B5B5B494949494949494949
+4242424242424242424141414141414141414141414747474747474747474F4F4F4F4F4F4F4F4F
+5656565656565656565C5C5C5C5C5C5C5C5C5E5E5E5E5E5E5E5E5E5E5E5E5A5A5A5A5A5A5A5A5A
+5252525252525252524C4C4C4C4C4C4C4C4C4444444444444444443F3F3F3F3F3F3F3F3F3F3F3F
+3E3E3E3E3E3E3E3E3E3C3C3C3C3C3C3C3C3C3F3F3F3F3F3F3F3F3F474747474747474747474747
+5252525252525252525B5B5B5B5B5B5B5B5B6969696969696969697D7D7D7D7D7D7D7D7D9B9B9B
+9B9B9B9B9B9B9B9B9BBFBFBFBFBFBFBFBFBFDEDEDEDEDEDEDEDEDEEDEDEDEDEDEDEDEDEDF5F5F5
+F5F5F5F5F5F5E5E5E5E5E5E5E5E5E5E5E5E5C7C7C7C7C7C7C7C7C7ADADADADADADADADAD999999
+9999999999998383838383838383838383837373737373737373736D6D6D6D6D6D6D6D6D6B6B6B
+6B6B6B6B6B6B707070707070707070636363636363636363636363595959595959595959474747
+4747474747475F605F5F605F5F605F6161616161616161617F7F7F7F7F7F7F7F7F7F7F7F7C7C7C
+7C7C7C7C7C7C6767676767676767675E5E5E5E5E5E5E5E5E686868686868686868686868727272
+7272727272728080808080808080809292929292929292929F9F9F9F9F9F9F9F9FA8A8A8A8A8A8
+A8A8A8A8A8A8A4A4A4A4A4A4A4A4A47777777777777777773F3F3F3F3F3F3F3F3F363636363636
+3636363636363636363636363636363636363636363636363939393939393939393E3E3E3E3E3E
+3E3E3E848484848484848484848484E4E4E4E4E4E4E4E4E4FDFDFDFDFDFDFDFDFDFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFB
+FBFBFBD4D4D4D4D4D4D4D4D4ECECECECECECECECECECECECECECECECECECEAEAEAEAEAEAEAEAEA
+EAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA
+E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8
+E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7
+E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E6E6E6E0E0E0E0E0E0E0E0E0CBCBCBCBCBCBCBCBCB
+9090909090909090904F4F4F4F4F4F4F4F4F3434343434343434343434342D2D2D2D2D2D2D2D2D
+2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D292929292929292929292929252525252525252525
+222222222222222222222222222222222222222222222222222222202020202020202020202020
+2B2B2B2B2B2B2B2B2B5252525252525252527272727272727272727979797979797979796F6F6F
+6F6F6F6F6F6F6F6F6F5B5B5B5B5B5B5B5B5B494949494949494949424242424242424242414141
+4141414141414141414747474747474747474F4F4F4F4F4F4F4F4F5656565656565656565C5C5C
+5C5C5C5C5C5C5E5E5E5E5E5E5E5E5E5E5E5E5A5A5A5A5A5A5A5A5A5252525252525252524C4C4C
+4C4C4C4C4C4C4444444444444444443F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3C3C3C
+3C3C3C3C3C3C3F3F3F3F3F3F3F3F3F4747474747474747474747475252525252525252525B5B5B
+5B5B5B5B5B5B6969696969696969697D7D7D7D7D7D7D7D7D9B9B9B9B9B9B9B9B9B9B9B9BBFBFBF
+BFBFBFBFBFBFDEDEDEDEDEDEDEDEDEEDEDEDEDEDEDEDEDEDF5F5F5F5F5F5F5F5F5E5E5E5E5E5E5
+E5E5E5E5E5E5C7C7C7C7C7C7C7C7C7ADADADADADADADADAD999999999999999999838383838383
+8383838383837373737373737373736D6D6D6D6D6D6D6D6D6B6B6B6B6B6B6B6B6B707070707070
+7070706363636363636363636363635959595959595959594747474747474747475F605F5F605F
+5F605F6161616161616161617F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C676767676767
+6767675E5E5E5E5E5E5E5E5E686868686868686868686868727272727272727272808080808080
+8080809292929292929292929F9F9F9F9F9F9F9F9FA8A8A8A8A8A8A8A8A8A8A8A8A4A4A4A4A4A4
+A4A4A47777777777777777773F3F3F3F3F3F3F3F3F363636363636363636363636363636363636
+3636363636363636363636363939393939393939393E3E3E3E3E3E3E3E3E848484848484848484
+848484E4E4E4E4E4E4E4E4E4FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBD4D4D4D4D4D4D4D4D4
+ECECECECECECECECECEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9
+E8E9E8E8E9E8E8E9E8E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E9E9E9E9E9E9E9E9E9E9E9E9
+E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8
+E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E6E6E6
+E6E6E6E6E6E6E6E6E6E2E2E2E2E2E2E2E2E2CBCBCBCBCBCBCBCBCB919191919191919191515151
+5151515151513434343434343434343434342C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2D2D2D
+2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B2B2B2B242424242424242424202020202020202020212121
+2121212121212121212121212121212121212121212121212121212929292929292929294E4E4E
+4E4E4E4E4E4E717171717171717171747474747474747474636363636363636363636363505050
+5050505050504848484848484848484747474747474747474E4E4E4E4E4E4E4E4E4E4E4E5B5B5B
+5B5B5B5B5B5B6565656565656565656B6B6B6B6B6B6B6B6B6E6E6E6E6E6E6E6E6E6A6A6A6A6A6A
+6A6A6A6A6A6A6262626262626262625858585858585858584F4F4F4F4F4F4F4F4F4B4B4B4B4B4B
+4B4B4B4848484848484848484848484C4C4C4C4C4C4C4C4C484848484848484848444444444444
+4444444646464646464646464646464E4E4E4E4E4E4E4E4E5A5A5A5A5A5A5A5A5A676767676767
+676767787878787878787878929292929292929292929292B8B8B8B8B8B8B8B8B8DBDBDBDBDBDB
+DBDBDBEDEDEDEDEDEDEDEDEDF6F6F6F6F6F6F6F6F6E5E5E5E5E5E5E5E5E5E5E5E5C8C8C8C8C8C8
+C8C8C8B0B1B0B0B1B0B0B1B09D9D9D9D9D9D9D9D9D8E8E8E8E8E8E8E8E8E8E8E8E848484848484
+8484847C7C7C7C7C7C7C7C7C808080808080808080919191919191919191797979797979797979
+7979796262626262626262625656565656565656565D5D5D5D5D5D5D5D5D707070707070707070
+949494949494949494949494949494949494949494828282828282828282797979797979797979
+7A7A7A7A7A7A7A7A7A7A7A7A808080808080808080888888888888888888959595959595959595
+A4A4A4A4A4A4A4A4A4ACACACACACACACACACACACACA8A8A8A8A8A8A8A8A8868686868686868686
+484848484848484848393939393939393939393939393939393939393939373737373737373737
+3B3B3B3B3B3B3B3B3B4848484848484848489B9B9B9B9B9B9B9B9B9B9B9BF0F0F0F0F0F0F0F0F0
+FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCE1E1E1E1E1E1E1E1E1ECECECECECECECECECEBEBEB
+EBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E9E9E9
+E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E9E9E9E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E9E8
+E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E7E7E7
+E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E2E2E2
+E2E2E2E2E2E2CBCBCBCBCBCBCBCBCB919191919191919191515151515151515151343434343434
+3434343434342C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2D2D2D2D2D2D2D2D2D2B2B2B2B2B2B
+2B2B2B2B2B2B242424242424242424202020202020202020212121212121212121212121212121
+2121212121212121212121212121212929292929292929294E4E4E4E4E4E4E4E4E717171717171
+717171747474747474747474636363636363636363636363505050505050505050484848484848
+4848484747474747474747474E4E4E4E4E4E4E4E4E4E4E4E5B5B5B5B5B5B5B5B5B656565656565
+6565656B6B6B6B6B6B6B6B6B6E6E6E6E6E6E6E6E6E6A6A6A6A6A6A6A6A6A6A6A6A626262626262
+6262625858585858585858584F4F4F4F4F4F4F4F4F4B4B4B4B4B4B4B4B4B484848484848484848
+4848484C4C4C4C4C4C4C4C4C484848484848484848444444444444444444464646464646464646
+4646464E4E4E4E4E4E4E4E4E5A5A5A5A5A5A5A5A5A676767676767676767787878787878787878
+929292929292929292929292B8B8B8B8B8B8B8B8B8DBDBDBDBDBDBDBDBDBEDEDEDEDEDEDEDEDED
+F6F6F6F6F6F6F6F6F6E5E5E5E5E5E5E5E5E5E5E5E5C8C8C8C8C8C8C8C8C8B0B1B0B0B1B0B0B1B0
+9D9D9D9D9D9D9D9D9D8E8E8E8E8E8E8E8E8E8E8E8E8484848484848484847C7C7C7C7C7C7C7C7C
+808080808080808080919191919191919191797979797979797979797979626262626262626262
+5656565656565656565D5D5D5D5D5D5D5D5D707070707070707070949494949494949494949494
+9494949494949494948282828282828282827979797979797979797A7A7A7A7A7A7A7A7A7A7A7A
+808080808080808080888888888888888888959595959595959595A4A4A4A4A4A4A4A4A4ACACAC
+ACACACACACACACACACA8A8A8A8A8A8A8A8A8868686868686868686484848484848484848393939
+3939393939393939393939393939393939393737373737373737373B3B3B3B3B3B3B3B3B484848
+4848484848489B9B9B9B9B9B9B9B9B9B9B9BF0F0F0F0F0F0F0F0F0FEFEFEFEFEFEFEFEFEFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC
+FCFCFCFCFCFCE1E1E1E1E1E1E1E1E1ECECECECECECECECECEBEBEBEBEBEBEBEBEBEAEAEAEAEAEA
+EAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8
+E8E9E8E9E9E9E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8
+E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7
+E7E7E7E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E2E2E2E2E2E2E2E2E2CBCBCBCBCBCB
+CBCBCB9191919191919191915151515151515151513434343434343434343434342C2C2C2C2C2C
+2C2C2C2B2B2B2B2B2B2B2B2B2D2D2D2D2D2D2D2D2D2B2B2B2B2B2B2B2B2B2B2B2B242424242424
+242424202020202020202020212121212121212121212121212121212121212121212121212121
+2121212929292929292929294E4E4E4E4E4E4E4E4E717171717171717171747474747474747474
+636363636363636363636363505050505050505050484848484848484848474747474747474747
+4E4E4E4E4E4E4E4E4E4E4E4E5B5B5B5B5B5B5B5B5B6565656565656565656B6B6B6B6B6B6B6B6B
+6E6E6E6E6E6E6E6E6E6A6A6A6A6A6A6A6A6A6A6A6A626262626262626262585858585858585858
+4F4F4F4F4F4F4F4F4F4B4B4B4B4B4B4B4B4B4848484848484848484848484C4C4C4C4C4C4C4C4C
+4848484848484848484444444444444444444646464646464646464646464E4E4E4E4E4E4E4E4E
+5A5A5A5A5A5A5A5A5A676767676767676767787878787878787878929292929292929292929292
+B8B8B8B8B8B8B8B8B8DBDBDBDBDBDBDBDBDBEDEDEDEDEDEDEDEDEDF6F6F6F6F6F6F6F6F6E5E5E5
+E5E5E5E5E5E5E5E5E5C8C8C8C8C8C8C8C8C8B0B1B0B0B1B0B0B1B09D9D9D9D9D9D9D9D9D8E8E8E
+8E8E8E8E8E8E8E8E8E8484848484848484847C7C7C7C7C7C7C7C7C808080808080808080919191
+9191919191917979797979797979797979796262626262626262625656565656565656565D5D5D
+5D5D5D5D5D5D707070707070707070949494949494949494949494949494949494949494828282
+8282828282827979797979797979797A7A7A7A7A7A7A7A7A7A7A7A808080808080808080888888
+888888888888959595959595959595A4A4A4A4A4A4A4A4A4ACACACACACACACACACACACACA8A8A8
+A8A8A8A8A8A8868686868686868686484848484848484848393939393939393939393939393939
+3939393939393737373737373737373B3B3B3B3B3B3B3B3B4848484848484848489B9B9B9B9B9B
+9B9B9B9B9B9BF0F0F0F0F0F0F0F0F0FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCE1E1E1E1E1E1
+E1E1E1EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA
+EAEAEAE8E9E8E8E9E8E8E9E8E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8
+E8E9E8E8E8E8E8E8E8E8E8E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E8E9E8E8E9E8E8E9E8
+E8E9E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6
+E5E5E5E5E5E5E5E5E5E5E5E5E1E1E1E1E1E1E1E1E1CCCCCCCCCCCCCCCCCC959595959595959595
+5555555555555555553535353535353535353535352C2C2C2C2C2C2C2C2C292929292929292929
+292929292929292929292929292929292929292929252525252525252525212121212121212121
+212121212121212121212121212121212121212121212121212121212121292929292929292929
+4E4E4E4E4E4E4E4E4E7070707070707070706E6E6E6E6E6E6E6E6E5A5A5A5A5A5A5A5A5A5A5A5A
+4F4F4F4F4F4F4F4F4F5151515151515151515757575757575757575E5E5E5E5E5E5E5E5E5E5E5E
+6868686868686868686D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6767676767676767675A5A5A
+5A5A5A5A5A5A5A5A5A5050505050505050504C4C4C4C4C4C4C4C4C444444444444444444494949
+4949494949494E4E4E4E4E4E4E4E4E4E4E4E585858585858585858595959595959595959565656
+5656565656564F4F4F4F4F4F4F4F4F4F4F4F5050505050505050505A5A5A5A5A5A5A5A5A676767
+6767676767677777777777777777778B8B8B8B8B8B8B8B8B8B8B8BACACACACACACACACACD3D3D3
+D3D3D3D3D3D3E8E9E8E8E9E8E8E9E8F0F0F0F0F0F0F0F0F0E1E1E1E1E1E1E1E1E1E1E1E1C6C6C6
+C6C6C6C6C6C6B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A0A0A0A0A0A0A0A0A0A0A0A09A9A9A
+9A9A9A9A9A9A929292929292929292959595959595959595A1A1A1A1A1A1A1A1A1909090909090
+9090909090907676767676767676767070707070707070707979797979797979798C8C8C8C8C8C
+8C8C8C9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F959595959595959595959595959595
+9595959999999999999999999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AA0A0A0A0A0A0
+A0A0A0AEAEAEAEAEAEAEAEAEB2B2B2B2B2B2B2B2B2B2B2B2ADADADADADADADADAD909090909090
+909090515151515151515151464646464646464646464646464646464646464646404040404040
+4040403F3F3F3F3F3F3F3F3F5B5B5B5B5B5B5B5B5BB9B9B9B9B9B9B9B9B9B9B9B9F9F9F9F9F9F9
+F9F9F9FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C7C7C7C7C7C7C7C7C7EBEBEBEBEBEBEBEBEB
+EBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE8E9E8E8E9E8E8E9E8
+E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8
+E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8
+E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5E5E5E5
+E1E1E1E1E1E1E1E1E1CCCCCCCCCCCCCCCCCC959595959595959595555555555555555555353535
+3535353535353535352C2C2C2C2C2C2C2C2C292929292929292929292929292929292929292929
+292929292929292929252525252525252525212121212121212121212121212121212121212121
+2121212121212121212121212121212121212929292929292929294E4E4E4E4E4E4E4E4E707070
+7070707070706E6E6E6E6E6E6E6E6E5A5A5A5A5A5A5A5A5A5A5A5A4F4F4F4F4F4F4F4F4F515151
+5151515151515757575757575757575E5E5E5E5E5E5E5E5E5E5E5E6868686868686868686D6D6D
+6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6767676767676767675A5A5A5A5A5A5A5A5A5A5A5A505050
+5050505050504C4C4C4C4C4C4C4C4C4444444444444444444949494949494949494E4E4E4E4E4E
+4E4E4E4E4E4E5858585858585858585959595959595959595656565656565656564F4F4F4F4F4F
+4F4F4F4F4F4F5050505050505050505A5A5A5A5A5A5A5A5A676767676767676767777777777777
+7777778B8B8B8B8B8B8B8B8B8B8B8BACACACACACACACACACD3D3D3D3D3D3D3D3D3E8E9E8E8E9E8
+E8E9E8F0F0F0F0F0F0F0F0F0E1E1E1E1E1E1E1E1E1E1E1E1C6C6C6C6C6C6C6C6C6B4B4B4B4B4B4
+B4B4B4A4A4A4A4A4A4A4A4A4A0A0A0A0A0A0A0A0A0A0A0A09A9A9A9A9A9A9A9A9A929292929292
+929292959595959595959595A1A1A1A1A1A1A1A1A1909090909090909090909090767676767676
+7676767070707070707070707979797979797979798C8C8C8C8C8C8C8C8C9E9E9E9E9E9E9E9E9E
+9E9E9E9F9F9F9F9F9F9F9F9F959595959595959595959595959595959595999999999999999999
+9999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AA0A0A0A0A0A0A0A0A0AEAEAEAEAEAEAEAEAE
+B2B2B2B2B2B2B2B2B2B2B2B2ADADADADADADADADAD909090909090909090515151515151515151
+4646464646464646464646464646464646464646464040404040404040403F3F3F3F3F3F3F3F3F
+5B5B5B5B5B5B5B5B5BB9B9B9B9B9B9B9B9B9B9B9B9F9F9F9F9F9F9F9F9F9FEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+F9F9F9F9F9F9F9F9F9C7C7C7C7C7C7C7C7C7EAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9EAEAEA
+EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E9E9E9
+E9E9E9E9E9E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E8E8E9E8E8E9E8E7E7E7
+E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7
+E7E7E7E7E7E7E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E4E4E4E0E0E0E0E0E0E0E0E0CDCDCD
+CDCDCDCDCDCD9D9D9D9D9D9D9D9D9D5D5D5D5D5D5D5D5D5D3737373737373737373737372B2B2B
+2B2B2B2B2B2B282828282828282828282828282828282828252525252525252525252525222222
+222222222222202020202020202020212121212121212121202020202020202020212121212121
+2121212121212929292929292929294F4F4F4F4F4F4F4F4F7070707070707070706D6D6D6D6D6D
+6D6D6D5F605F5F605F5F605F5F605F5B5B5B5B5B5B5B5B5B5D5D5D5D5D5D5D5D5D636363636363
+6363636868686868686868686868686B6B6B6B6B6B6B6B6B6767676767676767675D5D5D5D5D5D
+5D5D5D5555555555555555554848484848484848484848483B3B3B3B3B3B3B3B3B393939393939
+3939393535353535353535355656565656565656565F605F5F605F5F605F5F605F6C6C6C6C6C6C
+6C6C6C6A6A6A6A6A6A6A6A6A5E5E5E5E5E5E5E5E5E6161616161616161616161615D5D5D5D5D5D
+5D5D5D616161616161616161696969696969696969777777777777777777878787878787878787
+878787A6A6A6A6A6A6A6A6A6CDCDCDCDCDCDCDCDCDE5E5E5E5E5E5E5E5E5ECECECECECECECECEC
+DEDEDEDEDEDEDEDEDEDEDEDEC5C5C5C5C5C5C5C5C5B6B6B6B6B6B6B6B6B6AAAAAAAAAAAAAAAAAA
+AEAEAEAEAEAEAEAEAEAEAEAEA8A8A8A8A8A8A8A8A8A1A1A1A1A1A1A1A1A19F9F9F9F9F9F9F9F9F
+9E9E9E9E9E9E9E9E9E9797979797979797979797978D8D8D8D8D8D8D8D8D8B8B8B8B8B8B8B8B8B
+939393939393939393A2A2A2A2A2A2A2A2A2A9A9A9A9A9A9A9A9A9A9A9A9ABABABABABABABABAB
+AAAAAAAAAAAAAAAAAAACACACACACACACACACB0B1B0B0B1B0B0B1B0B0B1B0B2B2B2B2B2B2B2B2B2
+B1B1B1B1B1B1B1B1B1B2B2B2B2B2B2B2B2B2B9B9B9B9B9B9B9B9B9BABABABABABABABABABABABA
+B2B2B2B2B2B2B2B2B29696969696969696965B5B5B5B5B5B5B5B5B5757575757575757575E5E5E
+5E5E5E5E5E5E5E5E5E5454545454545454544E4E4E4E4E4E4E4E4E818181818181818181DEDEDE
+DEDEDEDEDEDEDEDEDEFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C6C6C6
+C6C6C6C6C6C6EAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEA
+EAEAEAEAEAEAE8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E9E9E9E9E9E9E9E9E9E8E8E8E8E8E8
+E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E8E8E9E8E8E9E8E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8
+E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E5E5E5E5E5E5
+E5E5E5E4E4E4E4E4E4E4E4E4E4E4E4E0E0E0E0E0E0E0E0E0CDCDCDCDCDCDCDCDCD9D9D9D9D9D9D
+9D9D9D5D5D5D5D5D5D5D5D5D3737373737373737373737372B2B2B2B2B2B2B2B2B282828282828
+282828282828282828282828252525252525252525252525222222222222222222202020202020
+202020212121212121212121202020202020202020212121212121212121212121292929292929
+2929294F4F4F4F4F4F4F4F4F7070707070707070706D6D6D6D6D6D6D6D6D5F605F5F605F5F605F
+5F605F5B5B5B5B5B5B5B5B5B5D5D5D5D5D5D5D5D5D636363636363636363686868686868686868
+6868686B6B6B6B6B6B6B6B6B6767676767676767675D5D5D5D5D5D5D5D5D555555555555555555
+4848484848484848484848483B3B3B3B3B3B3B3B3B393939393939393939353535353535353535
+5656565656565656565F605F5F605F5F605F5F605F6C6C6C6C6C6C6C6C6C6A6A6A6A6A6A6A6A6A
+5E5E5E5E5E5E5E5E5E6161616161616161616161615D5D5D5D5D5D5D5D5D616161616161616161
+696969696969696969777777777777777777878787878787878787878787A6A6A6A6A6A6A6A6A6
+CDCDCDCDCDCDCDCDCDE5E5E5E5E5E5E5E5E5ECECECECECECECECECDEDEDEDEDEDEDEDEDEDEDEDE
+C5C5C5C5C5C5C5C5C5B6B6B6B6B6B6B6B6B6AAAAAAAAAAAAAAAAAAAEAEAEAEAEAEAEAEAEAEAEAE
+A8A8A8A8A8A8A8A8A8A1A1A1A1A1A1A1A1A19F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E979797
+9797979797979797978D8D8D8D8D8D8D8D8D8B8B8B8B8B8B8B8B8B939393939393939393A2A2A2
+A2A2A2A2A2A2A9A9A9A9A9A9A9A9A9A9A9A9ABABABABABABABABABAAAAAAAAAAAAAAAAAAACACAC
+ACACACACACACB0B1B0B0B1B0B0B1B0B0B1B0B2B2B2B2B2B2B2B2B2B1B1B1B1B1B1B1B1B1B2B2B2
+B2B2B2B2B2B2B9B9B9B9B9B9B9B9B9BABABABABABABABABABABABAB2B2B2B2B2B2B2B2B2969696
+9696969696965B5B5B5B5B5B5B5B5B5757575757575757575E5E5E5E5E5E5E5E5E5E5E5E545454
+5454545454544E4E4E4E4E4E4E4E4E818181818181818181DEDEDEDEDEDEDEDEDEDEDEDEFDFDFD
+FDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C6C6C6C6C6C6C6C6C6EAEAEAEAEAEA
+EAEAEAE9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE8E9E8E8E9E8
+E8E9E8E8E9E8E8E9E8E8E9E8E9E9E9E9E9E9E9E9E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8
+E8E8E8E8E9E8E8E9E8E8E9E8E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8
+E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4
+E4E4E4E0E0E0E0E0E0E0E0E0CDCDCDCDCDCDCDCDCD9D9D9D9D9D9D9D9D9D5D5D5D5D5D5D5D5D5D
+3737373737373737373737372B2B2B2B2B2B2B2B2B282828282828282828282828282828282828
+252525252525252525252525222222222222222222202020202020202020212121212121212121
+2020202020202020202121212121212121212121212929292929292929294F4F4F4F4F4F4F4F4F
+7070707070707070706D6D6D6D6D6D6D6D6D5F605F5F605F5F605F5F605F5B5B5B5B5B5B5B5B5B
+5D5D5D5D5D5D5D5D5D6363636363636363636868686868686868686868686B6B6B6B6B6B6B6B6B
+6767676767676767675D5D5D5D5D5D5D5D5D555555555555555555484848484848484848484848
+3B3B3B3B3B3B3B3B3B3939393939393939393535353535353535355656565656565656565F605F
+5F605F5F605F5F605F6C6C6C6C6C6C6C6C6C6A6A6A6A6A6A6A6A6A5E5E5E5E5E5E5E5E5E616161
+6161616161616161615D5D5D5D5D5D5D5D5D616161616161616161696969696969696969777777
+777777777777878787878787878787878787A6A6A6A6A6A6A6A6A6CDCDCDCDCDCDCDCDCDE5E5E5
+E5E5E5E5E5E5ECECECECECECECECECDEDEDEDEDEDEDEDEDEDEDEDEC5C5C5C5C5C5C5C5C5B6B6B6
+B6B6B6B6B6B6AAAAAAAAAAAAAAAAAAAEAEAEAEAEAEAEAEAEAEAEAEA8A8A8A8A8A8A8A8A8A1A1A1
+A1A1A1A1A1A19F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9797979797979797979797978D8D8D
+8D8D8D8D8D8D8B8B8B8B8B8B8B8B8B939393939393939393A2A2A2A2A2A2A2A2A2A9A9A9A9A9A9
+A9A9A9A9A9A9ABABABABABABABABABAAAAAAAAAAAAAAAAAAACACACACACACACACACB0B1B0B0B1B0
+B0B1B0B0B1B0B2B2B2B2B2B2B2B2B2B1B1B1B1B1B1B1B1B1B2B2B2B2B2B2B2B2B2B9B9B9B9B9B9
+B9B9B9BABABABABABABABABABABABAB2B2B2B2B2B2B2B2B29696969696969696965B5B5B5B5B5B
+5B5B5B5757575757575757575E5E5E5E5E5E5E5E5E5E5E5E5454545454545454544E4E4E4E4E4E
+4E4E4E818181818181818181DEDEDEDEDEDEDEDEDEDEDEDEFDFDFDFDFDFDFDFDFDFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFF9F9F9F9F9F9F9F9F9C6C6C6C6C6C6C6C6C6EBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEA
+EAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8
+E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7
+E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6
+E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3
+D6D6D5D6D6D5D6D6D5B2B2B2B2B2B2B2B2B27272727272727272723E3E3E3E3E3E3E3E3E3E3E3E
+2B2B2B2B2B2B2B2B2B282828282828282828282828282828282828242424242424242424242424
+222222222222222222202020202020202020202020202020202020212121212121212121222222
+2222222222222222222929292929292929294F4F4F4F4F4F4F4F4F717171717171717171717171
+7171717171716B6B6B6B6B6B6B6B6B6B6B6B696969696969696969676767676767676767676767
+676767676767676767676767676767676767636363636363636363565656565656565656494949
+4949494949494646464646464646464040404040404040404040403B3B3B3B3B3B3B3B3B3B3B3B
+3B3B3B3B3B3B3434343434343434344E4E4E4E4E4E4E4E4E686868686868686868686868949494
+9494949494949D9D9D9D9D9D9D9D9D7474747474747474746666666666666666666666666C6C6C
+6C6C6C6C6C6C6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E757575757575757575848484848484
+848484848484A1A1A1A1A1A1A1A1A1C5C5C5C5C5C5C5C5C5DFE0DFDFE0DFDFE0DFE7E7E7E7E7E7
+E7E7E7DCDCDCDCDCDCDCDCDCDCDCDCC8C8C8C8C8C8C8C8C8B8B8B8B8B8B8B8B8B8ADADADADADAD
+ADADADB0B1B0B0B1B0B0B1B0B0B1B0B2B2B2B2B2B2B2B2B2AFAFAFAFAFAFAFAFAFA7A7A7A7A7A7
+A7A7A79F9F9F9F9F9F9F9F9F9898989898989898989898989595959595959595959A9A9A9A9A9A
+9A9A9AA2A2A2A2A2A2A2A2A2B0B0B0B0B0B0B0B0B0B8B8B8B8B8B8B8B8B8B8B8B8BABABABABABA
+BABABAB8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8BCBCBCBCBCBCBCBCBCBCBCBCBFBFBFBFBFBF
+BFBFBFBFBFBFBFBFBFBFBFBFC0C0C0C0C0C0C0C0C0C4C4C4C4C4C4C4C4C4C0C0C0C0C0C0C0C0C0
+C0C0C0B8B8B8B8B8B8B8B8B8A0A0A0A0A0A0A0A0A06D6D6D6D6D6D6D6D6D646464646464646464
+7171717171717171717171716A6A6A6A6A6A6A6A6A6C6C6C6C6C6C6C6C6CB0B1B0B0B1B0B0B1B0
+F3F3F3F3F3F3F3F3F3F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9
+BBBBBBBBBBBBBBBBBBEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA
+E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8
+E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E7E7E7
+E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E4E4E4
+E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3D6D6D5D6D6D5D6D6D5B2B2B2
+B2B2B2B2B2B27272727272727272723E3E3E3E3E3E3E3E3E3E3E3E2B2B2B2B2B2B2B2B2B282828
+282828282828282828282828282828242424242424242424242424222222222222222222202020
+202020202020202020202020202020212121212121212121222222222222222222222222292929
+2929292929294F4F4F4F4F4F4F4F4F7171717171717171717171717171717171716B6B6B6B6B6B
+6B6B6B6B6B6B696969696969696969676767676767676767676767676767676767676767676767
+676767676767636363636363636363565656565656565656494949494949494949464646464646
+4646464040404040404040404040403B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B343434343434
+3434344E4E4E4E4E4E4E4E4E6868686868686868686868689494949494949494949D9D9D9D9D9D
+9D9D9D7474747474747474746666666666666666666666666C6C6C6C6C6C6C6C6C6E6E6E6E6E6E
+6E6E6E6E6E6E6E6E6E6E6E6E757575757575757575848484848484848484848484A1A1A1A1A1A1
+A1A1A1C5C5C5C5C5C5C5C5C5DFE0DFDFE0DFDFE0DFE7E7E7E7E7E7E7E7E7DCDCDCDCDCDCDCDCDC
+DCDCDCC8C8C8C8C8C8C8C8C8B8B8B8B8B8B8B8B8B8ADADADADADADADADADB0B1B0B0B1B0B0B1B0
+B0B1B0B2B2B2B2B2B2B2B2B2AFAFAFAFAFAFAFAFAFA7A7A7A7A7A7A7A7A79F9F9F9F9F9F9F9F9F
+9898989898989898989898989595959595959595959A9A9A9A9A9A9A9A9AA2A2A2A2A2A2A2A2A2
+B0B0B0B0B0B0B0B0B0B8B8B8B8B8B8B8B8B8B8B8B8BABABABABABABABABAB8B8B8B8B8B8B8B8B8
+B8B8B8B8B8B8B8B8B8BCBCBCBCBCBCBCBCBCBCBCBCBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF
+C0C0C0C0C0C0C0C0C0C4C4C4C4C4C4C4C4C4C0C0C0C0C0C0C0C0C0C0C0C0B8B8B8B8B8B8B8B8B8
+A0A0A0A0A0A0A0A0A06D6D6D6D6D6D6D6D6D646464646464646464717171717171717171717171
+6A6A6A6A6A6A6A6A6A6C6C6C6C6C6C6C6C6CB0B1B0B0B1B0B0B1B0F3F3F3F3F3F3F3F3F3F3F3F3
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9BBBBBBBBBBBBBBBBBBEBEBEB
+EBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E8E9E8
+E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8
+E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E6E6E6
+E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4
+E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3D6D6D5D6D6D5D6D6D5B2B2B2B2B2B2B2B2B2727272727272
+7272723E3E3E3E3E3E3E3E3E3E3E3E2B2B2B2B2B2B2B2B2B282828282828282828282828282828
+282828242424242424242424242424222222222222222222202020202020202020202020202020
+2020202121212121212121212222222222222222222222222929292929292929294F4F4F4F4F4F
+4F4F4F7171717171717171717171717171717171716B6B6B6B6B6B6B6B6B6B6B6B696969696969
+696969676767676767676767676767676767676767676767676767676767676767636363636363
+636363565656565656565656494949494949494949464646464646464646404040404040404040
+4040403B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3434343434343434344E4E4E4E4E4E4E4E4E
+6868686868686868686868689494949494949494949D9D9D9D9D9D9D9D9D747474747474747474
+6666666666666666666666666C6C6C6C6C6C6C6C6C6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E
+757575757575757575848484848484848484848484A1A1A1A1A1A1A1A1A1C5C5C5C5C5C5C5C5C5
+DFE0DFDFE0DFDFE0DFE7E7E7E7E7E7E7E7E7DCDCDCDCDCDCDCDCDCDCDCDCC8C8C8C8C8C8C8C8C8
+B8B8B8B8B8B8B8B8B8ADADADADADADADADADB0B1B0B0B1B0B0B1B0B0B1B0B2B2B2B2B2B2B2B2B2
+AFAFAFAFAFAFAFAFAFA7A7A7A7A7A7A7A7A79F9F9F9F9F9F9F9F9F989898989898989898989898
+9595959595959595959A9A9A9A9A9A9A9A9AA2A2A2A2A2A2A2A2A2B0B0B0B0B0B0B0B0B0B8B8B8
+B8B8B8B8B8B8B8B8B8BABABABABABABABABAB8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8BCBCBC
+BCBCBCBCBCBCBCBCBCBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFC0C0C0C0C0C0C0C0C0C4C4C4
+C4C4C4C4C4C4C0C0C0C0C0C0C0C0C0C0C0C0B8B8B8B8B8B8B8B8B8A0A0A0A0A0A0A0A0A06D6D6D
+6D6D6D6D6D6D6464646464646464647171717171717171717171716A6A6A6A6A6A6A6A6A6C6C6C
+6C6C6C6C6C6CB0B1B0B0B1B0B0B1B0F3F3F3F3F3F3F3F3F3F3F3F3FFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9BBBBBBBBBBBBBBBBBBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB
+EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E8E8E8E8E8E8
+E8E8E8E8E8E8E8E8E8E8E8E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8
+E8E8E8E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6
+E6E6E6E7E7E7E7E7E7E7E7E7E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4
+E4E4E4DEDEDEDEDEDEDEDEDEC9C9C9C9C9C9C9C9C98D8D8D8D8D8D8D8D8D494949494949494949
+4949492C2C2C2C2C2C2C2C2C272727272727272727252525252525252525242424242424242424
+2424242424242424242424242020202020202020201E1E1E1E1E1E1E1E1E212121212121212121
+222222222222222222222222292929292929292929505050505050505050747474747474747474
+7878787878787878787373737373737373737373736F6F6F6F6F6F6F6F6F6A6A6A6A6A6A6A6A6A
+666666666666666666626262626262626262626262575757575757575757464646464646464646
+3F3F3F3F3F3F3F3F3F4242424242424242424C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C
+4C4C4C4C4C4C4C4C4C464646464646464646515151515151515151707070707070707070707070
+A6A6A6A6A6A6A6A6A6B5B5B5B5B5B5B5B5B59292929292929292927B7B7B7B7B7B7B7B7B7B7B7B
+7A7A7A7A7A7A7A7A7A7C7C7C7C7C7C7C7C7C757575757575757575757575757575757575818181
+8181818181818181819C9C9C9C9C9C9C9C9CBCBCBCBCBCBCBCBCBCD6D6D5D6D6D5D6D6D5DFE0DF
+DFE0DFDFE0DFD7D7D7D7D7D7D7D7D7D7D7D7C6C6C6C6C6C6C6C6C6B8B8B8B8B8B8B8B8B8ACACAC
+ACACACACACACABABABABABABABABABABABABB0B0B0B0B0B0B0B0B0ADADADADADADADADADA3A3A3
+A3A3A3A3A3A39E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9DA3A3A3
+A3A3A3A3A3A3AFAFAFAFAFAFAFAFAFBABABABABABABABABABFBFBFBFBFBFBFBFBFBFBFBFBFBFBF
+BFBFBFBFBFBFBABABABABABABABABAB8B8B8B8B8B8B8B8B8BFBFBFBFBFBFBFBFBFBFBFBFC7C7C7
+C7C7C7C7C7C7CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCACACACACACACACACAC3C3C3C3C3C3
+C3C3C3C3C3C3BBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAA888888888888888888797979797979
+797979797979797979797979797979797979797979797979929292929292929292DDDDDDDDDDDD
+DDDDDDFCFCFCFCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9
+F9F9F9C5C5C5C5C5C5C5C5C5EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB
+EBEBEBEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8
+E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E6E6E6E6E6E6E6E6E6
+E6E6E6E6E6E6E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7
+E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4DEDEDEDEDEDEDEDEDE
+C9C9C9C9C9C9C9C9C98D8D8D8D8D8D8D8D8D4949494949494949494949492C2C2C2C2C2C2C2C2C
+272727272727272727252525252525252525242424242424242424242424242424242424242424
+2020202020202020201E1E1E1E1E1E1E1E1E212121212121212121222222222222222222222222
+292929292929292929505050505050505050747474747474747474787878787878787878737373
+7373737373737373736F6F6F6F6F6F6F6F6F6A6A6A6A6A6A6A6A6A666666666666666666626262
+6262626262626262625757575757575757574646464646464646463F3F3F3F3F3F3F3F3F424242
+4242424242424C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C464646
+464646464646515151515151515151707070707070707070707070A6A6A6A6A6A6A6A6A6B5B5B5
+B5B5B5B5B5B59292929292929292927B7B7B7B7B7B7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A7C7C7C
+7C7C7C7C7C7C7575757575757575757575757575757575758181818181818181818181819C9C9C
+9C9C9C9C9C9CBCBCBCBCBCBCBCBCBCD6D6D5D6D6D5D6D6D5DFE0DFDFE0DFDFE0DFD7D7D7D7D7D7
+D7D7D7D7D7D7C6C6C6C6C6C6C6C6C6B8B8B8B8B8B8B8B8B8ACACACACACACACACACABABABABABAB
+ABABABABABABB0B0B0B0B0B0B0B0B0ADADADADADADADADADA3A3A3A3A3A3A3A3A39E9E9E9E9E9E
+9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9DA3A3A3A3A3A3A3A3A3AFAFAFAFAFAF
+AFAFAFBABABABABABABABABABFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBABABABABABA
+BABABAB8B8B8B8B8B8B8B8B8BFBFBFBFBFBFBFBFBFBFBFBFC7C7C7C7C7C7C7C7C7CBCBCBCBCBCB
+CBCBCBCBCBCBCBCBCBCBCBCBCACACACACACACACACAC3C3C3C3C3C3C3C3C3C3C3C3BBBBBBBBBBBB
+BBBBBBAAAAAAAAAAAAAAAAAA888888888888888888797979797979797979797979797979797979
+797979797979797979797979929292929292929292DDDDDDDDDDDDDDDDDDFCFCFCFCFCFCFCFCFC
+FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C5C5C5C5C5C5C5C5C5
+EBEBEBEBEBEBEBEBEBECECECECECECECECECEBEBEBEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEA
+EBEBEBEBEBEBEBEBEBE8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8
+E8E9E8E8E9E8E8E9E8E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5E5E5E5
+E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E4E4E4E4E4E4E4E4E4E5E5E5
+E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4D7D7D7D7D7D7D7D7D7A6A6A6
+A6A6A6A6A6A6585858585858585858585858303030303030303030282828282828282828252525
+252525252525242424242424242424242424242424242424242424212121212121212121202020
+2020202020202121212121212121212222222222222222222222222B2B2B2B2B2B2B2B2B545454
+5454545454547676767676767676767B7B7B7B7B7B7B7B7B777777777777777777777777727272
+7272727272726969696969696969696565656565656565655C5C5C5C5C5C5C5C5C5C5C5C4D4D4D
+4D4D4D4D4D4D424242424242424242414141414141414141505050505050505050636363636363
+6363636363636464646464646464646161616161616161616363636363636363636B6B6B6B6B6B
+6B6B6B838383838383838383838383A1A1A1A1A1A1A1A1A1AFAFAFAFAFAFAFAFAFA4A4A4A4A4A4
+A4A4A49797979797979797979797979090909090909090908686868686868686867A7A7A7A7A7A
+7A7A7A767676767676767676808080808080808080808080969696969696969696B3B3B3B3B3B3
+B3B3B3CECECECECECECECECEDADADADADADADADADAD5D5D5D5D5D5D5D5D5D5D5D5C3C3C3C3C3C3
+C3C3C3B8B8B8B8B8B8B8B8B8ADADADADADADADADADA7A7A7A7A7A7A7A7A7A7A7A7AAAAAAAAAAAA
+AAAAAAABABABABABABABABABA2A2A2A2A2A2A2A2A29B9B9B9B9B9B9B9B9B989898989898989898
+9898989A9A9A9A9A9A9A9A9A9F9F9F9F9F9F9F9F9FA8A8A8A8A8A8A8A8A8B0B0B0B0B0B0B0B0B0
+B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4BABABABABABABABABA
+C7C7C7C7C7C7C7C7C7C7C7C7D0D0D0D0D0D0D0D0D0D4D4D4D4D4D4D4D4D4D0D0D0D0D0D0D0D0D0
+CCCCCCCCCCCCCCCCCCC5C5C5C5C5C5C5C5C5C5C5C5BBBBBBBBBBBBBBBBBBB0B0B0B0B0B0B0B0B0
+A2A2A2A2A2A2A2A2A2979797979797979797888888888888888888888888898989898989898989
+B4B4B4B4B4B4B4B4B4F2F2F2F2F2F2F2F2F2FEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C6C6C6C6C6C6C6C6C6EBEBEBEBEBEBEBEBEBECECEC
+ECECECECECECEBEBEBEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBE8E9E8
+E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E7E7E7
+E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E7E7E7
+E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6
+E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4D7D7D7D7D7D7D7D7D7A6A6A6A6A6A6A6A6A6585858585858
+585858585858303030303030303030282828282828282828252525252525252525242424242424
+242424242424242424242424242424212121212121212121202020202020202020212121212121
+2121212222222222222222222222222B2B2B2B2B2B2B2B2B545454545454545454767676767676
+7676767B7B7B7B7B7B7B7B7B777777777777777777777777727272727272727272696969696969
+6969696565656565656565655C5C5C5C5C5C5C5C5C5C5C5C4D4D4D4D4D4D4D4D4D424242424242
+424242414141414141414141505050505050505050636363636363636363636363646464646464
+6464646161616161616161616363636363636363636B6B6B6B6B6B6B6B6B838383838383838383
+838383A1A1A1A1A1A1A1A1A1AFAFAFAFAFAFAFAFAFA4A4A4A4A4A4A4A4A4979797979797979797
+9797979090909090909090908686868686868686867A7A7A7A7A7A7A7A7A767676767676767676
+808080808080808080808080969696969696969696B3B3B3B3B3B3B3B3B3CECECECECECECECECE
+DADADADADADADADADAD5D5D5D5D5D5D5D5D5D5D5D5C3C3C3C3C3C3C3C3C3B8B8B8B8B8B8B8B8B8
+ADADADADADADADADADA7A7A7A7A7A7A7A7A7A7A7A7AAAAAAAAAAAAAAAAAAABABABABABABABABAB
+A2A2A2A2A2A2A2A2A29B9B9B9B9B9B9B9B9B9898989898989898989898989A9A9A9A9A9A9A9A9A
+9F9F9F9F9F9F9F9F9FA8A8A8A8A8A8A8A8A8B0B0B0B0B0B0B0B0B0B4B4B4B4B4B4B4B4B4B4B4B4
+B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4BABABABABABABABABAC7C7C7C7C7C7C7C7C7C7C7C7
+D0D0D0D0D0D0D0D0D0D4D4D4D4D4D4D4D4D4D0D0D0D0D0D0D0D0D0CCCCCCCCCCCCCCCCCCC5C5C5
+C5C5C5C5C5C5C5C5C5BBBBBBBBBBBBBBBBBBB0B0B0B0B0B0B0B0B0A2A2A2A2A2A2A2A2A2979797
+979797979797888888888888888888888888898989898989898989B4B4B4B4B4B4B4B4B4F2F2F2
+F2F2F2F2F2F2FEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9
+F9F9F9F9F9F9C6C6C6C6C6C6C6C6C6EBEBEBEBEBEBEBEBEBECECECECECECECECECEBEBEBEBEBEB
+EBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBE8E9E8E8E9E8E8E9E8E8E9E8E8E9E8
+E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6
+E6E6E6E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7
+E7E7E7E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4
+E4E4E4D7D7D7D7D7D7D7D7D7A6A6A6A6A6A6A6A6A6585858585858585858585858303030303030
+303030282828282828282828252525252525252525242424242424242424242424242424242424
+242424212121212121212121202020202020202020212121212121212121222222222222222222
+2222222B2B2B2B2B2B2B2B2B5454545454545454547676767676767676767B7B7B7B7B7B7B7B7B
+777777777777777777777777727272727272727272696969696969696969656565656565656565
+5C5C5C5C5C5C5C5C5C5C5C5C4D4D4D4D4D4D4D4D4D424242424242424242414141414141414141
+505050505050505050636363636363636363636363646464646464646464616161616161616161
+6363636363636363636B6B6B6B6B6B6B6B6B838383838383838383838383A1A1A1A1A1A1A1A1A1
+AFAFAFAFAFAFAFAFAFA4A4A4A4A4A4A4A4A4979797979797979797979797909090909090909090
+8686868686868686867A7A7A7A7A7A7A7A7A767676767676767676808080808080808080808080
+969696969696969696B3B3B3B3B3B3B3B3B3CECECECECECECECECEDADADADADADADADADAD5D5D5
+D5D5D5D5D5D5D5D5D5C3C3C3C3C3C3C3C3C3B8B8B8B8B8B8B8B8B8ADADADADADADADADADA7A7A7
+A7A7A7A7A7A7A7A7A7AAAAAAAAAAAAAAAAAAABABABABABABABABABA2A2A2A2A2A2A2A2A29B9B9B
+9B9B9B9B9B9B9898989898989898989898989A9A9A9A9A9A9A9A9A9F9F9F9F9F9F9F9F9FA8A8A8
+A8A8A8A8A8A8B0B0B0B0B0B0B0B0B0B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4
+B4B4B4B4B4B4BABABABABABABABABAC7C7C7C7C7C7C7C7C7C7C7C7D0D0D0D0D0D0D0D0D0D4D4D4
+D4D4D4D4D4D4D0D0D0D0D0D0D0D0D0CCCCCCCCCCCCCCCCCCC5C5C5C5C5C5C5C5C5C5C5C5BBBBBB
+BBBBBBBBBBBBB0B0B0B0B0B0B0B0B0A2A2A2A2A2A2A2A2A2979797979797979797888888888888
+888888888888898989898989898989B4B4B4B4B4B4B4B4B4F2F2F2F2F2F2F2F2F2FEFEFEFEFEFE
+FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C6C6C6C6C6C6
+C6C6C6ECECECECECECECECECECECECECECECECECECEBEBEBEBEBEBEBEBEBEBEBEBEAEAEAEAEAEA
+EAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8
+E8E9E8E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E6E6E6E6E6E6E6E6E6
+E6E6E6E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E5E5E5E5E5E5E5E5E5
+E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5DFE0DFDFE0DFDFE0DF
+BABABABABABABABABA6D6D6D6D6D6D6D6D6D6D6D6D373737373737373737292929292929292929
+272727272727272727252525252525252525252525272727272727272727242424242424242424
+2222222222222222222222222222222222222222222222222222222222222C2C2C2C2C2C2C2C2C
+5656565656565656567777777777777777777D7D7D7D7D7D7D7D7D7B7B7B7B7B7B7B7B7B7B7B7B
+7575757575757575756A6A6A6A6A6A6A6A6A646464646464646464595959595959595959595959
+4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F565656565656565656656565656565656565757575
+7575757575757575757A7A7A7A7A7A7A7A7A7979797979797979797D7D7D7D7D7D7D7D7D818181
+8181818181818F8F8F8F8F8F8F8F8F8F8F8F9D9D9D9D9D9D9D9D9DA6A6A6A6A6A6A6A6A6A2A2A2
+A2A2A2A2A2A29D9D9D9D9D9D9D9D9D9D9D9D929292929292929292838383838383838383777777
+777777777777767676767676767676808080808080808080808080919191919191919191ACACAC
+ACACACACACACCBCBCBCBCBCBCBCBCBD9D9D9D9D9D9D9D9D9D6D6D5D6D6D5D6D6D5D6D6D5C7C7C7
+C7C7C7C7C7C7BCBCBCBCBCBCBCBCBCB3B3B3B3B3B3B3B3B3ADADADADADADADADADADADADADADAD
+ADADADADADADB0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A8A8A8A8A8A8A8A8A8A1A1A1A1A1A1
+A1A1A1A1A1A19D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9F9F9F9F9F9F9F9F9FA5A5A5A5A5A5
+A5A5A5ABABABABABABABABABABABABB2B2B2B2B2B2B2B2B2BCBCBCBCBCBCBCBCBCC8C8C8C8C8C8
+C8C8C8D2D2D2D2D2D2D2D2D2D2D2D2D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D7D7D4D4D4D4D4D4
+D4D4D4CFCFCFCFCFCFCFCFCFC6C6C6C6C6C6C6C6C6C6C6C6BCBCBCBCBCBCBCBCBCB1B1B1B1B1B1
+B1B1B1ACACACACACACACACACABABABABABABABABABA3A3A3A3A3A3A3A3A3A3A3A3A5A5A5A5A5A5
+A5A5A5CCCCCCCCCCCCCCCCCCF9F9F9F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C3C3C3C3C3C3C3C3C3ECECECECECECECECEC
+ECECECECECECECECECEBEBEBEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9
+E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E9E9E9E9E9E9E9E9E9
+E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7
+E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6
+E6E6E6E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5DFE0DFDFE0DFDFE0DFBABABABABABABABABA6D6D6D
+6D6D6D6D6D6D6D6D6D373737373737373737292929292929292929272727272727272727252525
+252525252525252525272727272727272727242424242424242424222222222222222222222222
+2222222222222222222222222222222222222C2C2C2C2C2C2C2C2C565656565656565656777777
+7777777777777D7D7D7D7D7D7D7D7D7B7B7B7B7B7B7B7B7B7B7B7B7575757575757575756A6A6A
+6A6A6A6A6A6A6464646464646464645959595959595959595959594F4F4F4F4F4F4F4F4F4F4F4F
+4F4F4F4F4F4F5656565656565656566565656565656565657575757575757575757575757A7A7A
+7A7A7A7A7A7A7979797979797979797D7D7D7D7D7D7D7D7D8181818181818181818F8F8F8F8F8F
+8F8F8F8F8F8F9D9D9D9D9D9D9D9D9DA6A6A6A6A6A6A6A6A6A2A2A2A2A2A2A2A2A29D9D9D9D9D9D
+9D9D9D9D9D9D929292929292929292838383838383838383777777777777777777767676767676
+767676808080808080808080808080919191919191919191ACACACACACACACACACCBCBCBCBCBCB
+CBCBCBD9D9D9D9D9D9D9D9D9D6D6D5D6D6D5D6D6D5D6D6D5C7C7C7C7C7C7C7C7C7BCBCBCBCBCBC
+BCBCBCB3B3B3B3B3B3B3B3B3ADADADADADADADADADADADADADADADADADADADADADB0B0B0B0B0B0
+B0B0B0B0B0B0B0B0B0B0B0B0A8A8A8A8A8A8A8A8A8A1A1A1A1A1A1A1A1A1A1A1A19D9D9D9D9D9D
+9D9D9D9D9D9D9D9D9D9D9D9D9F9F9F9F9F9F9F9F9FA5A5A5A5A5A5A5A5A5ABABABABABABABABAB
+ABABABB2B2B2B2B2B2B2B2B2BCBCBCBCBCBCBCBCBCC8C8C8C8C8C8C8C8C8D2D2D2D2D2D2D2D2D2
+D2D2D2D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D7D7D4D4D4D4D4D4D4D4D4CFCFCFCFCFCFCFCFCF
+C6C6C6C6C6C6C6C6C6C6C6C6BCBCBCBCBCBCBCBCBCB1B1B1B1B1B1B1B1B1ACACACACACACACACAC
+ABABABABABABABABABA3A3A3A3A3A3A3A3A3A3A3A3A5A5A5A5A5A5A5A5A5CCCCCCCCCCCCCCCCCC
+F9F9F9F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+F9F9F9F9F9F9F9F9F9C3C3C3C3C3C3C3C3C3ECECECECECECECECECEDEDEDEDEDEDEDEDEDECECEC
+ECECECECECECECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9EAEAEA
+EAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E8E8
+E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E8E8E9E8E8E9E8E8E8E8
+E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E6E6E6
+E6E6E6E6E6E6E3E3E3E3E3E3E3E3E3CBCBCBCBCBCBCBCBCB878787878787878787878787444444
+4444444444442D2D2D2D2D2D2D2D2D2929292929292929292929292929292929292929292B2B2B
+2B2B2B2B2B2B282828282828282828252525252525252525242424242424242424242424242424
+2424242424242D2D2D2D2D2D2D2D2D5656565656565656567878787878787878787E7E7E7E7E7E
+7E7E7E7C7C7C7C7C7C7C7C7C7C7C7C7575757575757575756D6D6D6D6D6D6D6D6D636363636363
+6363635B5B5B5B5B5B5B5B5B5B5B5B5E5E5E5E5E5E5E5E5E6767676767676767676F6F6F6F6F6F
+6F6F6F7777777777777777778080808080808080808080808787878787878787878D8D8D8D8D8D
+8D8D8D9191919191919191919292929292929292929696969696969696969696969C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C979797979797979797939393939393939393939393898989898989
+8989897B7B7B7B7B7B7B7B7B7575757575757575757777777777777777777F7F7F7F7F7F7F7F7F
+7F7F7F8E8E8E8E8E8E8E8E8EA8A8A8A8A8A8A8A8A8CBCBCBCBCBCBCBCBCBDFE0DFDFE0DFDFE0DF
+DBDBDBDBDBDBDBDBDBDBDBDBCBCBCBCBCBCBCBCBCBBFBFBFBFBFBFBFBFBFB8B8B8B8B8B8B8B8B8
+B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B5B5B5B5B5B5B5B5B5B8B8B8B8B8B8B8B8B8
+B9B9B9B9B9B9B9B9B9B8B8B8B8B8B8B8B8B8B8B8B8B6B6B6B6B6B6B6B6B6B4B4B4B4B4B4B4B4B4
+B8B8B8B8B8B8B8B8B8BBBBBBBBBBBBBBBBBBC0C0C0C0C0C0C0C0C0C0C0C0C6C6C6C6C6C6C6C6C6
+CFCFCFCFCFCFCFCFCFD6D6D5D6D6D5D6D6D5DBDBDBDBDBDBDBDBDBDBDBDBDDDDDDDDDDDDDDDDDD
+DADADADADADADADADAD6D6D5D6D6D5D6D6D5D1D1D1D1D1D1D1D1D1CBCBCBCBCBCBCBCBCBCBCBCB
+C0C0C0C0C0C0C0C0C0B3B3B3B3B3B3B3B3B3ACACACACACACACACACB0B1B0B0B1B0B0B1B0B7B7B7
+B7B7B7B7B7B7B7B7B7BEBEBEBEBEBEBEBEBEDBDBDBDBDBDBDBDBDBFAFAFAFAFAFAFAFAFAFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F7F7F7F7B4B4B4
+B4B4B4B4B4B4ECECECECECECECECECEDEDEDEDEDEDEDEDEDECECECECECECECECECECECECEBEBEB
+EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAE9E9E9E9E9E9
+E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8
+E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7
+E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E3E3E3E3E3E3
+E3E3E3CBCBCBCBCBCBCBCBCB8787878787878787878787874444444444444444442D2D2D2D2D2D
+2D2D2D2929292929292929292929292929292929292929292B2B2B2B2B2B2B2B2B282828282828
+2828282525252525252525252424242424242424242424242424242424242424242D2D2D2D2D2D
+2D2D2D5656565656565656567878787878787878787E7E7E7E7E7E7E7E7E7C7C7C7C7C7C7C7C7C
+7C7C7C7575757575757575756D6D6D6D6D6D6D6D6D6363636363636363635B5B5B5B5B5B5B5B5B
+5B5B5B5E5E5E5E5E5E5E5E5E6767676767676767676F6F6F6F6F6F6F6F6F777777777777777777
+8080808080808080808080808787878787878787878D8D8D8D8D8D8D8D8D919191919191919191
+9292929292929292929696969696969696969696969C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9797979797979797979393939393939393939393938989898989898989897B7B7B7B7B7B7B7B7B
+7575757575757575757777777777777777777F7F7F7F7F7F7F7F7F7F7F7F8E8E8E8E8E8E8E8E8E
+A8A8A8A8A8A8A8A8A8CBCBCBCBCBCBCBCBCBDFE0DFDFE0DFDFE0DFDBDBDBDBDBDBDBDBDBDBDBDB
+CBCBCBCBCBCBCBCBCBBFBFBFBFBFBFBFBFBFB8B8B8B8B8B8B8B8B8B4B4B4B4B4B4B4B4B4B4B4B4
+B4B4B4B4B4B4B4B4B4B5B5B5B5B5B5B5B5B5B8B8B8B8B8B8B8B8B8B9B9B9B9B9B9B9B9B9B8B8B8
+B8B8B8B8B8B8B8B8B8B6B6B6B6B6B6B6B6B6B4B4B4B4B4B4B4B4B4B8B8B8B8B8B8B8B8B8BBBBBB
+BBBBBBBBBBBBC0C0C0C0C0C0C0C0C0C0C0C0C6C6C6C6C6C6C6C6C6CFCFCFCFCFCFCFCFCFD6D6D5
+D6D6D5D6D6D5DBDBDBDBDBDBDBDBDBDBDBDBDDDDDDDDDDDDDDDDDDDADADADADADADADADAD6D6D5
+D6D6D5D6D6D5D1D1D1D1D1D1D1D1D1CBCBCBCBCBCBCBCBCBCBCBCBC0C0C0C0C0C0C0C0C0B3B3B3
+B3B3B3B3B3B3ACACACACACACACACACB0B1B0B0B1B0B0B1B0B7B7B7B7B7B7B7B7B7B7B7B7BEBEBE
+BEBEBEBEBEBEDBDBDBDBDBDBDBDBDBFAFAFAFAFAFAFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F7F7F7F7B4B4B4B4B4B4B4B4B4ECECECECECEC
+ECECECEDEDEDEDEDEDEDEDEDECECECECECECECECECECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB
+EBEBEBE9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9
+E9E9E9E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8
+E8E8E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7
+E7E7E7E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E3E3E3E3E3E3E3E3E3CBCBCBCBCBCBCBCBCB
+8787878787878787878787874444444444444444442D2D2D2D2D2D2D2D2D292929292929292929
+2929292929292929292929292B2B2B2B2B2B2B2B2B282828282828282828252525252525252525
+2424242424242424242424242424242424242424242D2D2D2D2D2D2D2D2D565656565656565656
+7878787878787878787E7E7E7E7E7E7E7E7E7C7C7C7C7C7C7C7C7C7C7C7C757575757575757575
+6D6D6D6D6D6D6D6D6D6363636363636363635B5B5B5B5B5B5B5B5B5B5B5B5E5E5E5E5E5E5E5E5E
+6767676767676767676F6F6F6F6F6F6F6F6F777777777777777777808080808080808080808080
+8787878787878787878D8D8D8D8D8D8D8D8D919191919191919191929292929292929292969696
+9696969696969696969C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C979797979797979797939393
+9393939393939393938989898989898989897B7B7B7B7B7B7B7B7B757575757575757575777777
+7777777777777F7F7F7F7F7F7F7F7F7F7F7F8E8E8E8E8E8E8E8E8EA8A8A8A8A8A8A8A8A8CBCBCB
+CBCBCBCBCBCBDFE0DFDFE0DFDFE0DFDBDBDBDBDBDBDBDBDBDBDBDBCBCBCBCBCBCBCBCBCBBFBFBF
+BFBFBFBFBFBFB8B8B8B8B8B8B8B8B8B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B5B5B5
+B5B5B5B5B5B5B8B8B8B8B8B8B8B8B8B9B9B9B9B9B9B9B9B9B8B8B8B8B8B8B8B8B8B8B8B8B6B6B6
+B6B6B6B6B6B6B4B4B4B4B4B4B4B4B4B8B8B8B8B8B8B8B8B8BBBBBBBBBBBBBBBBBBC0C0C0C0C0C0
+C0C0C0C0C0C0C6C6C6C6C6C6C6C6C6CFCFCFCFCFCFCFCFCFD6D6D5D6D6D5D6D6D5DBDBDBDBDBDB
+DBDBDBDBDBDBDDDDDDDDDDDDDDDDDDDADADADADADADADADAD6D6D5D6D6D5D6D6D5D1D1D1D1D1D1
+D1D1D1CBCBCBCBCBCBCBCBCBCBCBCBC0C0C0C0C0C0C0C0C0B3B3B3B3B3B3B3B3B3ACACACACACAC
+ACACACB0B1B0B0B1B0B0B1B0B7B7B7B7B7B7B7B7B7B7B7B7BEBEBEBEBEBEBEBEBEDBDBDBDBDBDB
+DBDBDBFAFAFAFAFAFAFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFF7F7F7F7F7F7F7F7F7B4B4B4B4B4B4B4B4B4EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB
+EBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9
+E8E9E8E8E9E8E8E9E8E9E9E9E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8
+E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7
+E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4D6D6D5D6D6D5D6D6D59C9C9C9C9C9C9C9C9C9C9C9C
+4E4E4E4E4E4E4E4E4E3131313131313131312C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C
+2B2B2B2B2B2B2B2B2B282828282828282828272727272727272727272727272727272727252525
+2525252525252525253030303030303030305757575757575757577777777777777777777E7E7E
+7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7878787878787878787171717171717171716A6A6A
+6A6A6A6A6A6A6969696969696969696969697171717171717171717777777777777777777D7D7D
+7D7D7D7D7D7D8585858585858585858E8E8E8E8E8E8E8E8E8E8E8E9696969696969696969C9C9C
+9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9B9B9B9B9B9B9B9B9B979797979797979797979797949494
+949494949494929292929292929292909090909090909090909090909090909090909090868686
+8686868686867B7B7B7B7B7B7B7B7B7878787878787878787A7A7A7A7A7A7A7A7A808080808080
+8080808080808B8B8B8B8B8B8B8B8BA5A5A5A5A5A5A5A5A5C7C7C7C7C7C7C7C7C7DFE0DFDFE0DF
+DFE0DFE0E0E0E0E0E0E0E0E0E0E0E0CECECECECECECECECEC1C1C1C1C1C1C1C1C1BBBBBBBBBBBB
+BBBBBBB8B8B8B8B8B8B8B8B8B8B8B8B9B9B9B9B9B9B9B9B9BDBDBDBDBDBDBDBDBDBFBFBFBFBFBF
+BFBFBFBFBFBFBFBFBFBFBFBFC3C3C3C3C3C3C3C3C3C3C3C3C9C9C9C9C9C9C9C9C9CCCCCCCCCCCC
+CCCCCCD0D0D0D0D0D0D0D0D0D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D4D4D4D4D4D4
+D4D4D4D6D6D6D6D6D6D6D6D6D9D9D9D9D9D9D9D9D9DDDDDDDDDDDDDDDDDDDDDDDDDFDFDFDFDFDF
+DFDFDFDBDBDBDBDBDBDBDBDBD6D6D6D6D6D6D6D6D6D3D3D3D3D3D3D3D3D3CCCCCCCCCCCCCCCCCC
+CCCCCCC0C0C0C0C0C0C0C0C0B4B4B4B4B4B4B4B4B4AEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1
+B9B9B9B9B9B9B9B9B9B9B9B9C8C8C8C8C8C8C8C8C8DFE0DFDFE0DFDFE0DFF9F9F9F9F9F9F9F9F9
+FEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9
+C1C1C1C1C1C1C1C1C1EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEAEAEA
+EAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E9E9E9
+E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E8E8E8
+E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E4E4E4
+E4E4E4E4E4E4D6D6D5D6D6D5D6D6D59C9C9C9C9C9C9C9C9C9C9C9C4E4E4E4E4E4E4E4E4E313131
+3131313131312C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B282828
+282828282828272727272727272727272727272727272727252525252525252525252525303030
+3030303030305757575757575757577777777777777777777E7E7E7E7E7E7E7E7E7E7E7E7E7E7E
+7E7E7E7E7E7E7878787878787878787171717171717171716A6A6A6A6A6A6A6A6A696969696969
+6969696969697171717171717171717777777777777777777D7D7D7D7D7D7D7D7D858585858585
+8585858E8E8E8E8E8E8E8E8E8E8E8E9696969696969696969C9C9C9C9C9C9C9C9C9E9E9E9E9E9E
+9E9E9E9B9B9B9B9B9B9B9B9B979797979797979797979797949494949494949494929292929292
+9292929090909090909090909090909090909090909090908686868686868686867B7B7B7B7B7B
+7B7B7B7878787878787878787A7A7A7A7A7A7A7A7A8080808080808080808080808B8B8B8B8B8B
+8B8B8BA5A5A5A5A5A5A5A5A5C7C7C7C7C7C7C7C7C7DFE0DFDFE0DFDFE0DFE0E0E0E0E0E0E0E0E0
+E0E0E0CECECECECECECECECEC1C1C1C1C1C1C1C1C1BBBBBBBBBBBBBBBBBBB8B8B8B8B8B8B8B8B8
+B8B8B8B9B9B9B9B9B9B9B9B9BDBDBDBDBDBDBDBDBDBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF
+C3C3C3C3C3C3C3C3C3C3C3C3C9C9C9C9C9C9C9C9C9CCCCCCCCCCCCCCCCCCD0D0D0D0D0D0D0D0D0
+D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D4D4D4D4D4D4D4D4D4D6D6D6D6D6D6D6D6D6
+D9D9D9D9D9D9D9D9D9DDDDDDDDDDDDDDDDDDDDDDDDDFDFDFDFDFDFDFDFDFDBDBDBDBDBDBDBDBDB
+D6D6D6D6D6D6D6D6D6D3D3D3D3D3D3D3D3D3CCCCCCCCCCCCCCCCCCCCCCCCC0C0C0C0C0C0C0C0C0
+B4B4B4B4B4B4B4B4B4AEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B9B9B9B9B9B9B9B9B9B9B9B9
+C8C8C8C8C8C8C8C8C8DFE0DFDFE0DFDFE0DFF9F9F9F9F9F9F9F9F9FEFEFEFEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C1C1C1C1C1C1C1C1C1EDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDECECEC
+ECECECECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEAEAEA
+EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8
+E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8
+E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4D9D9D9D9D9D9
+D9D9D9A6A6A6A6A6A6A6A6A6A6A6A65858585858585858583535353535353535352F2F2F2F2F2F
+2F2F2F2D2D2D2D2D2D2D2D2D2D2D2D292929292929292929282828282828282828292929292929
+292929282828282828282828282828282828282828282828303030303030303030545454545454
+5454547575757575757575757F7F7F7F7F7F7F7F7F8181818181818181818181817F7F7F7F7F7F
+7F7F7F7B7B7B7B7B7B7B7B7B7979797979797979797C7C7C7C7C7C7C7C7C7C7C7C808080808080
+8080807E7E7E7E7E7E7E7E7E7D7D7D7D7D7D7D7D7D8282828282828282828A8A8A8A8A8A8A8A8A
+8A8A8A9191919191919191919595959595959595959494949494949494948F8F8F8F8F8F8F8F8F
+8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D909090909090909090959595959595959595
+9696969696969696969696968989898989898989898080808080808080807E7E7E7E7E7E7E7E7E
+7E7E7E7E7E7E7E7E7E8383838383838383838383838D8D8D8D8D8D8D8D8DA4A4A4A4A4A4A4A4A4
+C0C0C0C0C0C0C0C0C0DADADADADADADADADAE4E4E4E4E4E4E4E4E4E4E4E4D6D6D6D6D6D6D6D6D6
+C7C7C7C7C7C7C7C7C7BFBFBFBFBFBFBFBFBFBABABABABABABABABABABABABBBBBBBBBBBBBBBBBB
+C0C0C0C0C0C0C0C0C0C5C5C5C5C5C5C5C5C5C9C9C9C9C9C9C9C9C9CACACACACACACACACACACACA
+CDCDCDCDCDCDCDCDCDD3D3D3D3D3D3D3D3D3D7D7D7D7D7D7D7D7D7D6D6D5D6D6D5D6D6D5D5D5D5
+D5D5D5D5D5D5D5D5D5D6D6D5D6D6D5D6D6D5D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7DCDCDC
+DCDCDCDCDCDCDCDCDCDFDFDFDFDFDFDFDFDFDCDCDCDCDCDCDCDCDCD7D7D7D7D7D7D7D7D7D4D4D4
+D4D4D4D4D4D4CCCCCCCCCCCCCCCCCCCCCCCCC0C0C0C0C0C0C0C0C0B6B6B6B6B6B6B6B6B6B5B5B5
+B5B5B5B5B5B5B8B8B8B8B8B8B8B8B8B6B6B6B6B6B6B6B6B6B6B6B6C5C5C5C5C5C5C5C5C5DBDBDB
+DBDBDBDBDBDBF2F2F2F2F2F2F2F2F2FEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFAFAFAFAFAFAFAFAFAD0D0D0D0D0D0D0D0D0EDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDECECECECECECECECECEBEBEBEBEBEB
+EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA
+EAEAEAE9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8
+E8E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7
+E7E7E7E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4D9D9D9D9D9D9D9D9D9A6A6A6A6A6A6A6A6A6
+A6A6A65858585858585858583535353535353535352F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D
+2D2D2D292929292929292929282828282828282828292929292929292929282828282828282828
+282828282828282828282828303030303030303030545454545454545454757575757575757575
+7F7F7F7F7F7F7F7F7F8181818181818181818181817F7F7F7F7F7F7F7F7F7B7B7B7B7B7B7B7B7B
+7979797979797979797C7C7C7C7C7C7C7C7C7C7C7C8080808080808080807E7E7E7E7E7E7E7E7E
+7D7D7D7D7D7D7D7D7D8282828282828282828A8A8A8A8A8A8A8A8A8A8A8A919191919191919191
+9595959595959595959494949494949494948F8F8F8F8F8F8F8F8F8C8C8C8C8C8C8C8C8C8C8C8C
+8D8D8D8D8D8D8D8D8D909090909090909090959595959595959595969696969696969696969696
+8989898989898989898080808080808080807E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E838383
+8383838383838383838D8D8D8D8D8D8D8D8DA4A4A4A4A4A4A4A4A4C0C0C0C0C0C0C0C0C0DADADA
+DADADADADADAE4E4E4E4E4E4E4E4E4E4E4E4D6D6D6D6D6D6D6D6D6C7C7C7C7C7C7C7C7C7BFBFBF
+BFBFBFBFBFBFBABABABABABABABABABABABABBBBBBBBBBBBBBBBBBC0C0C0C0C0C0C0C0C0C5C5C5
+C5C5C5C5C5C5C9C9C9C9C9C9C9C9C9CACACACACACACACACACACACACDCDCDCDCDCDCDCDCDD3D3D3
+D3D3D3D3D3D3D7D7D7D7D7D7D7D7D7D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D5D5D5D6D6D5
+D6D6D5D6D6D5D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7DCDCDCDCDCDCDCDCDCDCDCDCDFDFDF
+DFDFDFDFDFDFDCDCDCDCDCDCDCDCDCD7D7D7D7D7D7D7D7D7D4D4D4D4D4D4D4D4D4CCCCCCCCCCCC
+CCCCCCCCCCCCC0C0C0C0C0C0C0C0C0B6B6B6B6B6B6B6B6B6B5B5B5B5B5B5B5B5B5B8B8B8B8B8B8
+B8B8B8B6B6B6B6B6B6B6B6B6B6B6B6C5C5C5C5C5C5C5C5C5DBDBDBDBDBDBDBDBDBF2F2F2F2F2F2
+F2F2F2FEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFA
+FAFAFAD0D0D0D0D0D0D0D0D0EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDECECECECECECECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB
+EBEBEBEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9
+E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8
+E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6
+E4E4E4E4E4E4E4E4E4D9D9D9D9D9D9D9D9D9A6A6A6A6A6A6A6A6A6A6A6A6585858585858585858
+3535353535353535352F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2D2D2D292929292929292929
+282828282828282828292929292929292929282828282828282828282828282828282828282828
+3030303030303030305454545454545454547575757575757575757F7F7F7F7F7F7F7F7F818181
+8181818181818181817F7F7F7F7F7F7F7F7F7B7B7B7B7B7B7B7B7B7979797979797979797C7C7C
+7C7C7C7C7C7C7C7C7C8080808080808080807E7E7E7E7E7E7E7E7E7D7D7D7D7D7D7D7D7D828282
+8282828282828A8A8A8A8A8A8A8A8A8A8A8A919191919191919191959595959595959595949494
+9494949494948F8F8F8F8F8F8F8F8F8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D909090
+909090909090959595959595959595969696969696969696969696898989898989898989808080
+8080808080807E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8383838383838383838383838D8D8D
+8D8D8D8D8D8DA4A4A4A4A4A4A4A4A4C0C0C0C0C0C0C0C0C0DADADADADADADADADAE4E4E4E4E4E4
+E4E4E4E4E4E4D6D6D6D6D6D6D6D6D6C7C7C7C7C7C7C7C7C7BFBFBFBFBFBFBFBFBFBABABABABABA
+BABABABABABABBBBBBBBBBBBBBBBBBC0C0C0C0C0C0C0C0C0C5C5C5C5C5C5C5C5C5C9C9C9C9C9C9
+C9C9C9CACACACACACACACACACACACACDCDCDCDCDCDCDCDCDD3D3D3D3D3D3D3D3D3D7D7D7D7D7D7
+D7D7D7D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D5D5D5D6D6D5D6D6D5D6D6D5D6D6D6D6D6D6
+D6D6D6D7D7D7D7D7D7D7D7D7DCDCDCDCDCDCDCDCDCDCDCDCDFDFDFDFDFDFDFDFDFDCDCDCDCDCDC
+DCDCDCD7D7D7D7D7D7D7D7D7D4D4D4D4D4D4D4D4D4CCCCCCCCCCCCCCCCCCCCCCCCC0C0C0C0C0C0
+C0C0C0B6B6B6B6B6B6B6B6B6B5B5B5B5B5B5B5B5B5B8B8B8B8B8B8B8B8B8B6B6B6B6B6B6B6B6B6
+B6B6B6C5C5C5C5C5C5C5C5C5DBDBDBDBDBDBDBDBDBF2F2F2F2F2F2F2F2F2FEFEFEFEFEFEFEFEFE
+FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFAD0D0D0D0D0D0D0D0D0
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA
+EAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E9E8
+E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E7E7E7
+E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4D8D8D8
+D8D8D8D8D8D8ACACACACACACACACACACACAC6565656565656565653A3A3A3A3A3A3A3A3A2F2F2F
+2F2F2F2F2F2F2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B282828282828282828282828
+282828282828292929292929292929282828282828282828282828303030303030303030545454
+545454545454767676767676767676808080808080808080828282828282828282828282848484
+8484848484848686868686868686868A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8A8A8A
+8A8A8A8A8A8A8686868686868686868080808080808080807E7E7E7E7E7E7E7E7E808080808080
+808080808080848484848484848484878787878787878787888888888888888888888888888888
+8888888C8C8C8C8C8C8C8C8C8C8C8C9393939393939393939B9B9B9B9B9B9B9B9B9E9E9E9E9E9E
+9E9E9E9999999999999999999999998D8D8D8D8D8D8D8D8D858585858585858585838383838383
+8383838181818181818181818585858585858585858585858F8F8F8F8F8F8F8F8FA3A3A3A3A3A3
+A3A3A3C3C3C3C3C3C3C3C3C3E0E0E0E0E0E0E0E0E0E9E9E9E9E9E9E9E9E9E9E9E9DCDCDCDCDCDC
+DCDCDCCBCBCBCBCBCBCBCBCBC3C3C3C3C3C3C3C3C3BEBEBEBEBEBEBEBEBEBEBEBEBBBBBBBBBBBB
+BBBBBBBCBCBCBCBCBCBCBCBCC3C3C3C3C3C3C3C3C3CECECECECECECECECED3D3D3D3D3D3D3D3D3
+D3D3D3D4D4D4D4D4D4D4D4D4D6D6D6D6D6D6D6D6D6D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8
+D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADADADADCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDD
+E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1DEDEDEDEDEDEDEDEDED9D9D9D9D9D9D9D9D9
+D6D6D5D6D6D5D6D6D5CDCDCDCDCDCDCDCDCDCDCDCDC1C1C1C1C1C1C1C1C1B6B6B6B6B6B6B6B6B6
+B9B9B9B9B9B9B9B9B9C1C1C1C1C1C1C1C1C1B3B3B3B3B3B3B3B3B3B3B3B3BEBEBEBEBEBEBEBEBE
+D4D4D4D4D4D4D4D4D4EEEEEEEEEEEEEEEEEEFDFDFDFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9CACACACACACACACACAEDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEBEBEBEBEBEBEBEBEBEBEBEB
+EBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9
+E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E8E8E8
+E8E8E8E8E8E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E7E7E7E7E7E7E7E7E7E7E7E7E6E6E6
+E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4D8D8D8D8D8D8D8D8D8ACACACACACAC
+ACACACACACAC6565656565656565653A3A3A3A3A3A3A3A3A2F2F2F2F2F2F2F2F2F2C2C2C2C2C2C
+2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B282828282828282828282828282828282828292929292929
+292929282828282828282828282828303030303030303030545454545454545454767676767676
+767676808080808080808080828282828282828282828282848484848484848484868686868686
+8686868A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8A8A8A8A8A8A8A8A8A868686868686
+8686868080808080808080807E7E7E7E7E7E7E7E7E808080808080808080808080848484848484
+8484848787878787878787878888888888888888888888888888888888888C8C8C8C8C8C8C8C8C
+8C8C8C9393939393939393939B9B9B9B9B9B9B9B9B9E9E9E9E9E9E9E9E9E999999999999999999
+9999998D8D8D8D8D8D8D8D8D858585858585858585838383838383838383818181818181818181
+8585858585858585858585858F8F8F8F8F8F8F8F8FA3A3A3A3A3A3A3A3A3C3C3C3C3C3C3C3C3C3
+E0E0E0E0E0E0E0E0E0E9E9E9E9E9E9E9E9E9E9E9E9DCDCDCDCDCDCDCDCDCCBCBCBCBCBCBCBCBCB
+C3C3C3C3C3C3C3C3C3BEBEBEBEBEBEBEBEBEBEBEBEBBBBBBBBBBBBBBBBBBBCBCBCBCBCBCBCBCBC
+C3C3C3C3C3C3C3C3C3CECECECECECECECECED3D3D3D3D3D3D3D3D3D3D3D3D4D4D4D4D4D4D4D4D4
+D6D6D6D6D6D6D6D6D6D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9
+DADADADADADADADADADCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDE0E0E0E0E0E0E0E0E0E0E0E0
+E1E1E1E1E1E1E1E1E1DEDEDEDEDEDEDEDEDED9D9D9D9D9D9D9D9D9D6D6D5D6D6D5D6D6D5CDCDCD
+CDCDCDCDCDCDCDCDCDC1C1C1C1C1C1C1C1C1B6B6B6B6B6B6B6B6B6B9B9B9B9B9B9B9B9B9C1C1C1
+C1C1C1C1C1C1B3B3B3B3B3B3B3B3B3B3B3B3BEBEBEBEBEBEBEBEBED4D4D4D4D4D4D4D4D4EEEEEE
+EEEEEEEEEEEEFDFDFDFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9
+F9F9F9F9F9F9CACACACACACACACACAEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEAEAEAEAEAEA
+EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9
+E9E9E9E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E8E8E9E8
+E8E9E8E8E9E8E8E9E8E8E9E8E7E7E7E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E5E5E5E5E5E5
+E5E5E5E4E4E4E4E4E4E4E4E4D8D8D8D8D8D8D8D8D8ACACACACACACACACACACACAC656565656565
+6565653A3A3A3A3A3A3A3A3A2F2F2F2F2F2F2F2F2F2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B
+2B2B2B282828282828282828282828282828282828292929292929292929282828282828282828
+282828303030303030303030545454545454545454767676767676767676808080808080808080
+8282828282828282828282828484848484848484848686868686868686868A8A8A8A8A8A8A8A8A
+8B8B8B8B8B8B8B8B8B8B8B8B8A8A8A8A8A8A8A8A8A868686868686868686808080808080808080
+7E7E7E7E7E7E7E7E7E808080808080808080808080848484848484848484878787878787878787
+8888888888888888888888888888888888888C8C8C8C8C8C8C8C8C8C8C8C939393939393939393
+9B9B9B9B9B9B9B9B9B9E9E9E9E9E9E9E9E9E9999999999999999999999998D8D8D8D8D8D8D8D8D
+858585858585858585838383838383838383818181818181818181858585858585858585858585
+8F8F8F8F8F8F8F8F8FA3A3A3A3A3A3A3A3A3C3C3C3C3C3C3C3C3C3E0E0E0E0E0E0E0E0E0E9E9E9
+E9E9E9E9E9E9E9E9E9DCDCDCDCDCDCDCDCDCCBCBCBCBCBCBCBCBCBC3C3C3C3C3C3C3C3C3BEBEBE
+BEBEBEBEBEBEBEBEBEBBBBBBBBBBBBBBBBBBBCBCBCBCBCBCBCBCBCC3C3C3C3C3C3C3C3C3CECECE
+CECECECECECED3D3D3D3D3D3D3D3D3D3D3D3D4D4D4D4D4D4D4D4D4D6D6D6D6D6D6D6D6D6D9D9D9
+D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADADADADCDCDC
+DCDCDCDCDCDCDDDDDDDDDDDDDDDDDDE0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1DEDEDE
+DEDEDEDEDEDED9D9D9D9D9D9D9D9D9D6D6D5D6D6D5D6D6D5CDCDCDCDCDCDCDCDCDCDCDCDC1C1C1
+C1C1C1C1C1C1B6B6B6B6B6B6B6B6B6B9B9B9B9B9B9B9B9B9C1C1C1C1C1C1C1C1C1B3B3B3B3B3B3
+B3B3B3B3B3B3BEBEBEBEBEBEBEBEBED4D4D4D4D4D4D4D4D4EEEEEEEEEEEEEEEEEEFDFDFDFDFDFD
+FDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9CACACACACACA
+CACACAEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEB
+EBEBEBEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE8E9E8E8E9E8E8E9E8
+E8E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8
+E8E8E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E2E2E2E2E2E2E2E2E2
+DBDBDBDBDBDBDBDBDBC1C1C1C1C1C1C1C1C1C1C1C1828282828282828282494949494949494949
+3030303030303030302B2B2B2B2B2B2B2B2B2B2B2B282828282828282828282828282828282828
+2828282828282828282929292929292929292929292929292929292929292F2F2F2F2F2F2F2F2F
+525252525252525252767676767676767676818181818181818181848484848484848484848484
+8989898989898989898E8E8E8E8E8E8E8E8E939393939393939393959595959595959595959595
+9393939393939393939191919191919191918F8F8F8F8F8F8F8F8F8A8A8A8A8A8A8A8A8A8B8B8B
+8B8B8B8B8B8B8B8B8B8F8F8F8F8F8F8F8F8F929292929292929292959595959595959595989898
+9898989898989D9D9D9D9D9D9D9D9D9D9D9DA2A2A2A2A2A2A2A2A2A4A4A4A4A4A4A4A4A4A2A2A2
+A2A2A2A2A2A29C9C9C9C9C9C9C9C9C9C9C9C9090909090909090908A8A8A8A8A8A8A8A8A858585
+8585858585858282828282828282828686868686868686868686868F8F8F8F8F8F8F8F8FA1A1A1
+A1A1A1A1A1A1C2C2C2C2C2C2C2C2C2E3E3E3E3E3E3E3E3E3EDEDEDEDEDEDEDEDEDEDEDEDDFDFDF
+DFDFDFDFDFDFCACACACACACACACACAC3C3C3C3C3C3C3C3C3BFBFBFBFBFBFBFBFBFBFBFBFBFBFBF
+BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFC2C2C2C2C2C2C2C2C2CCCCCCCCCCCCCCCCCCD7D7D7D7D7D7
+D7D7D7D7D7D7DDDDDDDDDDDDDDDDDDDEDEDEDEDEDEDEDEDEDFE0DFDFE0DFDFE0DFE0E0E0E0E0E0
+E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E4E4E4E4E4E4E4E4E4E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8
+E8E8E8E6E6E6E6E6E6E6E6E6E6E6E6E3E3E3E3E3E3E3E3E3DDDDDDDDDDDDDDDDDDD9D9D9D9D9D9
+D9D9D9D5D5D5D5D5D5D5D5D5CCCCCCCCCCCCCCCCCCCCCCCCC0C0C0C0C0C0C0C0C0B5B5B5B5B5B5
+B5B5B5BBBBBBBBBBBBBBBBBBCBCBCBCBCBCBCBCBCBB7B7B7B7B7B7B7B7B7B7B7B7B2B2B2B2B2B2
+B2B2B2CACACACACACACACACAECECECECECECECECECFDFDFDFDFDFDFDFDFDFDFDFDFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9BDBDBDBDBDBDBDBDBDEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEBEBEBEBEBEBEBEBEB
+EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB
+EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8
+E8E8E8E8E8E8E8E8E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E8E8E8
+E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E2E2E2E2E2E2E2E2E2DBDBDBDBDBDBDBDBDBC1C1C1
+C1C1C1C1C1C1C1C1C18282828282828282824949494949494949493030303030303030302B2B2B
+2B2B2B2B2B2B2B2B2B282828282828282828282828282828282828282828282828282828292929
+2929292929292929292929292929292929292F2F2F2F2F2F2F2F2F525252525252525252767676
+7676767676768181818181818181818484848484848484848484848989898989898989898E8E8E
+8E8E8E8E8E8E939393939393939393959595959595959595959595939393939393939393919191
+9191919191918F8F8F8F8F8F8F8F8F8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8F8F8F
+8F8F8F8F8F8F9292929292929292929595959595959595959898989898989898989D9D9D9D9D9D
+9D9D9D9D9D9DA2A2A2A2A2A2A2A2A2A4A4A4A4A4A4A4A4A4A2A2A2A2A2A2A2A2A29C9C9C9C9C9C
+9C9C9C9C9C9C9090909090909090908A8A8A8A8A8A8A8A8A858585858585858585828282828282
+8282828686868686868686868686868F8F8F8F8F8F8F8F8FA1A1A1A1A1A1A1A1A1C2C2C2C2C2C2
+C2C2C2E3E3E3E3E3E3E3E3E3EDEDEDEDEDEDEDEDEDEDEDEDDFDFDFDFDFDFDFDFDFCACACACACACA
+CACACAC3C3C3C3C3C3C3C3C3BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF
+BFBFBFC2C2C2C2C2C2C2C2C2CCCCCCCCCCCCCCCCCCD7D7D7D7D7D7D7D7D7D7D7D7DDDDDDDDDDDD
+DDDDDDDEDEDEDEDEDEDEDEDEDFE0DFDFE0DFDFE0DFE0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1
+E1E1E1E4E4E4E4E4E4E4E4E4E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E6E6E6E6E6E6E6E6E6
+E6E6E6E3E3E3E3E3E3E3E3E3DDDDDDDDDDDDDDDDDDD9D9D9D9D9D9D9D9D9D5D5D5D5D5D5D5D5D5
+CCCCCCCCCCCCCCCCCCCCCCCCC0C0C0C0C0C0C0C0C0B5B5B5B5B5B5B5B5B5BBBBBBBBBBBBBBBBBB
+CBCBCBCBCBCBCBCBCBB7B7B7B7B7B7B7B7B7B7B7B7B2B2B2B2B2B2B2B2B2CACACACACACACACACA
+ECECECECECECECECECFDFDFDFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+F9F9F9F9F9F9F9F9F9BDBDBDBDBDBDBDBDBDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEE
+EEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDECECECECECECECECECEBEBEBEBEBEBEBEBEBEBEBEB
+EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECEBEBEBEBEBEBEBEBEBEBEBEB
+EBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8
+E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E7E7E7
+E7E7E7E7E7E7E4E4E4E4E4E4E4E4E4DFE0DFDFE0DFDFE0DFD6D6D5D6D6D5D6D6D5D6D6D5A6A6A6
+A6A6A6A6A6A66363636363636363633939393939393939392B2B2B2B2B2B2B2B2B2B2B2B272727
+2727272727272828282828282828282929292929292929292C2C2C2C2C2C2C2C2C2D2D2D2D2D2D
+2D2D2D2D2D2D313131313131313131525252525252525252777777777777777777808080808080
+8080808484848484848484848484848A8A8A8A8A8A8A8A8A919191919191919191989898989898
+9898989B9B9B9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F9F9F9FA3A3A3A3A3A3A3A3A3A7A7A7A7A7A7
+A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8AAAAAAAAAAAAAAAAAAAAAAAAABABABABABAB
+ABABABA9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A2A2A2A2A2A2A2A2A2A2A2A2999999999999
+9999998E8E8E8E8E8E8E8E8E868686868686868686848484848484848484878787878787878787
+8787878D8D8D8D8D8D8D8D8D9E9E9E9E9E9E9E9E9EBFBFBFBFBFBFBFBFBFE3E3E3E3E3E3E3E3E3
+EFEFEFEFEFEFEFEFEFEFEFEFE3E3E3E3E3E3E3E3E3CFCFCFCFCFCFCFCFCFC3C3C3C3C3C3C3C3C3
+C0C0C0C0C0C0C0C0C0C0C0C0C4C4C4C4C4C4C4C4C4C7C7C7C7C7C7C7C7C7C9C9C9C9C9C9C9C9C9
+D0D0D0D0D0D0D0D0D0DADADADADADADADADADADADAE2E2E2E2E2E2E2E2E2E4E4E4E4E4E4E4E4E4
+E7E7E7E7E7E7E7E7E7E8E9E8E8E9E8E8E9E8EAEAEAEAEAEAEAEAEAEAEAEAF0F0F0F0F0F0F0F0F0
+F2F2F2F2F2F2F2F2F2F0F0F0F0F0F0F0F0F0EDEDEDEDEDEDEDEDEDEDEDEDE8E9E8E8E9E8E8E9E8
+E0E0E0E0E0E0E0E0E0D9D9D9D9D9D9D9D9D9D0D0D0D0D0D0D0D0D0CACACACACACACACACACACACA
+BFBFBFBFBFBFBFBFBFB5B5B5B5B5B5B5B5B5BDBDBDBDBDBDBDBDBDD2D2D2D2D2D2D2D2D2B9B9B9
+B9B9B9B9B9B9B9B9B9AEAEAEAEAEAEAEAEAEC6C6C6C6C6C6C6C6C6E8E8E8E8E8E8E8E8E8FDFDFD
+FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C7C7C7
+C7C7C7C7C7C7EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEDEDED
+EDEDEDEDEDEDECECECECECECECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB
+EBEBEBEBEBEBECECECECECECECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE9E9E9E9E9E9
+E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8
+E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E4E4E4E4E4E4
+E4E4E4DFE0DFDFE0DFDFE0DFD6D6D5D6D6D5D6D6D5D6D6D5A6A6A6A6A6A6A6A6A6636363636363
+6363633939393939393939392B2B2B2B2B2B2B2B2B2B2B2B272727272727272727282828282828
+2828282929292929292929292C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D313131313131
+313131525252525252525252777777777777777777808080808080808080848484848484848484
+8484848A8A8A8A8A8A8A8A8A9191919191919191919898989898989898989B9B9B9B9B9B9B9B9B
+9B9B9B9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9F9F9F9F9F9F9F9F9F9F9F9FA3A3A3A3A3A3A3A3A3A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7
+A8A8A8A8A8A8A8A8A8AAAAAAAAAAAAAAAAAAAAAAAAABABABABABABABABABA9A9A9A9A9A9A9A9A9
+A6A6A6A6A6A6A6A6A6A2A2A2A2A2A2A2A2A2A2A2A29999999999999999998E8E8E8E8E8E8E8E8E
+8686868686868686868484848484848484848787878787878787878787878D8D8D8D8D8D8D8D8D
+9E9E9E9E9E9E9E9E9EBFBFBFBFBFBFBFBFBFE3E3E3E3E3E3E3E3E3EFEFEFEFEFEFEFEFEFEFEFEF
+E3E3E3E3E3E3E3E3E3CFCFCFCFCFCFCFCFCFC3C3C3C3C3C3C3C3C3C0C0C0C0C0C0C0C0C0C0C0C0
+C4C4C4C4C4C4C4C4C4C7C7C7C7C7C7C7C7C7C9C9C9C9C9C9C9C9C9D0D0D0D0D0D0D0D0D0DADADA
+DADADADADADADADADAE2E2E2E2E2E2E2E2E2E4E4E4E4E4E4E4E4E4E7E7E7E7E7E7E7E7E7E8E9E8
+E8E9E8E8E9E8EAEAEAEAEAEAEAEAEAEAEAEAF0F0F0F0F0F0F0F0F0F2F2F2F2F2F2F2F2F2F0F0F0
+F0F0F0F0F0F0EDEDEDEDEDEDEDEDEDEDEDEDE8E9E8E8E9E8E8E9E8E0E0E0E0E0E0E0E0E0D9D9D9
+D9D9D9D9D9D9D0D0D0D0D0D0D0D0D0CACACACACACACACACACACACABFBFBFBFBFBFBFBFBFB5B5B5
+B5B5B5B5B5B5BDBDBDBDBDBDBDBDBDD2D2D2D2D2D2D2D2D2B9B9B9B9B9B9B9B9B9B9B9B9AEAEAE
+AEAEAEAEAEAEC6C6C6C6C6C6C6C6C6E8E8E8E8E8E8E8E8E8FDFDFDFDFDFDFDFDFDFDFDFDFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C7C7C7C7C7C7C7C7C7EDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDECECECECECEC
+ECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECEC
+ECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8
+E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8
+E8E8E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E4E4E4E4E4E4E4E4E4DFE0DFDFE0DFDFE0DF
+D6D6D5D6D6D5D6D6D5D6D6D5A6A6A6A6A6A6A6A6A6636363636363636363393939393939393939
+2B2B2B2B2B2B2B2B2B2B2B2B272727272727272727282828282828282828292929292929292929
+2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D313131313131313131525252525252525252
+7777777777777777778080808080808080808484848484848484848484848A8A8A8A8A8A8A8A8A
+9191919191919191919898989898989898989B9B9B9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F9F9F9F
+A3A3A3A3A3A3A3A3A3A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8AAAAAA
+AAAAAAAAAAAAAAAAAAABABABABABABABABABA9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A2A2A2
+A2A2A2A2A2A2A2A2A29999999999999999998E8E8E8E8E8E8E8E8E868686868686868686848484
+8484848484848787878787878787878787878D8D8D8D8D8D8D8D8D9E9E9E9E9E9E9E9E9EBFBFBF
+BFBFBFBFBFBFE3E3E3E3E3E3E3E3E3EFEFEFEFEFEFEFEFEFEFEFEFE3E3E3E3E3E3E3E3E3CFCFCF
+CFCFCFCFCFCFC3C3C3C3C3C3C3C3C3C0C0C0C0C0C0C0C0C0C0C0C0C4C4C4C4C4C4C4C4C4C7C7C7
+C7C7C7C7C7C7C9C9C9C9C9C9C9C9C9D0D0D0D0D0D0D0D0D0DADADADADADADADADADADADAE2E2E2
+E2E2E2E2E2E2E4E4E4E4E4E4E4E4E4E7E7E7E7E7E7E7E7E7E8E9E8E8E9E8E8E9E8EAEAEAEAEAEA
+EAEAEAEAEAEAF0F0F0F0F0F0F0F0F0F2F2F2F2F2F2F2F2F2F0F0F0F0F0F0F0F0F0EDEDEDEDEDED
+EDEDEDEDEDEDE8E9E8E8E9E8E8E9E8E0E0E0E0E0E0E0E0E0D9D9D9D9D9D9D9D9D9D0D0D0D0D0D0
+D0D0D0CACACACACACACACACACACACABFBFBFBFBFBFBFBFBFB5B5B5B5B5B5B5B5B5BDBDBDBDBDBD
+BDBDBDD2D2D2D2D2D2D2D2D2B9B9B9B9B9B9B9B9B9B9B9B9AEAEAEAEAEAEAEAEAEC6C6C6C6C6C6
+C6C6C6E8E8E8E8E8E8E8E8E8FDFDFDFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFF9F9F9F9F9F9F9F9F9C7C7C7C7C7C7C7C7C7EDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEE
+EFEFEFEFEFEFEFEFEFEFEFEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDED
+ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC
+ECECECECECECECECECEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9
+E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8
+E7E7E7E7E7E7E7E7E7E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4DFDFDFDFDFDFDFDFDFDFDFDF
+C2C2C2C2C2C2C2C2C28383838383838383834646464646464646462D2D2D2D2D2D2D2D2D2D2D2D
+2727272727272727272828282828282828282B2B2B2B2B2B2B2B2B303030303030303030343434
+3434343434343434343B3B3B3B3B3B3B3B3B5A5A5A5A5A5A5A5A5A797979797979797979818181
+8181818181818484848484848484848484848B8B8B8B8B8B8B8B8B9393939393939393939A9A9A
+9A9A9A9A9A9A9D9D9D9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9EA1A1A1A1A1A1A1A1A1A5A5A5
+A5A5A5A5A5A5A7A7A7A7A7A7A7A7A7A9A9A9A9A9A9A9A9A9A9A9A9AEAEAEAEAEAEAEAEAEB0B1B0
+B0B1B0B0B1B0AFAFAFAFAFAFAFAFAFB0B0B0B0B0B0B0B0B0B1B1B1B1B1B1B1B1B1B1B1B1B0B1B0
+B0B1B0B0B1B0ADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADA0A0A0
+A0A0A0A0A0A08F8F8F8F8F8F8F8F8F868686868686868686868686868686868686878787878787
+8787878787878B8B8B8B8B8B8B8B8B9E9E9E9E9E9E9E9E9EC2C2C2C2C2C2C2C2C2E3E3E3E3E3E3
+E3E3E3EDEDEDEDEDEDEDEDEDEDEDEDE4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4C5C5C5C5C5C5
+C5C5C5BFBFBFBFBFBFBFBFBFBFBFBFC5C5C5C5C5C5C5C5C5CACACACACACACACACACDCDCDCDCDCD
+CDCDCDD4D4D4D4D4D4D4D4D4DDDDDDDDDDDDDDDDDDDDDDDDE6E6E6E6E6E6E6E6E6EAEAEAEAEAEA
+EAEAEAEDEDEDEDEDEDEDEDEDF1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F6F6F6F6F6F6
+F6F6F6F9F9F9F9F9F9F9F9F9F7F7F7F7F7F7F7F7F7F4F4F4F4F4F4F4F4F4F4F4F4EDEDEDEDEDED
+EDEDEDE5E5E5E5E5E5E5E5E5DBDBDBDBDBDBDBDBDBD0D0D0D0D0D0D0D0D0C7C7C7C7C7C7C7C7C7
+C7C7C7BEBEBEBEBEBEBEBEBEB5B5B5B5B5B5B5B5B5BDBDBDBDBDBDBDBDBDCECECECECECECECECE
+B3B3B3B3B3B3B3B3B3B3B3B3B0B1B0B0B1B0B0B1B0C6C6C6C6C6C6C6C6C6E4E4E4E4E4E4E4E4E4
+FDFDFDFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFB
+D7D7D7D7D7D7D7D7D7EDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEF
+EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDECECECECECECECECECECECEC
+ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEAEAEA
+EAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E9E8
+E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E5E5E5
+E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4DFDFDFDFDFDFDFDFDFDFDFDFC2C2C2C2C2C2C2C2C2838383
+8383838383834646464646464646462D2D2D2D2D2D2D2D2D2D2D2D272727272727272727282828
+2828282828282B2B2B2B2B2B2B2B2B3030303030303030303434343434343434343434343B3B3B
+3B3B3B3B3B3B5A5A5A5A5A5A5A5A5A797979797979797979818181818181818181848484848484
+8484848484848B8B8B8B8B8B8B8B8B9393939393939393939A9A9A9A9A9A9A9A9A9D9D9D9D9D9D
+9D9D9D9D9D9D9E9E9E9E9E9E9E9E9EA1A1A1A1A1A1A1A1A1A5A5A5A5A5A5A5A5A5A7A7A7A7A7A7
+A7A7A7A9A9A9A9A9A9A9A9A9A9A9A9AEAEAEAEAEAEAEAEAEB0B1B0B0B1B0B0B1B0AFAFAFAFAFAF
+AFAFAFB0B0B0B0B0B0B0B0B0B1B1B1B1B1B1B1B1B1B1B1B1B0B1B0B0B1B0B0B1B0ADADADADADAD
+ADADADADADADADADADADADADADADADADADADADADADADADADA0A0A0A0A0A0A0A0A08F8F8F8F8F8F
+8F8F8F8686868686868686868686868686868686868787878787878787878787878B8B8B8B8B8B
+8B8B8B9E9E9E9E9E9E9E9E9EC2C2C2C2C2C2C2C2C2E3E3E3E3E3E3E3E3E3EDEDEDEDEDEDEDEDED
+EDEDEDE4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4C5C5C5C5C5C5C5C5C5BFBFBFBFBFBFBFBFBF
+BFBFBFC5C5C5C5C5C5C5C5C5CACACACACACACACACACDCDCDCDCDCDCDCDCDD4D4D4D4D4D4D4D4D4
+DDDDDDDDDDDDDDDDDDDDDDDDE6E6E6E6E6E6E6E6E6EAEAEAEAEAEAEAEAEAEDEDEDEDEDEDEDEDED
+F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F6F6F6F6F6F6F6F6F6F9F9F9F9F9F9F9F9F9
+F7F7F7F7F7F7F7F7F7F4F4F4F4F4F4F4F4F4F4F4F4EDEDEDEDEDEDEDEDEDE5E5E5E5E5E5E5E5E5
+DBDBDBDBDBDBDBDBDBD0D0D0D0D0D0D0D0D0C7C7C7C7C7C7C7C7C7C7C7C7BEBEBEBEBEBEBEBEBE
+B5B5B5B5B5B5B5B5B5BDBDBDBDBDBDBDBDBDCECECECECECECECECEB3B3B3B3B3B3B3B3B3B3B3B3
+B0B1B0B0B1B0B0B1B0C6C6C6C6C6C6C6C6C6E4E4E4E4E4E4E4E4E4FDFDFDFDFDFDFDFDFDFDFDFD
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBD7D7D7D7D7D7D7D7D7EFEFEF
+EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0EFEFEFEFEFEFEFEFEFEEEEEE
+EEEEEEEEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEEEEEEEEEEEEEEEEEEECECECECECECECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB
+EBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEA
+EAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E7E7E7E7E7E7E7E7E7E5E5E5E5E5E5
+E5E5E5E3E3E3E3E3E3E3E3E3E3E3E3D5D5D5D5D5D5D5D5D5A8A8A8A8A8A8A8A8A85F605F5F605F
+5F605F3434343434343434343434342828282828282828282828282828282828282F2F2F2F2F2F
+2F2F2F3B3B3B3B3B3B3B3B3B4444444444444444444444444B4B4B4B4B4B4B4B4B616161616161
+6161617B7B7B7B7B7B7B7B7B8181818181818181818484848484848484848484848A8A8A8A8A8A
+8A8A8A9090909090909090909A9A9A9A9A9A9A9A9A9F9F9F9F9F9F9F9F9F9F9F9FA1A1A1A1A1A1
+A1A1A1A4A4A4A4A4A4A4A4A4A9A9A9A9A9A9A9A9A9ADADADADADADADADADB0B0B0B0B0B0B0B0B0
+B0B0B0B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B1B1B1B1B1B1B1B1B1B3B3B3B3B3B3B3B3B3
+B6B6B6B6B6B6B6B6B6B6B6B6B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B9B9B9B9B9B9B9B9B9
+B8B8B8B8B8B8B8B8B8B8B8B8A5A5A5A5A5A5A5A5A5909090909090909090898989898989898989
+8888888888888888888888888888888888888888888A8A8A8A8A8A8A8A8A9E9E9E9E9E9E9E9E9E
+BFBFBFBFBFBFBFBFBFDFDFDFDFDFDFDFDFDFE7E7E7E7E7E7E7E7E7E7E7E7E2E2E2E2E2E2E2E2E2
+D7D7D7D7D7D7D7D7D7C9C9C9C9C9C9C9C9C9BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF
+C2C2C2C2C2C2C2C2C2C6C6C6C6C6C6C6C6C6D6D6D6D6D6D6D6D6D6E6E6E6E6E6E6E6E6E6E6E6E6
+EEEEEEEEEEEEEEEEEEF2F2F2F2F2F2F2F2F2F5F5F5F5F5F5F5F5F5F8F8F8F8F8F8F8F8F8F9F9F9
+F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF9F9F9
+F9F9F9F9F9F9F9F9F9F0F0F0F0F0F0F0F0F0E8E8E8E8E8E8E8E8E8DEDEDEDEDEDEDEDEDED3D3D3
+D3D3D3D3D3D3C8C8C8C8C8C8C8C8C8C8C8C8BDBDBDBDBDBDBDBDBDB5B5B5B5B5B5B5B5B5BABABA
+BABABABABABAC2C2C2C2C2C2C2C2C2AAAAAAAAAAAAAAAAAAAAAAAAB7B7B7B7B7B7B7B7B7C6C6C6
+C6C6C6C6C6C6E1E1E1E1E1E1E1E1E1FCFCFCFCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9CACACACACACACACACAEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF
+EFEFEFF0F0F0F0F0F0F0F0F0F0F0F0EFEFEFEFEFEFEFEFEFEEEEEEEEEEEEEEEEEEEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEE
+EEEEEEECECECECECECECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE9E9E9E9E9E9
+E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9
+E9E9E9E8E9E8E8E9E8E8E9E8E7E7E7E7E7E7E7E7E7E5E5E5E5E5E5E5E5E5E3E3E3E3E3E3E3E3E3
+E3E3E3D5D5D5D5D5D5D5D5D5A8A8A8A8A8A8A8A8A85F605F5F605F5F605F343434343434343434
+3434342828282828282828282828282828282828282F2F2F2F2F2F2F2F2F3B3B3B3B3B3B3B3B3B
+4444444444444444444444444B4B4B4B4B4B4B4B4B6161616161616161617B7B7B7B7B7B7B7B7B
+8181818181818181818484848484848484848484848A8A8A8A8A8A8A8A8A909090909090909090
+9A9A9A9A9A9A9A9A9A9F9F9F9F9F9F9F9F9F9F9F9FA1A1A1A1A1A1A1A1A1A4A4A4A4A4A4A4A4A4
+A9A9A9A9A9A9A9A9A9ADADADADADADADADADB0B0B0B0B0B0B0B0B0B0B0B0B4B4B4B4B4B4B4B4B4
+B4B4B4B4B4B4B4B4B4B1B1B1B1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B6B6B6B6B6B6B6B6B6B6B6B6
+B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B9B9B9B9B9B9B9B9B9B8B8B8B8B8B8B8B8B8B8B8B8
+A5A5A5A5A5A5A5A5A5909090909090909090898989898989898989888888888888888888888888
+8888888888888888888A8A8A8A8A8A8A8A8A9E9E9E9E9E9E9E9E9EBFBFBFBFBFBFBFBFBFDFDFDF
+DFDFDFDFDFDFE7E7E7E7E7E7E7E7E7E7E7E7E2E2E2E2E2E2E2E2E2D7D7D7D7D7D7D7D7D7C9C9C9
+C9C9C9C9C9C9BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFC2C2C2C2C2C2C2C2C2C6C6C6
+C6C6C6C6C6C6D6D6D6D6D6D6D6D6D6E6E6E6E6E6E6E6E6E6E6E6E6EEEEEEEEEEEEEEEEEEF2F2F2
+F2F2F2F2F2F2F5F5F5F5F5F5F5F5F5F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA
+FAFAFAFAFAFAFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F0F0F0
+F0F0F0F0F0F0E8E8E8E8E8E8E8E8E8DEDEDEDEDEDEDEDEDED3D3D3D3D3D3D3D3D3C8C8C8C8C8C8
+C8C8C8C8C8C8BDBDBDBDBDBDBDBDBDB5B5B5B5B5B5B5B5B5BABABABABABABABABAC2C2C2C2C2C2
+C2C2C2AAAAAAAAAAAAAAAAAAAAAAAAB7B7B7B7B7B7B7B7B7C6C6C6C6C6C6C6C6C6E1E1E1E1E1E1
+E1E1E1FCFCFCFCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9
+F9F9F9CACACACACACACACACAEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0
+F0F0F0EFEFEFEFEFEFEFEFEFEEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEECECECECECECECECEC
+EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9
+E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8
+E7E7E7E7E7E7E7E7E7E5E5E5E5E5E5E5E5E5E3E3E3E3E3E3E3E3E3E3E3E3D5D5D5D5D5D5D5D5D5
+A8A8A8A8A8A8A8A8A85F605F5F605F5F605F343434343434343434343434282828282828282828
+2828282828282828282F2F2F2F2F2F2F2F2F3B3B3B3B3B3B3B3B3B444444444444444444444444
+4B4B4B4B4B4B4B4B4B6161616161616161617B7B7B7B7B7B7B7B7B818181818181818181848484
+8484848484848484848A8A8A8A8A8A8A8A8A9090909090909090909A9A9A9A9A9A9A9A9A9F9F9F
+9F9F9F9F9F9F9F9F9FA1A1A1A1A1A1A1A1A1A4A4A4A4A4A4A4A4A4A9A9A9A9A9A9A9A9A9ADADAD
+ADADADADADADB0B0B0B0B0B0B0B0B0B0B0B0B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B1B1B1
+B1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B6B6B6B6B6B6B6B6B6B6B6B6B5B5B5B5B5B5B5B5B5B5B5B5
+B5B5B5B5B5B5B9B9B9B9B9B9B9B9B9B8B8B8B8B8B8B8B8B8B8B8B8A5A5A5A5A5A5A5A5A5909090
+9090909090908989898989898989898888888888888888888888888888888888888888888A8A8A
+8A8A8A8A8A8A9E9E9E9E9E9E9E9E9EBFBFBFBFBFBFBFBFBFDFDFDFDFDFDFDFDFDFE7E7E7E7E7E7
+E7E7E7E7E7E7E2E2E2E2E2E2E2E2E2D7D7D7D7D7D7D7D7D7C9C9C9C9C9C9C9C9C9BFBFBFBFBFBF
+BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFC2C2C2C2C2C2C2C2C2C6C6C6C6C6C6C6C6C6D6D6D6D6D6D6
+D6D6D6E6E6E6E6E6E6E6E6E6E6E6E6EEEEEEEEEEEEEEEEEEF2F2F2F2F2F2F2F2F2F5F5F5F5F5F5
+F5F5F5F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFCFCFCFCFCFC
+FCFCFCFCFCFCFCFCFCFCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F0F0F0F0F0F0F0F0F0E8E8E8E8E8E8
+E8E8E8DEDEDEDEDEDEDEDEDED3D3D3D3D3D3D3D3D3C8C8C8C8C8C8C8C8C8C8C8C8BDBDBDBDBDBD
+BDBDBDB5B5B5B5B5B5B5B5B5BABABABABABABABABAC2C2C2C2C2C2C2C2C2AAAAAAAAAAAAAAAAAA
+AAAAAAB7B7B7B7B7B7B7B7B7C6C6C6C6C6C6C6C6C6E1E1E1E1E1E1E1E1E1FCFCFCFCFCFCFCFCFC
+FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9CACACACACACACACACA
+F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
+EEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDECECECECECECECECECECECEC
+ECECECECECECECECECEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEB
+EBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E7E7E7
+E7E7E7E7E7E7E4E4E4E4E4E4E4E4E4E4E4E4DEDEDEDEDEDEDEDEDEC5C5C5C5C5C5C5C5C5838383
+8383838383834242424242424242424242422B2B2B2B2B2B2B2B2B292929292929292929363636
+3636363636364D4D4D4D4D4D4D4D4D5B5B5B5B5B5B5B5B5B5B5B5B5C5C5C5C5C5C5C5C5C676767
+6767676767677C7C7C7C7C7C7C7C7C818181818181818181838383838383838383838383878787
+8787878787879090909090909090909C9C9C9C9C9C9C9C9CA1A1A1A1A1A1A1A1A1A1A1A1A3A3A3
+A3A3A3A3A3A3A8A8A8A8A8A8A8A8A8AEAEAEAEAEAEAEAEAEB2B2B2B2B2B2B2B2B2B6B6B6B6B6B6
+B6B6B6B6B6B6B8B8B8B8B8B8B8B8B8B7B7B7B7B7B7B7B7B7B6B6B6B6B6B6B6B6B6B8B8B8B8B8B8
+B8B8B8BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBDBDBDBDBDBDBDBDBDC3C3C3C3C3C3
+C3C3C3BEBEBEBEBEBEBEBEBEBEBEBEA8A8A8A8A8A8A8A8A89191919191919191918B8B8B8B8B8B
+8B8B8B8989898989898989898888888888888888888888888B8B8B8B8B8B8B8B8B9F9F9F9F9F9F
+9F9F9FBFBFBFBFBFBFBFBFBFDBDBDBDBDBDBDBDBDBE3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3
+E3E3E3DFDFDFDFDFDFDFDFDFD0D0D0D0D0D0D0D0D0C1C1C1C1C1C1C1C1C1C1C1C1BCBCBCBCBCBC
+BCBCBCB9B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBBBBCFCFCFCFCFCFCFCFCFE6E6E6E6E6E6E6E6E6
+E6E6E6F1F1F1F1F1F1F1F1F1F9F9F9F9F9F9F9F9F9FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FBFBFBFBFBFBFBFBFBFBFBFBF3F3F3F3F3F3F3F3F3E9E9E9E9E9E9E9E9E9DEDEDEDEDEDEDEDEDE
+D5D5D5D5D5D5D5D5D5C8C8C8C8C8C8C8C8C8C8C8C8BCBCBCBCBCBCBCBCBCB3B3B3B3B3B3B3B3B3
+B6B6B6B6B6B6B6B6B6B9B9B9B9B9B9B9B9B9B2B2B2B2B2B2B2B2B2B2B2B2C5C5C5C5C5C5C5C5C5
+C9C9C9C9C9C9C9C9C9E1E1E1E1E1E1E1E1E1FCFCFCFCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBD4D4D4D4D4D4D4D4D4F0F0F0F0F0F0F0F0F0F0F0F0
+F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EEEEEEEEEEEEEEEEEEEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEE
+EEEEEEEEEEEEEDEDEDEDEDEDEDEDEDECECECECECECECECECECECECECECECECECECECECECEBEBEB
+EBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEAEAEA
+EAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E7E7E7E7E7E7E7E7E7E4E4E4E4E4E4
+E4E4E4E4E4E4DEDEDEDEDEDEDEDEDEC5C5C5C5C5C5C5C5C5838383838383838383424242424242
+4242424242422B2B2B2B2B2B2B2B2B2929292929292929293636363636363636364D4D4D4D4D4D
+4D4D4D5B5B5B5B5B5B5B5B5B5B5B5B5C5C5C5C5C5C5C5C5C6767676767676767677C7C7C7C7C7C
+7C7C7C818181818181818181838383838383838383838383878787878787878787909090909090
+9090909C9C9C9C9C9C9C9C9CA1A1A1A1A1A1A1A1A1A1A1A1A3A3A3A3A3A3A3A3A3A8A8A8A8A8A8
+A8A8A8AEAEAEAEAEAEAEAEAEB2B2B2B2B2B2B2B2B2B6B6B6B6B6B6B6B6B6B6B6B6B8B8B8B8B8B8
+B8B8B8B7B7B7B7B7B7B7B7B7B6B6B6B6B6B6B6B6B6B8B8B8B8B8B8B8B8B8BBBBBBBBBBBBBBBBBB
+BBBBBBBBBBBBBBBBBBBBBBBBBDBDBDBDBDBDBDBDBDC3C3C3C3C3C3C3C3C3BEBEBEBEBEBEBEBEBE
+BEBEBEA8A8A8A8A8A8A8A8A89191919191919191918B8B8B8B8B8B8B8B8B898989898989898989
+8888888888888888888888888B8B8B8B8B8B8B8B8B9F9F9F9F9F9F9F9F9FBFBFBFBFBFBFBFBFBF
+DBDBDBDBDBDBDBDBDBE3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3DFDFDFDFDFDFDFDFDF
+D0D0D0D0D0D0D0D0D0C1C1C1C1C1C1C1C1C1C1C1C1BCBCBCBCBCBCBCBCBCB9B9B9B9B9B9B9B9B9
+BBBBBBBBBBBBBBBBBBCFCFCFCFCFCFCFCFCFE6E6E6E6E6E6E6E6E6E6E6E6F1F1F1F1F1F1F1F1F1
+F9F9F9F9F9F9F9F9F9FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFBFBFBFBFBFBFBFBFBFBFBFB
+F3F3F3F3F3F3F3F3F3E9E9E9E9E9E9E9E9E9DEDEDEDEDEDEDEDEDED5D5D5D5D5D5D5D5D5C8C8C8
+C8C8C8C8C8C8C8C8C8BCBCBCBCBCBCBCBCBCB3B3B3B3B3B3B3B3B3B6B6B6B6B6B6B6B6B6B9B9B9
+B9B9B9B9B9B9B2B2B2B2B2B2B2B2B2B2B2B2C5C5C5C5C5C5C5C5C5C9C9C9C9C9C9C9C9C9E1E1E1
+E1E1E1E1E1E1FCFCFCFCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB
+FBFBFBFBFBFBD4D4D4D4D4D4D4D4D4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
+F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEDEDEDEDEDED
+EDEDEDECECECECECECECECECECECECECECECECECECECECECEBEBEBEBEBEBEBEBEBEAEAEAEAEAEA
+EAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9
+E9E9E9E8E9E8E8E9E8E8E9E8E7E7E7E7E7E7E7E7E7E4E4E4E4E4E4E4E4E4E4E4E4DEDEDEDEDEDE
+DEDEDEC5C5C5C5C5C5C5C5C58383838383838383834242424242424242424242422B2B2B2B2B2B
+2B2B2B2929292929292929293636363636363636364D4D4D4D4D4D4D4D4D5B5B5B5B5B5B5B5B5B
+5B5B5B5C5C5C5C5C5C5C5C5C6767676767676767677C7C7C7C7C7C7C7C7C818181818181818181
+8383838383838383838383838787878787878787879090909090909090909C9C9C9C9C9C9C9C9C
+A1A1A1A1A1A1A1A1A1A1A1A1A3A3A3A3A3A3A3A3A3A8A8A8A8A8A8A8A8A8AEAEAEAEAEAEAEAEAE
+B2B2B2B2B2B2B2B2B2B6B6B6B6B6B6B6B6B6B6B6B6B8B8B8B8B8B8B8B8B8B7B7B7B7B7B7B7B7B7
+B6B6B6B6B6B6B6B6B6B8B8B8B8B8B8B8B8B8BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
+BDBDBDBDBDBDBDBDBDC3C3C3C3C3C3C3C3C3BEBEBEBEBEBEBEBEBEBEBEBEA8A8A8A8A8A8A8A8A8
+9191919191919191918B8B8B8B8B8B8B8B8B898989898989898989888888888888888888888888
+8B8B8B8B8B8B8B8B8B9F9F9F9F9F9F9F9F9FBFBFBFBFBFBFBFBFBFDBDBDBDBDBDBDBDBDBE3E3E3
+E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3DFDFDFDFDFDFDFDFDFD0D0D0D0D0D0D0D0D0C1C1C1
+C1C1C1C1C1C1C1C1C1BCBCBCBCBCBCBCBCBCB9B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBBBBCFCFCF
+CFCFCFCFCFCFE6E6E6E6E6E6E6E6E6E6E6E6F1F1F1F1F1F1F1F1F1F9F9F9F9F9F9F9F9F9FDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFBFBFBFBFBFBFBFBFBFBFBFBF3F3F3F3F3F3F3F3F3E9E9E9
+E9E9E9E9E9E9DEDEDEDEDEDEDEDEDED5D5D5D5D5D5D5D5D5C8C8C8C8C8C8C8C8C8C8C8C8BCBCBC
+BCBCBCBCBCBCB3B3B3B3B3B3B3B3B3B6B6B6B6B6B6B6B6B6B9B9B9B9B9B9B9B9B9B2B2B2B2B2B2
+B2B2B2B2B2B2C5C5C5C5C5C5C5C5C5C9C9C9C9C9C9C9C9C9E1E1E1E1E1E1E1E1E1FCFCFCFCFCFC
+FCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBD4D4D4D4D4D4
+D4D4D4EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEEEEEEEEEEE
+EEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDECECECECECECECECEC
+ECECECECECECECECECECECECECECECECECECECECECEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEA
+EAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8
+E8E8E8E8E8E8E8E8E8E6E6E6E6E6E6E6E6E6E6E6E6E2E2E2E2E2E2E2E2E2D6D6D5D6D6D5D6D6D5
+A8A8A8A8A8A8A8A8A85C5C5C5C5C5C5C5C5C5C5C5C3232323232323232322F2F2F2F2F2F2F2F2F
+4444444444444444446262626262626262626C6C6C6C6C6C6C6C6C6C6C6C666666666666666666
+6B6B6B6B6B6B6B6B6B7D7D7D7D7D7D7D7D7D808080808080808080828282828282828282828282
+8787878787878787879090909090909090909B9B9B9B9B9B9B9B9BA0A0A0A0A0A0A0A0A0A0A0A0
+A3A3A3A3A3A3A3A3A3A8A8A8A8A8A8A8A8A8B0B0B0B0B0B0B0B0B0B3B3B3B3B3B3B3B3B3B9B9B9
+B9B9B9B9B9B9B9B9B9BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBFBFBFBFBFBFBFBFBFC0C0C0
+C0C0C0C0C0C0C2C2C2C2C2C2C2C2C2C2C2C2C1C1C1C1C1C1C1C1C1C3C3C3C3C3C3C3C3C3C5C5C5
+C5C5C5C5C5C5BFBFBFBFBFBFBFBFBFBFBFBFA8A8A8A8A8A8A8A8A89292929292929292928A8A8A
+8A8A8A8A8A8A8686868686868686868686868686868686868686868E8E8E8E8E8E8E8E8EA3A3A3
+A3A3A3A3A3A3C2C2C2C2C2C2C2C2C2DDDDDDDDDDDDDDDDDDE4E4E4E4E4E4E4E4E4E4E4E4E5E5E5
+E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5DBDBDBDBDBDBDBDBDBCACACACACACACACACACACACABDBDBD
+BDBDBDBDBDBDB6B6B6B6B6B6B6B6B6B5B5B5B5B5B5B5B5B5BEBEBEBEBEBEBEBEBED2D2D2D2D2D2
+D2D2D2D2D2D2E7E7E7E7E7E7E7E7E7F5F5F5F5F5F5F5F5F5FDFDFDFDFDFDFDFDFDFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFCFCFCFCFCFCFCFCFCFCFCFCF5F5F5F5F5F5F5F5F5EAEAEAEAEAEAEAEAEADFDFDFDFDFDF
+DFDFDFD6D6D5D6D6D5D6D6D5C8C8C8C8C8C8C8C8C8C8C8C8BBBBBBBBBBBBBBBBBBB1B1B1B1B1B1
+B1B1B1B1B1B1B1B1B1B1B1B1B8B8B8B8B8B8B8B8B8C3C3C3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3
+D3D3D3D1D1D1D1D1D1D1D1D1E5E5E5E5E5E5E5E5E5FDFDFDFDFDFDFDFDFDFDFDFDFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCE1E1E1E1E1E1E1E1E1EFEFEFEFEFEFEFEFEF
+EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDECECECECECECECECECECECECECECECECECECECECEC
+ECECECECECECECECECEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA
+E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E6E6E6
+E6E6E6E6E6E6E6E6E6E2E2E2E2E2E2E2E2E2D6D6D5D6D6D5D6D6D5A8A8A8A8A8A8A8A8A85C5C5C
+5C5C5C5C5C5C5C5C5C3232323232323232322F2F2F2F2F2F2F2F2F444444444444444444626262
+6262626262626C6C6C6C6C6C6C6C6C6C6C6C6666666666666666666B6B6B6B6B6B6B6B6B7D7D7D
+7D7D7D7D7D7D808080808080808080828282828282828282828282878787878787878787909090
+9090909090909B9B9B9B9B9B9B9B9BA0A0A0A0A0A0A0A0A0A0A0A0A3A3A3A3A3A3A3A3A3A8A8A8
+A8A8A8A8A8A8B0B0B0B0B0B0B0B0B0B3B3B3B3B3B3B3B3B3B9B9B9B9B9B9B9B9B9B9B9B9BCBCBC
+BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBFBFBFBFBFBFBFBFBFC0C0C0C0C0C0C0C0C0C2C2C2C2C2C2
+C2C2C2C2C2C2C1C1C1C1C1C1C1C1C1C3C3C3C3C3C3C3C3C3C5C5C5C5C5C5C5C5C5BFBFBFBFBFBF
+BFBFBFBFBFBFA8A8A8A8A8A8A8A8A89292929292929292928A8A8A8A8A8A8A8A8A868686868686
+8686868686868686868686868686868E8E8E8E8E8E8E8E8EA3A3A3A3A3A3A3A3A3C2C2C2C2C2C2
+C2C2C2DDDDDDDDDDDDDDDDDDE4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5
+E5E5E5DBDBDBDBDBDBDBDBDBCACACACACACACACACACACACABDBDBDBDBDBDBDBDBDB6B6B6B6B6B6
+B6B6B6B5B5B5B5B5B5B5B5B5BEBEBEBEBEBEBEBEBED2D2D2D2D2D2D2D2D2D2D2D2E7E7E7E7E7E7
+E7E7E7F5F5F5F5F5F5F5F5F5FDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFC
+FCFCFCF5F5F5F5F5F5F5F5F5EAEAEAEAEAEAEAEAEADFDFDFDFDFDFDFDFDFD6D6D5D6D6D5D6D6D5
+C8C8C8C8C8C8C8C8C8C8C8C8BBBBBBBBBBBBBBBBBBB1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1
+B8B8B8B8B8B8B8B8B8C3C3C3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3D1D1D1D1D1D1D1D1D1
+E5E5E5E5E5E5E5E5E5FDFDFDFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FCFCFCFCFCFCFCFCFCE1E1E1E1E1E1E1E1E1EEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDEEEEEE
+EEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDECECECECECECECECECEDEDEDEDEDEDEDEDEDECECEC
+ECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDECECECECECECECECECEBEBEBEBEBEBEBEBEBEAEAEA
+EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E8E8
+E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E6E6E6E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5E5E5E5E3E3E3
+E3E3E3E3E3E3DCDCDCDCDCDCDCDCDCC5C5C5C5C5C5C5C5C5808080808080808080808080414141
+414141414141363636363636363636565656565656565656707070707070707070727272727272
+7272727272726A6A6A6A6A6A6A6A6A6E6E6E6E6E6E6E6E6E7D7D7D7D7D7D7D7D7D7F7F7F7F7F7F
+7F7F7F818181818181818181818181878787878787878787909090909090909090999999999999
+9999999F9F9F9F9F9F9F9F9F9F9F9FA2A2A2A2A2A2A2A2A2A8A8A8A8A8A8A8A8A8ADADADADADAD
+ADADADB4B4B4B4B4B4B4B4B4BBBBBBBBBBBBBBBBBBBBBBBBBFBFBFBFBFBFBFBFBFC4C4C4C4C4C4
+C4C4C4C8C8C8C8C8C8C8C8C8CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC7C7C7C7C7C7
+C7C7C7C5C5C5C5C5C5C5C5C5CACACACACACACACACAC2C2C2C2C2C2C2C2C2C2C2C2A7A7A7A7A7A7
+A7A7A78F8F8F8F8F8F8F8F8F858585858585858585828282828282828282838383838383838383
+8383838F8F8F8F8F8F8F8F8FA8A8A8A8A8A8A8A8A8C9C9C9C9C9C9C9C9C9DFDFDFDFDFDFDFDFDF
+E6E6E6E6E6E6E6E6E6E6E6E6E9E9E9E9E9E9E9E9E9EBEBEBEBEBEBEBEBEBE1E1E1E1E1E1E1E1E1
+D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B7B7B7B7B7B7B7B7B7B4B4B4B4B4B4B4B4B4
+B1B1B1B1B1B1B1B1B1BEBEBEBEBEBEBEBEBEBEBEBED1D1D1D1D1D1D1D1D1E3E3E3E3E3E3E3E3E3
+F5F5F5F5F5F5F5F5F5FDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDF6F6F6F6F6F6F6F6F6
+EBEBEBEBEBEBEBEBEBDFDFDFDFDFDFDFDFDFD4D4D4D4D4D4D4D4D4C7C7C7C7C7C7C7C7C7C7C7C7
+BABABABABABABABABAB0B1B0B0B1B0B0B1B0B0B0B0B0B0B0B0B0B0BDBDBDBDBDBDBDBDBDCDCDCD
+CDCDCDCDCDCDCDCDCDDADADADADADADADADAD7D7D7D7D7D7D7D7D7EBEBEBEBEBEBEBEBEBFDFDFD
+FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C7C7C7
+C7C7C7C7C7C7EEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEDEDED
+EDEDEDEDEDEDECECECECECECECECECEDEDEDEDEDEDEDEDEDECECECECECECECECECECECECECECEC
+ECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDECECECECECECECECECEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA
+EAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8
+E8E8E8E6E6E6E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5E5E5E5E3E3E3E3E3E3E3E3E3DCDCDCDCDCDC
+DCDCDCC5C5C5C5C5C5C5C5C5808080808080808080808080414141414141414141363636363636
+3636365656565656565656567070707070707070707272727272727272727272726A6A6A6A6A6A
+6A6A6A6E6E6E6E6E6E6E6E6E7D7D7D7D7D7D7D7D7D7F7F7F7F7F7F7F7F7F818181818181818181
+8181818787878787878787879090909090909090909999999999999999999F9F9F9F9F9F9F9F9F
+9F9F9FA2A2A2A2A2A2A2A2A2A8A8A8A8A8A8A8A8A8ADADADADADADADADADB4B4B4B4B4B4B4B4B4
+BBBBBBBBBBBBBBBBBBBBBBBBBFBFBFBFBFBFBFBFBFC4C4C4C4C4C4C4C4C4C8C8C8C8C8C8C8C8C8
+CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC7C7C7C7C7C7C7C7C7C5C5C5C5C5C5C5C5C5
+CACACACACACACACACAC2C2C2C2C2C2C2C2C2C2C2C2A7A7A7A7A7A7A7A7A78F8F8F8F8F8F8F8F8F
+8585858585858585858282828282828282828383838383838383838383838F8F8F8F8F8F8F8F8F
+A8A8A8A8A8A8A8A8A8C9C9C9C9C9C9C9C9C9DFDFDFDFDFDFDFDFDFE6E6E6E6E6E6E6E6E6E6E6E6
+E9E9E9E9E9E9E9E9E9EBEBEBEBEBEBEBEBEBE1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1
+C1C1C1C1C1C1C1C1C1B7B7B7B7B7B7B7B7B7B4B4B4B4B4B4B4B4B4B1B1B1B1B1B1B1B1B1BEBEBE
+BEBEBEBEBEBEBEBEBED1D1D1D1D1D1D1D1D1E3E3E3E3E3E3E3E3E3F5F5F5F5F5F5F5F5F5FDFDFD
+FDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDF6F6F6F6F6F6F6F6F6EBEBEBEBEBEBEBEBEBDFDFDF
+DFDFDFDFDFDFD4D4D4D4D4D4D4D4D4C7C7C7C7C7C7C7C7C7C7C7C7BABABABABABABABABAB0B1B0
+B0B1B0B0B1B0B0B0B0B0B0B0B0B0B0BDBDBDBDBDBDBDBDBDCDCDCDCDCDCDCDCDCDCDCDCDDADADA
+DADADADADADAD7D7D7D7D7D7D7D7D7EBEBEBEBEBEBEBEBEBFDFDFDFDFDFDFDFDFDFDFDFDFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C7C7C7C7C7C7C7C7C7EEEEEEEEEEEE
+EEEEEEEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDECECECECECEC
+ECECECEDEDEDEDEDEDEDEDEDECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDECECECECECEC
+ECECECEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9
+E9E9E9E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E6E6E6E6E6E6E6E6E6
+E5E5E5E5E5E5E5E5E5E5E5E5E3E3E3E3E3E3E3E3E3DCDCDCDCDCDCDCDCDCC5C5C5C5C5C5C5C5C5
+808080808080808080808080414141414141414141363636363636363636565656565656565656
+7070707070707070707272727272727272727272726A6A6A6A6A6A6A6A6A6E6E6E6E6E6E6E6E6E
+7D7D7D7D7D7D7D7D7D7F7F7F7F7F7F7F7F7F818181818181818181818181878787878787878787
+9090909090909090909999999999999999999F9F9F9F9F9F9F9F9F9F9F9FA2A2A2A2A2A2A2A2A2
+A8A8A8A8A8A8A8A8A8ADADADADADADADADADB4B4B4B4B4B4B4B4B4BBBBBBBBBBBBBBBBBBBBBBBB
+BFBFBFBFBFBFBFBFBFC4C4C4C4C4C4C4C4C4C8C8C8C8C8C8C8C8C8CBCBCBCBCBCBCBCBCBCBCBCB
+CBCBCBCBCBCBCBCBCBC7C7C7C7C7C7C7C7C7C5C5C5C5C5C5C5C5C5CACACACACACACACACAC2C2C2
+C2C2C2C2C2C2C2C2C2A7A7A7A7A7A7A7A7A78F8F8F8F8F8F8F8F8F858585858585858585828282
+8282828282828383838383838383838383838F8F8F8F8F8F8F8F8FA8A8A8A8A8A8A8A8A8C9C9C9
+C9C9C9C9C9C9DFDFDFDFDFDFDFDFDFE6E6E6E6E6E6E6E6E6E6E6E6E9E9E9E9E9E9E9E9E9EBEBEB
+EBEBEBEBEBEBE1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B7B7B7
+B7B7B7B7B7B7B4B4B4B4B4B4B4B4B4B1B1B1B1B1B1B1B1B1BEBEBEBEBEBEBEBEBEBEBEBED1D1D1
+D1D1D1D1D1D1E3E3E3E3E3E3E3E3E3F5F5F5F5F5F5F5F5F5FDFDFDFDFDFDFDFDFDFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFD
+FDFDFDFDFDFDF6F6F6F6F6F6F6F6F6EBEBEBEBEBEBEBEBEBDFDFDFDFDFDFDFDFDFD4D4D4D4D4D4
+D4D4D4C7C7C7C7C7C7C7C7C7C7C7C7BABABABABABABABABAB0B1B0B0B1B0B0B1B0B0B0B0B0B0B0
+B0B0B0BDBDBDBDBDBDBDBDBDCDCDCDCDCDCDCDCDCDCDCDCDDADADADADADADADADAD7D7D7D7D7D7
+D7D7D7EBEBEBEBEBEBEBEBEBFDFDFDFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFF9F9F9F9F9F9F9F9F9C7C7C7C7C7C7C7C7C7EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EEEEEEEEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDECECECECECECECECECEDEDEDEDEDEDEDEDED
+EBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC
+EDEDEDEDEDEDEDEDEDECECECECECECECECECECECECEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEA
+E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8
+E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E4E4E4
+E3E3E3E3E3E3E3E3E3DFDFDFDFDFDFDFDFDFD5D5D5D5D5D5D5D5D5A3A3A3A3A3A3A3A3A3A3A3A3
+585858585858585858404040404040404040636363636363636363757575757575757575727272
+7272727272727272726C6C6C6C6C6C6C6C6C7373737373737373737F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F818181818181818181818181888888888888888888919191919191919191979797
+9797979797979D9D9D9D9D9D9D9D9D9D9D9DA2A2A2A2A2A2A2A2A2A8A8A8A8A8A8A8A8A8AEAEAE
+AEAEAEAEAEAEB5B5B5B5B5B5B5B5B5BEBEBEBEBEBEBEBEBEBEBEBEC5C5C5C5C5C5C5C5C5CCCCCC
+CCCCCCCCCCCCD1D1D1D1D1D1D1D1D1D2D2D2D2D2D2D2D2D2D0D0D0D0D0D0D0D0D0D0D0D0CECECE
+CECECECECECECACACACACACACACACACBCBCBCBCBCBCBCBCBBCBCBCBCBCBCBCBCBCBCBCBC9E9E9E
+9E9E9E9E9E9E878787878787878787818181818181818181818181818181818181848484848484
+848484848484909090909090909090ABABABABABABABABABCFCFCFCFCFCFCFCFCFE4E4E4E4E4E4
+E4E4E4ECECECECECECECECECECECECF2F2F2F2F2F2F2F2F2F5F5F5F5F5F5F5F5F5E9E9E9E9E9E9
+E9E9E9D5D5D5D5D5D5D5D5D5D5D5D5C4C4C4C4C4C4C4C4C4BBBBBBBBBBBBBBBBBBB8B8B8B8B8B8
+B8B8B8B0B1B0B0B1B0B0B1B0B0B1B0B0B1B0B0B1B0B0B1B0BBBBBBBBBBBBBBBBBBCBCBCBCBCBCB
+CBCBCBE3E3E3E3E3E3E3E3E3F2F2F2F2F2F2F2F2F2FBFBFBFBFBFBFBFBFBFBFBFBFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCF7F7F7F7F7F7
+F7F7F7ECECECECECECECECECDFDFDFDFDFDFDFDFDFD3D3D3D3D3D3D3D3D3C5C5C5C5C5C5C5C5C5
+C5C5C5B8B8B8B8B8B8B8B8B8B0B1B0B0B1B0B0B1B0B0B1B0B0B1B0B0B1B0C5C5C5C5C5C5C5C5C5
+DADADADADADADADADADADADADBDBDBDBDBDBDBDBDBD6D6D5D6D6D5D6D6D5F0F0F0F0F0F0F0F0F0
+FEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9
+C6C6C6C6C6C6C6C6C6EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEE
+EDEDEDEDEDEDEDEDEDECECECECECECECECECEDEDEDEDEDEDEDEDEDEBEBEBEBEBEBEBEBEBECECEC
+ECECECECECECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDECECEC
+ECECECECECECECECECEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9EAEAEA
+EAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E7E7E7
+E7E7E7E7E7E7E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3DFDFDF
+DFDFDFDFDFDFD5D5D5D5D5D5D5D5D5A3A3A3A3A3A3A3A3A3A3A3A3585858585858585858404040
+4040404040406363636363636363637575757575757575757272727272727272727272726C6C6C
+6C6C6C6C6C6C7373737373737373737F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818181818181
+8181818181818888888888888888889191919191919191919797979797979797979D9D9D9D9D9D
+9D9D9D9D9D9DA2A2A2A2A2A2A2A2A2A8A8A8A8A8A8A8A8A8AEAEAEAEAEAEAEAEAEB5B5B5B5B5B5
+B5B5B5BEBEBEBEBEBEBEBEBEBEBEBEC5C5C5C5C5C5C5C5C5CCCCCCCCCCCCCCCCCCD1D1D1D1D1D1
+D1D1D1D2D2D2D2D2D2D2D2D2D0D0D0D0D0D0D0D0D0D0D0D0CECECECECECECECECECACACACACACA
+CACACACBCBCBCBCBCBCBCBCBBCBCBCBCBCBCBCBCBCBCBCBC9E9E9E9E9E9E9E9E9E878787878787
+878787818181818181818181818181818181818181848484848484848484848484909090909090
+909090ABABABABABABABABABCFCFCFCFCFCFCFCFCFE4E4E4E4E4E4E4E4E4ECECECECECECECECEC
+ECECECF2F2F2F2F2F2F2F2F2F5F5F5F5F5F5F5F5F5E9E9E9E9E9E9E9E9E9D5D5D5D5D5D5D5D5D5
+D5D5D5C4C4C4C4C4C4C4C4C4BBBBBBBBBBBBBBBBBBB8B8B8B8B8B8B8B8B8B0B1B0B0B1B0B0B1B0
+B0B1B0B0B1B0B0B1B0B0B1B0BBBBBBBBBBBBBBBBBBCBCBCBCBCBCBCBCBCBE3E3E3E3E3E3E3E3E3
+F2F2F2F2F2F2F2F2F2FBFBFBFBFBFBFBFBFBFBFBFBFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCF7F7F7F7F7F7F7F7F7ECECECECECECECECEC
+DFDFDFDFDFDFDFDFDFD3D3D3D3D3D3D3D3D3C5C5C5C5C5C5C5C5C5C5C5C5B8B8B8B8B8B8B8B8B8
+B0B1B0B0B1B0B0B1B0B0B1B0B0B1B0B0B1B0C5C5C5C5C5C5C5C5C5DADADADADADADADADADADADA
+DBDBDBDBDBDBDBDBDBD6D6D5D6D6D5D6D6D5F0F0F0F0F0F0F0F0F0FEFEFEFEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C6C6C6C6C6C6C6C6C6ECECEC
+ECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB
+EBEBEBEBEBEBECECECECECECECECECEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA
+EAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8
+E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4
+E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDFDFDBDBDBDBDBDB
+DBDBDBBFBFBFBFBFBFBFBFBFBFBFBF7676767676767676764E4E4E4E4E4E4E4E4E696969696969
+6969697373737373737373736C6C6C6C6C6C6C6C6C6C6C6C6D6D6D6D6D6D6D6D6D797979797979
+797979818181818181818181818181818181818181818181818181818181818181878787878787
+8787879090909090909090909494949494949494949A9A9A9A9A9A9A9A9A9A9A9AA0A0A0A0A0A0
+A0A0A0A7A7A7A7A7A7A7A7A7AEAEAEAEAEAEAEAEAEB7B7B7B7B7B7B7B7B7C2C2C2C2C2C2C2C2C2
+C2C2C2CBCBCBCBCBCBCBCBCBD2D2D2D2D2D2D2D2D2D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6
+D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D0D0D0D0D0D0D0D0D0C5C5C5C5C5C5C5C5C5
+ADADADADADADADADADADADAD9090909090909090907F7F7F7F7F7F7F7F7F7D7D7D7D7D7D7D7D7D
+818181818181818181868686868686868686868686909090909090909090A8A8A8A8A8A8A8A8A8
+CDCDCDCDCDCDCDCDCDE3E3E3E3E3E3E3E3E3E8E9E8E8E9E8E8E9E8E8E9E8F1F1F1F1F1F1F1F1F1
+F9F9F9F9F9F9F9F9F9E8E8E8E8E8E8E8E8E8CCCCCCCCCCCCCCCCCCCCCCCCBEBEBEBEBEBEBEBEBE
+BABABABABABABABABABCBCBCBCBCBCBCBCBCB7B7B7B7B7B7B7B7B7ADADADADADADADADADADADAD
+ADADADADADADADADADB7B7B7B7B7B7B7B7B7CBCBCBCBCBCBCBCBCBDDDDDDDDDDDDDDDDDDECECEC
+ECECECECECECECECECF5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F8F8F8F8F8F8F8F8F8F9F9F9
+F9F9F9F9F9F9F9F9F9F3F3F3F3F3F3F3F3F3E8E8E8E8E8E8E8E8E8DCDCDCDCDCDCDCDCDCCFCFCF
+CFCFCFCFCFCFC4C4C4C4C4C4C4C4C4C4C4C4B9B9B9B9B9B9B9B9B9B0B1B0B0B1B0B0B1B0B0B1B0
+B0B1B0B0B1B0C4C4C4C4C4C4C4C4C4D2D2D2D2D2D2D2D2D2D2D2D2CDCDCDCDCDCDCDCDCDD2D2D2
+D2D2D2D2D2D2F3F3F3F3F3F3F3F3F3FEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9BBBBBBBBBBBBBBBBBBECECECECECECECECECEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECEC
+ECECECEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9
+E9E9E9E8E9E8E8E9E8E8E9E8E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8
+E8E8E8E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4
+E4E4E4E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDFDFDBDBDBDBDBDBDBDBDBBFBFBFBFBFBFBFBFBF
+BFBFBF7676767676767676764E4E4E4E4E4E4E4E4E696969696969696969737373737373737373
+6C6C6C6C6C6C6C6C6C6C6C6C6D6D6D6D6D6D6D6D6D797979797979797979818181818181818181
+818181818181818181818181818181818181818181878787878787878787909090909090909090
+9494949494949494949A9A9A9A9A9A9A9A9A9A9A9AA0A0A0A0A0A0A0A0A0A7A7A7A7A7A7A7A7A7
+AEAEAEAEAEAEAEAEAEB7B7B7B7B7B7B7B7B7C2C2C2C2C2C2C2C2C2C2C2C2CBCBCBCBCBCBCBCBCB
+D2D2D2D2D2D2D2D2D2D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6
+D6D6D5D6D6D5D6D6D5D0D0D0D0D0D0D0D0D0C5C5C5C5C5C5C5C5C5ADADADADADADADADADADADAD
+9090909090909090907F7F7F7F7F7F7F7F7F7D7D7D7D7D7D7D7D7D818181818181818181868686
+868686868686868686909090909090909090A8A8A8A8A8A8A8A8A8CDCDCDCDCDCDCDCDCDE3E3E3
+E3E3E3E3E3E3E8E9E8E8E9E8E8E9E8E8E9E8F1F1F1F1F1F1F1F1F1F9F9F9F9F9F9F9F9F9E8E8E8
+E8E8E8E8E8E8CCCCCCCCCCCCCCCCCCCCCCCCBEBEBEBEBEBEBEBEBEBABABABABABABABABABCBCBC
+BCBCBCBCBCBCB7B7B7B7B7B7B7B7B7ADADADADADADADADADADADADADADADADADADADADADB7B7B7
+B7B7B7B7B7B7CBCBCBCBCBCBCBCBCBDDDDDDDDDDDDDDDDDDECECECECECECECECECECECECF5F5F5
+F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F3F3F3
+F3F3F3F3F3F3E8E8E8E8E8E8E8E8E8DCDCDCDCDCDCDCDCDCCFCFCFCFCFCFCFCFCFC4C4C4C4C4C4
+C4C4C4C4C4C4B9B9B9B9B9B9B9B9B9B0B1B0B0B1B0B0B1B0B0B1B0B0B1B0B0B1B0C4C4C4C4C4C4
+C4C4C4D2D2D2D2D2D2D2D2D2D2D2D2CDCDCDCDCDCDCDCDCDD2D2D2D2D2D2D2D2D2F3F3F3F3F3F3
+F3F3F3FEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9
+F9F9F9BBBBBBBBBBBBBBBBBBECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEBEBEBEBEBEBEBEBEB
+EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECEBEBEBEBEBEBEBEBEB
+EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8
+E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7
+E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E1E1E1E1E1E1E1E1E1
+DFDFDFDFDFDFDFDFDFDBDBDBDBDBDBDBDBDBBFBFBFBFBFBFBFBFBFBFBFBF767676767676767676
+4E4E4E4E4E4E4E4E4E6969696969696969697373737373737373736C6C6C6C6C6C6C6C6C6C6C6C
+6D6D6D6D6D6D6D6D6D797979797979797979818181818181818181818181818181818181818181
+8181818181818181818787878787878787879090909090909090909494949494949494949A9A9A
+9A9A9A9A9A9A9A9A9AA0A0A0A0A0A0A0A0A0A7A7A7A7A7A7A7A7A7AEAEAEAEAEAEAEAEAEB7B7B7
+B7B7B7B7B7B7C2C2C2C2C2C2C2C2C2C2C2C2CBCBCBCBCBCBCBCBCBD2D2D2D2D2D2D2D2D2D6D6D6
+D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D0D0D0
+D0D0D0D0D0D0C5C5C5C5C5C5C5C5C5ADADADADADADADADADADADAD9090909090909090907F7F7F
+7F7F7F7F7F7F7D7D7D7D7D7D7D7D7D818181818181818181868686868686868686868686909090
+909090909090A8A8A8A8A8A8A8A8A8CDCDCDCDCDCDCDCDCDE3E3E3E3E3E3E3E3E3E8E9E8E8E9E8
+E8E9E8E8E9E8F1F1F1F1F1F1F1F1F1F9F9F9F9F9F9F9F9F9E8E8E8E8E8E8E8E8E8CCCCCCCCCCCC
+CCCCCCCCCCCCBEBEBEBEBEBEBEBEBEBABABABABABABABABABCBCBCBCBCBCBCBCBCB7B7B7B7B7B7
+B7B7B7ADADADADADADADADADADADADADADADADADADADADADB7B7B7B7B7B7B7B7B7CBCBCBCBCBCB
+CBCBCBDDDDDDDDDDDDDDDDDDECECECECECECECECECECECECF5F5F5F5F5F5F5F5F5F6F6F6F6F6F6
+F6F6F6F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F3F3F3F3F3F3F3F3F3E8E8E8E8E8E8
+E8E8E8DCDCDCDCDCDCDCDCDCCFCFCFCFCFCFCFCFCFC4C4C4C4C4C4C4C4C4C4C4C4B9B9B9B9B9B9
+B9B9B9B0B1B0B0B1B0B0B1B0B0B1B0B0B1B0B0B1B0C4C4C4C4C4C4C4C4C4D2D2D2D2D2D2D2D2D2
+D2D2D2CDCDCDCDCDCDCDCDCDD2D2D2D2D2D2D2D2D2F3F3F3F3F3F3F3F3F3FEFEFEFEFEFEFEFEFE
+FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9BBBBBBBBBBBBBBBBBB
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB
+EBEBEBEBEBEBEBEBEBECECECECECECECECECEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA
+EBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAE8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8
+E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4E4E4E4
+E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E2E2E2E2E2E2E2E2E2E1E1E1E1E1E1E1E1E1DFDFDF
+DFDFDFDFDFDFD0D0D0D0D0D0D0D0D0D0D0D09A9A9A9A9A9A9A9A9A6666666666666666666F6F6F
+6F6F6F6F6F6F7171717171717171716A6A6A6A6A6A6A6A6A6A6A6A6F6F6F6F6F6F6F6F6F7E7E7E
+7E7E7E7E7E7E818181818181818181828282828282828282838383838383838383838383888888
+8888888888888E8E8E8E8E8E8E8E8E9292929292929292929797979797979797979797979D9D9D
+9D9D9D9D9D9DA4A4A4A4A4A4A4A4A4AFAFAFAFAFAFAFAFAFB9B9B9B9B9B9B9B9B9C5C5C5C5C5C5
+C5C5C5C5C5C5D0D0D0D0D0D0D0D0D0D7D7D7D7D7D7D7D7D7DBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDADADADADADADADADAD1D1D1D1D1D1D1D1D1BFBFBFBFBFBF
+BFBFBF9C9C9C9C9C9C9C9C9C9C9C9C8181818181818181817979797979797979797C7C7C7C7C7C
+7C7C7C8484848484848484848989898989898989898989898F8F8F8F8F8F8F8F8F9F9F9F9F9F9F
+9F9F9FB9B9B9B9B9B9B9B9B9CDCDCDCDCDCDCDCDCDD6D6D5D6D6D5D6D6D5D6D6D5E0E0E0E0E0E0
+E0E0E0E8E9E8E8E9E8E8E9E8D6D6D5D6D6D5D6D6D5BCBCBCBCBCBCBCBCBCBCBCBCB0B1B0B0B1B0
+B0B1B0B4B4B4B4B4B4B4B4B4BABABABABABABABABAB8B8B8B8B8B8B8B8B8AEAEAEAEAEAEAEAEAE
+AEAEAEA8A8A8A8A8A8A8A8A8AAAAAAAAAAAAAAAAAAB5B5B5B5B5B5B5B5B5C6C6C6C6C6C6C6C6C6
+D7D7D7D7D7D7D7D7D7D7D7D7E2E2E2E2E2E2E2E2E2E9E9E9E9E9E9E9E9E9EEEEEEEEEEEEEEEEEE
+F1F1F1F1F1F1F1F1F1F1F1F1EBEBEBEBEBEBEBEBEBE0E0E0E0E0E0E0E0E0D7D7D7D7D7D7D7D7D7
+CBCBCBCBCBCBCBCBCBC0C0C0C0C0C0C0C0C0C0C0C0B9B9B9B9B9B9B9B9B9B0B1B0B0B1B0B0B1B0
+AFAFAFAFAFAFAFAFAFBBBBBBBBBBBBBBBBBBC5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5
+D9D9D9D9D9D9D9D9D9F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C5C5C5C5C5C5C5C5C5EDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEBEBEB
+EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECEC
+ECECECECECECEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEAEAEA
+EAEAEAEAEAEAE8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8
+E8E8E8E8E8E8E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4
+E4E4E4E4E4E4E2E2E2E2E2E2E2E2E2E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDFDFD0D0D0D0D0D0
+D0D0D0D0D0D09A9A9A9A9A9A9A9A9A6666666666666666666F6F6F6F6F6F6F6F6F717171717171
+7171716A6A6A6A6A6A6A6A6A6A6A6A6F6F6F6F6F6F6F6F6F7E7E7E7E7E7E7E7E7E818181818181
+8181818282828282828282828383838383838383838383838888888888888888888E8E8E8E8E8E
+8E8E8E9292929292929292929797979797979797979797979D9D9D9D9D9D9D9D9DA4A4A4A4A4A4
+A4A4A4AFAFAFAFAFAFAFAFAFB9B9B9B9B9B9B9B9B9C5C5C5C5C5C5C5C5C5C5C5C5D0D0D0D0D0D0
+D0D0D0D7D7D7D7D7D7D7D7D7DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDADADADADADADADADAD1D1D1D1D1D1D1D1D1BFBFBFBFBFBFBFBFBF9C9C9C9C9C9C9C9C9C
+9C9C9C8181818181818181817979797979797979797C7C7C7C7C7C7C7C7C848484848484848484
+8989898989898989898989898F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FB9B9B9B9B9B9B9B9B9
+CDCDCDCDCDCDCDCDCDD6D6D5D6D6D5D6D6D5D6D6D5E0E0E0E0E0E0E0E0E0E8E9E8E8E9E8E8E9E8
+D6D6D5D6D6D5D6D6D5BCBCBCBCBCBCBCBCBCBCBCBCB0B1B0B0B1B0B0B1B0B4B4B4B4B4B4B4B4B4
+BABABABABABABABABAB8B8B8B8B8B8B8B8B8AEAEAEAEAEAEAEAEAEAEAEAEA8A8A8A8A8A8A8A8A8
+AAAAAAAAAAAAAAAAAAB5B5B5B5B5B5B5B5B5C6C6C6C6C6C6C6C6C6D7D7D7D7D7D7D7D7D7D7D7D7
+E2E2E2E2E2E2E2E2E2E9E9E9E9E9E9E9E9E9EEEEEEEEEEEEEEEEEEF1F1F1F1F1F1F1F1F1F1F1F1
+EBEBEBEBEBEBEBEBEBE0E0E0E0E0E0E0E0E0D7D7D7D7D7D7D7D7D7CBCBCBCBCBCBCBCBCBC0C0C0
+C0C0C0C0C0C0C0C0C0B9B9B9B9B9B9B9B9B9B0B1B0B0B1B0B0B1B0AFAFAFAFAFAFAFAFAFBBBBBB
+BBBBBBBBBBBBC5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5D9D9D9D9D9D9D9D9D9F8F8F8
+F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9
+F9F9F9F9F9F9C5C5C5C5C5C5C5C5C5EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDECECECECECECECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB
+EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEAEAEAEAEAEA
+EAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E8E9E8E8E9E8
+E8E9E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6
+E6E6E6E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3E3E3E3E2E2E2E2E2E2
+E2E2E2E1E1E1E1E1E1E1E1E1E0E0E0E0E0E0E0E0E0D9D9D9D9D9D9D9D9D9D9D9D9B9B9B9B9B9B9
+B9B9B9868686868686868686767676767676767676707070707070707070696969696969696969
+696969707070707070707070828282828282828282838383838383838383838383838383838383
+8484848484848484848484848989898989898989898D8D8D8D8D8D8D8D8D909090909090909090
+9494949494949494949494949A9A9A9A9A9A9A9A9AA1A1A1A1A1A1A1A1A1AEAEAEAEAEAEAEAEAE
+BBBBBBBBBBBBBBBBBBC8C8C8C8C8C8C8C8C8C8C8C8D2D2D2D2D2D2D2D2D2D9D9D9D9D9D9D9D9D9
+DDDDDDDDDDDDDDDDDDDFDFDFDFDFDFDFDFDFDDDDDDDDDDDDDDDDDDDDDDDDD7D7D7D7D7D7D7D7D7
+C9C9C9C9C9C9C9C9C9B0B0B0B0B0B0B0B0B08C8C8C8C8C8C8C8C8C8C8C8C797979797979797979
+7878787878787878787D7D7D7D7D7D7D7D7D858585858585858585888888888888888888888888
+8686868686868686868D8D8D8D8D8D8D8D8D9B9B9B9B9B9B9B9B9BACACACACACACACACACBBBBBB
+BBBBBBBBBBBBBBBBBBC8C8C8C8C8C8C8C8C8CCCCCCCCCCCCCCCCCCBDBDBDBDBDBDBDBDBDA7A7A7
+A7A7A7A7A7A7A7A7A79E9E9E9E9E9E9E9E9EA6A6A6A6A6A6A6A6A6B0B0B0B0B0B0B0B0B0B0B1B0
+B0B1B0B0B1B0ABABABABABABABABABABABABAAAAAAAAAAAAAAAAAAA8A8A8A8A8A8A8A8A8A9A9A9
+A9A9A9A9A9A9B3B3B3B3B3B3B3B3B3C2C2C2C2C2C2C2C2C2C2C2C2CCCCCCCCCCCCCCCCCCD8D8D8
+D8D8D8D8D8D8E3E3E3E3E3E3E3E3E3E8E8E8E8E8E8E8E8E8E8E8E8E4E4E4E4E4E4E4E4E4DBDBDB
+DBDBDBDBDBDBD2D2D2D2D2D2D2D2D2C6C6C6C6C6C6C6C6C6BCBCBCBCBCBCBCBCBCBCBCBCB8B8B8
+B8B8B8B8B8B8B0B1B0B0B1B0B0B1B0AEAEAEAEAEAEAEAEAEBCBCBCBCBCBCBCBCBCC9C9C9C9C9C9
+C9C9C9C9C9C9CACACACACACACACACAE1E1E1E1E1E1E1E1E1FCFCFCFCFCFCFCFCFCFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C6C6C6C6C6C6
+C6C6C6EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDECECECECECEC
+ECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB
+EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEB
+EBEBEBEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8
+E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4
+E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3E3E3E3E2E2E2E2E2E2E2E2E2E1E1E1E1E1E1E1E1E1
+E0E0E0E0E0E0E0E0E0D9D9D9D9D9D9D9D9D9D9D9D9B9B9B9B9B9B9B9B9B9868686868686868686
+767676767676767676707070707070707070696969696969696969696969707070707070707070
+828282828282828282838383838383838383838383838383838383848484848484848484848484
+8989898989898989898D8D8D8D8D8D8D8D8D909090909090909090949494949494949494949494
+9A9A9A9A9A9A9A9A9AA1A1A1A1A1A1A1A1A1AEAEAEAEAEAEAEAEAEBBBBBBBBBBBBBBBBBBC8C8C8
+C8C8C8C8C8C8C8C8C8D2D2D2D2D2D2D2D2D2D9D9D9D9D9D9D9D9D9DDDDDDDDDDDDDDDDDDDFDFDF
+DFDFDFDFDFDFDDDDDDDDDDDDDDDDDDDDDDDDD7D7D7D7D7D7D7D7D7C9C9C9C9C9C9C9C9C9B0B0B0
+B0B0B0B0B0B08C8C8C8C8C8C8C8C8C8C8C8C7979797979797979797878787878787878787D7D7D
+7D7D7D7D7D7D8585858585858585858888888888888888888888888686868686868686868D8D8D
+8D8D8D8D8D8D9B9B9B9B9B9B9B9B9BACACACACACACACACACBBBBBBBBBBBBBBBBBBBBBBBBC8C8C8
+C8C8C8C8C8C8CCCCCCCCCCCCCCCCCCBDBDBDBDBDBDBDBDBDA7A7A7A7A7A7A7A7A7A7A7A79E9E9E
+9E9E9E9E9E9EA6A6A6A6A6A6A6A6A6B0B0B0B0B0B0B0B0B0B0B1B0B0B1B0B0B1B0ABABABABABAB
+ABABABABABABAAAAAAAAAAAAAAAAAAA8A8A8A8A8A8A8A8A8A9A9A9A9A9A9A9A9A9B3B3B3B3B3B3
+B3B3B3C2C2C2C2C2C2C2C2C2C2C2C2CCCCCCCCCCCCCCCCCCD8D8D8D8D8D8D8D8D8E3E3E3E3E3E3
+E3E3E3E8E8E8E8E8E8E8E8E8E8E8E8E4E4E4E4E4E4E4E4E4DBDBDBDBDBDBDBDBDBD2D2D2D2D2D2
+D2D2D2C6C6C6C6C6C6C6C6C6BCBCBCBCBCBCBCBCBCBCBCBCB8B8B8B8B8B8B8B8B8B0B1B0B0B1B0
+B0B1B0AEAEAEAEAEAEAEAEAEBCBCBCBCBCBCBCBCBCC9C9C9C9C9C9C9C9C9C9C9C9CACACACACACA
+CACACAE1E1E1E1E1E1E1E1E1FCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C6C6C6C6C6C6C6C6C6EDEDEDEDEDEDEDEDED
+EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDECECECECECECECECECEBEBEBEBEBEBEBEBEB
+EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB
+EBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEA
+E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7
+E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E3E3E3
+E3E3E3E3E3E3E3E3E3E2E2E2E2E2E2E2E2E2E1E1E1E1E1E1E1E1E1E0E0E0E0E0E0E0E0E0D9D9D9
+D9D9D9D9D9D9D9D9D9B9B9B9B9B9B9B9B9B9868686868686868686767676767676767676707070
+707070707070696969696969696969696969707070707070707070828282828282828282838383
+8383838383838383838383838383838484848484848484848484848989898989898989898D8D8D
+8D8D8D8D8D8D9090909090909090909494949494949494949494949A9A9A9A9A9A9A9A9AA1A1A1
+A1A1A1A1A1A1AEAEAEAEAEAEAEAEAEBBBBBBBBBBBBBBBBBBC8C8C8C8C8C8C8C8C8C8C8C8D2D2D2
+D2D2D2D2D2D2D9D9D9D9D9D9D9D9D9DDDDDDDDDDDDDDDDDDDFDFDFDFDFDFDFDFDFDDDDDDDDDDDD
+DDDDDDDDDDDDD7D7D7D7D7D7D7D7D7C9C9C9C9C9C9C9C9C9B0B0B0B0B0B0B0B0B08C8C8C8C8C8C
+8C8C8C8C8C8C7979797979797979797878787878787878787D7D7D7D7D7D7D7D7D858585858585
+8585858888888888888888888888888686868686868686868D8D8D8D8D8D8D8D8D9B9B9B9B9B9B
+9B9B9BACACACACACACACACACBBBBBBBBBBBBBBBBBBBBBBBBC8C8C8C8C8C8C8C8C8CCCCCCCCCCCC
+CCCCCCBDBDBDBDBDBDBDBDBDA7A7A7A7A7A7A7A7A7A7A7A79E9E9E9E9E9E9E9E9EA6A6A6A6A6A6
+A6A6A6B0B0B0B0B0B0B0B0B0B0B1B0B0B1B0B0B1B0ABABABABABABABABABABABABAAAAAAAAAAAA
+AAAAAAA8A8A8A8A8A8A8A8A8A9A9A9A9A9A9A9A9A9B3B3B3B3B3B3B3B3B3C2C2C2C2C2C2C2C2C2
+C2C2C2CCCCCCCCCCCCCCCCCCD8D8D8D8D8D8D8D8D8E3E3E3E3E3E3E3E3E3E8E8E8E8E8E8E8E8E8
+E8E8E8E4E4E4E4E4E4E4E4E4DBDBDBDBDBDBDBDBDBD2D2D2D2D2D2D2D2D2C6C6C6C6C6C6C6C6C6
+BCBCBCBCBCBCBCBCBCBCBCBCB8B8B8B8B8B8B8B8B8B0B1B0B0B1B0B0B1B0AEAEAEAEAEAEAEAEAE
+BCBCBCBCBCBCBCBCBCC9C9C9C9C9C9C9C9C9C9C9C9CACACACACACACACACAE1E1E1E1E1E1E1E1E1
+FCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+F9F9F9F9F9F9F9F9F9C6C6C6C6C6C6C6C6C6ECECECECECECECECECECECECECECECECECECEBEBEB
+EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9
+E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9
+E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E7E7E7
+E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E5E5E5
+E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3E2E2E2E2E2E2E2E2E2E2E2E2E1E1E1
+E1E1E1E1E1E1E0E0E0E0E0E0E0E0E0DFE0DFDFE0DFDFE0DFDDDDDDDDDDDDDDDDDDDDDDDDCCCCCC
+CCCCCCCCCCCCA1A1A1A1A1A1A1A1A1818181818181818181747474747474747474696969696969
+6969696969696E6E6E6E6E6E6E6E6E818181818181818181858585858585858585848484848484
+8484848484848484848484848484848888888888888888888C8C8C8C8C8C8C8C8C8D8D8D8D8D8D
+8D8D8D9090909090909090909090909797979797979797979F9F9F9F9F9F9F9F9FABABABABABAB
+ABABABBBBBBBBBBBBBBBBBBBC8C8C8C8C8C8C8C8C8C8C8C8D5D5D5D5D5D5D5D5D5DBDBDBDBDBDB
+DBDBDBDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD9D9D9D9D9D9D9D9D9D9D9D9D0D0D0D0D0D0
+D0D0D0BDBDBDBDBDBDBDBDBD9E9E9E9E9E9E9E9E9E808080808080808080808080777777777777
+7777777878787878787878787E7E7E7E7E7E7E7E7E838383838383838383828282828282828282
+8282827B7B7B7B7B7B7B7B7B797979797979797979818181818181818181919191919191919191
+A1A1A1A1A1A1A1A1A1A1A1A1ADADADADADADADADADB0B1B0B0B1B0B0B1B0A7A7A7A7A7A7A7A7A7
+9494949494949494949494948989898989898989898C8C8C8C8C8C8C8C8C969696969696969696
+9C9C9C9C9C9C9C9C9CA5A5A5A5A5A5A5A5A5A5A5A5B0B1B0B0B1B0B0B1B0B0B0B0B0B0B0B0B0B0
+A8A8A8A8A8A8A8A8A8A5A5A5A5A5A5A5A5A5ADADADADADADADADADADADADBBBBBBBBBBBBBBBBBB
+CACACACACACACACACAD8D8D8D8D8D8D8D8D8DFDFDFDFDFDFDFDFDFDFDFDFDCDCDCDCDCDCDCDCDC
+D5D5D5D5D5D5D5D5D5CDCDCDCDCDCDCDCDCDC2C2C2C2C2C2C2C2C2B8B8B8B8B8B8B8B8B8B8B8B8
+B5B5B5B5B5B5B5B5B5B1B1B1B1B1B1B1B1B1AFAFAFAFAFAFAFAFAFC0C0C0C0C0C0C0C0C0CECECE
+CECECECECECECECECECECECECECECECECECEE9E9E9E9E9E9E9E9E9FDFDFDFDFDFDFDFDFDFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C3C3C3
+C3C3C3C3C3C3ECECECECECECECECECECECECECECECECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB
+EBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9EAEAEAEAEAEA
+EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9
+E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6
+E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4
+E4E4E4E3E3E3E3E3E3E3E3E3E2E2E2E2E2E2E2E2E2E2E2E2E1E1E1E1E1E1E1E1E1E0E0E0E0E0E0
+E0E0E0DFE0DFDFE0DFDFE0DFDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCCCCCCCCCCCCCA1A1A1A1A1A1
+A1A1A18181818181818181817474747474747474746969696969696969696969696E6E6E6E6E6E
+6E6E6E818181818181818181858585858585858585848484848484848484848484848484848484
+8484848888888888888888888C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D909090909090909090
+9090909797979797979797979F9F9F9F9F9F9F9F9FABABABABABABABABABBBBBBBBBBBBBBBBBBB
+C8C8C8C8C8C8C8C8C8C8C8C8D5D5D5D5D5D5D5D5D5DBDBDBDBDBDBDBDBDBDDDDDDDDDDDDDDDDDD
+DDDDDDDDDDDDDDDDDDD9D9D9D9D9D9D9D9D9D9D9D9D0D0D0D0D0D0D0D0D0BDBDBDBDBDBDBDBDBD
+9E9E9E9E9E9E9E9E9E808080808080808080808080777777777777777777787878787878787878
+7E7E7E7E7E7E7E7E7E8383838383838383838282828282828282828282827B7B7B7B7B7B7B7B7B
+797979797979797979818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1
+ADADADADADADADADADB0B1B0B0B1B0B0B1B0A7A7A7A7A7A7A7A7A7949494949494949494949494
+8989898989898989898C8C8C8C8C8C8C8C8C9696969696969696969C9C9C9C9C9C9C9C9CA5A5A5
+A5A5A5A5A5A5A5A5A5B0B1B0B0B1B0B0B1B0B0B0B0B0B0B0B0B0B0A8A8A8A8A8A8A8A8A8A5A5A5
+A5A5A5A5A5A5ADADADADADADADADADADADADBBBBBBBBBBBBBBBBBBCACACACACACACACACAD8D8D8
+D8D8D8D8D8D8DFDFDFDFDFDFDFDFDFDFDFDFDCDCDCDCDCDCDCDCDCD5D5D5D5D5D5D5D5D5CDCDCD
+CDCDCDCDCDCDC2C2C2C2C2C2C2C2C2B8B8B8B8B8B8B8B8B8B8B8B8B5B5B5B5B5B5B5B5B5B1B1B1
+B1B1B1B1B1B1AFAFAFAFAFAFAFAFAFC0C0C0C0C0C0C0C0C0CECECECECECECECECECECECECECECE
+CECECECECECEE9E9E9E9E9E9E9E9E9FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C3C3C3C3C3C3C3C3C3ECECECECECEC
+ECECECECECECECECECECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEAEAEAEAEAEA
+EAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA
+EAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8
+E8E9E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6
+E6E6E6E6E6E6E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3
+E2E2E2E2E2E2E2E2E2E2E2E2E1E1E1E1E1E1E1E1E1E0E0E0E0E0E0E0E0E0DFE0DFDFE0DFDFE0DF
+DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCCCCCCCCCCCCCA1A1A1A1A1A1A1A1A1818181818181818181
+7474747474747474746969696969696969696969696E6E6E6E6E6E6E6E6E818181818181818181
+858585858585858585848484848484848484848484848484848484848484888888888888888888
+8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D909090909090909090909090979797979797979797
+9F9F9F9F9F9F9F9F9FABABABABABABABABABBBBBBBBBBBBBBBBBBBC8C8C8C8C8C8C8C8C8C8C8C8
+D5D5D5D5D5D5D5D5D5DBDBDBDBDBDBDBDBDBDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD9D9D9
+D9D9D9D9D9D9D9D9D9D0D0D0D0D0D0D0D0D0BDBDBDBDBDBDBDBDBD9E9E9E9E9E9E9E9E9E808080
+8080808080808080807777777777777777777878787878787878787E7E7E7E7E7E7E7E7E838383
+8383838383838282828282828282828282827B7B7B7B7B7B7B7B7B797979797979797979818181
+818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1ADADADADADADADADADB0B1B0
+B0B1B0B0B1B0A7A7A7A7A7A7A7A7A79494949494949494949494948989898989898989898C8C8C
+8C8C8C8C8C8C9696969696969696969C9C9C9C9C9C9C9C9CA5A5A5A5A5A5A5A5A5A5A5A5B0B1B0
+B0B1B0B0B1B0B0B0B0B0B0B0B0B0B0A8A8A8A8A8A8A8A8A8A5A5A5A5A5A5A5A5A5ADADADADADAD
+ADADADADADADBBBBBBBBBBBBBBBBBBCACACACACACACACACAD8D8D8D8D8D8D8D8D8DFDFDFDFDFDF
+DFDFDFDFDFDFDCDCDCDCDCDCDCDCDCD5D5D5D5D5D5D5D5D5CDCDCDCDCDCDCDCDCDC2C2C2C2C2C2
+C2C2C2B8B8B8B8B8B8B8B8B8B8B8B8B5B5B5B5B5B5B5B5B5B1B1B1B1B1B1B1B1B1AFAFAFAFAFAF
+AFAFAFC0C0C0C0C0C0C0C0C0CECECECECECECECECECECECECECECECECECECECECEE9E9E9E9E9E9
+E9E9E9FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFF9F9F9F9F9F9F9F9F9C3C3C3C3C3C3C3C3C3EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB
+EAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E9E9E9E9E9E9E9E9E9
+E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8
+E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8
+E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4
+E4E4E4E4E4E4E4E4E4E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E0E0E0E0E0E0E0E0E0E0E0E0
+DFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFDFDFDFDFDFDFDFDFDCDCDCDCDCDCDCDCDCDCDCDC
+D3D3D3D3D3D3D3D3D3B3B3B3B3B3B3B3B3B38D8D8D8D8D8D8D8D8D7C7C7C7C7C7C7C7C7C6F6F6F
+6F6F6F6F6F6F6F6F6F696969696969696969797979797979797979838383838383838383848484
+8484848484848585858585858585858585858686868686868686868989898989898989898A8A8A
+8A8A8A8A8A8A8D8D8D8D8D8D8D8D8D8D8D8D9494949494949494949E9E9E9E9E9E9E9E9EAAAAAA
+AAAAAAAAAAAABABABABABABABABABAC6C6C6C6C6C6C6C6C6C6C6C6D5D5D5D5D5D5D5D5D5DDDDDD
+DDDDDDDDDDDDDEDEDEDEDEDEDEDEDEDADADADADADADADADAD1D1D1D1D1D1D1D1D1D1D1D1C5C5C5
+C5C5C5C5C5C5ADADADADADADADADAD8C8C8C8C8C8C8C8C8C767676767676767676767676717171
+7171717171717474747474747474747979797979797979797B7B7B7B7B7B7B7B7B767676767676
+7676767676766D6D6D6D6D6D6D6D6D6A6A6A6A6A6A6A6A6A717171717171717171818181818181
+8181818D8D8D8D8D8D8D8D8D8D8D8D9191919191919191919494949494949494948F8F8F8F8F8F
+8F8F8F7A7A7A7A7A7A7A7A7A7A7A7A6161616161616161615D5D5D5D5D5D5D5D5D6F6F6F6F6F6F
+6F6F6F888888888888888888A7A7A7A7A7A7A7A7A7A7A7A7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7
+B7B7B7AAAAAAAAAAAAAAAAAAA2A2A2A2A2A2A2A2A2A4A4A4A4A4A4A4A4A4A4A4A4B0B0B0B0B0B0
+B0B0B0BFBFBFBFBFBFBFBFBFCDCDCDCDCDCDCDCDCDD5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5
+D5D5D5CFCFCFCFCFCFCFCFCFC7C7C7C7C7C7C7C7C7BEBEBEBEBEBEBEBEBEB4B4B4B4B4B4B4B4B4
+B4B4B4B1B1B1B1B1B1B1B1B1B0B0B0B0B0B0B0B0B0AEAEAEAEAEAEAEAEAEBCBCBCBCBCBCBCBCBC
+C7C7C7C7C7C7C7C7C7C7C7C7D6D6D5D6D6D5D6D6D5F5F5F5F5F5F5F5F5F5FEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F7F7F7F7
+B4B4B4B4B4B4B4B4B4EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEA
+E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E9E8
+E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8
+E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E5E5E5E5E5E5E5E5E5E4E4E4
+E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E2E2E2
+E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E0E0E0E0E0E0E0E0E0E0E0E0DFE0DFDFE0DFDFE0DFDFE0DF
+DFE0DFDFE0DFDFDFDFDFDFDFDFDFDFDCDCDCDCDCDCDCDCDCDCDCDCD3D3D3D3D3D3D3D3D3B3B3B3
+B3B3B3B3B3B38D8D8D8D8D8D8D8D8D7C7C7C7C7C7C7C7C7C6F6F6F6F6F6F6F6F6F6F6F6F696969
+696969696969797979797979797979838383838383838383848484848484848484858585858585
+8585858585858686868686868686868989898989898989898A8A8A8A8A8A8A8A8A8D8D8D8D8D8D
+8D8D8D8D8D8D9494949494949494949E9E9E9E9E9E9E9E9EAAAAAAAAAAAAAAAAAABABABABABABA
+BABABAC6C6C6C6C6C6C6C6C6C6C6C6D5D5D5D5D5D5D5D5D5DDDDDDDDDDDDDDDDDDDEDEDEDEDEDE
+DEDEDEDADADADADADADADADAD1D1D1D1D1D1D1D1D1D1D1D1C5C5C5C5C5C5C5C5C5ADADADADADAD
+ADADAD8C8C8C8C8C8C8C8C8C767676767676767676767676717171717171717171747474747474
+7474747979797979797979797B7B7B7B7B7B7B7B7B7676767676767676767676766D6D6D6D6D6D
+6D6D6D6A6A6A6A6A6A6A6A6A7171717171717171718181818181818181818D8D8D8D8D8D8D8D8D
+8D8D8D9191919191919191919494949494949494948F8F8F8F8F8F8F8F8F7A7A7A7A7A7A7A7A7A
+7A7A7A6161616161616161615D5D5D5D5D5D5D5D5D6F6F6F6F6F6F6F6F6F888888888888888888
+A7A7A7A7A7A7A7A7A7A7A7A7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7AAAAAAAAAAAAAAAAAA
+A2A2A2A2A2A2A2A2A2A4A4A4A4A4A4A4A4A4A4A4A4B0B0B0B0B0B0B0B0B0BFBFBFBFBFBFBFBFBF
+CDCDCDCDCDCDCDCDCDD5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5CFCFCFCFCFCFCFCFCF
+C7C7C7C7C7C7C7C7C7BEBEBEBEBEBEBEBEBEB4B4B4B4B4B4B4B4B4B4B4B4B1B1B1B1B1B1B1B1B1
+B0B0B0B0B0B0B0B0B0AEAEAEAEAEAEAEAEAEBCBCBCBCBCBCBCBCBCC7C7C7C7C7C7C7C7C7C7C7C7
+D6D6D5D6D6D5D6D6D5F5F5F5F5F5F5F5F5F5FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F7F7F7F7B4B4B4B4B4B4B4B4B4E9E9E9
+E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E8E8E8
+E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8
+E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6
+E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3
+E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1
+E1E1E1DFE0DFDFE0DFDFE0DFDFE0DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDDDDDDDDDDDD
+DDDDDDDCDCDCDCDCDCDCDCDCDCDCDCD8D8D8D8D8D8D8D8D8C1C1C1C1C1C1C1C1C1999999999999
+9999998585858585858585857B7B7B7B7B7B7B7B7B7B7B7B707070707070707070757575757575
+7575757F7F7F7F7F7F7F7F7F838383838383838383858585858585858585858585868686868686
+8686868787878787878787878787878787878787878A8A8A8A8A8A8A8A8A8A8A8A909090909090
+9090909B9B9B9B9B9B9B9B9BA8A8A8A8A8A8A8A8A8B7B7B7B7B7B7B7B7B7C4C4C4C4C4C4C4C4C4
+C4C4C4D1D1D1D1D1D1D1D1D1DADADADADADADADADADDDDDDDDDDDDDDDDDDD8D8D8D8D8D8D8D8D8
+CCCCCCCCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBB9D9D9D9D9D9D9D9D9D7C7C7C7C7C7C7C7C7C
+7070707070707070707070706F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F
+6D6D6D6D6D6D6D6D6D6363636363636363636363635252525252525252524D4D4D4D4D4D4D4D4D
+5A5A5A5A5A5A5A5A5A6F6F6F6F6F6F6F6F6F7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F
+7E7E7E7E7E7E7E7E7E7B7B7B7B7B7B7B7B7B6A6A6A6A6A6A6A6A6A6A6A6A5F605F5F605F5F605F
+6262626262626262626B6B6B6B6B6B6B6B6B8D8D8D8D8D8D8D8D8DAFAFAFAFAFAFAFAFAFAFAFAF
+B8B8B8B8B8B8B8B8B8B9B9B9B9B9B9B9B9B9B2B2B2B2B2B2B2B2B2AAAAAAAAAAAAAAAAAAA7A7A7
+A7A7A7A7A7A7A7A7A7ADADADADADADADADADBBBBBBBBBBBBBBBBBBC7C7C7C7C7C7C7C7C7CDCDCD
+CDCDCDCDCDCDCDCDCDCFCFCFCFCFCFCFCFCFCACACACACACACACACAC3C3C3C3C3C3C3C3C3BBBBBB
+BBBBBBBBBBBBB2B2B2B2B2B2B2B2B2B2B2B2B0B0B0B0B0B0B0B0B0AEAEAEAEAEAEAEAEAEACACAC
+ACACACACACACB3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3E4E4E4E4E4E4E4E4E4FCFCFC
+FCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C1C1C1C1C1C1C1C1C1E9E9E9E9E9E9E9E9E9EAEAEAEAEAEA
+EAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8
+E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7
+E7E7E7E6E6E6E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E5E5E5E5E5E5
+E5E5E5E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4
+E4E4E4E4E4E4E4E4E4E4E4E4E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DFE0DFDFE0DFDFE0DF
+DFE0DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDC
+DCDCDCD8D8D8D8D8D8D8D8D8C1C1C1C1C1C1C1C1C1999999999999999999858585858585858585
+7B7B7B7B7B7B7B7B7B7B7B7B7070707070707070707575757575757575757F7F7F7F7F7F7F7F7F
+838383838383838383858585858585858585858585868686868686868686878787878787878787
+8787878787878787878A8A8A8A8A8A8A8A8A8A8A8A9090909090909090909B9B9B9B9B9B9B9B9B
+A8A8A8A8A8A8A8A8A8B7B7B7B7B7B7B7B7B7C4C4C4C4C4C4C4C4C4C4C4C4D1D1D1D1D1D1D1D1D1
+DADADADADADADADADADDDDDDDDDDDDDDDDDDD8D8D8D8D8D8D8D8D8CCCCCCCCCCCCCCCCCCCCCCCC
+BBBBBBBBBBBBBBBBBB9D9D9D9D9D9D9D9D9D7C7C7C7C7C7C7C7C7C707070707070707070707070
+6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6D6D6D6D6D6D6D6D6D636363
+6363636363636363635252525252525252524D4D4D4D4D4D4D4D4D5A5A5A5A5A5A5A5A5A6F6F6F
+6F6F6F6F6F6F7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7E7E7E7E7E7E7E7E7E7B7B7B
+7B7B7B7B7B7B6A6A6A6A6A6A6A6A6A6A6A6A5F605F5F605F5F605F6262626262626262626B6B6B
+6B6B6B6B6B6B8D8D8D8D8D8D8D8D8DAFAFAFAFAFAFAFAFAFAFAFAFB8B8B8B8B8B8B8B8B8B9B9B9
+B9B9B9B9B9B9B2B2B2B2B2B2B2B2B2AAAAAAAAAAAAAAAAAAA7A7A7A7A7A7A7A7A7A7A7A7ADADAD
+ADADADADADADBBBBBBBBBBBBBBBBBBC7C7C7C7C7C7C7C7C7CDCDCDCDCDCDCDCDCDCDCDCDCFCFCF
+CFCFCFCFCFCFCACACACACACACACACAC3C3C3C3C3C3C3C3C3BBBBBBBBBBBBBBBBBBB2B2B2B2B2B2
+B2B2B2B2B2B2B0B0B0B0B0B0B0B0B0AEAEAEAEAEAEAEAEAEACACACACACACACACACB3B3B3B3B3B3
+B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3E4E4E4E4E4E4E4E4E4FCFCFCFCFCFCFCFCFCFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9
+F9F9F9C1C1C1C1C1C1C1C1C1E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9
+E9E9E9E9E9E9E9E9E9E9E9E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7
+E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6
+E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5
+E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4
+E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DFE0DFDFE0DFDFE0DFDFE0DFDFDFDFDFDFDFDFDFDF
+DFDFDFDFDFDFDFDFDFDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDCDCDCD8D8D8D8D8D8D8D8D8
+C1C1C1C1C1C1C1C1C19999999999999999998585858585858585857B7B7B7B7B7B7B7B7B7B7B7B
+7070707070707070707575757575757575757F7F7F7F7F7F7F7F7F838383838383838383858585
+8585858585858585858686868686868686868787878787878787878787878787878787878A8A8A
+8A8A8A8A8A8A8A8A8A9090909090909090909B9B9B9B9B9B9B9B9BA8A8A8A8A8A8A8A8A8B7B7B7
+B7B7B7B7B7B7C4C4C4C4C4C4C4C4C4C4C4C4D1D1D1D1D1D1D1D1D1DADADADADADADADADADDDDDD
+DDDDDDDDDDDDD8D8D8D8D8D8D8D8D8CCCCCCCCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBB9D9D9D
+9D9D9D9D9D9D7C7C7C7C7C7C7C7C7C7070707070707070707070706F6F6F6F6F6F6F6F6F6F6F6F
+6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6D6D6D6D6D6D6D6D6D636363636363636363636363525252
+5252525252524D4D4D4D4D4D4D4D4D5A5A5A5A5A5A5A5A5A6F6F6F6F6F6F6F6F6F7C7C7C7C7C7C
+7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7E7E7E7E7E7E7E7E7E7B7B7B7B7B7B7B7B7B6A6A6A6A6A6A
+6A6A6A6A6A6A5F605F5F605F5F605F6262626262626262626B6B6B6B6B6B6B6B6B8D8D8D8D8D8D
+8D8D8DAFAFAFAFAFAFAFAFAFAFAFAFB8B8B8B8B8B8B8B8B8B9B9B9B9B9B9B9B9B9B2B2B2B2B2B2
+B2B2B2AAAAAAAAAAAAAAAAAAA7A7A7A7A7A7A7A7A7A7A7A7ADADADADADADADADADBBBBBBBBBBBB
+BBBBBBC7C7C7C7C7C7C7C7C7CDCDCDCDCDCDCDCDCDCDCDCDCFCFCFCFCFCFCFCFCFCACACACACACA
+CACACAC3C3C3C3C3C3C3C3C3BBBBBBBBBBBBBBBBBBB2B2B2B2B2B2B2B2B2B2B2B2B0B0B0B0B0B0
+B0B0B0AEAEAEAEAEAEAEAEAEACACACACACACACACACB3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3
+C3C3C3E4E4E4E4E4E4E4E4E4FCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C1C1C1C1C1C1C1C1C1
+E9E9E9E9E9E9E9E9E9E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8
+E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6
+E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E4E4E4
+E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3E2E2E2E2E2E2E2E2E2E1E1E1
+E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DFE0DF
+DFE0DFDFE0DFDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDCDCDC
+DCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDBD9D9D9D9D9D9D9D9D9C7C7C7C7C7C7C7C7C7A1A1A1
+A1A1A1A1A1A18989898989898989898484848484848484848484847E7E7E7E7E7E7E7E7E787878
+7878787878787B7B7B7B7B7B7B7B7B828282828282828282848484848484848484848484858585
+8585858585858686868686868686868585858585858585858686868686868686868686868D8D8D
+8D8D8D8D8D8D979797979797979797A4A4A4A4A4A4A4A4A4B1B1B1B1B1B1B1B1B1BEBEBEBEBEBE
+BEBEBEBEBEBEC9C9C9C9C9C9C9C9C9D1D1D1D1D1D1D1D1D1D5D5D5D5D5D5D5D5D5D0D0D0D0D0D0
+D0D0D0C4C4C4C4C4C4C4C4C4C4C4C4AFAFAFAFAFAFAFAFAF8B8B8B8B8B8B8B8B8B717171717171
+7171716D6D6D6D6D6D6D6D6D6D6D6D727272727272727272707070707070707070676767676767
+6767675E5E5E5E5E5E5E5E5E4D4D4D4D4D4D4D4D4D4D4D4D3B3B3B3B3B3B3B3B3B373737373737
+3737374747474747474747475D5D5D5D5D5D5D5D5D6C6C6C6C6C6C6C6C6C6C6C6C6F6F6F6F6F6F
+6F6F6F7272727272727272727C7C7C7C7C7C7C7C7C848484848484848484848484909090909090
+9090908F8F8F8F8F8F8F8F8F8E8E8E8E8E8E8E8E8EA2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2
+B2B2B2B6B6B6B6B6B6B6B6B6B8B8B8B8B8B8B8B8B8B7B7B7B7B7B7B7B7B7B1B1B1B1B1B1B1B1B1
+AEAEAEAEAEAEAEAEAEAEAEAEB0B1B0B0B1B0B0B1B0BDBDBDBDBDBDBDBDBDC7C7C7C7C7C7C7C7C7
+CCCCCCCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBC6C6C6C6C6C6C6C6C6C0C0C0C0C0C0C0C0C0
+B8B8B8B8B8B8B8B8B8B0B0B0B0B0B0B0B0B0B0B0B0B0B1B0B0B1B0B0B1B0AFAFAFAFAFAFAFAFAF
+AAAAAAAAAAAAAAAAAAB1B1B1B1B1B1B1B1B1D0D0D0D0D0D0D0D0D0D0D0D0F5F5F5F5F5F5F5F5F5
+FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFAD0D0D0D0D0D0D0D0D0E9E9E9E9E9E9E9E9E9E8E9E8
+E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E9E8E8E8E8E8E8E8E8E8E8E7E7E7
+E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6
+E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4
+E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3E2E2E2E2E2E2E2E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1
+E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DFE0DFDFE0DFDFE0DFDEDEDEDEDEDE
+DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDBDBDBDBDBDB
+DBDBDBDBDBDBD9D9D9D9D9D9D9D9D9C7C7C7C7C7C7C7C7C7A1A1A1A1A1A1A1A1A1898989898989
+8989898484848484848484848484847E7E7E7E7E7E7E7E7E7878787878787878787B7B7B7B7B7B
+7B7B7B828282828282828282848484848484848484848484858585858585858585868686868686
+8686868585858585858585858686868686868686868686868D8D8D8D8D8D8D8D8D979797979797
+979797A4A4A4A4A4A4A4A4A4B1B1B1B1B1B1B1B1B1BEBEBEBEBEBEBEBEBEBEBEBEC9C9C9C9C9C9
+C9C9C9D1D1D1D1D1D1D1D1D1D5D5D5D5D5D5D5D5D5D0D0D0D0D0D0D0D0D0C4C4C4C4C4C4C4C4C4
+C4C4C4AFAFAFAFAFAFAFAFAF8B8B8B8B8B8B8B8B8B7171717171717171716D6D6D6D6D6D6D6D6D
+6D6D6D7272727272727272727070707070707070706767676767676767675E5E5E5E5E5E5E5E5E
+4D4D4D4D4D4D4D4D4D4D4D4D3B3B3B3B3B3B3B3B3B373737373737373737474747474747474747
+5D5D5D5D5D5D5D5D5D6C6C6C6C6C6C6C6C6C6C6C6C6F6F6F6F6F6F6F6F6F727272727272727272
+7C7C7C7C7C7C7C7C7C8484848484848484848484849090909090909090908F8F8F8F8F8F8F8F8F
+8E8E8E8E8E8E8E8E8EA2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2B6B6B6B6B6B6B6B6B6
+B8B8B8B8B8B8B8B8B8B7B7B7B7B7B7B7B7B7B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAE
+B0B1B0B0B1B0B0B1B0BDBDBDBDBDBDBDBDBDC7C7C7C7C7C7C7C7C7CCCCCCCCCCCCCCCCCCCCCCCC
+CBCBCBCBCBCBCBCBCBC6C6C6C6C6C6C6C6C6C0C0C0C0C0C0C0C0C0B8B8B8B8B8B8B8B8B8B0B0B0
+B0B0B0B0B0B0B0B0B0B0B1B0B0B1B0B0B1B0AFAFAFAFAFAFAFAFAFAAAAAAAAAAAAAAAAAAB1B1B1
+B1B1B1B1B1B1D0D0D0D0D0D0D0D0D0D0D0D0F5F5F5F5F5F5F5F5F5FEFEFEFEFEFEFEFEFEFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA
+FAFAFAFAFAFAD0D0D0D0D0D0D0D0D0E8E9E8E8E9E8E8E9E8E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8
+E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E6E6E6E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5
+E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4
+E4E4E4E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E1E1E1E1E1E1E1E1E1E0E0E0E0E0E0
+E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E0E0E0E0E0E0E0E0E0DFE0DFDFE0DF
+DFE0DFDFE0DFDFE0DFDFE0DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDDDDDDDDDDDD
+DDDDDDDCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8D8D8D8D8D8
+D8D8D8CECECECECECECECECEAEAEAEAEAEAEAEAEAE909090909090909090898989898989898989
+8989898888888888888888887D7D7D7D7D7D7D7D7D7A7A7A7A7A7A7A7A7A818181818181818181
+848484848484848484848484838383838383838383838383838383838383848484848484848484
+848484848484848484848484888888888888888888939393939393939393A1A1A1A1A1A1A1A1A1
+ACACACACACACACACACB5B5B5B5B5B5B5B5B5B5B5B5BEBEBEBEBEBEBEBEBEC6C6C6C6C6C6C6C6C6
+CACACACACACACACACAC5C5C5C5C5C5C5C5C5B9B9B9B9B9B9B9B9B9B9B9B9A0A0A0A0A0A0A0A0A0
+7D7D7D7D7D7D7D7D7D6B6B6B6B6B6B6B6B6B6C6C6C6C6C6C6C6C6C6C6C6C767676767676767676
+7777777777777777776A6A6A6A6A6A6A6A6A585858585858585858494949494949494949494949
+4C4C4C4C4C4C4C4C4C5151515151515151515555555555555555555C5C5C5C5C5C5C5C5C636363
+636363636363636363616161616161616161676767676767676767808080808080808080949494
+9494949494949494949E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA8A8A8
+A8A8A8A8A8A8AAAAAAAAAAAAAAAAAAAAAAAAB0B0B0B0B0B0B0B0B0B2B2B2B2B2B2B2B2B2B6B6B6
+B6B6B6B6B6B6B8B8B8B8B8B8B8B8B8B4B4B4B4B4B4B4B4B4B4B4B4B6B6B6B6B6B6B6B6B6BFBFBF
+BFBFBFBFBFBFC9C9C9C9C9C9C9C9C9CCCCCCCCCCCCCCCCCCCCCCCCC9C9C9C9C9C9C9C9C9C2C2C2
+C2C2C2C2C2C2BDBDBDBDBDBDBDBDBDB5B5B5B5B5B5B5B5B5AFAFAFAFAFAFAFAFAFAFAFAFB0B1B0
+B0B1B0B0B1B0AFAFAFAFAFAFAFAFAFAAAAAAAAAAAAAAAAAAB9B9B9B9B9B9B9B9B9E8E8E8E8E8E8
+E8E8E8E8E8E8FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9CACACACACACA
+CACACAE8E9E8E8E9E8E8E9E8E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8
+E8E8E8E6E6E6E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5
+E5E5E5E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E2E2E2E2E2E2E2E2E2
+E2E2E2E2E2E2E2E2E2E2E2E2E1E1E1E1E1E1E1E1E1E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1
+E1E1E1E1E1E1E1E1E1E1E1E1E0E0E0E0E0E0E0E0E0DFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DF
+DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDC
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8D8D8D8D8D8D8D8D8CECECECECECECECECE
+AEAEAEAEAEAEAEAEAE909090909090909090898989898989898989898989888888888888888888
+7D7D7D7D7D7D7D7D7D7A7A7A7A7A7A7A7A7A818181818181818181848484848484848484848484
+838383838383838383838383838383838383848484848484848484848484848484848484848484
+888888888888888888939393939393939393A1A1A1A1A1A1A1A1A1ACACACACACACACACACB5B5B5
+B5B5B5B5B5B5B5B5B5BEBEBEBEBEBEBEBEBEC6C6C6C6C6C6C6C6C6CACACACACACACACACAC5C5C5
+C5C5C5C5C5C5B9B9B9B9B9B9B9B9B9B9B9B9A0A0A0A0A0A0A0A0A07D7D7D7D7D7D7D7D7D6B6B6B
+6B6B6B6B6B6B6C6C6C6C6C6C6C6C6C6C6C6C7676767676767676767777777777777777776A6A6A
+6A6A6A6A6A6A5858585858585858584949494949494949494949494C4C4C4C4C4C4C4C4C515151
+5151515151515555555555555555555C5C5C5C5C5C5C5C5C636363636363636363636363616161
+6161616161616767676767676767678080808080808080809494949494949494949494949E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA8A8A8A8A8A8A8A8A8AAAAAAAAAAAA
+AAAAAAAAAAAAB0B0B0B0B0B0B0B0B0B2B2B2B2B2B2B2B2B2B6B6B6B6B6B6B6B6B6B8B8B8B8B8B8
+B8B8B8B4B4B4B4B4B4B4B4B4B4B4B4B6B6B6B6B6B6B6B6B6BFBFBFBFBFBFBFBFBFC9C9C9C9C9C9
+C9C9C9CCCCCCCCCCCCCCCCCCCCCCCCC9C9C9C9C9C9C9C9C9C2C2C2C2C2C2C2C2C2BDBDBDBDBDBD
+BDBDBDB5B5B5B5B5B5B5B5B5AFAFAFAFAFAFAFAFAFAFAFAFB0B1B0B0B1B0B0B1B0AFAFAFAFAFAF
+AFAFAFAAAAAAAAAAAAAAAAAAB9B9B9B9B9B9B9B9B9E8E8E8E8E8E8E8E8E8E8E8E8FDFDFDFDFDFD
+FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9CACACACACACACACACAE8E9E8E8E9E8E8E9E8
+E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E6E6E6E6E6E6E6E6E6
+E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5
+E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2
+E1E1E1E1E1E1E1E1E1E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1
+E0E0E0E0E0E0E0E0E0DFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFDFDFDFDFDFDFDFDFDFDFDF
+DFDFDFDFDFDFDFDFDFDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBD8D8D8D8D8D8D8D8D8CECECECECECECECECEAEAEAEAEAEAEAEAEAE909090
+9090909090908989898989898989898989898888888888888888887D7D7D7D7D7D7D7D7D7A7A7A
+7A7A7A7A7A7A818181818181818181848484848484848484848484838383838383838383838383
+838383838383848484848484848484848484848484848484848484888888888888888888939393
+939393939393A1A1A1A1A1A1A1A1A1ACACACACACACACACACB5B5B5B5B5B5B5B5B5B5B5B5BEBEBE
+BEBEBEBEBEBEC6C6C6C6C6C6C6C6C6CACACACACACACACACAC5C5C5C5C5C5C5C5C5B9B9B9B9B9B9
+B9B9B9B9B9B9A0A0A0A0A0A0A0A0A07D7D7D7D7D7D7D7D7D6B6B6B6B6B6B6B6B6B6C6C6C6C6C6C
+6C6C6C6C6C6C7676767676767676767777777777777777776A6A6A6A6A6A6A6A6A585858585858
+5858584949494949494949494949494C4C4C4C4C4C4C4C4C515151515151515151555555555555
+5555555C5C5C5C5C5C5C5C5C636363636363636363636363616161616161616161676767676767
+6767678080808080808080809494949494949494949494949E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9F9F9F9F9F9F9F9F9FA8A8A8A8A8A8A8A8A8AAAAAAAAAAAAAAAAAAAAAAAAB0B0B0B0B0B0
+B0B0B0B2B2B2B2B2B2B2B2B2B6B6B6B6B6B6B6B6B6B8B8B8B8B8B8B8B8B8B4B4B4B4B4B4B4B4B4
+B4B4B4B6B6B6B6B6B6B6B6B6BFBFBFBFBFBFBFBFBFC9C9C9C9C9C9C9C9C9CCCCCCCCCCCCCCCCCC
+CCCCCCC9C9C9C9C9C9C9C9C9C2C2C2C2C2C2C2C2C2BDBDBDBDBDBDBDBDBDB5B5B5B5B5B5B5B5B5
+AFAFAFAFAFAFAFAFAFAFAFAFB0B1B0B0B1B0B0B1B0AFAFAFAFAFAFAFAFAFAAAAAAAAAAAAAAAAAA
+B9B9B9B9B9B9B9B9B9E8E8E8E8E8E8E8E8E8E8E8E8FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+F9F9F9F9F9F9F9F9F9CACACACACACACACACAE8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E8E8E8
+E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E5E5E5
+E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E2E2E2
+E2E2E2E2E2E2E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E0E0E0E0E0E0E0E0E0E1E1E1
+E1E1E1E1E1E1E0E0E0E0E0E0E0E0E0DFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DF
+DFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDDDDDDDCDCDC
+DCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDADADADADADADADADADADADAD8D8D8
+D8D8D8D8D8D8D2D2D2D2D2D2D2D2D2BCBCBCBCBCBCBCBCBC9B9B9B9B9B9B9B9B9B8F8F8F8F8F8F
+8F8F8F8F8F8F909090909090909090898989898989898989828282828282828282828282828282
+828282848484848484848484848484828282828282828282828282828282828282838383838383
+8383838282828282828282828282828585858585858585859090909090909090909C9C9C9C9C9C
+9C9C9CA6A6A6A6A6A6A6A6A6ADADADADADADADADADADADADB6B6B6B6B6B6B6B6B6BFBFBFBFBFBF
+BFBFBFC1C1C1C1C1C1C1C1C1BBBBBBBBBBBBBBBBBBAFAFAFAFAFAFAFAFAFAFAFAF919191919191
+9191917272727272727272726969696969696969696F6F6F6F6F6F6F6F6F6F6F6F7B7B7B7B7B7B
+7B7B7B7D7D7D7D7D7D7D7D7D757575757575757575646464646464646464565656565656565656
+5656565D5D5D5D5D5D5D5D5D6666666666666666666363636363636363635D5D5D5D5D5D5D5D5D
+5B5B5B5B5B5B5B5B5B5B5B5B5656565656565656565D5D5D5D5D5D5D5D5D787878787878787878
+8B8B8B8B8B8B8B8B8B8B8B8B9292929292929292929898989898989898989E9E9E9E9E9E9E9E9E
+A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A3A3A3A9A9A9A9A9A9A9A9A9ADADADADADADADADAD
+B4B4B4B4B4B4B4B4B4B6B6B6B6B6B6B6B6B6B4B4B4B4B4B4B4B4B4B4B4B4B8B8B8B8B8B8B8B8B8
+C3C3C3C3C3C3C3C3C3CBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCCCCCCCCCCC7C7C7C7C7C7C7C7C7
+BFBFBFBFBFBFBFBFBFB9B9B9B9B9B9B9B9B9B3B3B3B3B3B3B3B3B3B0B0B0B0B0B0B0B0B0B0B0B0
+B0B1B0B0B1B0B0B1B0AFAFAFAFAFAFAFAFAFABABABABABABABABABBFBFBFBFBFBFBFBFBFF1F1F1
+F1F1F1F1F1F1F1F1F1FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9BDBDBD
+BDBDBDBDBDBDE8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E7E7E7
+E7E7E7E7E7E7E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4
+E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E2E2E2E2E2E2E2E2E2E0E0E0E0E0E0
+E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E0E0E0E0E0E0
+E0E0E0DFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DF
+DFE0DFDEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDADADADADADADADADADADADAD8D8D8D8D8D8D8D8D8D2D2D2D2D2D2
+D2D2D2BCBCBCBCBCBCBCBCBC9B9B9B9B9B9B9B9B9B8F8F8F8F8F8F8F8F8F8F8F8F909090909090
+909090898989898989898989828282828282828282828282828282828282848484848484848484
+848484828282828282828282828282828282828282838383838383838383828282828282828282
+8282828585858585858585859090909090909090909C9C9C9C9C9C9C9C9CA6A6A6A6A6A6A6A6A6
+ADADADADADADADADADADADADB6B6B6B6B6B6B6B6B6BFBFBFBFBFBFBFBFBFC1C1C1C1C1C1C1C1C1
+BBBBBBBBBBBBBBBBBBAFAFAFAFAFAFAFAFAFAFAFAF919191919191919191727272727272727272
+6969696969696969696F6F6F6F6F6F6F6F6F6F6F6F7B7B7B7B7B7B7B7B7B7D7D7D7D7D7D7D7D7D
+7575757575757575756464646464646464645656565656565656565656565D5D5D5D5D5D5D5D5D
+6666666666666666666363636363636363635D5D5D5D5D5D5D5D5D5B5B5B5B5B5B5B5B5B5B5B5B
+5656565656565656565D5D5D5D5D5D5D5D5D7878787878787878788B8B8B8B8B8B8B8B8B8B8B8B
+9292929292929292929898989898989898989E9E9E9E9E9E9E9E9EA2A2A2A2A2A2A2A2A2A3A3A3
+A3A3A3A3A3A3A3A3A3A9A9A9A9A9A9A9A9A9ADADADADADADADADADB4B4B4B4B4B4B4B4B4B6B6B6
+B6B6B6B6B6B6B4B4B4B4B4B4B4B4B4B4B4B4B8B8B8B8B8B8B8B8B8C3C3C3C3C3C3C3C3C3CBCBCB
+CBCBCBCBCBCBCCCCCCCCCCCCCCCCCCCCCCCCC7C7C7C7C7C7C7C7C7BFBFBFBFBFBFBFBFBFB9B9B9
+B9B9B9B9B9B9B3B3B3B3B3B3B3B3B3B0B0B0B0B0B0B0B0B0B0B0B0B0B1B0B0B1B0B0B1B0AFAFAF
+AFAFAFAFAFAFABABABABABABABABABBFBFBFBFBFBFBFBFBFF1F1F1F1F1F1F1F1F1F1F1F1FEFEFE
+FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9BDBDBDBDBDBDBDBDBDE8E9E8E8E9E8
+E8E9E8E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4
+E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3
+E3E3E3E3E3E3E3E3E3E3E3E3E1E1E1E1E1E1E1E1E1E0E0E0E0E0E0E0E0E0E0E0E0DFE0DFDFE0DF
+DFE0DFDFDFDFDFDFDFDFDFDFDFE0DFDFE0DFDFE0DFDFDFDFDFDFDFDFDFDFDEDEDEDEDEDEDEDEDE
+DEDEDEDFDFDFDFDFDFDFDFDFDFE0DFDFE0DFDFE0DFDEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDD
+DCDCDCDCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDADADADADADADADADA
+D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D7D7D4D4D4D4D4D4D4D4D4C5C5C5C5C5C5C5C5C5
+A4A4A4A4A4A4A4A4A4929292929292929292929292949494949494949494929292929292929292
+8E8E8E8E8E8E8E8E8E868686868686868686848484848484848484848484818181818181818181
+818181818181818181818181818181818181808080808080808080808080838383838383838383
+8B8B8B8B8B8B8B8B8B969696969696969696A1A1A1A1A1A1A1A1A1A8A8A8A8A8A8A8A8A8A8A8A8
+AFAFAFAFAFAFAFAFAFB6B6B6B6B6B6B6B6B6B8B8B8B8B8B8B8B8B8B5B5B5B5B5B5B5B5B5A6A6A6
+A6A6A6A6A6A6A6A6A68686868686868686866D6D6D6D6D6D6D6D6D6B6B6B6B6B6B6B6B6B747474
+7474747474747474747C7C7C7C7C7C7C7C7C7A7A7A7A7A7A7A7A7A7676767676767676766E6E6E
+6E6E6E6E6E6E656565656565656565656565646464646464646464666666666666666666616161
+6161616161615959595959595959595454545454545454545454545555555555555555555F605F
+5F605F5F605F7171717171717171718181818181818181818181818D8D8D8D8D8D8D8D8D959595
+9595959595959A9A9A9A9A9A9A9A9A9E9E9E9E9E9E9E9E9EA2A2A2A2A2A2A2A2A2A2A2A2A8A8A8
+A8A8A8A8A8A8A9A9A9A9A9A9A9A9A9AEAEAEAEAEAEAEAEAEAFAFAFAFAFAFAFAFAFB0B0B0B0B0B0
+B0B0B0B0B0B0B6B6B6B6B6B6B6B6B6BFBFBFBFBFBFBFBFBFC6C6C6C6C6C6C6C6C6CBCBCBCBCBCB
+CBCBCBCBCBCBC7C7C7C7C7C7C7C7C7C0C0C0C0C0C0C0C0C0B8B8B8B8B8B8B8B8B8B3B3B3B3B3B3
+B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B2B2B2B2B2B2B2B2B2B0B0B0B0B0B0B0B0B0A9A9A9A9A9A9
+A9A9A9BEBEBEBEBEBEBEBEBEF0F0F0F0F0F0F0F0F0F0F0F0FEFEFEFEFEFEFEFEFEFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFF9F9F9F9F9F9F9F9F9C7C7C7C7C7C7C7C7C7E8E9E8E8E9E8E8E9E8E7E7E7E7E7E7E7E7E7
+E8E8E8E8E8E8E8E8E8E8E8E8E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4
+E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3
+E1E1E1E1E1E1E1E1E1E0E0E0E0E0E0E0E0E0E0E0E0DFE0DFDFE0DFDFE0DFDFDFDFDFDFDFDFDFDF
+DFE0DFDFE0DFDFE0DFDFDFDFDFDFDFDFDFDFDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDF
+DFE0DFDFE0DFDFE0DFDEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDCDCDC
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDADADADADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9
+D7D7D7D7D7D7D7D7D7D4D4D4D4D4D4D4D4D4C5C5C5C5C5C5C5C5C5A4A4A4A4A4A4A4A4A4929292
+9292929292929292929494949494949494949292929292929292928E8E8E8E8E8E8E8E8E868686
+868686868686848484848484848484848484818181818181818181818181818181818181818181
+8181818181818080808080808080808080808383838383838383838B8B8B8B8B8B8B8B8B969696
+969696969696A1A1A1A1A1A1A1A1A1A8A8A8A8A8A8A8A8A8A8A8A8AFAFAFAFAFAFAFAFAFB6B6B6
+B6B6B6B6B6B6B8B8B8B8B8B8B8B8B8B5B5B5B5B5B5B5B5B5A6A6A6A6A6A6A6A6A6A6A6A6868686
+8686868686866D6D6D6D6D6D6D6D6D6B6B6B6B6B6B6B6B6B7474747474747474747474747C7C7C
+7C7C7C7C7C7C7A7A7A7A7A7A7A7A7A7676767676767676766E6E6E6E6E6E6E6E6E656565656565
+656565656565646464646464646464666666666666666666616161616161616161595959595959
+5959595454545454545454545454545555555555555555555F605F5F605F5F605F717171717171
+7171718181818181818181818181818D8D8D8D8D8D8D8D8D9595959595959595959A9A9A9A9A9A
+9A9A9A9E9E9E9E9E9E9E9E9EA2A2A2A2A2A2A2A2A2A2A2A2A8A8A8A8A8A8A8A8A8A9A9A9A9A9A9
+A9A9A9AEAEAEAEAEAEAEAEAEAFAFAFAFAFAFAFAFAFB0B0B0B0B0B0B0B0B0B0B0B0B6B6B6B6B6B6
+B6B6B6BFBFBFBFBFBFBFBFBFC6C6C6C6C6C6C6C6C6CBCBCBCBCBCBCBCBCBCBCBCBC7C7C7C7C7C7
+C7C7C7C0C0C0C0C0C0C0C0C0B8B8B8B8B8B8B8B8B8B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1
+B1B1B1B2B2B2B2B2B2B2B2B2B0B0B0B0B0B0B0B0B0A9A9A9A9A9A9A9A9A9BEBEBEBEBEBEBEBEBE
+F0F0F0F0F0F0F0F0F0F0F0F0FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9
+C7C7C7C7C7C7C7C7C7E8E9E8E8E9E8E8E9E8E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8
+E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4
+E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E1E1E1E1E1E1E1E1E1E0E0E0
+E0E0E0E0E0E0E0E0E0DFE0DFDFE0DFDFE0DFDFDFDFDFDFDFDFDFDFDFE0DFDFE0DFDFE0DFDFDFDF
+DFDFDFDFDFDFDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFE0DFDFE0DFDFE0DFDEDEDE
+DEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDADADADADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D7D7D4D4D4
+D4D4D4D4D4D4C5C5C5C5C5C5C5C5C5A4A4A4A4A4A4A4A4A4929292929292929292929292949494
+9494949494949292929292929292928E8E8E8E8E8E8E8E8E868686868686868686848484848484
+848484848484818181818181818181818181818181818181818181818181818181808080808080
+8080808080808383838383838383838B8B8B8B8B8B8B8B8B969696969696969696A1A1A1A1A1A1
+A1A1A1A8A8A8A8A8A8A8A8A8A8A8A8AFAFAFAFAFAFAFAFAFB6B6B6B6B6B6B6B6B6B8B8B8B8B8B8
+B8B8B8B5B5B5B5B5B5B5B5B5A6A6A6A6A6A6A6A6A6A6A6A68686868686868686866D6D6D6D6D6D
+6D6D6D6B6B6B6B6B6B6B6B6B7474747474747474747474747C7C7C7C7C7C7C7C7C7A7A7A7A7A7A
+7A7A7A7676767676767676766E6E6E6E6E6E6E6E6E656565656565656565656565646464646464
+646464666666666666666666616161616161616161595959595959595959545454545454545454
+5454545555555555555555555F605F5F605F5F605F717171717171717171818181818181818181
+8181818D8D8D8D8D8D8D8D8D9595959595959595959A9A9A9A9A9A9A9A9A9E9E9E9E9E9E9E9E9E
+A2A2A2A2A2A2A2A2A2A2A2A2A8A8A8A8A8A8A8A8A8A9A9A9A9A9A9A9A9A9AEAEAEAEAEAEAEAEAE
+AFAFAFAFAFAFAFAFAFB0B0B0B0B0B0B0B0B0B0B0B0B6B6B6B6B6B6B6B6B6BFBFBFBFBFBFBFBFBF
+C6C6C6C6C6C6C6C6C6CBCBCBCBCBCBCBCBCBCBCBCBC7C7C7C7C7C7C7C7C7C0C0C0C0C0C0C0C0C0
+B8B8B8B8B8B8B8B8B8B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B2B2B2B2B2B2B2B2B2
+B0B0B0B0B0B0B0B0B0A9A9A9A9A9A9A9A9A9BEBEBEBEBEBEBEBEBEF0F0F0F0F0F0F0F0F0F0F0F0
+FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C7C7C7C7C7C7C7C7C7E7E7E7
+E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E5E5E5E5E5E5E5E5E5E4E4E4
+E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4
+E4E4E4E4E4E4E2E2E2E2E2E2E2E2E2E0E0E0E0E0E0E0E0E0DFE0DFDFE0DFDFE0DFDFE0DFDFDFDF
+DFDFDFDFDFDFDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDDDDDDDDDDDD
+DDDDDDDDDDDDDEDEDEDEDEDEDEDEDEDFE0DFDFE0DFDFE0DFDEDEDEDEDEDEDEDEDEDDDDDDDDDDDD
+DDDDDDDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDADADADADADA
+DADADAD8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D4D4D4D4D4D4D4D4D4C8C8C8C8C8C8
+C8C8C8A6A6A6A6A6A6A6A6A69090909090909090909090909090909090909090908E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E858585858585858585848484848484848484848484818181818181
+8181817F7F7F7F7F7F7F7F7F7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E818181818181
+8181818686868686868686869090909090909090909B9B9B9B9B9B9B9B9BA2A2A2A2A2A2A2A2A2
+A2A2A2A8A8A8A8A8A8A8A8A8AEAEAEAEAEAEAEAEAEB0B1B0B0B1B0B0B1B0AEAEAEAEAEAEAEAEAE
+9E9E9E9E9E9E9E9E9E9E9E9E8181818181818181816F6F6F6F6F6F6F6F6F707070707070707070
+7878787878787878787878787A7A7A7A7A7A7A7A7A777777777777777777737373737373737373
+707070707070707070696969696969696969696969646464646464646464626262626262626262
+5F605F5F605F5F605F5E5E5E5E5E5E5E5E5E626262626262626262626262676767676767676767
+6E6E6E6E6E6E6E6E6E787878787878787878888888888888888888888888979797979797979797
+9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9EA3A3A3A3A3A3A3A3A3A3A3A3
+A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A8A8A8A8A8A8A8A8A8AAAAAAAAAAAAAAAAAAABABAB
+ABABABABABABABABABACACACACACACACACACB5B5B5B5B5B5B5B5B5BFBFBFBFBFBFBFBFBFC7C7C7
+C7C7C7C7C7C7C7C7C7C6C6C6C6C6C6C6C6C6BFBFBFBFBFBFBFBFBFB8B8B8B8B8B8B8B8B8B4B4B4
+B4B4B4B4B4B4B3B3B3B3B3B3B3B3B3B3B3B3B4B4B4B4B4B4B4B4B4B0B0B0B0B0B0B0B0B0A8A8A8
+A8A8A8A8A8A8BBBBBBBBBBBBBBBBBBEEEEEEEEEEEEEEEEEEEEEEEEFDFDFDFDFDFDFDFDFDFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFBFBFBFBFBFBFBFBFBD7D7D7D7D7D7D7D7D7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7
+E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3
+E3E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E2E2E2E2E2E2
+E2E2E2E0E0E0E0E0E0E0E0E0DFE0DFDFE0DFDFE0DFDFE0DFDFDFDFDFDFDFDFDFDFDEDEDEDEDEDE
+DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDEDE
+DEDEDEDFE0DFDFE0DFDFE0DFDEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDADADADADADADADADAD8D8D8D8D8D8D8D8D8
+D8D8D8D7D7D7D7D7D7D7D7D7D4D4D4D4D4D4D4D4D4C8C8C8C8C8C8C8C8C8A6A6A6A6A6A6A6A6A6
+9090909090909090909090909090909090909090908E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8585858585858585858484848484848484848484848181818181818181817F7F7F7F7F7F7F7F7F
+7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E818181818181818181868686868686868686
+9090909090909090909B9B9B9B9B9B9B9B9BA2A2A2A2A2A2A2A2A2A2A2A2A8A8A8A8A8A8A8A8A8
+AEAEAEAEAEAEAEAEAEB0B1B0B0B1B0B0B1B0AEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E
+8181818181818181816F6F6F6F6F6F6F6F6F707070707070707070787878787878787878787878
+7A7A7A7A7A7A7A7A7A777777777777777777737373737373737373707070707070707070696969
+6969696969696969696464646464646464646262626262626262625F605F5F605F5F605F5E5E5E
+5E5E5E5E5E5E6262626262626262626262626767676767676767676E6E6E6E6E6E6E6E6E787878
+7878787878788888888888888888888888889797979797979797979D9D9D9D9D9D9D9D9D9C9C9C
+9C9C9C9C9C9C9E9E9E9E9E9E9E9E9EA3A3A3A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A6A6A6
+A6A6A6A6A6A6A8A8A8A8A8A8A8A8A8AAAAAAAAAAAAAAAAAAABABABABABABABABABABABABACACAC
+ACACACACACACB5B5B5B5B5B5B5B5B5BFBFBFBFBFBFBFBFBFC7C7C7C7C7C7C7C7C7C7C7C7C6C6C6
+C6C6C6C6C6C6BFBFBFBFBFBFBFBFBFB8B8B8B8B8B8B8B8B8B4B4B4B4B4B4B4B4B4B3B3B3B3B3B3
+B3B3B3B3B3B3B4B4B4B4B4B4B4B4B4B0B0B0B0B0B0B0B0B0A8A8A8A8A8A8A8A8A8BBBBBBBBBBBB
+BBBBBBEEEEEEEEEEEEEEEEEEEEEEEEFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFB
+FBFBFBD7D7D7D7D7D7D7D7D7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7
+E7E7E7E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3
+E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E2E2E2E2E2E2E2E2E2E0E0E0E0E0E0E0E0E0
+DFE0DFDFE0DFDFE0DFDFE0DFDFDFDFDFDFDFDFDFDFDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE
+DEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDEDEDEDEDEDFE0DFDFE0DFDFE0DF
+DEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDADADADADADADADADAD8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7
+D4D4D4D4D4D4D4D4D4C8C8C8C8C8C8C8C8C8A6A6A6A6A6A6A6A6A6909090909090909090909090
+9090909090909090908E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E858585858585858585848484
+8484848484848484848181818181818181817F7F7F7F7F7F7F7F7F7E7E7E7E7E7E7E7E7E7E7E7E
+7E7E7E7E7E7E7E7E7E8181818181818181818686868686868686869090909090909090909B9B9B
+9B9B9B9B9B9BA2A2A2A2A2A2A2A2A2A2A2A2A8A8A8A8A8A8A8A8A8AEAEAEAEAEAEAEAEAEB0B1B0
+B0B1B0B0B1B0AEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E8181818181818181816F6F6F
+6F6F6F6F6F6F7070707070707070707878787878787878787878787A7A7A7A7A7A7A7A7A777777
+777777777777737373737373737373707070707070707070696969696969696969696969646464
+6464646464646262626262626262625F605F5F605F5F605F5E5E5E5E5E5E5E5E5E626262626262
+6262626262626767676767676767676E6E6E6E6E6E6E6E6E787878787878787878888888888888
+8888888888889797979797979797979D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E
+9E9E9EA3A3A3A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A8A8A8A8A8A8
+A8A8A8AAAAAAAAAAAAAAAAAAABABABABABABABABABABABABACACACACACACACACACB5B5B5B5B5B5
+B5B5B5BFBFBFBFBFBFBFBFBFC7C7C7C7C7C7C7C7C7C7C7C7C6C6C6C6C6C6C6C6C6BFBFBFBFBFBF
+BFBFBFB8B8B8B8B8B8B8B8B8B4B4B4B4B4B4B4B4B4B3B3B3B3B3B3B3B3B3B3B3B3B4B4B4B4B4B4
+B4B4B4B0B0B0B0B0B0B0B0B0A8A8A8A8A8A8A8A8A8BBBBBBBBBBBBBBBBBBEEEEEEEEEEEEEEEEEE
+EEEEEEFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBD7D7D7D7D7D7D7D7D7
+E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E5E5E5E5E5E5E5E5E5
+E3E3E3E3E3E3E3E3E3E2E2E2E2E2E2E2E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1
+E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DFE0DFDFE0DFDFE0DFDFDFDFDFDFDFDFDFDFDFDFDF
+DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDDDDDDDDDDDDDDDDDDDDDDDD
+DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDCDCDC
+DCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDBD9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9
+D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D3D3D3D3D3D3D3D3D3C7C7C7
+C7C7C7C7C7C79E9E9E9E9E9E9E9E9E8484848484848484848484848A8A8A8A8A8A8A8A8A8B8B8B
+8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B848484848484848484828282828282828282828282818181
+8181818181817F7F7F7F7F7F7F7F7F7D7D7D7D7D7D7D7D7D7C7C7C7C7C7C7C7C7C7C7C7C7E7E7E
+7E7E7E7E7E7E8383838383838383838C8C8C8C8C8C8C8C8C9595959595959595959E9E9E9E9E9E
+9E9E9E9E9E9EA1A1A1A1A1A1A1A1A1A7A7A7A7A7A7A7A7A7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAA9B9B9B9B9B9B9B9B9B9B9B9B818181818181818181737373737373737373777777777777
+7777777B7B7B7B7B7B7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A767676767676767676707070707070
+7070706C6C6C6C6C6C6C6C6C696969696969696969696969666666666666666666646464646464
+6464646969696969696969697070707070707070707474747474747474747474747A7A7A7A7A7A
+7A7A7A7E7E7E7E7E7E7E7E7E878787878787878787959595959595959595959595A0A0A0A0A0A0
+A0A0A0A0A0A0A0A0A0A0A0A09E9E9E9E9E9E9E9E9EA1A1A1A1A1A1A1A1A1A3A3A3A3A3A3A3A3A3
+A3A3A3A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A1A1A1A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2ACACACACACACACACACB8B8B8B8B8B8B8B8B8
+C2C2C2C2C2C2C2C2C2C2C2C2C4C4C4C4C4C4C4C4C4BEBEBEBEBEBEBEBEBEB8B8B8B8B8B8B8B8B8
+B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5ADADADADADADADADAD
+A6A6A6A6A6A6A6A6A6BBBBBBBBBBBBBBBBBBEFEFEFEFEFEFEFEFEFEFEFEFFEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9CACACACACACACACACAE6E6E6E6E6E6E6E6E6E7E7E7
+E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E5E5E5E5E5E5E5E5E5E3E3E3E3E3E3E3E3E3E2E2E2
+E2E2E2E2E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1
+E1E1E1E1E1E1DFE0DFDFE0DFDFE0DFDFDFDFDFDFDFDFDFDFDFDFDFDEDEDEDEDEDEDEDEDEDEDEDE
+DEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
+DDDDDDDDDDDDDEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDBDBDBDBDBDB
+DBDBDBDBDBDBD9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8
+D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D3D3D3D3D3D3D3D3D3C7C7C7C7C7C7C7C7C79E9E9E9E9E9E
+9E9E9E8484848484848484848484848A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B
+8B8B8B8484848484848484848282828282828282828282828181818181818181817F7F7F7F7F7F
+7F7F7F7D7D7D7D7D7D7D7D7D7C7C7C7C7C7C7C7C7C7C7C7C7E7E7E7E7E7E7E7E7E838383838383
+8383838C8C8C8C8C8C8C8C8C9595959595959595959E9E9E9E9E9E9E9E9E9E9E9EA1A1A1A1A1A1
+A1A1A1A7A7A7A7A7A7A7A7A7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9B9B9B9B9B9B9B9B9B
+9B9B9B8181818181818181817373737373737373737777777777777777777B7B7B7B7B7B7B7B7B
+7B7B7B7A7A7A7A7A7A7A7A7A7676767676767676767070707070707070706C6C6C6C6C6C6C6C6C
+696969696969696969696969666666666666666666646464646464646464696969696969696969
+7070707070707070707474747474747474747474747A7A7A7A7A7A7A7A7A7E7E7E7E7E7E7E7E7E
+878787878787878787959595959595959595959595A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0
+9E9E9E9E9E9E9E9E9EA1A1A1A1A1A1A1A1A1A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3
+A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A1A1A1A1A1A1A1A1A1A1A1A1
+A2A2A2A2A2A2A2A2A2ACACACACACACACACACB8B8B8B8B8B8B8B8B8C2C2C2C2C2C2C2C2C2C2C2C2
+C4C4C4C4C4C4C4C4C4BEBEBEBEBEBEBEBEBEB8B8B8B8B8B8B8B8B8B5B5B5B5B5B5B5B5B5B5B5B5
+B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5ADADADADADADADADADA6A6A6A6A6A6A6A6A6BBBBBB
+BBBBBBBBBBBBEFEFEFEFEFEFEFEFEFEFEFEFFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9
+F9F9F9F9F9F9CACACACACACACACACAE4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4
+E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3E1E1E1E1E1E1E1E1E1DFE0DFDFE0DF
+DFE0DFE1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DFE0DFDFE0DF
+DFE0DFDEDEDEDEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDEDE
+DEDEDEDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC
+DCDCDCDCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDADADADADADADADADADADADAD9D9D9D9D9D9
+D9D9D9D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
+D7D7D7D5D5D5D5D5D5D5D5D5CACACACACACACACACAA0A0A0A0A0A0A0A0A0767676767676767676
+7676767E7E7E7E7E7E7E7E7E8A8A8A8A8A8A8A8A8A8C8C8C8C8C8C8C8C8C868686868686868686
+8383838383838383838383838181818181818181818080808080808080807E7E7E7E7E7E7E7E7E
+7C7C7C7C7C7C7C7C7C7C7C7C7D7D7D7D7D7D7D7D7D808080808080808080878787878787878787
+9090909090909090909999999999999999999999999D9D9D9D9D9D9D9D9DA1A1A1A1A1A1A1A1A1
+A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A59A9A9A9A9A9A9A9A9A9A9A9A868686868686868686
+7C7C7C7C7C7C7C7C7C7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7B7B7B7B7B7B7B7B7B
+7676767676767676767171717171717171716E6E6E6E6E6E6E6E6E727272727272727272727272
+7171717171717171716F6F6F6F6F6F6F6F6F757575757575757575818181818181818181848484
+8484848484848484848B8B8B8B8B8B8B8B8B929292929292929292999999999999999999A1A1A1
+A1A1A1A1A1A1A1A1A1A8A8A8A8A8A8A8A8A8A6A6A6A6A6A6A6A6A6A2A2A2A2A2A2A2A2A2A7A7A7
+A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A3A3A3A3A3A3A3A3A3A1A1A1
+A1A1A1A1A1A1A1A1A1A1A1A1A1A1A19A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AA4A4A4
+A4A4A4A4A4A4B1B1B1B1B1B1B1B1B1B9B9B9B9B9B9B9B9B9B9B9B9BFBFBFBFBFBFBFBFBFBFBFBF
+BFBFBFBFBFBFB9B9B9B9B9B9B9B9B9B7B7B7B7B7B7B7B7B7B6B6B6B6B6B6B6B6B6B6B6B6B4B4B4
+B4B4B4B4B4B4ABABABABABABABABABA3A3A3A3A3A3A3A3A3BABABABABABABABABAF0F0F0F0F0F0
+F0F0F0F0F0F0FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBD4D4D4D4D4D4
+D4D4D4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4
+E4E4E4E3E3E3E3E3E3E3E3E3E1E1E1E1E1E1E1E1E1DFE0DFDFE0DFDFE0DFE1E1E1E1E1E1E1E1E1
+E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DFE0DFDFE0DFDFE0DFDEDEDEDEDEDEDEDEDE
+DEDEDEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDD
+DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC
+DBDBDBDBDBDBDBDBDBDADADADADADADADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9
+D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D5D5D5D5D5D5D5D5D5
+CACACACACACACACACAA0A0A0A0A0A0A0A0A07676767676767676767676767E7E7E7E7E7E7E7E7E
+8A8A8A8A8A8A8A8A8A8C8C8C8C8C8C8C8C8C868686868686868686838383838383838383838383
+8181818181818181818080808080808080807E7E7E7E7E7E7E7E7E7C7C7C7C7C7C7C7C7C7C7C7C
+7D7D7D7D7D7D7D7D7D808080808080808080878787878787878787909090909090909090999999
+9999999999999999999D9D9D9D9D9D9D9D9DA1A1A1A1A1A1A1A1A1A5A5A5A5A5A5A5A5A5A5A5A5
+A5A5A5A5A5A59A9A9A9A9A9A9A9A9A9A9A9A8686868686868686867C7C7C7C7C7C7C7C7C7D7D7D
+7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7B7B7B7B7B7B7B7B7B767676767676767676717171
+7171717171716E6E6E6E6E6E6E6E6E7272727272727272727272727171717171717171716F6F6F
+6F6F6F6F6F6F7575757575757575758181818181818181818484848484848484848484848B8B8B
+8B8B8B8B8B8B929292929292929292999999999999999999A1A1A1A1A1A1A1A1A1A1A1A1A8A8A8
+A8A8A8A8A8A8A6A6A6A6A6A6A6A6A6A2A2A2A2A2A2A2A2A2A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8
+A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A3A3A3A3A3A3A3A3A3A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1
+A1A1A19A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AA4A4A4A4A4A4A4A4A4B1B1B1B1B1B1
+B1B1B1B9B9B9B9B9B9B9B9B9B9B9B9BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB9B9B9B9B9B9
+B9B9B9B7B7B7B7B7B7B7B7B7B6B6B6B6B6B6B6B6B6B6B6B6B4B4B4B4B4B4B4B4B4ABABABABABAB
+ABABABA3A3A3A3A3A3A3A3A3BABABABABABABABABAF0F0F0F0F0F0F0F0F0F0F0F0FEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBD4D4D4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4
+E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3
+E1E1E1E1E1E1E1E1E1DFE0DFDFE0DFDFE0DFE1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1
+E1E1E1E1E1E1E1E1E1DFE0DFDFE0DFDFE0DFDEDEDEDEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDD
+DDDDDDDDDDDDDDDDDDDEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDCDCDC
+DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDADADA
+DADADADADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D7D7D7
+D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D5D5D5D5D5D5D5D5D5CACACACACACACACACAA0A0A0
+A0A0A0A0A0A07676767676767676767676767E7E7E7E7E7E7E7E7E8A8A8A8A8A8A8A8A8A8C8C8C
+8C8C8C8C8C8C868686868686868686838383838383838383838383818181818181818181808080
+8080808080807E7E7E7E7E7E7E7E7E7C7C7C7C7C7C7C7C7C7C7C7C7D7D7D7D7D7D7D7D7D808080
+8080808080808787878787878787879090909090909090909999999999999999999999999D9D9D
+9D9D9D9D9D9DA1A1A1A1A1A1A1A1A1A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A59A9A9A9A9A9A
+9A9A9A9A9A9A8686868686868686867C7C7C7C7C7C7C7C7C7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D
+7D7D7D7D7D7D7B7B7B7B7B7B7B7B7B7676767676767676767171717171717171716E6E6E6E6E6E
+6E6E6E7272727272727272727272727171717171717171716F6F6F6F6F6F6F6F6F757575757575
+7575758181818181818181818484848484848484848484848B8B8B8B8B8B8B8B8B929292929292
+929292999999999999999999A1A1A1A1A1A1A1A1A1A1A1A1A8A8A8A8A8A8A8A8A8A6A6A6A6A6A6
+A6A6A6A2A2A2A2A2A2A2A2A2A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7
+A7A7A7A3A3A3A3A3A3A3A3A3A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A19A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9AA4A4A4A4A4A4A4A4A4B1B1B1B1B1B1B1B1B1B9B9B9B9B9B9B9B9B9
+B9B9B9BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB9B9B9B9B9B9B9B9B9B7B7B7B7B7B7B7B7B7
+B6B6B6B6B6B6B6B6B6B6B6B6B4B4B4B4B4B4B4B4B4ABABABABABABABABABA3A3A3A3A3A3A3A3A3
+BABABABABABABABABAF0F0F0F0F0F0F0F0F0F0F0F0FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FBFBFBFBFBFBFBFBFBD4D4D4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4
+E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3E2E2E2E2E2E2E2E2E2E1E1E1E1E1E1E1E1E1DFE0DF
+DFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDEDEDE
+DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDEDEDE
+DEDEDEDEDEDEDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDADADADADADADADADADADADAD9D9D9
+D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6
+D6D6D6D6D6D6D5D5D5D5D5D5D5D5D5CECECECECECECECECEB0B0B0B0B0B0B0B0B07A7A7A7A7A7A
+7A7A7A7A7A7A707070707070707070848484848484848484898989898989898989858585858585
+8585858282828282828282828282828181818181818181817F7F7F7F7F7F7F7F7F7D7D7D7D7D7D
+7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D818181818181
+8181818989898989898989899292929292929292929292929999999999999999999E9E9E9E9E9E
+9E9E9EA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A19A9A9A9A9A9A9A9A9A9A9A9A8D8D8D8D8D8D
+8D8D8D8585858585858585858181818181818181817E7E7E7E7E7E7E7E7E7E7E7E7C7C7C7C7C7C
+7C7C7C7979797979797979797777777777777777777777777777777777777C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7B7B7B7B7B7B7B7B7B828282828282828282919191919191919191
+999999999999999999999999A4A4A4A4A4A4A4A4A4ADADADADADADADADADB0B0B0B0B0B0B0B0B0
+B1B1B1B1B1B1B1B1B1B1B1B1B5B5B5B5B5B5B5B5B5B1B1B1B1B1B1B1B1B1ADADADADADADADADAD
+B0B1B0B0B1B0B0B1B0AFAFAFAFAFAFAFAFAFAFAFAFA8A8A8A8A8A8A8A8A89E9E9E9E9E9E9E9E9E
+9A9A9A9A9A9A9A9A9A999999999999999999909090909090909090909090909090909090909090
+9C9C9C9C9C9C9C9C9CA8A8A8A8A8A8A8A8A8B2B2B2B2B2B2B2B2B2B2B2B2BBBBBBBBBBBBBBBBBB
+BEBEBEBEBEBEBEBEBEB9B9B9B9B9B9B9B9B9B8B8B8B8B8B8B8B8B8B7B7B7B7B7B7B7B7B7B7B7B7
+B2B2B2B2B2B2B2B2B2A8A8A8A8A8A8A8A8A8A1A1A1A1A1A1A1A1A1B8B8B8B8B8B8B8B8B8EEEEEE
+EEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCE1E1E1
+E1E1E1E1E1E1E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E3E3E3
+E3E3E3E3E3E3E2E2E2E2E2E2E2E2E2E1E1E1E1E1E1E1E1E1DFE0DFDFE0DFDFE0DFDFE0DFDFE0DF
+DFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE
+DEDEDEDEDEDEDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDEDEDEDEDEDEDEDEDEDCDCDCDCDCDC
+DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDADADADADADADADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9D9D9D9
+D9D9D9D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5D5D5D5D5D5
+D5D5D5CECECECECECECECECEB0B0B0B0B0B0B0B0B07A7A7A7A7A7A7A7A7A7A7A7A707070707070
+707070848484848484848484898989898989898989858585858585858585828282828282828282
+8282828181818181818181817F7F7F7F7F7F7F7F7F7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D
+7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D818181818181818181898989898989898989
+9292929292929292929292929999999999999999999E9E9E9E9E9E9E9E9EA0A0A0A0A0A0A0A0A0
+A1A1A1A1A1A1A1A1A19A9A9A9A9A9A9A9A9A9A9A9A8D8D8D8D8D8D8D8D8D858585858585858585
+8181818181818181817E7E7E7E7E7E7E7E7E7E7E7E7C7C7C7C7C7C7C7C7C797979797979797979
+7777777777777777777777777777777777777C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7B7B7B7B7B7B7B7B7B828282828282828282919191919191919191999999999999999999999999
+A4A4A4A4A4A4A4A4A4ADADADADADADADADADB0B0B0B0B0B0B0B0B0B1B1B1B1B1B1B1B1B1B1B1B1
+B5B5B5B5B5B5B5B5B5B1B1B1B1B1B1B1B1B1ADADADADADADADADADB0B1B0B0B1B0B0B1B0AFAFAF
+AFAFAFAFAFAFAFAFAFA8A8A8A8A8A8A8A8A89E9E9E9E9E9E9E9E9E9A9A9A9A9A9A9A9A9A999999
+9999999999999090909090909090909090909090909090909090909C9C9C9C9C9C9C9C9CA8A8A8
+A8A8A8A8A8A8B2B2B2B2B2B2B2B2B2B2B2B2BBBBBBBBBBBBBBBBBBBEBEBEBEBEBEBEBEBEB9B9B9
+B9B9B9B9B9B9B8B8B8B8B8B8B8B8B8B7B7B7B7B7B7B7B7B7B7B7B7B2B2B2B2B2B2B2B2B2A8A8A8
+A8A8A8A8A8A8A1A1A1A1A1A1A1A1A1B8B8B8B8B8B8B8B8B8EEEEEEEEEEEEEEEEEEEEEEEEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCE1E1E1E1E1E1E1E1E1E3E3E3E3E3E3
+E3E3E3E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3E3E3E3E2E2E2E2E2E2E2E2E2E1E1E1E1E1E1
+E1E1E1E0E0E0E0E0E0E0E0E0DFDFDFDFDFDFDFDFDFDFE0DFDFE0DFDFE0DFDFE0DFDEDEDEDEDEDE
+DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
+DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDADADADADADADADADA
+D9D9D9D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7
+D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D2D2D2D2D2D2D2D2D2
+C3C3C3C3C3C3C3C3C39B9B9B9B9B9B9B9B9B9B9B9B787878787878787878787878787878787878
+8181818181818181818080808080808080807F7F7F7F7F7F7F7F7F7F7F7F808080808080808080
+7E7E7E7E7E7E7E7E7E7C7C7C7C7C7C7C7C7C7D7D7D7D7D7D7D7D7D7D7D7D7C7C7C7C7C7C7C7C7C
+7B7B7B7B7B7B7B7B7B7E7E7E7E7E7E7E7E7E8484848484848484848F8F8F8F8F8F8F8F8F8F8F8F
+9595959595959595959A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D989898
+9898989898989898988F8F8F8F8F8F8F8F8F898989898989898989858585858585858585828282
+8282828282828282828080808080808080807F7F7F7F7F7F7F7F7F7E7E7E7E7E7E7E7E7E7F7F7F
+7F7F7F7F7F7F838383838383838383838383848484848484848484868686868686868686909090
+909090909090A5A5A5A5A5A5A5A5A5B4B4B4B4B4B4B4B4B4B4B4B4BFBFBFBFBFBFBFBFBFC5C5C5
+C5C5C5C5C5C5C3C3C3C3C3C3C3C3C3C2C2C2C2C2C2C2C2C2C2C2C2C5C5C5C5C5C5C5C5C5C2C2C2
+C2C2C2C2C2C2BEBEBEBEBEBEBEBEBEBCBCBCBCBCBCBCBCBCB4B4B4B4B4B4B4B4B4B4B4B4AAAAAA
+AAAAAAAAAAAA9F9F9F9F9F9F9F9F9F979797979797979797909090909090909090898989898989
+898989898989878787878787878787949494949494949494A1A1A1A1A1A1A1A1A1AFAFAFAFAFAF
+AFAFAFAFAFAFBBBBBBBBBBBBBBBBBBBFBFBFBFBFBFBFBFBFBABABABABABABABABAB5B5B5B5B5B5
+B5B5B5B6B6B6B6B6B6B6B6B6B6B6B6B0B1B0B0B1B0B0B1B0A5A5A5A5A5A5A5A5A5A0A0A0A0A0A0
+A0A0A0BBBBBBBBBBBBBBBBBBF0F0F0F0F0F0F0F0F0F0F0F0FEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFF9F9F9F9F9F9F9F9F9C7C7C7C7C7C7C7C7C7E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4
+E3E3E3E3E3E3E3E3E3E3E3E3E2E2E2E2E2E2E2E2E2E1E1E1E1E1E1E1E1E1E0E0E0E0E0E0E0E0E0
+DFDFDFDFDFDFDFDFDFDFE0DFDFE0DFDFE0DFDFE0DFDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE
+DEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
+DDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDADADADADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9
+D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6
+D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D2D2D2D2D2D2D2D2D2C3C3C3C3C3C3C3C3C39B9B9B
+9B9B9B9B9B9B9B9B9B787878787878787878787878787878787878818181818181818181808080
+8080808080807F7F7F7F7F7F7F7F7F7F7F7F8080808080808080807E7E7E7E7E7E7E7E7E7C7C7C
+7C7C7C7C7C7C7D7D7D7D7D7D7D7D7D7D7D7D7C7C7C7C7C7C7C7C7C7B7B7B7B7B7B7B7B7B7E7E7E
+7E7E7E7E7E7E8484848484848484848F8F8F8F8F8F8F8F8F8F8F8F9595959595959595959A9A9A
+9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9898989898989898989898988F8F8F
+8F8F8F8F8F8F898989898989898989858585858585858585828282828282828282828282808080
+8080808080807F7F7F7F7F7F7F7F7F7E7E7E7E7E7E7E7E7E7F7F7F7F7F7F7F7F7F838383838383
+838383838383848484848484848484868686868686868686909090909090909090A5A5A5A5A5A5
+A5A5A5B4B4B4B4B4B4B4B4B4B4B4B4BFBFBFBFBFBFBFBFBFC5C5C5C5C5C5C5C5C5C3C3C3C3C3C3
+C3C3C3C2C2C2C2C2C2C2C2C2C2C2C2C5C5C5C5C5C5C5C5C5C2C2C2C2C2C2C2C2C2BEBEBEBEBEBE
+BEBEBEBCBCBCBCBCBCBCBCBCB4B4B4B4B4B4B4B4B4B4B4B4AAAAAAAAAAAAAAAAAA9F9F9F9F9F9F
+9F9F9F979797979797979797909090909090909090898989898989898989898989878787878787
+878787949494949494949494A1A1A1A1A1A1A1A1A1AFAFAFAFAFAFAFAFAFAFAFAFBBBBBBBBBBBB
+BBBBBBBFBFBFBFBFBFBFBFBFBABABABABABABABABAB5B5B5B5B5B5B5B5B5B6B6B6B6B6B6B6B6B6
+B6B6B6B0B1B0B0B1B0B0B1B0A5A5A5A5A5A5A5A5A5A0A0A0A0A0A0A0A0A0BBBBBBBBBBBBBBBBBB
+F0F0F0F0F0F0F0F0F0F0F0F0FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9
+C7C7C7C7C7C7C7C7C7E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3E3E3E3
+E2E2E2E2E2E2E2E2E2E1E1E1E1E1E1E1E1E1E0E0E0E0E0E0E0E0E0DFDFDFDFDFDFDFDFDFDFE0DF
+DFE0DFDFE0DFDFE0DFDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDDDDDD
+DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCDCDC
+DCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDADADADADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D8D8D8
+D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5
+D6D6D5D6D6D5D2D2D2D2D2D2D2D2D2C3C3C3C3C3C3C3C3C39B9B9B9B9B9B9B9B9B9B9B9B787878
+7878787878787878787878787878788181818181818181818080808080808080807F7F7F7F7F7F
+7F7F7F7F7F7F8080808080808080807E7E7E7E7E7E7E7E7E7C7C7C7C7C7C7C7C7C7D7D7D7D7D7D
+7D7D7D7D7D7D7C7C7C7C7C7C7C7C7C7B7B7B7B7B7B7B7B7B7E7E7E7E7E7E7E7E7E848484848484
+8484848F8F8F8F8F8F8F8F8F8F8F8F9595959595959595959A9A9A9A9A9A9A9A9A9C9C9C9C9C9C
+9C9C9C9D9D9D9D9D9D9D9D9D9898989898989898989898988F8F8F8F8F8F8F8F8F898989898989
+8989898585858585858585858282828282828282828282828080808080808080807F7F7F7F7F7F
+7F7F7F7E7E7E7E7E7E7E7E7E7F7F7F7F7F7F7F7F7F838383838383838383838383848484848484
+848484868686868686868686909090909090909090A5A5A5A5A5A5A5A5A5B4B4B4B4B4B4B4B4B4
+B4B4B4BFBFBFBFBFBFBFBFBFC5C5C5C5C5C5C5C5C5C3C3C3C3C3C3C3C3C3C2C2C2C2C2C2C2C2C2
+C2C2C2C5C5C5C5C5C5C5C5C5C2C2C2C2C2C2C2C2C2BEBEBEBEBEBEBEBEBEBCBCBCBCBCBCBCBCBC
+B4B4B4B4B4B4B4B4B4B4B4B4AAAAAAAAAAAAAAAAAA9F9F9F9F9F9F9F9F9F979797979797979797
+909090909090909090898989898989898989898989878787878787878787949494949494949494
+A1A1A1A1A1A1A1A1A1AFAFAFAFAFAFAFAFAFAFAFAFBBBBBBBBBBBBBBBBBBBFBFBFBFBFBFBFBFBF
+BABABABABABABABABAB5B5B5B5B5B5B5B5B5B6B6B6B6B6B6B6B6B6B6B6B6B0B1B0B0B1B0B0B1B0
+A5A5A5A5A5A5A5A5A5A0A0A0A0A0A0A0A0A0BBBBBBBBBBBBBBBBBBF0F0F0F0F0F0F0F0F0F0F0F0
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C7C7C7C7C7C7C7C7C7E2E2E2
+E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E2E2E2E2E2E2E2E2E2E2E2E2E0E0E0E0E0E0E0E0E0E0E0E0
+E0E0E0E0E0E0DFE0DFDFE0DFDFE0DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDDDDDD
+DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
+DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDADADADADADA
+DADADAD9D9D9D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6
+D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D3D3D3D3D3D3
+D3D3D3CECECECECECECECECEBCBCBCBCBCBCBCBCBCBCBCBC989898989898989898737373737373
+7373737171717171717171717474747474747474747777777777777777777777777E7E7E7E7E7E
+7E7E7E7D7D7D7D7D7D7D7D7D7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7A7A7A7A7A7A
+7A7A7A7A7A7A7A7A7A7A7A7A7D7D7D7D7D7D7D7D7D8383838383838383838C8C8C8C8C8C8C8C8C
+8C8C8C9494949494949494949999999999999999999D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D
+9797979797979797979797979191919191919191918E8E8E8E8E8E8E8E8E898989898989898989
+8484848484848484848484848383838383838383838181818181818181817F7F7F7F7F7F7F7F7F
+8181818181818181818686868686868686868686868C8C8C8C8C8C8C8C8C939393939393939393
+A0A0A0A0A0A0A0A0A0B3B3B3B3B3B3B3B3B3C2C2C2C2C2C2C2C2C2C2C2C2CBCBCBCBCBCBCBCBCB
+CDCDCDCDCDCDCDCDCDCACACACACACACACACAC5C5C5C5C5C5C5C5C5C5C5C5C1C1C1C1C1C1C1C1C1
+BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBBBBBBBBBBBBBBBBBBB3B3B3B3B3B3B3B3B3B3B3B3
+ACACACACACACACACACA1A1A1A1A1A1A1A1A1939393939393939393868686868686868686757575
+7575757575757575757878787878787878788F8F8F8F8F8F8F8F8FA0A0A0A0A0A0A0A0A0AFAFAF
+AFAFAFAFAFAFAFAFAFBBBBBBBBBBBBBBBBBBBFBFBFBFBFBFBFBFBFBABABABABABABABABAB3B3B3
+B3B3B3B3B3B3B4B4B4B4B4B4B4B4B4B4B4B4ADADADADADADADADADA2A2A2A2A2A2A2A2A29F9F9F
+9F9F9F9F9F9FBDBDBDBDBDBDBDBDBDF1F1F1F1F1F1F1F1F1F1F1F1FEFEFEFEFEFEFEFEFEFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C6C6C6C6C6C6C6C6C6E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3
+E3E3E3E2E2E2E2E2E2E2E2E2E2E2E2E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0DFE0DFDFE0DF
+DFE0DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
+DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
+DDDDDDDCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDADADADADADADADADAD9D9D9D9D9D9D9D9D9
+D9D9D9D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6
+D6D6D6D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D3D3D3D3D3D3D3D3D3CECECECECECECECECE
+BCBCBCBCBCBCBCBCBCBCBCBC989898989898989898737373737373737373717171717171717171
+7474747474747474747777777777777777777777777E7E7E7E7E7E7E7E7E7D7D7D7D7D7D7D7D7D
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A
+7D7D7D7D7D7D7D7D7D8383838383838383838C8C8C8C8C8C8C8C8C8C8C8C949494949494949494
+9999999999999999999D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D979797979797979797979797
+9191919191919191918E8E8E8E8E8E8E8E8E898989898989898989848484848484848484848484
+8383838383838383838181818181818181817F7F7F7F7F7F7F7F7F818181818181818181868686
+8686868686868686868C8C8C8C8C8C8C8C8C939393939393939393A0A0A0A0A0A0A0A0A0B3B3B3
+B3B3B3B3B3B3C2C2C2C2C2C2C2C2C2C2C2C2CBCBCBCBCBCBCBCBCBCDCDCDCDCDCDCDCDCDCACACA
+CACACACACACAC5C5C5C5C5C5C5C5C5C5C5C5C1C1C1C1C1C1C1C1C1BEBEBEBEBEBEBEBEBEBEBEBE
+BEBEBEBEBEBEBBBBBBBBBBBBBBBBBBB3B3B3B3B3B3B3B3B3B3B3B3ACACACACACACACACACA1A1A1
+A1A1A1A1A1A1939393939393939393868686868686868686757575757575757575757575787878
+7878787878788F8F8F8F8F8F8F8F8FA0A0A0A0A0A0A0A0A0AFAFAFAFAFAFAFAFAFAFAFAFBBBBBB
+BBBBBBBBBBBBBFBFBFBFBFBFBFBFBFBABABABABABABABABAB3B3B3B3B3B3B3B3B3B4B4B4B4B4B4
+B4B4B4B4B4B4ADADADADADADADADADA2A2A2A2A2A2A2A2A29F9F9F9F9F9F9F9F9FBDBDBDBDBDBD
+BDBDBDF1F1F1F1F1F1F1F1F1F1F1F1FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9
+F9F9F9C6C6C6C6C6C6C6C6C6E2E2E2E2E2E2E2E2E2E1E1E1E1E1E1E1E1E1E0E0E0E0E0E0E0E0E0
+E0E0E0E0E0E0E0E0E0E0E0E0DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDEDEDEDEDEDEDEDEDE
+DEDEDEDEDEDEDEDEDEDEDEDEDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDC
+DCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDC
+DCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDADADADADADADADADAD8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8
+D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5
+D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D2D2D2D2D2D2D2D2D2CBCBCBCBCBCBCBCBCBCBCBCB
+B0B0B0B0B0B0B0B0B0787878787878787878585858585858585858575757575757575757636363
+6363636363636363637979797979797979797C7C7C7C7C7C7C7C7C7B7B7B7B7B7B7B7B7B7B7B7B
+7B7B7B7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A7C7C7C7C7C7C7C7C7C7D7D7D7D7D7D7D7D7D828282
+8282828282828B8B8B8B8B8B8B8B8B8B8B8B9494949494949494949A9A9A9A9A9A9A9A9AA0A0A0
+A0A0A0A0A0A09E9E9E9E9E9E9E9E9E9292929292929292929292928E8E8E8E8E8E8E8E8E8B8B8B
+8B8B8B8B8B8B8585858585858585858080808080808080808080807D7D7D7D7D7D7D7D7D7C7C7C
+7C7C7C7C7C7C7E7E7E7E7E7E7E7E7E8282828282828282828C8C8C8C8C8C8C8C8C8C8C8C959595
+9595959595959E9E9E9E9E9E9E9E9EA6A6A6A6A6A6A6A6A6AEAEAEAEAEAEAEAEAEB7B7B7B7B7B7
+B7B7B7B7B7B7B8B8B8B8B8B8B8B8B8B7B7B7B7B7B7B7B7B7B3B3B3B3B3B3B3B3B3ABABABABABAB
+ABABABABABABA4A4A4A4A4A4A4A4A4A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A19E9E9E9E9E9E
+9E9E9E9D9D9D9D9D9D9D9D9D9D9D9D9A9A9A9A9A9A9A9A9A929292929292929292858585858585
+8585857272727272727272725F605F5F605F5F605F5F605F737373737373737373999999999999
+999999AAAAAAAAAAAAAAAAAAB2B2B2B2B2B2B2B2B2B2B2B2BDBDBDBDBDBDBDBDBDBFBFBFBFBFBF
+BFBFBFBABABABABABABABABAB6B6B6B6B6B6B6B6B6B4B4B4B4B4B4B4B4B4B4B4B4ACACACACACAC
+ACACACA2A2A2A2A2A2A2A2A29F9F9F9F9F9F9F9F9FC2C2C2C2C2C2C2C2C2F4F4F4F4F4F4F4F4F4
+F4F4F4FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9BBBBBBBBBBBBBBBBBB
+E2E2E2E2E2E2E2E2E2E1E1E1E1E1E1E1E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0
+DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE
+DCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC
+DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDADADA
+DADADADADADAD8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D6D6D6
+D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D4D4D4
+D4D4D4D4D4D4D2D2D2D2D2D2D2D2D2CBCBCBCBCBCBCBCBCBCBCBCBB0B0B0B0B0B0B0B0B0787878
+787878787878585858585858585858575757575757575757636363636363636363636363797979
+7979797979797C7C7C7C7C7C7C7C7C7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7A7A7A
+7A7A7A7A7A7A7C7C7C7C7C7C7C7C7C7D7D7D7D7D7D7D7D7D8282828282828282828B8B8B8B8B8B
+8B8B8B8B8B8B9494949494949494949A9A9A9A9A9A9A9A9AA0A0A0A0A0A0A0A0A09E9E9E9E9E9E
+9E9E9E9292929292929292929292928E8E8E8E8E8E8E8E8E8B8B8B8B8B8B8B8B8B858585858585
+8585858080808080808080808080807D7D7D7D7D7D7D7D7D7C7C7C7C7C7C7C7C7C7E7E7E7E7E7E
+7E7E7E8282828282828282828C8C8C8C8C8C8C8C8C8C8C8C9595959595959595959E9E9E9E9E9E
+9E9E9EA6A6A6A6A6A6A6A6A6AEAEAEAEAEAEAEAEAEB7B7B7B7B7B7B7B7B7B7B7B7B8B8B8B8B8B8
+B8B8B8B7B7B7B7B7B7B7B7B7B3B3B3B3B3B3B3B3B3ABABABABABABABABABABABABA4A4A4A4A4A4
+A4A4A4A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A19E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D
+9D9D9D9A9A9A9A9A9A9A9A9A929292929292929292858585858585858585727272727272727272
+5F605F5F605F5F605F5F605F737373737373737373999999999999999999AAAAAAAAAAAAAAAAAA
+B2B2B2B2B2B2B2B2B2B2B2B2BDBDBDBDBDBDBDBDBDBFBFBFBFBFBFBFBFBFBABABABABABABABABA
+B6B6B6B6B6B6B6B6B6B4B4B4B4B4B4B4B4B4B4B4B4ACACACACACACACACACA2A2A2A2A2A2A2A2A2
+9F9F9F9F9F9F9F9F9FC2C2C2C2C2C2C2C2C2F4F4F4F4F4F4F4F4F4F4F4F4FEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9BBBBBBBBBBBBBBBBBBE2E2E2E2E2E2E2E2E2E1E1E1
+E1E1E1E1E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0DFDFDFDFDFDFDFDFDFDFDFDF
+DFDFDFDFDFDFDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDCDCDCDCDCDCDCDCDCDDDDDD
+DDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDD
+DDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDADADADADADADADADAD8D8D8D8D8D8
+D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5
+D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D2D2D2D2D2D2
+D2D2D2CBCBCBCBCBCBCBCBCBCBCBCBB0B0B0B0B0B0B0B0B0787878787878787878585858585858
+5858585757575757575757576363636363636363636363637979797979797979797C7C7C7C7C7C
+7C7C7C7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A7C7C7C7C7C7C
+7C7C7C7D7D7D7D7D7D7D7D7D8282828282828282828B8B8B8B8B8B8B8B8B8B8B8B949494949494
+9494949A9A9A9A9A9A9A9A9AA0A0A0A0A0A0A0A0A09E9E9E9E9E9E9E9E9E929292929292929292
+9292928E8E8E8E8E8E8E8E8E8B8B8B8B8B8B8B8B8B858585858585858585808080808080808080
+8080807D7D7D7D7D7D7D7D7D7C7C7C7C7C7C7C7C7C7E7E7E7E7E7E7E7E7E828282828282828282
+8C8C8C8C8C8C8C8C8C8C8C8C9595959595959595959E9E9E9E9E9E9E9E9EA6A6A6A6A6A6A6A6A6
+AEAEAEAEAEAEAEAEAEB7B7B7B7B7B7B7B7B7B7B7B7B8B8B8B8B8B8B8B8B8B7B7B7B7B7B7B7B7B7
+B3B3B3B3B3B3B3B3B3ABABABABABABABABABABABABA4A4A4A4A4A4A4A4A4A1A1A1A1A1A1A1A1A1
+A1A1A1A1A1A1A1A1A19E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9D9D9D9A9A9A9A9A9A9A9A9A
+9292929292929292928585858585858585857272727272727272725F605F5F605F5F605F5F605F
+737373737373737373999999999999999999AAAAAAAAAAAAAAAAAAB2B2B2B2B2B2B2B2B2B2B2B2
+BDBDBDBDBDBDBDBDBDBFBFBFBFBFBFBFBFBFBABABABABABABABABAB6B6B6B6B6B6B6B6B6B4B4B4
+B4B4B4B4B4B4B4B4B4ACACACACACACACACACA2A2A2A2A2A2A2A2A29F9F9F9F9F9F9F9F9FC2C2C2
+C2C2C2C2C2C2F4F4F4F4F4F4F4F4F4F4F4F4FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9
+F9F9F9F9F9F9BBBBBBBBBBBBBBBBBBE0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0
+E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0DEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDCDCDCDCDCDC
+DCDCDCDBDBDBDBDBDBDBDBDBDBDBDBDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBD8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
+D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5
+D5D5D5D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3D3D3D3D1D1D1D1D1D1D1D1D1CFCFCFCFCFCFCFCFCF
+CFCFCFBCBCBCBCBCBCBCBCBC8B8B8B8B8B8B8B8B8B5454545454545454543A3A3A3A3A3A3A3A3A
+4848484848484848484848487070707070707070707C7C7C7C7C7C7C7C7C7A7A7A7A7A7A7A7A7A
+7B7B7B7B7B7B7B7B7B7B7B7B7979797979797979797A7A7A7A7A7A7A7A7A7C7C7C7C7C7C7C7C7C
+808080808080808080898989898989898989898989919191919191919191989898989898989898
+A1A1A1A1A1A1A1A1A19D9D9D9D9D9D9D9D9D8F8F8F8F8F8F8F8F8F8F8F8F888888888888888888
+8383838383838383837C7C7C7C7C7C7C7C7C767676767676767676767676717171717171717171
+7474747474747474747C7C7C7C7C7C7C7C7C8383838383838383838E8E8E8E8E8E8E8E8E8E8E8E
+989898989898989898999999999999999999979797979797979797949494949494949494959595
+959595959595959595919191919191919191919191919191919191919191919191919191909090
+9090909090909090909090909090909090909090909090909090908D8D8D8D8D8D8D8D8D848484
+8484848484847F7F7F7F7F7F7F7F7F7F7F7F7979797979797979797474747474747474746E6E6E
+6E6E6E6E6E6E6A6A6A6A6A6A6A6A6A7171717171717171717171718B8B8B8B8B8B8B8B8BA9A9A9
+A9A9A9A9A9A9B6B6B6B6B6B6B6B6B6BBBBBBBBBBBBBBBBBBBBBBBBBFBFBFBFBFBFBFBFBFBFBFBF
+BFBFBFBFBFBFB8B8B8B8B8B8B8B8B8B5B5B5B5B5B5B5B5B5B2B2B2B2B2B2B2B2B2B2B2B2AAAAAA
+AAAAAAAAAAAAA1A1A1A1A1A1A1A1A19F9F9F9F9F9F9F9F9FCBCBCBCBCBCBCBCBCBF9F9F9F9F9F9
+F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C5C5C5C5C5C5
+C5C5C5E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0
+E0E0E0DEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDB
+DBDBDBDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6
+D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4
+D3D3D3D3D3D3D3D3D3D1D1D1D1D1D1D1D1D1CFCFCFCFCFCFCFCFCFCFCFCFBCBCBCBCBCBCBCBCBC
+8B8B8B8B8B8B8B8B8B5454545454545454543A3A3A3A3A3A3A3A3A484848484848484848484848
+7070707070707070707C7C7C7C7C7C7C7C7C7A7A7A7A7A7A7A7A7A7B7B7B7B7B7B7B7B7B7B7B7B
+7979797979797979797A7A7A7A7A7A7A7A7A7C7C7C7C7C7C7C7C7C808080808080808080898989
+898989898989898989919191919191919191989898989898989898A1A1A1A1A1A1A1A1A19D9D9D
+9D9D9D9D9D9D8F8F8F8F8F8F8F8F8F8F8F8F8888888888888888888383838383838383837C7C7C
+7C7C7C7C7C7C7676767676767676767676767171717171717171717474747474747474747C7C7C
+7C7C7C7C7C7C8383838383838383838E8E8E8E8E8E8E8E8E8E8E8E989898989898989898999999
+999999999999979797979797979797949494949494949494959595959595959595959595919191
+919191919191919191919191919191919191919191919191909090909090909090909090909090
+9090909090909090909090909090908D8D8D8D8D8D8D8D8D8484848484848484847F7F7F7F7F7F
+7F7F7F7F7F7F7979797979797979797474747474747474746E6E6E6E6E6E6E6E6E6A6A6A6A6A6A
+6A6A6A7171717171717171717171718B8B8B8B8B8B8B8B8BA9A9A9A9A9A9A9A9A9B6B6B6B6B6B6
+B6B6B6BBBBBBBBBBBBBBBBBBBBBBBBBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB8B8B8B8B8B8
+B8B8B8B5B5B5B5B5B5B5B5B5B2B2B2B2B2B2B2B2B2B2B2B2AAAAAAAAAAAAAAAAAAA1A1A1A1A1A1
+A1A1A19F9F9F9F9F9F9F9F9FCBCBCBCBCBCBCBCBCBF9F9F9F9F9F9F9F9F9F9F9F9FFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C5C5C5C5C5C5C5C5C5E0E0E0E0E0E0E0E0E0
+E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0DEDEDEDEDEDEDEDEDE
+DDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDBDCDCDCDCDCDCDCDCDC
+DCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8D8D8D8D8D8D8D8D8D7D7D7
+D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5
+D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3D3D3D3D1D1D1
+D1D1D1D1D1D1CFCFCFCFCFCFCFCFCFCFCFCFBCBCBCBCBCBCBCBCBC8B8B8B8B8B8B8B8B8B545454
+5454545454543A3A3A3A3A3A3A3A3A4848484848484848484848487070707070707070707C7C7C
+7C7C7C7C7C7C7A7A7A7A7A7A7A7A7A7B7B7B7B7B7B7B7B7B7B7B7B7979797979797979797A7A7A
+7A7A7A7A7A7A7C7C7C7C7C7C7C7C7C808080808080808080898989898989898989898989919191
+919191919191989898989898989898A1A1A1A1A1A1A1A1A19D9D9D9D9D9D9D9D9D8F8F8F8F8F8F
+8F8F8F8F8F8F8888888888888888888383838383838383837C7C7C7C7C7C7C7C7C767676767676
+7676767676767171717171717171717474747474747474747C7C7C7C7C7C7C7C7C838383838383
+8383838E8E8E8E8E8E8E8E8E8E8E8E989898989898989898999999999999999999979797979797
+979797949494949494949494959595959595959595959595919191919191919191919191919191
+919191919191919191919191909090909090909090909090909090909090909090909090909090
+9090908D8D8D8D8D8D8D8D8D8484848484848484847F7F7F7F7F7F7F7F7F7F7F7F797979797979
+7979797474747474747474746E6E6E6E6E6E6E6E6E6A6A6A6A6A6A6A6A6A717171717171717171
+7171718B8B8B8B8B8B8B8B8BA9A9A9A9A9A9A9A9A9B6B6B6B6B6B6B6B6B6BBBBBBBBBBBBBBBBBB
+BBBBBBBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB8B8B8B8B8B8B8B8B8B5B5B5B5B5B5B5B5B5
+B2B2B2B2B2B2B2B2B2B2B2B2AAAAAAAAAAAAAAAAAAA1A1A1A1A1A1A1A1A19F9F9F9F9F9F9F9F9F
+CBCBCBCBCBCBCBCBCBF9F9F9F9F9F9F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+F9F9F9F9F9F9F9F9F9C5C5C5C5C5C5C5C5C5E0E0E0E0E0E0E0E0E0DFE0DFDFE0DFDFE0DFDFE0DF
+DFE0DFDFE0DFDFE0DFDEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDADADADADADADADADAD8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
+D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D4D4D4
+D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0
+D0D0D0D0D0D0C5C5C5C5C5C5C5C5C5A5A5A5A5A5A5A5A5A56C6C6C6C6C6C6C6C6C3E3E3E3E3E3E
+3E3E3E4040404040404040404040406969696969696969697C7C7C7C7C7C7C7C7C7B7B7B7B7B7B
+7B7B7B7979797979797979797979797979797979797979797A7A7A7A7A7A7A7A7A7C7C7C7C7C7C
+7C7C7C828282828282828282898989898989898989898989909090909090909090949494949494
+9494949F9F9F9F9F9F9F9F9F9D9D9D9D9D9D9D9D9D8F8F8F8F8F8F8F8F8F8F8F8F858585858585
+8585857C7C7C7C7C7C7C7C7C7070707070707070706D6D6D6D6D6D6D6D6D6D6D6D6E6E6E6E6E6E
+6E6E6E7373737373737373737D7D7D7D7D7D7D7D7D808080808080808080818181818181818181
+8181818181818181818181817E7E7E7E7E7E7E7E7E7C7C7C7C7C7C7C7C7C7D7D7D7D7D7D7D7D7D
+7E7E7E7E7E7E7E7E7E7E7E7E7B7B7B7B7B7B7B7B7B818181818181818181828282828282828282
+8383838383838383838383838585858585858585858585858585858585857F7F7F7F7F7F7F7F7F
+777777777777777777747474747474747474747474707070707070707070727272727272727272
+757575757575757575838383838383838383999999999999999999999999A8A8A8A8A8A8A8A8A8
+B7B7B7B7B7B7B7B7B7BBBBBBBBBBBBBBBBBBC0C0C0C0C0C0C0C0C0C0C0C0C3C3C3C3C3C3C3C3C3
+BEBEBEBEBEBEBEBEBEB7B7B7B7B7B7B7B7B7B5B5B5B5B5B5B5B5B5B0B1B0B0B1B0B0B1B0B0B1B0
+A7A7A7A7A7A7A7A7A79E9E9E9E9E9E9E9E9EA2A2A2A2A2A2A2A2A2D6D6D6D6D6D6D6D6D6FCFCFC
+FCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C6C6C6
+C6C6C6C6C6C6E0E0E0E0E0E0E0E0E0DFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDFE0DFDEDEDE
+DEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDADADADADADA
+DADADAD8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6
+D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4
+D4D4D4D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0C5C5C5C5C5C5
+C5C5C5A5A5A5A5A5A5A5A5A56C6C6C6C6C6C6C6C6C3E3E3E3E3E3E3E3E3E404040404040404040
+4040406969696969696969697C7C7C7C7C7C7C7C7C7B7B7B7B7B7B7B7B7B797979797979797979
+7979797979797979797979797A7A7A7A7A7A7A7A7A7C7C7C7C7C7C7C7C7C828282828282828282
+8989898989898989898989899090909090909090909494949494949494949F9F9F9F9F9F9F9F9F
+9D9D9D9D9D9D9D9D9D8F8F8F8F8F8F8F8F8F8F8F8F8585858585858585857C7C7C7C7C7C7C7C7C
+7070707070707070706D6D6D6D6D6D6D6D6D6D6D6D6E6E6E6E6E6E6E6E6E737373737373737373
+7D7D7D7D7D7D7D7D7D808080808080808080818181818181818181818181818181818181818181
+7E7E7E7E7E7E7E7E7E7C7C7C7C7C7C7C7C7C7D7D7D7D7D7D7D7D7D7E7E7E7E7E7E7E7E7E7E7E7E
+7B7B7B7B7B7B7B7B7B818181818181818181828282828282828282838383838383838383838383
+8585858585858585858585858585858585857F7F7F7F7F7F7F7F7F777777777777777777747474
+747474747474747474707070707070707070727272727272727272757575757575757575838383
+838383838383999999999999999999999999A8A8A8A8A8A8A8A8A8B7B7B7B7B7B7B7B7B7BBBBBB
+BBBBBBBBBBBBC0C0C0C0C0C0C0C0C0C0C0C0C3C3C3C3C3C3C3C3C3BEBEBEBEBEBEBEBEBEB7B7B7
+B7B7B7B7B7B7B5B5B5B5B5B5B5B5B5B0B1B0B0B1B0B0B1B0B0B1B0A7A7A7A7A7A7A7A7A79E9E9E
+9E9E9E9E9E9EA2A2A2A2A2A2A2A2A2D6D6D6D6D6D6D6D6D6FCFCFCFCFCFCFCFCFCFCFCFCFEFEFE
+FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C6C6C6C6C6C6C6C6C6DFE0DFDFE0DF
+DFE0DFDFDFDFDFDFDFDFDFDFDDDDDDDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBD9D9D9D9D9D9D9D9D9DADADADADADADADADADADADAD9D9D9D9D9D9
+D9D9D9DADADADADADADADADADBDBDBDBDBDBDBDBDBDADADADADADADADADAD9D9D9D9D9D9D9D9D9
+D9D9D9DADADADADADADADADADBDBDBDBDBDBDBDBDBD8D8D8D8D8D8D8D8D8D6D6D6D6D6D6D6D6D6
+D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5
+D5D5D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3D3D3D3D1D1D1D1D1D1D1D1D1
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C9C9C9C9C9C9C9C9C9BBBBBBBBBBBBBBBBBB
+909090909090909090545454545454545454414141414141414141414141616161616161616161
+7979797979797979797B7B7B7B7B7B7B7B7B797979797979797979797979787878787878787878
+7878787878787878787B7B7B7B7B7B7B7B7B8282828282828282828A8A8A8A8A8A8A8A8A8A8A8A
+9090909090909090909090909090909090909999999999999999999C9C9C9C9C9C9C9C9C949494
+9494949494949494948A8A8A8A8A8A8A8A8A7474747474747474745B5B5B5B5B5B5B5B5B5C5C5C
+5C5C5C5C5C5C5C5C5C6666666666666666666C6C6C6C6C6C6C6C6C6F6F6F6F6F6F6F6F6F6C6C6C
+6C6C6C6C6C6C6868686868686868686868686666666666666666666767676767676767676B6B6B
+6B6B6B6B6B6B6E6E6E6E6E6E6E6E6E717171717171717171717171727272727272727272767676
+7676767676767777777777777777777777777777777777777777777C7C7C7C7C7C7C7C7C818181
+8181818181818181818181818181818585858585858585858B8B8B8B8B8B8B8B8B8B8B8B8C8C8C
+8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8E8E8E8E8E8E8E8E8E9F9F9F9F9F9F9F9F9FB4B4B4B4B4B4
+B4B4B4B4B4B4BEBEBEBEBEBEBEBEBEBFBFBFBFBFBFBFBFBFBCBCBCBCBCBCBCBCBCBFBFBFBFBFBF
+BFBFBFBFBFBFC0C0C0C0C0C0C0C0C0BABABABABABABABABAB6B6B6B6B6B6B6B6B6B4B4B4B4B4B4
+B4B4B4AEAEAEAEAEAEAEAEAEAEAEAEA2A2A2A2A2A2A2A2A29B9B9B9B9B9B9B9B9BA6A6A6A6A6A6
+A6A6A6DEDEDEDEDEDEDEDEDEFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFF9F9F9F9F9F9F9F9F9C3C3C3C3C3C3C3C3C3DFE0DFDFE0DFDFE0DFDFDFDFDFDFDFDFDFDF
+DDDDDDDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+D9D9D9D9D9D9D9D9D9DADADADADADADADADADADADAD9D9D9D9D9D9D9D9D9DADADADADADADADADA
+DBDBDBDBDBDBDBDBDBDADADADADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADADADA
+DBDBDBDBDBDBDBDBDBD8D8D8D8D8D8D8D8D8D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D6D6D5
+D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5
+D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3D3D3D3D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0C9C9C9C9C9C9C9C9C9BBBBBBBBBBBBBBBBBB909090909090909090545454
+5454545454544141414141414141414141416161616161616161617979797979797979797B7B7B
+7B7B7B7B7B7B7979797979797979797979797878787878787878787878787878787878787B7B7B
+7B7B7B7B7B7B8282828282828282828A8A8A8A8A8A8A8A8A8A8A8A909090909090909090909090
+9090909090909999999999999999999C9C9C9C9C9C9C9C9C9494949494949494949494948A8A8A
+8A8A8A8A8A8A7474747474747474745B5B5B5B5B5B5B5B5B5C5C5C5C5C5C5C5C5C5C5C5C666666
+6666666666666C6C6C6C6C6C6C6C6C6F6F6F6F6F6F6F6F6F6C6C6C6C6C6C6C6C6C686868686868
+6868686868686666666666666666666767676767676767676B6B6B6B6B6B6B6B6B6E6E6E6E6E6E
+6E6E6E717171717171717171717171727272727272727272767676767676767676777777777777
+7777777777777777777777777777777C7C7C7C7C7C7C7C7C818181818181818181818181818181
+8181818585858585858585858B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C
+8C8C8C8E8E8E8E8E8E8E8E8E9F9F9F9F9F9F9F9F9FB4B4B4B4B4B4B4B4B4B4B4B4BEBEBEBEBEBE
+BEBEBEBFBFBFBFBFBFBFBFBFBCBCBCBCBCBCBCBCBCBFBFBFBFBFBFBFBFBFBFBFBFC0C0C0C0C0C0
+C0C0C0BABABABABABABABABAB6B6B6B6B6B6B6B6B6B4B4B4B4B4B4B4B4B4AEAEAEAEAEAEAEAEAE
+AEAEAEA2A2A2A2A2A2A2A2A29B9B9B9B9B9B9B9B9BA6A6A6A6A6A6A6A6A6DEDEDEDEDEDEDEDEDE
+FCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9
+C3C3C3C3C3C3C3C3C3DFE0DFDFE0DFDFE0DFDFDFDFDFDFDFDFDFDFDDDDDDDDDDDDDDDDDDDDDDDD
+DCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD9D9D9D9D9D9D9D9D9DADADA
+DADADADADADADADADAD9D9D9D9D9D9D9D9D9DADADADADADADADADADBDBDBDBDBDBDBDBDBDADADA
+DADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADADADADBDBDBDBDBDBDBDBDBD8D8D8
+D8D8D8D8D8D8D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5
+D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D3D3D3
+D3D3D3D3D3D3D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C9C9C9
+C9C9C9C9C9C9BBBBBBBBBBBBBBBBBB909090909090909090545454545454545454414141414141
+4141414141416161616161616161617979797979797979797B7B7B7B7B7B7B7B7B797979797979
+7979797979797878787878787878787878787878787878787B7B7B7B7B7B7B7B7B828282828282
+8282828A8A8A8A8A8A8A8A8A8A8A8A909090909090909090909090909090909090999999999999
+9999999C9C9C9C9C9C9C9C9C9494949494949494949494948A8A8A8A8A8A8A8A8A747474747474
+7474745B5B5B5B5B5B5B5B5B5C5C5C5C5C5C5C5C5C5C5C5C6666666666666666666C6C6C6C6C6C
+6C6C6C6F6F6F6F6F6F6F6F6F6C6C6C6C6C6C6C6C6C686868686868686868686868666666666666
+6666666767676767676767676B6B6B6B6B6B6B6B6B6E6E6E6E6E6E6E6E6E717171717171717171
+717171727272727272727272767676767676767676777777777777777777777777777777777777
+7777777C7C7C7C7C7C7C7C7C818181818181818181818181818181818181858585858585858585
+8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8E8E8E8E8E8E8E8E8E
+9F9F9F9F9F9F9F9F9FB4B4B4B4B4B4B4B4B4B4B4B4BEBEBEBEBEBEBEBEBEBFBFBFBFBFBFBFBFBF
+BCBCBCBCBCBCBCBCBCBFBFBFBFBFBFBFBFBFBFBFBFC0C0C0C0C0C0C0C0C0BABABABABABABABABA
+B6B6B6B6B6B6B6B6B6B4B4B4B4B4B4B4B4B4AEAEAEAEAEAEAEAEAEAEAEAEA2A2A2A2A2A2A2A2A2
+9B9B9B9B9B9B9B9B9BA6A6A6A6A6A6A6A6A6DEDEDEDEDEDEDEDEDEFCFCFCFCFCFCFCFCFCFCFCFC
+FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C3C3C3C3C3C3C3C3C3DEDEDE
+DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDDDDDDDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDADADADADADADADADADADADADBDBDB
+DBDBDBDBDBDBDADADADADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9
+D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADADADAD9D9D9D9D9D9D9D9D9D8D8D8D8D8D8
+D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6
+D6D6D6D6D6D5D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D6D6D5D6D6D5
+D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D4D4D4D4D4D4D4D4D4D2D2D2D2D2D2D2D2D2D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFCBCBCBCBCBCBCBCBCBC8C8C8C8C8C8
+C8C8C8B1B1B1B1B1B1B1B1B17878787878787878785151515151515151515151515D5D5D5D5D5D
+5D5D5D7777777777777777777A7A7A7A7A7A7A7A7A787878787878787878787878777777777777
+7777777777777777777777777C7C7C7C7C7C7C7C7C8282828282828282828C8C8C8C8C8C8C8C8C
+8C8C8C9191919191919191918F8F8F8F8F8F8F8F8F9494949494949494949C9C9C9C9C9C9C9C9C
+9B9B9B9B9B9B9B9B9B9B9B9B9494949494949494947C7C7C7C7C7C7C7C7C565656565656565656
+494949494949494949494949525252525252525252585858585858585858595959595959595959
+5757575757575757575858585858585858585858585B5B5B5B5B5B5B5B5B626262626262626262
+6767676767676767676E6E6E6E6E6E6E6E6E7676767676767676767676767D7D7D7D7D7D7D7D7D
+7F7F7F7F7F7F7F7F7F8484848484848484849090909090909090909090909A9A9A9A9A9A9A9A9A
+A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A1A1A1
+9E9E9E9E9E9E9E9E9E9999999999999999999E9E9E9E9E9E9E9E9EB1B1B1B1B1B1B1B1B1C2C2C2
+C2C2C2C2C2C2C2C2C2C7C7C7C7C7C7C7C7C7C0C0C0C0C0C0C0C0C0B8B8B8B8B8B8B8B8B8B9B9B9
+B9B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBBBBB6B6B6B6B6B6B6B6B6B3B3B3B3B3B3B3B3B3B1B1B1
+B1B1B1B1B1B1ACACACACACACACACACACACACA0A0A0A0A0A0A0A0A09A9A9A9A9A9A9A9A9AACACAC
+ACACACACACACE6E6E6E6E6E6E6E6E6FCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFF7F7F7F7F7F7F7F7F7B4B4B4B4B4B4B4B4B4DEDEDEDEDEDEDEDEDEDEDEDEDEDEDE
+DEDEDEDDDDDDDDDDDDDDDDDDDDDDDDDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDADADADADADADADADADADADADBDBDBDBDBDBDBDBDBDADADADADADA
+DADADAD9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9
+D9D9D9DADADADADADADADADAD9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9
+D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5
+D6D6D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5
+D6D6D5D4D4D4D4D4D4D4D4D4D2D2D2D2D2D2D2D2D2D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+CFCFCFCFCFCFCFCFCFCFCFCFCBCBCBCBCBCBCBCBCBC8C8C8C8C8C8C8C8C8B1B1B1B1B1B1B1B1B1
+7878787878787878785151515151515151515151515D5D5D5D5D5D5D5D5D777777777777777777
+7A7A7A7A7A7A7A7A7A787878787878787878787878777777777777777777777777777777777777
+7C7C7C7C7C7C7C7C7C8282828282828282828C8C8C8C8C8C8C8C8C8C8C8C919191919191919191
+8F8F8F8F8F8F8F8F8F9494949494949494949C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B
+9494949494949494947C7C7C7C7C7C7C7C7C565656565656565656494949494949494949494949
+525252525252525252585858585858585858595959595959595959575757575757575757585858
+5858585858585858585B5B5B5B5B5B5B5B5B6262626262626262626767676767676767676E6E6E
+6E6E6E6E6E6E7676767676767676767676767D7D7D7D7D7D7D7D7D7F7F7F7F7F7F7F7F7F848484
+8484848484849090909090909090909090909A9A9A9A9A9A9A9A9AA1A1A1A1A1A1A1A1A1A2A2A2
+A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A1A1A19E9E9E9E9E9E9E9E9E999999
+9999999999999E9E9E9E9E9E9E9E9EB1B1B1B1B1B1B1B1B1C2C2C2C2C2C2C2C2C2C2C2C2C7C7C7
+C7C7C7C7C7C7C0C0C0C0C0C0C0C0C0B8B8B8B8B8B8B8B8B8B9B9B9B9B9B9B9B9B9B9B9B9BBBBBB
+BBBBBBBBBBBBB6B6B6B6B6B6B6B6B6B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1ACACACACACAC
+ACACACACACACA0A0A0A0A0A0A0A0A09A9A9A9A9A9A9A9A9AACACACACACACACACACE6E6E6E6E6E6
+E6E6E6FCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F7
+F7F7F7B4B4B4B4B4B4B4B4B4DEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDBDBDBDADADADADADADADADADADADADADADADADADADBDBDBDBDBDBDBDBDB
+DADADADADADADADADADADADAD9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9
+D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9
+D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8
+D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5
+D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D3D3D3D3D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2
+D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CECECECECECECECECECECECE
+CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC5C5C5C5C5C5C5C5C5A5A5A5A5A5A5A5A5A57A7A7A
+7A7A7A7A7A7A7A7A7A666666666666666666747474747474747474797979797979797979787878
+7878787878787878787676767676767676767575757575757575757B7B7B7B7B7B7B7B7B808080
+8080808080808B8B8B8B8B8B8B8B8B8B8B8B959595959595959595939393939393939393919191
+9191919191919A9A9A9A9A9A9A9A9AA0A0A0A0A0A0A0A0A0A0A0A0A2A2A2A2A2A2A2A2A2989898
+989898989898767676767676767676585858585858585858585858515151515151515151545454
+5454545454545858585858585858585C5C5C5C5C5C5C5C5C6161616161616161616161616C6C6C
+6C6C6C6C6C6C7878787878787878788383838383838383838F8F8F8F8F8F8F8F8F9C9C9C9C9C9C
+9C9C9C9C9C9CA5A5A5A5A5A5A5A5A5A8A8A8A8A8A8A8A8A8ACACACACACACACACACB3B3B3B3B3B3
+B3B3B3B3B3B3BCBCBCBCBCBCBCBCBCC1C1C1C1C1C1C1C1C1B8B8B8B8B8B8B8B8B8AAAAAAAAAAAA
+AAAAAAA4A4A4A4A4A4A4A4A4A4A4A49E9E9E9E9E9E9E9E9EA0A0A0A0A0A0A0A0A0ADADADADADAD
+ADADADBEBEBEBEBEBEBEBEBEC6C6C6C6C6C6C6C6C6C6C6C6C9C9C9C9C9C9C9C9C9BDBDBDBDBDBD
+BDBDBDB0B1B0B0B1B0B0B1B0B0B1B0B0B1B0B0B1B0B0B1B0B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1
+B1B1B1B2B2B2B2B2B2B2B2B2B0B1B0B0B1B0B0B1B0A8A8A8A8A8A8A8A8A8A8A8A89D9D9D9D9D9D
+9D9D9D979797979797979797B7B7B7B7B7B7B7B7B7F1F1F1F1F1F1F1F1F1FDFDFDFDFDFDFDFDFD
+FDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C1C1C1C1C1C1C1C1C1
+DEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DADADADADADADADADADADADADADADADADADADBDBDBDBDBDBDBDBDBDADADADADADADADADADADADA
+D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9
+DADADADADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D8D8D8
+D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D6D6D6D6D6D6D6D6D6D6D6D5
+D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5
+D5D5D5D5D5D5D3D3D3D3D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CECECECECECECECECECECECECDCDCDCDCDCDCDCDCDCDCDCD
+CDCDCDCDCDCDC5C5C5C5C5C5C5C5C5A5A5A5A5A5A5A5A5A57A7A7A7A7A7A7A7A7A7A7A7A666666
+666666666666747474747474747474797979797979797979787878787878787878787878767676
+7676767676767575757575757575757B7B7B7B7B7B7B7B7B8080808080808080808B8B8B8B8B8B
+8B8B8B8B8B8B9595959595959595959393939393939393939191919191919191919A9A9A9A9A9A
+9A9A9AA0A0A0A0A0A0A0A0A0A0A0A0A2A2A2A2A2A2A2A2A2989898989898989898767676767676
+767676585858585858585858585858515151515151515151545454545454545454585858585858
+5858585C5C5C5C5C5C5C5C5C6161616161616161616161616C6C6C6C6C6C6C6C6C787878787878
+7878788383838383838383838F8F8F8F8F8F8F8F8F9C9C9C9C9C9C9C9C9C9C9C9CA5A5A5A5A5A5
+A5A5A5A8A8A8A8A8A8A8A8A8ACACACACACACACACACB3B3B3B3B3B3B3B3B3B3B3B3BCBCBCBCBCBC
+BCBCBCC1C1C1C1C1C1C1C1C1B8B8B8B8B8B8B8B8B8AAAAAAAAAAAAAAAAAAA4A4A4A4A4A4A4A4A4
+A4A4A49E9E9E9E9E9E9E9E9EA0A0A0A0A0A0A0A0A0ADADADADADADADADADBEBEBEBEBEBEBEBEBE
+C6C6C6C6C6C6C6C6C6C6C6C6C9C9C9C9C9C9C9C9C9BDBDBDBDBDBDBDBDBDB0B1B0B0B1B0B0B1B0
+B0B1B0B0B1B0B0B1B0B0B1B0B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B2B2B2B2B2B2B2B2B2
+B0B1B0B0B1B0B0B1B0A8A8A8A8A8A8A8A8A8A8A8A89D9D9D9D9D9D9D9D9D979797979797979797
+B7B7B7B7B7B7B7B7B7F1F1F1F1F1F1F1F1F1FDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C1C1C1C1C1C1C1C1C1DEDEDEDEDEDEDEDEDEDDDDDD
+DDDDDDDDDDDDDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDADADADADADADADADADADADA
+DADADADADADADBDBDBDBDBDBDBDBDBDADADADADADADADADADADADAD9D9D9D9D9D9D9D9D9D8D8D8
+D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADADADAD9D9D9
+D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D8D8D8D9D9D9
+D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5
+D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D3D3D3D3D3D3
+D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0CECECECECECECECECECECECECDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC5C5C5C5C5C5
+C5C5C5A5A5A5A5A5A5A5A5A57A7A7A7A7A7A7A7A7A7A7A7A666666666666666666747474747474
+747474797979797979797979787878787878787878787878767676767676767676757575757575
+7575757B7B7B7B7B7B7B7B7B8080808080808080808B8B8B8B8B8B8B8B8B8B8B8B959595959595
+9595959393939393939393939191919191919191919A9A9A9A9A9A9A9A9AA0A0A0A0A0A0A0A0A0
+A0A0A0A2A2A2A2A2A2A2A2A2989898989898989898767676767676767676585858585858585858
+5858585151515151515151515454545454545454545858585858585858585C5C5C5C5C5C5C5C5C
+6161616161616161616161616C6C6C6C6C6C6C6C6C787878787878787878838383838383838383
+8F8F8F8F8F8F8F8F8F9C9C9C9C9C9C9C9C9C9C9C9CA5A5A5A5A5A5A5A5A5A8A8A8A8A8A8A8A8A8
+ACACACACACACACACACB3B3B3B3B3B3B3B3B3B3B3B3BCBCBCBCBCBCBCBCBCC1C1C1C1C1C1C1C1C1
+B8B8B8B8B8B8B8B8B8AAAAAAAAAAAAAAAAAAA4A4A4A4A4A4A4A4A4A4A4A49E9E9E9E9E9E9E9E9E
+A0A0A0A0A0A0A0A0A0ADADADADADADADADADBEBEBEBEBEBEBEBEBEC6C6C6C6C6C6C6C6C6C6C6C6
+C9C9C9C9C9C9C9C9C9BDBDBDBDBDBDBDBDBDB0B1B0B0B1B0B0B1B0B0B1B0B0B1B0B0B1B0B0B1B0
+B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B2B2B2B2B2B2B2B2B2B0B1B0B0B1B0B0B1B0A8A8A8
+A8A8A8A8A8A8A8A8A89D9D9D9D9D9D9D9D9D979797979797979797B7B7B7B7B7B7B7B7B7F1F1F1
+F1F1F1F1F1F1FDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9
+F9F9F9F9F9F9C1C1C1C1C1C1C1C1C1DCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDADADADADADADADADADADADADADADADADADAD9D9D9D9D9D9D9D9D9DADADADADADA
+DADADAD9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8
+D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9
+D9D9D9D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7
+D7D7D7D6D6D5D6D6D5D6D6D5D6D6D6D6D6D6D6D6D6D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4
+D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D1D1D1D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCECECECECECECECECECDCDCDCDCDCDCDCDCD
+CDCDCDCECECECECECECECECECFCFCFCFCFCFCFCFCFCECECECECECECECECEC5C5C5C5C5C5C5C5C5
+A9A9A9A9A9A9A9A9A9A9A9A97D7D7D7D7D7D7D7D7D727272727272727272787878787878787878
+777777777777777777777777767676767676767676757575757575757575797979797979797979
+7F7F7F7F7F7F7F7F7F898989898989898989898989959595959595959595989898989898989898
+919191919191919191999999999999999999A4A4A4A4A4A4A4A4A4A4A4A4AAAAAAAAAAAAAAAAAA
+ABABABABABABABABAB9C9C9C9C9C9C9C9C9C838383838383838383838383717171717171717171
+6969696969696969696D6D6D6D6D6D6D6D6D747474747474747474797979797979797979797979
+8383838383838383839090909090909090909D9D9D9D9D9D9D9D9DA8A8A8A8A8A8A8A8A8B1B1B1
+B1B1B1B1B1B1B1B1B1B7B7B7B7B7B7B7B7B7BCBCBCBCBCBCBCBCBCBDBDBDBDBDBDBDBDBDBEBEBE
+BEBEBEBEBEBEBEBEBECBCBCBCBCBCBCBCBCBD0D0D0D0D0D0D0D0D0BBBBBBBBBBBBBBBBBBA9A9A9
+A9A9A9A9A9A9A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0ADADADADADADADADADBBBBBB
+BBBBBBBBBBBBC4C4C4C4C4C4C4C4C4C9C9C9C9C9C9C9C9C9C9C9C9C7C7C7C7C7C7C7C7C7B8B8B8
+B8B8B8B8B8B8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8AEAEAEAEAEAEAEAEAEB0B1B0
+B0B1B0B0B1B0B0B1B0B0B1B0B0B1B0ACACACACACACACACACA1A1A1A1A1A1A1A1A1A1A1A1989898
+989898989898979797979797979797C4C4C4C4C4C4C4C4C4F9F9F9F9F9F9F9F9F9FDFDFDFDFDFD
+FDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFAD0D0D0D0D0D0
+D0D0D0DCDCDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDADADADADADA
+DADADADADADADADADADADADAD9D9D9D9D9D9D9D9D9DADADADADADADADADAD9D9D9D9D9D9D9D9D9
+D9D9D9D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8
+D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8
+D7D7D7D7D7D7D7D7D7D7D7D7D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D7D7D6D6D5D6D6D5D6D6D5
+D6D6D6D6D6D6D6D6D6D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4
+D4D4D4D4D4D4D4D4D4D1D1D1D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+CFCFCFCFCFCFCFCFCFCECECECECECECECECECDCDCDCDCDCDCDCDCDCDCDCDCECECECECECECECECE
+CFCFCFCFCFCFCFCFCFCECECECECECECECECEC5C5C5C5C5C5C5C5C5A9A9A9A9A9A9A9A9A9A9A9A9
+7D7D7D7D7D7D7D7D7D727272727272727272787878787878787878777777777777777777777777
+7676767676767676767575757575757575757979797979797979797F7F7F7F7F7F7F7F7F898989
+898989898989898989959595959595959595989898989898989898919191919191919191999999
+999999999999A4A4A4A4A4A4A4A4A4A4A4A4AAAAAAAAAAAAAAAAAAABABABABABABABABAB9C9C9C
+9C9C9C9C9C9C8383838383838383838383837171717171717171716969696969696969696D6D6D
+6D6D6D6D6D6D747474747474747474797979797979797979797979838383838383838383909090
+9090909090909D9D9D9D9D9D9D9D9DA8A8A8A8A8A8A8A8A8B1B1B1B1B1B1B1B1B1B1B1B1B7B7B7
+B7B7B7B7B7B7BCBCBCBCBCBCBCBCBCBDBDBDBDBDBDBDBDBDBEBEBEBEBEBEBEBEBEBEBEBECBCBCB
+CBCBCBCBCBCBD0D0D0D0D0D0D0D0D0BBBBBBBBBBBBBBBBBBA9A9A9A9A9A9A9A9A9A0A0A0A0A0A0
+A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0ADADADADADADADADADBBBBBBBBBBBBBBBBBBC4C4C4C4C4C4
+C4C4C4C9C9C9C9C9C9C9C9C9C9C9C9C7C7C7C7C7C7C7C7C7B8B8B8B8B8B8B8B8B8A8A8A8A8A8A8
+A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8AEAEAEAEAEAEAEAEAEB0B1B0B0B1B0B0B1B0B0B1B0B0B1B0
+B0B1B0ACACACACACACACACACA1A1A1A1A1A1A1A1A1A1A1A1989898989898989898979797979797
+979797C4C4C4C4C4C4C4C4C4F9F9F9F9F9F9F9F9F9FDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFAD0D0D0D0D0D0D0D0D0DCDCDCDCDCDCDCDCDC
+DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDADADADADADADADADADADADADADADADADADA
+D9D9D9D9D9D9D9D9D9DADADADADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9
+D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9
+D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7
+D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D7D7D6D6D5D6D6D5D6D6D5D6D6D6D6D6D6D6D6D6D4D4D4
+D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D1D1D1
+D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCECECE
+CECECECECECECDCDCDCDCDCDCDCDCDCDCDCDCECECECECECECECECECFCFCFCFCFCFCFCFCFCECECE
+CECECECECECEC5C5C5C5C5C5C5C5C5A9A9A9A9A9A9A9A9A9A9A9A97D7D7D7D7D7D7D7D7D727272
+727272727272787878787878787878777777777777777777777777767676767676767676757575
+7575757575757979797979797979797F7F7F7F7F7F7F7F7F898989898989898989898989959595
+959595959595989898989898989898919191919191919191999999999999999999A4A4A4A4A4A4
+A4A4A4A4A4A4AAAAAAAAAAAAAAAAAAABABABABABABABABAB9C9C9C9C9C9C9C9C9C838383838383
+8383838383837171717171717171716969696969696969696D6D6D6D6D6D6D6D6D747474747474
+7474747979797979797979797979798383838383838383839090909090909090909D9D9D9D9D9D
+9D9D9DA8A8A8A8A8A8A8A8A8B1B1B1B1B1B1B1B1B1B1B1B1B7B7B7B7B7B7B7B7B7BCBCBCBCBCBC
+BCBCBCBDBDBDBDBDBDBDBDBDBEBEBEBEBEBEBEBEBEBEBEBECBCBCBCBCBCBCBCBCBD0D0D0D0D0D0
+D0D0D0BBBBBBBBBBBBBBBBBBA9A9A9A9A9A9A9A9A9A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0
+A0A0A0ADADADADADADADADADBBBBBBBBBBBBBBBBBBC4C4C4C4C4C4C4C4C4C9C9C9C9C9C9C9C9C9
+C9C9C9C7C7C7C7C7C7C7C7C7B8B8B8B8B8B8B8B8B8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8
+A8A8A8AEAEAEAEAEAEAEAEAEB0B1B0B0B1B0B0B1B0B0B1B0B0B1B0B0B1B0ACACACACACACACACAC
+A1A1A1A1A1A1A1A1A1A1A1A1989898989898989898979797979797979797C4C4C4C4C4C4C4C4C4
+F9F9F9F9F9F9F9F9F9FDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FAFAFAFAFAFAFAFAFAD0D0D0D0D0D0D0D0D0DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBDADADADADADADADADADADADADADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9
+D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8
+D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D8D8D8
+D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D6D6D6
+D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4
+D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3D3D3D3D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCECECECECECECECECECECECECECECECECECECECECECECECE
+CECECECECECECFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D1D1D1D1D1D1
+D1D1D1C4C4C4C4C4C4C4C4C4C4C4C4919191919191919191737373737373737373767676767676
+7676767676767676767676767676767676767676767676767676767676767676767A7A7A7A7A7A
+7A7A7A7D7D7D7D7D7D7D7D7D868686868686868686868686919191919191919191999999999999
+999999949494949494949494979797979797979797A3A3A3A3A3A3A3A3A3A3A3A3A9A9A9A9A9A9
+A9A9A9AEAEAEAEAEAEAEAEAEAFAFAFAFAFAFAFAFAFA4A4A4A4A4A4A4A4A4A4A4A4969696969696
+9696968585858585858585857D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7E7E7E7E7E7E7E7E7E
+7E7E7E8484848484848484848E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9EA9A9A9A9A9A9A9A9A9
+B0B0B0B0B0B0B0B0B0B0B0B0B1B1B1B1B1B1B1B1B1B9B9B9B9B9B9B9B9B9BEBEBEBEBEBEBEBEBE
+BFBFBFBFBFBFBFBFBFBFBFBFC5C5C5C5C5C5C5C5C5C2C2C2C2C2C2C2C2C2B1B1B1B1B1B1B1B1B1
+A8A8A8A8A8A8A8A8A8A6A6A6A6A6A6A6A6A6A6A6A6ADADADADADADADADADBCBCBCBCBCBCBCBCBC
+C2C2C2C2C2C2C2C2C2C3C3C3C3C3C3C3C3C3C7C7C7C7C7C7C7C7C7C7C7C7C4C4C4C4C4C4C4C4C4
+B7B7B7B7B7B7B7B7B7A6A6A6A6A6A6A6A6A6A1A1A1A1A1A1A1A1A1A1A1A1A8A8A8A8A8A8A8A8A8
+ACACACACACACACACACACACACACACACACACACA8A8A8A8A8A8A8A8A89E9E9E9E9E9E9E9E9E9E9E9E
+939393939393939393999999999999999999D0D0D0D0D0D0D0D0D0FBFBFBFBFBFBFBFBFBFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9CACACA
+CACACACACACADBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDADADA
+DADADADADADADADADADADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8
+D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8
+D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8
+D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5
+D6D6D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4
+D4D4D4D3D3D3D3D3D3D3D3D3D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCF
+CFCFCFCECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECFCFCFCFCFCF
+CFCFCFD0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D1D1D1D1D1D1D1D1D1C4C4C4C4C4C4C4C4C4
+C4C4C4919191919191919191737373737373737373767676767676767676767676767676767676
+7676767676767676767676767676767676767676767A7A7A7A7A7A7A7A7A7D7D7D7D7D7D7D7D7D
+868686868686868686868686919191919191919191999999999999999999949494949494949494
+979797979797979797A3A3A3A3A3A3A3A3A3A3A3A3A9A9A9A9A9A9A9A9A9AEAEAEAEAEAEAEAEAE
+AFAFAFAFAFAFAFAFAFA4A4A4A4A4A4A4A4A4A4A4A4969696969696969696858585858585858585
+7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7E7E7E7E7E7E7E7E7E7E7E7E848484848484848484
+8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9EA9A9A9A9A9A9A9A9A9B0B0B0B0B0B0B0B0B0B0B0B0
+B1B1B1B1B1B1B1B1B1B9B9B9B9B9B9B9B9B9BEBEBEBEBEBEBEBEBEBFBFBFBFBFBFBFBFBFBFBFBF
+C5C5C5C5C5C5C5C5C5C2C2C2C2C2C2C2C2C2B1B1B1B1B1B1B1B1B1A8A8A8A8A8A8A8A8A8A6A6A6
+A6A6A6A6A6A6A6A6A6ADADADADADADADADADBCBCBCBCBCBCBCBCBCC2C2C2C2C2C2C2C2C2C3C3C3
+C3C3C3C3C3C3C7C7C7C7C7C7C7C7C7C7C7C7C4C4C4C4C4C4C4C4C4B7B7B7B7B7B7B7B7B7A6A6A6
+A6A6A6A6A6A6A1A1A1A1A1A1A1A1A1A1A1A1A8A8A8A8A8A8A8A8A8ACACACACACACACACACACACAC
+ACACACACACACA8A8A8A8A8A8A8A8A89E9E9E9E9E9E9E9E9E9E9E9E939393939393939393999999
+999999999999D0D0D0D0D0D0D0D0D0FBFBFBFBFBFBFBFBFBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9CACACACACACACACACADBDBDBDBDBDB
+DBDBDBDADADADADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8
+D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8
+D8D8D8D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8
+D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7
+D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4
+D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2
+D1D1D1D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCDCDCDCDCDCDCDCDCD
+CECECECECECECECECECECECECECECECECECECECECECECECECECECECECECED0D0D0D0D0D0D0D0D0
+D1D1D1D1D1D1D1D1D1D4D4D4D4D4D4D4D4D4CBCBCBCBCBCBCBCBCBCBCBCB999999999999999999
+737373737373737373747474747474747474757575757575757575757575747474747474747474
+7777777777777777777979797979797979797C7C7C7C7C7C7C7C7C848484848484848484848484
+8E8E8E8E8E8E8E8E8E9696969696969696969696969696969696969494949494949494949D9D9D
+9D9D9D9D9D9D9D9D9DA4A4A4A4A4A4A4A4A4ABABABABABABABABABB1B1B1B1B1B1B1B1B1AFAFAF
+AFAFAFAFAFAFAFAFAFA8A8A8A8A8A8A8A8A8969696969696969696868686868686868686808080
+8080808080807E7E7E7E7E7E7E7E7E7E7E7E808080808080808080848484848484848484909090
+9090909090909C9C9C9C9C9C9C9C9CA3A3A3A3A3A3A3A3A3A3A3A3A6A6A6A6A6A6A6A6A6ADADAD
+ADADADADADADB6B6B6B6B6B6B6B6B6B9B9B9B9B9B9B9B9B9B9B9B9BABABABABABABABABAB8B8B8
+B8B8B8B8B8B8B3B3B3B3B3B3B3B3B3B4B4B4B4B4B4B4B4B4B7B7B7B7B7B7B7B7B7B7B7B7BCBCBC
+BCBCBCBCBCBCC1C1C1C1C1C1C1C1C1C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C1
+C1C1C1C1C1C1BEBEBEBEBEBEBEBEBEB2B2B2B2B2B2B2B2B29F9F9F9F9F9F9F9F9F9C9C9C9C9C9C
+9C9C9C9C9C9CA5A5A5A5A5A5A5A5A5A8A8A8A8A8A8A8A8A8AAAAAAAAAAAAAAAAAAA6A6A6A6A6A6
+A6A6A69A9A9A9A9A9A9A9A9A9A9A9A8D8D8D8D8D8D8D8D8D9F9F9F9F9F9F9F9F9FE1E1E1E1E1E1
+E1E1E1FCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFF9F9F9F9F9F9F9F9F9BDBDBDBDBDBDBDBDBDDBDBDBDBDBDBDBDBDBDADADADADADADADADA
+D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8
+D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7
+D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8
+D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
+D6D6D6D6D6D6D6D6D6D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D2D2D2D2D2D2D2D2D2D2D2D2
+D2D2D2D2D2D2D2D2D2D3D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D1D1D1
+D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCDCDCDCDCDCDCDCDCDCECECECECECECECECECECECE
+CECECECECECECECECECECECECECECECECECED0D0D0D0D0D0D0D0D0D1D1D1D1D1D1D1D1D1D4D4D4
+D4D4D4D4D4D4CBCBCBCBCBCBCBCBCBCBCBCB999999999999999999737373737373737373747474
+747474747474757575757575757575757575747474747474747474777777777777777777797979
+7979797979797C7C7C7C7C7C7C7C7C8484848484848484848484848E8E8E8E8E8E8E8E8E969696
+9696969696969696969696969696969494949494949494949D9D9D9D9D9D9D9D9D9D9D9DA4A4A4
+A4A4A4A4A4A4ABABABABABABABABABB1B1B1B1B1B1B1B1B1AFAFAFAFAFAFAFAFAFAFAFAFA8A8A8
+A8A8A8A8A8A89696969696969696968686868686868686868080808080808080807E7E7E7E7E7E
+7E7E7E7E7E7E8080808080808080808484848484848484849090909090909090909C9C9C9C9C9C
+9C9C9CA3A3A3A3A3A3A3A3A3A3A3A3A6A6A6A6A6A6A6A6A6ADADADADADADADADADB6B6B6B6B6B6
+B6B6B6B9B9B9B9B9B9B9B9B9B9B9B9BABABABABABABABABAB8B8B8B8B8B8B8B8B8B3B3B3B3B3B3
+B3B3B3B4B4B4B4B4B4B4B4B4B7B7B7B7B7B7B7B7B7B7B7B7BCBCBCBCBCBCBCBCBCC1C1C1C1C1C1
+C1C1C1C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C1C1C1C1C1C1C1BEBEBEBEBEBE
+BEBEBEB2B2B2B2B2B2B2B2B29F9F9F9F9F9F9F9F9F9C9C9C9C9C9C9C9C9C9C9C9CA5A5A5A5A5A5
+A5A5A5A8A8A8A8A8A8A8A8A8AAAAAAAAAAAAAAAAAAA6A6A6A6A6A6A6A6A69A9A9A9A9A9A9A9A9A
+9A9A9A8D8D8D8D8D8D8D8D8D9F9F9F9F9F9F9F9F9FE1E1E1E1E1E1E1E1E1FCFCFCFCFCFCFCFCFC
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9
+BDBDBDBDBDBDBDBDBDDBDBDBDBDBDBDBDBDBDADADADADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9
+D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8
+D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8
+D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D6D6D6
+D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D5D5D5
+D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3D3D3
+D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0CFCFCF
+CFCFCFCFCFCFCDCDCDCDCDCDCDCDCDCECECECECECECECECECECECECECECECECECECECECECECECE
+CECECECECECED0D0D0D0D0D0D0D0D0D1D1D1D1D1D1D1D1D1D4D4D4D4D4D4D4D4D4CBCBCBCBCBCB
+CBCBCBCBCBCB999999999999999999737373737373737373747474747474747474757575757575
+7575757575757474747474747474747777777777777777777979797979797979797C7C7C7C7C7C
+7C7C7C8484848484848484848484848E8E8E8E8E8E8E8E8E969696969696969696969696969696
+9696969494949494949494949D9D9D9D9D9D9D9D9D9D9D9DA4A4A4A4A4A4A4A4A4ABABABABABAB
+ABABABB1B1B1B1B1B1B1B1B1AFAFAFAFAFAFAFAFAFAFAFAFA8A8A8A8A8A8A8A8A8969696969696
+9696968686868686868686868080808080808080807E7E7E7E7E7E7E7E7E7E7E7E808080808080
+8080808484848484848484849090909090909090909C9C9C9C9C9C9C9C9CA3A3A3A3A3A3A3A3A3
+A3A3A3A6A6A6A6A6A6A6A6A6ADADADADADADADADADB6B6B6B6B6B6B6B6B6B9B9B9B9B9B9B9B9B9
+B9B9B9BABABABABABABABABAB8B8B8B8B8B8B8B8B8B3B3B3B3B3B3B3B3B3B4B4B4B4B4B4B4B4B4
+B7B7B7B7B7B7B7B7B7B7B7B7BCBCBCBCBCBCBCBCBCC1C1C1C1C1C1C1C1C1C0C0C0C0C0C0C0C0C0
+C0C0C0C0C0C0C0C0C0C1C1C1C1C1C1C1C1C1C1C1C1BEBEBEBEBEBEBEBEBEB2B2B2B2B2B2B2B2B2
+9F9F9F9F9F9F9F9F9F9C9C9C9C9C9C9C9C9C9C9C9CA5A5A5A5A5A5A5A5A5A8A8A8A8A8A8A8A8A8
+AAAAAAAAAAAAAAAAAAA6A6A6A6A6A6A6A6A69A9A9A9A9A9A9A9A9A9A9A9A8D8D8D8D8D8D8D8D8D
+9F9F9F9F9F9F9F9F9FE1E1E1E1E1E1E1E1E1FCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9BDBDBDBDBDBDBDBDBDD9D9D9
+D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8
+D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8
+D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8
+D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6
+D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D3D3D3D3D3D3
+D3D3D3D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1
+D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CECECECECECECECECECDCDCDCDCDCD
+CDCDCDCECECECECECECECECECFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFD0D0D0D0D0D0
+D0D0D0D2D2D2D2D2D2D2D2D2D4D4D4D4D4D4D4D4D4CDCDCDCDCDCDCDCDCDCDCDCD9D9D9D9D9D9D
+9D9D9D747474747474747474757575757575757575757575757575757575757575757575757575
+7575757575757575757575757979797979797979797D7D7D7D7D7D7D7D7D818181818181818181
+818181898989898989898989909090909090909090969696969696969696959595959595959595
+9797979797979797979797979C9C9C9C9C9C9C9C9CA3A3A3A3A3A3A3A3A3AAAAAAAAAAAAAAAAAA
+AEAEAEAEAEAEAEAEAEAEAEAEAAAAAAAAAAAAAAAAAA9E9E9E9E9E9E9E9E9E919191919191919191
+8C8C8C8C8C8C8C8C8C8A8A8A8A8A8A8A8A8A8A8A8A888888888888888888878787878787878787
+8D8D8D8D8D8D8D8D8D9696969696969696969E9E9E9E9E9E9E9E9E9E9E9EA3A3A3A3A3A3A3A3A3
+A8A8A8A8A8A8A8A8A8B2B2B2B2B2B2B2B2B2B8B8B8B8B8B8B8B8B8B8B8B8BABABABABABABABABA
+BBBBBBBBBBBBBBBBBBBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBCBCBCBCBCBCBCBCBCBCBCBC
+BCBCBCBCBCBCBCBCBCBDBDBDBDBDBDBDBDBDBFBFBFBFBFBFBFBFBFC0C0C0C0C0C0C0C0C0BFBFBF
+BFBFBFBFBFBFBFBFBFB7B7B7B7B7B7B7B7B7ACACACACACACACACAC9B9B9B9B9B9B9B9B9B989898
+989898989898989898A1A1A1A1A1A1A1A1A1A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9A5A5A5
+A5A5A5A5A5A59696969696969696969696968D8D8D8D8D8D8D8D8DB0B0B0B0B0B0B0B0B0EDEDED
+EDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C7C7C7C7C7C7C7C7C7D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8
+D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8
+D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8
+D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8
+D8D8D8D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6
+D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D3D3D3D3D3D3D3D3D3D1D1D1D1D1D1D1D1D1
+D1D1D1D1D1D1D1D1D1D1D1D1D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0CECECECECECECECECECDCDCDCDCDCDCDCDCDCECECECECECECECECE
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0D2D2D2D2D2D2D2D2D2
+D4D4D4D4D4D4D4D4D4CDCDCDCDCDCDCDCDCDCDCDCD9D9D9D9D9D9D9D9D9D747474747474747474
+757575757575757575757575757575757575757575757575757575757575757575757575757575
+7979797979797979797D7D7D7D7D7D7D7D7D818181818181818181818181898989898989898989
+909090909090909090969696969696969696959595959595959595979797979797979797979797
+9C9C9C9C9C9C9C9C9CA3A3A3A3A3A3A3A3A3AAAAAAAAAAAAAAAAAAAEAEAEAEAEAEAEAEAEAEAEAE
+AAAAAAAAAAAAAAAAAA9E9E9E9E9E9E9E9E9E9191919191919191918C8C8C8C8C8C8C8C8C8A8A8A
+8A8A8A8A8A8A8A8A8A8888888888888888888787878787878787878D8D8D8D8D8D8D8D8D969696
+9696969696969E9E9E9E9E9E9E9E9E9E9E9EA3A3A3A3A3A3A3A3A3A8A8A8A8A8A8A8A8A8B2B2B2
+B2B2B2B2B2B2B8B8B8B8B8B8B8B8B8B8B8B8BABABABABABABABABABBBBBBBBBBBBBBBBBBBDBDBD
+BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBDBDBD
+BDBDBDBDBDBDBFBFBFBFBFBFBFBFBFC0C0C0C0C0C0C0C0C0BFBFBFBFBFBFBFBFBFBFBFBFB7B7B7
+B7B7B7B7B7B7ACACACACACACACACAC9B9B9B9B9B9B9B9B9B989898989898989898989898A1A1A1
+A1A1A1A1A1A1A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9A5A5A5A5A5A5A5A5A5969696969696
+9696969696968D8D8D8D8D8D8D8D8DB0B0B0B0B0B0B0B0B0EDEDEDEDEDEDEDEDEDFDFDFDFDFDFD
+FDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9
+F9F9F9C7C7C7C7C7C7C7C7C7D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8
+D8D8D8D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8
+D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
+D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
+D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5
+D5D5D5D5D5D5D5D5D5D3D3D3D3D3D3D3D3D3D1D1D1D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCF
+CFCFCFCFCFCFCFCFCFCECECECECECECECECECDCDCDCDCDCDCDCDCDCECECECECECECECECECECECE
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCBCBCBCBCBCBCBCBCBC5C5C5C5C5C5C5C5C5BEBEBE
+BEBEBEBEBEBEBEBEBE969696969696969696717171717171717171757575757575757575757575
+7575757575757575757575757575757575757575757575757575757777777777777777777A7A7A
+7A7A7A7A7A7A7D7D7D7D7D7D7D7D7D7D7D7D8383838383838383838A8A8A8A8A8A8A8A8A909090
+909090909090939393939393939393959595959595959595959595959595959595959595989898
+9898989898989E9E9E9E9E9E9E9E9EA4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A49D9D9D
+9D9D9D9D9D9D969696969696969696939393939393939393949494949494949494949494949494
+9494949494949595959595959595959A9A9A9A9A9A9A9A9A9F9F9F9F9F9F9F9F9FA5A5A5A5A5A5
+A5A5A5A5A5A5A9A9A9A9A9A9A9A9A9ACACACACACACACACACB0B1B0B0B1B0B0B1B0B3B3B3B3B3B3
+B3B3B3B3B3B3B4B4B4B4B4B4B4B4B4B6B6B6B6B6B6B6B6B6B5B5B5B5B5B5B5B5B5B3B3B3B3B3B3
+B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B4B4B4B4B4B4B4B4B4B8B8B8B8B8B8B8B8B8BABABABABABA
+BABABABDBDBDBDBDBDBDBDBDBBBBBBBBBBBBBBBBBBBBBBBBB1B1B1B1B1B1B1B1B1A6A6A6A6A6A6
+A6A6A6999999999999999999989898989898989898989898A0A0A0A0A0A0A0A0A0A4A4A4A4A4A4
+A4A4A4A7A7A7A7A7A7A7A7A7A2A2A2A2A2A2A2A2A2959595959595959595959595929292929292
+929292C4C4C4C4C4C4C4C4C4F6F6F6F6F6F6F6F6F6FDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFE
+FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBD7D7D7D7D7D7D7D7D7
+D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7
+D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8
+D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
+D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D5D6D6D5D6D6D5D6D6D5
+D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D3D3D3
+D3D3D3D3D3D3D1D1D1D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCECECE
+CECECECECECECDCDCDCDCDCDCDCDCDCECECECECECECECECECECECECFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCFCFCFCBCBCBCBCBCBCBCBCBC5C5C5C5C5C5C5C5C5BEBEBEBEBEBEBEBEBEBEBEBE969696
+969696969696717171717171717171757575757575757575757575757575757575757575757575
+7575757575757575757575757575757777777777777777777A7A7A7A7A7A7A7A7A7D7D7D7D7D7D
+7D7D7D7D7D7D8383838383838383838A8A8A8A8A8A8A8A8A909090909090909090939393939393
+9393939595959595959595959595959595959595959595959898989898989898989E9E9E9E9E9E
+9E9E9EA4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A49D9D9D9D9D9D9D9D9D969696969696
+969696939393939393939393949494949494949494949494949494949494949494959595959595
+9595959A9A9A9A9A9A9A9A9A9F9F9F9F9F9F9F9F9FA5A5A5A5A5A5A5A5A5A5A5A5A9A9A9A9A9A9
+A9A9A9ACACACACACACACACACB0B1B0B0B1B0B0B1B0B3B3B3B3B3B3B3B3B3B3B3B3B4B4B4B4B4B4
+B4B4B4B6B6B6B6B6B6B6B6B6B5B5B5B5B5B5B5B5B5B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1
+B1B1B1B4B4B4B4B4B4B4B4B4B8B8B8B8B8B8B8B8B8BABABABABABABABABABDBDBDBDBDBDBDBDBD
+BBBBBBBBBBBBBBBBBBBBBBBBB1B1B1B1B1B1B1B1B1A6A6A6A6A6A6A6A6A6999999999999999999
+989898989898989898989898A0A0A0A0A0A0A0A0A0A4A4A4A4A4A4A4A4A4A7A7A7A7A7A7A7A7A7
+A2A2A2A2A2A2A2A2A2959595959595959595959595929292929292929292C4C4C4C4C4C4C4C4C4
+F6F6F6F6F6F6F6F6F6FDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBD7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8
+D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D7D7D7
+D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7
+D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
+D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D5D5D5
+D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D3D3D3D3D3D3D3D3D3D1D1D1D1D1D1
+D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCECECECECECECECECECDCDCDCDCDCD
+CDCDCDCECECECECECECECECECECECECFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCBCBCBCBCBCB
+CBCBCBC5C5C5C5C5C5C5C5C5BEBEBEBEBEBEBEBEBEBEBEBE969696969696969696717171717171
+717171757575757575757575757575757575757575757575757575757575757575757575757575
+7575757777777777777777777A7A7A7A7A7A7A7A7A7D7D7D7D7D7D7D7D7D7D7D7D838383838383
+8383838A8A8A8A8A8A8A8A8A909090909090909090939393939393939393959595959595959595
+9595959595959595959595959898989898989898989E9E9E9E9E9E9E9E9EA4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A49D9D9D9D9D9D9D9D9D969696969696969696939393939393939393
+9494949494949494949494949494949494949494949595959595959595959A9A9A9A9A9A9A9A9A
+9F9F9F9F9F9F9F9F9FA5A5A5A5A5A5A5A5A5A5A5A5A9A9A9A9A9A9A9A9A9ACACACACACACACACAC
+B0B1B0B0B1B0B0B1B0B3B3B3B3B3B3B3B3B3B3B3B3B4B4B4B4B4B4B4B4B4B6B6B6B6B6B6B6B6B6
+B5B5B5B5B5B5B5B5B5B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B4B4B4B4B4B4B4B4B4
+B8B8B8B8B8B8B8B8B8BABABABABABABABABABDBDBDBDBDBDBDBDBDBBBBBBBBBBBBBBBBBBBBBBBB
+B1B1B1B1B1B1B1B1B1A6A6A6A6A6A6A6A6A6999999999999999999989898989898989898989898
+A0A0A0A0A0A0A0A0A0A4A4A4A4A4A4A4A4A4A7A7A7A7A7A7A7A7A7A2A2A2A2A2A2A2A2A2959595
+959595959595959595929292929292929292C4C4C4C4C4C4C4C4C4F6F6F6F6F6F6F6F6F6FDFDFD
+FDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB
+FBFBFBFBFBFBD7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8
+D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
+D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7
+D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6
+D6D6D6D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5
+D5D5D5D4D4D4D4D4D4D4D4D4D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCF
+CFCFCFCECECECECECECECECECECECECECECECECECECECECECECECECECECECFCFCFCFCFCFCFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCBCBCBCBCBCBCBCBCBB3B3B3B3B3B3B3B3B3959595959595959595
+8383838383838383838383836C6C6C6C6C6C6C6C6C626262626262626262727272727272727272
+757575757575757575757575747474747474747474757575757575757575757575757575757575
+7676767676767676767B7B7B7B7B7B7B7B7B7B7B7B7E7E7E7E7E7E7E7E7E848484848484848484
+8A8A8A8A8A8A8A8A8A8F8F8F8F8F8F8F8F8F919191919191919191919191909090909090909090
+9292929292929292929898989898989898989C9C9C9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B
+969696969696969696949494949494949494959595959595959595949494949494949494949494
+9696969696969696969797979797979797979797979797979797979B9B9B9B9B9B9B9B9B9F9F9F
+9F9F9F9F9F9F9F9F9FA1A1A1A1A1A1A1A1A19C9C9C9C9C9C9C9C9C949494949494949494909090
+9090909090909090909696969696969696969E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F
+9F9F9F9F9F9FA5A5A5A5A5A5A5A5A5A5A5A5B0B0B0B0B0B0B0B0B0B8B8B8B8B8B8B8B8B8B8B8B8
+B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B5B5B5B5B5B5B5B5B5B5B5B5ABABABABABABABABABA0A0A0
+A0A0A0A0A0A0969696969696969696999999999999999999999999A2A2A2A2A2A2A2A2A2A5A5A5
+A5A5A5A5A5A5A5A5A5A5A5A5A5A5A59E9E9E9E9E9E9E9E9E9393939393939393939393939E9E9E
+9E9E9E9E9E9EDBDBDBDBDBDBDBDBDBF9F9F9F9F9F9F9F9F9FDFDFDFDFDFDFDFDFDFEFEFEFEFEFE
+FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9CACACACACACA
+CACACAD7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7
+D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D9D9D9D9D9D9D9D9D9
+D9D9D9D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6
+D6D6D6D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5D5D5D5D5D5D5D5D5
+D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4
+D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCECECECECECECECECE
+CECECECECECECECECECECECECECECECECECECFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF
+CBCBCBCBCBCBCBCBCBB3B3B3B3B3B3B3B3B3959595959595959595838383838383838383838383
+6C6C6C6C6C6C6C6C6C626262626262626262727272727272727272757575757575757575757575
+7474747474747474747575757575757575757575757575757575757676767676767676767B7B7B
+7B7B7B7B7B7B7B7B7B7E7E7E7E7E7E7E7E7E8484848484848484848A8A8A8A8A8A8A8A8A8F8F8F
+8F8F8F8F8F8F919191919191919191919191909090909090909090929292929292929292989898
+9898989898989C9C9C9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B969696969696969696949494
+949494949494959595959595959595949494949494949494949494969696969696969696979797
+9797979797979797979797979797979B9B9B9B9B9B9B9B9B9F9F9F9F9F9F9F9F9F9F9F9FA1A1A1
+A1A1A1A1A1A19C9C9C9C9C9C9C9C9C949494949494949494909090909090909090909090969696
+9696969696969E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA5A5A5A5A5A5
+A5A5A5A5A5A5B0B0B0B0B0B0B0B0B0B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8
+B8B8B8B5B5B5B5B5B5B5B5B5B5B5B5ABABABABABABABABABA0A0A0A0A0A0A0A0A0969696969696
+969696999999999999999999999999A2A2A2A2A2A2A2A2A2A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5
+A5A5A59E9E9E9E9E9E9E9E9E9393939393939393939393939E9E9E9E9E9E9E9E9EDBDBDBDBDBDB
+DBDBDBF9F9F9F9F9F9F9F9F9FDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9CACACACACACACACACAD7D7D7D7D7D7D7D7D7
+D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
+D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7
+D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6
+D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D6D6D5D6D6D5D6D6D5D6D6D5
+D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D4D4D4D4D4D4D4D4D4D1D1D1D1D1D1D1D1D1D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0CECECECECECECECECECECECECECECECECECECDCDCDCDCDCDCDCDCDCECECE
+CECECECECECECFCFCFCFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0C2C2C2C2C2C2C2C2C29A9A9A
+9A9A9A9A9A9A666666666666666666484848484848484848484848404040404040404040555555
+555555555555717171717171717171757575757575757575757575727272727272727272737373
+7373737373737474747474747474747676767676767676767979797979797979797979797C7C7C
+7C7C7C7C7C7C8181818181818181818585858585858585858B8B8B8B8B8B8B8B8B8D8D8D8D8D8D
+8D8D8D8D8D8D8888888888888888888C8C8C8C8C8C8C8C8C949494949494949494969696969696
+9696969696969090909090909090908F8F8F8F8F8F8F8F8F909090909090909090939393939393
+9393939090909090909090909090909090909090909090908D8D8D8D8D8D8D8D8D888888888888
+888888888888888888888888888888888888888888888888878787878787878787808080808080
+8080807373737373737373737171717171717171717171717D7D7D7D7D7D7D7D7D898989898989
+8989898D8D8D8D8D8D8D8D8D959595959595959595A3A3A3A3A3A3A3A3A3A3A3A3B2B2B2B2B2B2
+B2B2B2BABABABABABABABABAB7B7B7B7B7B7B7B7B7B5B5B5B5B5B5B5B5B5B0B0B0B0B0B0B0B0B0
+B0B0B0A8A8A8A8A8A8A8A8A8A0A0A0A0A0A0A0A0A09A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9AA3A3A3A3A3A3A3A3A3A8A8A8A8A8A8A8A8A8A4A4A4A4A4A4A4A4A49B9B9B9B9B9B9B9B9B
+939393939393939393939393B7B7B7B7B7B7B7B7B7F0F0F0F0F0F0F0F0F0FDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FBFBFBFBFBFBFBFBFBD4D4D4D4D4D4D4D4D4D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8
+D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8
+D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6
+D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5
+D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5
+D6D6D5D6D6D5D4D4D4D4D4D4D4D4D4D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CECECE
+CECECECECECECECECECECECECECECECDCDCDCDCDCDCDCDCDCECECECECECECECECECFCFCFCFCFCF
+CFCFCFCFCFCFD0D0D0D0D0D0D0D0D0C2C2C2C2C2C2C2C2C29A9A9A9A9A9A9A9A9A666666666666
+666666484848484848484848484848404040404040404040555555555555555555717171717171
+717171757575757575757575757575727272727272727272737373737373737373747474747474
+7474747676767676767676767979797979797979797979797C7C7C7C7C7C7C7C7C818181818181
+8181818585858585858585858B8B8B8B8B8B8B8B8B8D8D8D8D8D8D8D8D8D8D8D8D888888888888
+8888888C8C8C8C8C8C8C8C8C949494949494949494969696969696969696969696909090909090
+9090908F8F8F8F8F8F8F8F8F909090909090909090939393939393939393909090909090909090
+9090909090909090909090908D8D8D8D8D8D8D8D8D888888888888888888888888888888888888
+888888888888888888888888878787878787878787808080808080808080737373737373737373
+7171717171717171717171717D7D7D7D7D7D7D7D7D8989898989898989898D8D8D8D8D8D8D8D8D
+959595959595959595A3A3A3A3A3A3A3A3A3A3A3A3B2B2B2B2B2B2B2B2B2BABABABABABABABABA
+B7B7B7B7B7B7B7B7B7B5B5B5B5B5B5B5B5B5B0B0B0B0B0B0B0B0B0B0B0B0A8A8A8A8A8A8A8A8A8
+A0A0A0A0A0A0A0A0A09A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AA3A3A3A3A3A3A3A3A3
+A8A8A8A8A8A8A8A8A8A4A4A4A4A4A4A4A4A49B9B9B9B9B9B9B9B9B939393939393939393939393
+B7B7B7B7B7B7B7B7B7F0F0F0F0F0F0F0F0F0FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFE
+FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBD4D4D4
+D4D4D4D4D4D4D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7
+D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8
+D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6
+D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5
+D5D5D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D4D4D4D4D4D4
+D4D4D4D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CECECECECECECECECECECECECECECE
+CECECECDCDCDCDCDCDCDCDCDCECECECECECECECECECFCFCFCFCFCFCFCFCFCFCFCFD0D0D0D0D0D0
+D0D0D0C2C2C2C2C2C2C2C2C29A9A9A9A9A9A9A9A9A666666666666666666484848484848484848
+484848404040404040404040555555555555555555717171717171717171757575757575757575
+757575727272727272727272737373737373737373747474747474747474767676767676767676
+7979797979797979797979797C7C7C7C7C7C7C7C7C818181818181818181858585858585858585
+8B8B8B8B8B8B8B8B8B8D8D8D8D8D8D8D8D8D8D8D8D8888888888888888888C8C8C8C8C8C8C8C8C
+9494949494949494949696969696969696969696969090909090909090908F8F8F8F8F8F8F8F8F
+909090909090909090939393939393939393909090909090909090909090909090909090909090
+8D8D8D8D8D8D8D8D8D888888888888888888888888888888888888888888888888888888888888
+878787878787878787808080808080808080737373737373737373717171717171717171717171
+7D7D7D7D7D7D7D7D7D8989898989898989898D8D8D8D8D8D8D8D8D959595959595959595A3A3A3
+A3A3A3A3A3A3A3A3A3B2B2B2B2B2B2B2B2B2BABABABABABABABABAB7B7B7B7B7B7B7B7B7B5B5B5
+B5B5B5B5B5B5B0B0B0B0B0B0B0B0B0B0B0B0A8A8A8A8A8A8A8A8A8A0A0A0A0A0A0A0A0A09A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AA3A3A3A3A3A3A3A3A3A8A8A8A8A8A8A8A8A8A4A4A4
+A4A4A4A4A4A49B9B9B9B9B9B9B9B9B939393939393939393939393B7B7B7B7B7B7B7B7B7F0F0F0
+F0F0F0F0F0F0FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBD4D4D4D4D4D4D4D4D4D7D7D7D7D7D7
+D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
+D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6
+D6D6D6D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6
+D6D6D6D6D6D6D6D6D6D6D6D6D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D5D5D5D5D5D5D5D5D5
+D5D5D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3D3D3D3D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0CECECECECECECECECECECECECECECECECECECDCDCDCDCDCDCDCDCD
+CECECECECECECECECED0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFC0C0C0C0C0C0C0C0C0
+A2A2A2A2A2A2A2A2A2767676767676767676454545454545454545454545353535353535353535
+4F4F4F4F4F4F4F4F4F707070707070707070787878787878787878787878737373737373737373
+737373737373737373747474747474747474767676767676767676777777777777777777777777
+7A7A7A7A7A7A7A7A7A7C7C7C7C7C7C7C7C7C808080808080808080868686868686868686888888
+8888888888888888888383838383838383838484848484848484848A8A8A8A8A8A8A8A8A8E8E8E
+8E8E8E8E8E8E8E8E8E8B8B8B8B8B8B8B8B8B8989898989898989898989898989898989898B8B8B
+8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8787878787878787877F7F7F
+7F7F7F7F7F7F7B7B7B7B7B7B7B7B7B7979797979797979797979797B7B7B7B7B7B7B7B7B7B7B7B
+7B7B7B7B7B7B7777777777777777777676767676767676767676767D7D7D7D7D7D7D7D7D888888
+8888888888888F8F8F8F8F8F8F8F8F999999999999999999A8A8A8A8A8A8A8A8A8A8A8A8B5B5B5
+B5B5B5B5B5B5B9B9B9B9B9B9B9B9B9B5B5B5B5B5B5B5B5B5B0B0B0B0B0B0B0B0B0A9A9A9A9A9A9
+A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A5A5A5A5A5A5A5A5A59E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9EA6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9A1A1A1A1A1A1A1A1A1979797979797
+9797979A9A9A9A9A9A9A9A9A9A9A9AD4D4D4D4D4D4D4D4D4FAFAFAFAFAFAFAFAFAFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFCFCFCFCFCFCFCFCFCE1E1E1E1E1E1E1E1E1D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
+D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
+D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5
+D6D6D5D6D6D5D6D6D5D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6
+D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5
+D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3D3D3D3D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+CECECECECECECECECECECECECECECECECECECDCDCDCDCDCDCDCDCDCECECECECECECECECED0D0D0
+D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFC0C0C0C0C0C0C0C0C0A2A2A2A2A2A2A2A2A2767676
+7676767676764545454545454545454545453535353535353535354F4F4F4F4F4F4F4F4F707070
+707070707070787878787878787878787878737373737373737373737373737373737373747474
+7474747474747676767676767676767777777777777777777777777A7A7A7A7A7A7A7A7A7C7C7C
+7C7C7C7C7C7C808080808080808080868686868686868686888888888888888888888888838383
+8383838383838484848484848484848A8A8A8A8A8A8A8A8A8E8E8E8E8E8E8E8E8E8E8E8E8B8B8B
+8B8B8B8B8B8B8989898989898989898989898989898989898B8B8B8B8B8B8B8B8B8C8C8C8C8C8C
+8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8787878787878787877F7F7F7F7F7F7F7F7F7B7B7B7B7B7B
+7B7B7B7979797979797979797979797B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B777777777777
+7777777676767676767676767676767D7D7D7D7D7D7D7D7D8888888888888888888F8F8F8F8F8F
+8F8F8F999999999999999999A8A8A8A8A8A8A8A8A8A8A8A8B5B5B5B5B5B5B5B5B5B9B9B9B9B9B9
+B9B9B9B5B5B5B5B5B5B5B5B5B0B0B0B0B0B0B0B0B0A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9
+A9A9A9A5A5A5A5A5A5A5A5A59E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA6A6A6A6A6A6
+A6A6A6A9A9A9A9A9A9A9A9A9A1A1A1A1A1A1A1A1A19797979797979797979A9A9A9A9A9A9A9A9A
+9A9A9AD4D4D4D4D4D4D4D4D4FAFAFAFAFAFAFAFAFAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFC
+E1E1E1E1E1E1E1E1E1D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8
+D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D7D7D7
+D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D6
+D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5D5D5D5D5D5D5D5D5D4D4D4
+D4D4D4D4D4D4D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D3D3D3
+D3D3D3D3D3D3D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCFCFCFD0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CECECECECECECECECECECECE
+CECECECECECECDCDCDCDCDCDCDCDCDCECECECECECECECECED0D0D0D0D0D0D0D0D0D0D0D0CFCFCF
+CFCFCFCFCFCFC0C0C0C0C0C0C0C0C0A2A2A2A2A2A2A2A2A2767676767676767676454545454545
+4545454545453535353535353535354F4F4F4F4F4F4F4F4F707070707070707070787878787878
+787878787878737373737373737373737373737373737373747474747474747474767676767676
+7676767777777777777777777777777A7A7A7A7A7A7A7A7A7C7C7C7C7C7C7C7C7C808080808080
+808080868686868686868686888888888888888888888888838383838383838383848484848484
+8484848A8A8A8A8A8A8A8A8A8E8E8E8E8E8E8E8E8E8E8E8E8B8B8B8B8B8B8B8B8B898989898989
+8989898989898989898989898B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D
+8D8D8D8787878787878787877F7F7F7F7F7F7F7F7F7B7B7B7B7B7B7B7B7B797979797979797979
+7979797B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B777777777777777777767676767676767676
+7676767D7D7D7D7D7D7D7D7D8888888888888888888F8F8F8F8F8F8F8F8F999999999999999999
+A8A8A8A8A8A8A8A8A8A8A8A8B5B5B5B5B5B5B5B5B5B9B9B9B9B9B9B9B9B9B5B5B5B5B5B5B5B5B5
+B0B0B0B0B0B0B0B0B0A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A5A5A5A5A5A5A5A5A5
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9
+A1A1A1A1A1A1A1A1A19797979797979797979A9A9A9A9A9A9A9A9A9A9A9AD4D4D4D4D4D4D4D4D4
+FAFAFAFAFAFAFAFAFAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCE1E1E1E1E1E1E1E1E1D7D7D7
+D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D6D6D6
+D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
+D7D7D7D7D7D7D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6
+D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4
+D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2D0D0D0D0D0D0
+D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFD0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD
+CDCDCDCECECECECECECECECED0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFC4C4C4C4C4C4
+C4C4C4B1B1B1B1B1B1B1B1B19A9A9A9A9A9A9A9A9A6161616161616161616161613A3A3A3A3A3A
+3A3A3A4D4D4D4D4D4D4D4D4D6F6F6F6F6F6F6F6F6F7B7B7B7B7B7B7B7B7B7B7B7B767676767676
+767676727272727272727272737373737373737373747474747474747474757575757575757575
+7575757878787878787878787979797979797979797B7B7B7B7B7B7B7B7B7F7F7F7F7F7F7F7F7F
+8282828282828282828282827E7E7E7E7E7E7E7E7E7C7C7C7C7C7C7C7C7C808080808080808080
+868686868686868686868686858585858585858585858585858585858585868686868686868686
+8888888888888888888989898989898989898989898B8B8B8B8B8B8B8B8B898989898989898989
+8282828282828282827E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7F7F7F7F7F7F7F7F7F
+808080808080808080818181818181818181808080808080808080808080868686868686868686
+909090909090909090979797979797979797A3A3A3A3A3A3A3A3A3AFAFAFAFAFAFAFAFAFAFAFAF
+B7B7B7B7B7B7B7B7B7B8B8B8B8B8B8B8B8B8B3B3B3B3B3B3B3B3B3AFAFAFAFAFAFAFAFAFA8A8A8
+A8A8A8A8A8A8A8A8A8ABABABABABABABABABA8A8A8A8A8A8A8A8A8A2A2A2A2A2A2A2A2A2A3A3A3
+A3A3A3A3A3A3A3A3A3A8A8A8A8A8A8A8A8A8A9A9A9A9A9A9A9A9A9A0A0A0A0A0A0A0A0A0969696
+969696969696A9A9A9A9A9A9A9A9A9A9A9A9E8E8E8E8E8E8E8E8E8FCFCFCFCFCFCFCFCFCFDFDFD
+FDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C7C7C7C7C7C7C7C7C7D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8
+D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6
+D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D5D6D6D5
+D6D6D5D6D6D5D6D6D5D6D6D5D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5
+D6D6D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4
+D4D4D4D3D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0CFCFCFCFCFCFCFCFCFCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCECECECECECECECECE
+D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFC4C4C4C4C4C4C4C4C4B1B1B1B1B1B1B1B1B1
+9A9A9A9A9A9A9A9A9A6161616161616161616161613A3A3A3A3A3A3A3A3A4D4D4D4D4D4D4D4D4D
+6F6F6F6F6F6F6F6F6F7B7B7B7B7B7B7B7B7B7B7B7B767676767676767676727272727272727272
+737373737373737373747474747474747474757575757575757575757575787878787878787878
+7979797979797979797B7B7B7B7B7B7B7B7B7F7F7F7F7F7F7F7F7F828282828282828282828282
+7E7E7E7E7E7E7E7E7E7C7C7C7C7C7C7C7C7C808080808080808080868686868686868686868686
+858585858585858585858585858585858585868686868686868686888888888888888888898989
+8989898989898989898B8B8B8B8B8B8B8B8B8989898989898989898282828282828282827E7E7E
+7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7F7F7F7F7F7F7F7F7F808080808080808080818181
+818181818181808080808080808080808080868686868686868686909090909090909090979797
+979797979797A3A3A3A3A3A3A3A3A3AFAFAFAFAFAFAFAFAFAFAFAFB7B7B7B7B7B7B7B7B7B8B8B8
+B8B8B8B8B8B8B3B3B3B3B3B3B3B3B3AFAFAFAFAFAFAFAFAFA8A8A8A8A8A8A8A8A8A8A8A8ABABAB
+ABABABABABABA8A8A8A8A8A8A8A8A8A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A3A3A3A8A8A8
+A8A8A8A8A8A8A9A9A9A9A9A9A9A9A9A0A0A0A0A0A0A0A0A0969696969696969696A9A9A9A9A9A9
+A9A9A9A9A9A9E8E8E8E8E8E8E8E8E8FCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9
+F9F9F9C7C7C7C7C7C7C7C7C7D7D7D7D7D7D7D7D7D7D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D7D7
+D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D6D6D6D6D6D6D6D6D6
+D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5
+D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4
+D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2
+D2D2D2D2D2D2D2D2D2D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CECECECECECECECECE
+CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCECECECECECECECECED0D0D0D0D0D0D0D0D0D0D0D0
+CFCFCFCFCFCFCFCFCFC6C6C6C6C6C6C6C6C6B6B6B6B6B6B6B6B6B6ACACACACACACACACAC808080
+8080808080808080804949494949494949494C4C4C4C4C4C4C4C4C6C6C6C6C6C6C6C6C6C7B7B7B
+7B7B7B7B7B7B7B7B7B797979797979797979727272727272727272727272727272727272737373
+737373737373757575757575757575757575777777777777777777777777777777777777797979
+7979797979797A7A7A7A7A7A7A7A7A7E7E7E7E7E7E7E7E7E7E7E7E7B7B7B7B7B7B7B7B7B777777
+7777777777777979797979797979797E7E7E7E7E7E7E7E7E7E7E7E7F7F7F7F7F7F7F7F7F818181
+8181818181818383838383838383838888888888888888888A8A8A8A8A8A8A8A8A8A8A8A8C8C8C
+8C8C8C8C8C8C8E8E8E8E8E8E8E8E8E898989898989898989868686868686868686858585858585
+858585858585838383838383838383818181818181818181858585858585858585878787878787
+8787878787878F8F8F8F8F8F8F8F8F999999999999999999A1A1A1A1A1A1A1A1A1ACACACACACAC
+ACACACB8B8B8B8B8B8B8B8B8B8B8B8BBBBBBBBBBBBBBBBBBB8B8B8B8B8B8B8B8B8B5B5B5B5B5B5
+B5B5B5B3B3B3B3B3B3B3B3B3B0B0B0B0B0B0B0B0B0B0B0B0AEAEAEAEAEAEAEAEAEAAAAAAAAAAAA
+AAAAAAA8A8A8A8A8A8A8A8A8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8A8A8A8A8A8
+A8A8A89E9E9E9E9E9E9E9E9E959595959595959595B5B5B5B5B5B5B5B5B5B5B5B5F0F0F0F0F0F0
+F0F0F0FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
+FFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C6C6C6C6C6C6C6C6C6
+D7D7D7D7D7D7D7D7D7D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
+D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6
+D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5
+D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3D3D3D3D3D3D3
+D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D0D0D0
+D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFD0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CECECECECECECECECECDCDCDCDCDCDCDCDCDCDCDCD
+CDCDCDCDCDCDCECECECECECECECECED0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFC6C6C6
+C6C6C6C6C6C6B6B6B6B6B6B6B6B6B6ACACACACACACACACAC808080808080808080808080494949
+4949494949494C4C4C4C4C4C4C4C4C6C6C6C6C6C6C6C6C6C7B7B7B7B7B7B7B7B7B7B7B7B797979
+797979797979727272727272727272727272727272727272737373737373737373757575757575
+7575757575757777777777777777777777777777777777777979797979797979797A7A7A7A7A7A
+7A7A7A7E7E7E7E7E7E7E7E7E7E7E7E7B7B7B7B7B7B7B7B7B777777777777777777797979797979
+7979797E7E7E7E7E7E7E7E7E7E7E7E7F7F7F7F7F7F7F7F7F818181818181818181838383838383
+8383838888888888888888888A8A8A8A8A8A8A8A8A8A8A8A8C8C8C8C8C8C8C8C8C8E8E8E8E8E8E
+8E8E8E898989898989898989868686868686868686858585858585858585858585838383838383
+8383838181818181818181818585858585858585858787878787878787878787878F8F8F8F8F8F
+8F8F8F999999999999999999A1A1A1A1A1A1A1A1A1ACACACACACACACACACB8B8B8B8B8B8B8B8B8
+B8B8B8BBBBBBBBBBBBBBBBBBB8B8B8B8B8B8B8B8B8B5B5B5B5B5B5B5B5B5B3B3B3B3B3B3B3B3B3
+B0B0B0B0B0B0B0B0B0B0B0B0AEAEAEAEAEAEAEAEAEAAAAAAAAAAAAAAAAAAA8A8A8A8A8A8A8A8A8
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8A8A8A8A8A8A8A8A89E9E9E9E9E9E9E9E9E
+959595959595959595B5B5B5B5B5B5B5B5B5B5B5B5F0F0F0F0F0F0F0F0F0FDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C6C6C6C6C6C6C6C6C6D7D7D7D7D7D7D7D7D7D9D9D9
+D9D9D9D9D9D9D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D5
+D6D6D5D6D6D5D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5
+D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D5D5D5
+D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3
+D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D0D0D0D0D0D0D0D0D0CFCFCFCFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0CECECECECECECECECECDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCECECECECECE
+CECECED0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFC6C6C6C6C6C6C6C6C6B6B6B6B6B6B6
+B6B6B6ACACACACACACACACAC8080808080808080808080804949494949494949494C4C4C4C4C4C
+4C4C4C6C6C6C6C6C6C6C6C6C7B7B7B7B7B7B7B7B7B7B7B7B797979797979797979727272727272
+727272727272727272727272737373737373737373757575757575757575757575777777777777
+7777777777777777777777777979797979797979797A7A7A7A7A7A7A7A7A7E7E7E7E7E7E7E7E7E
+7E7E7E7B7B7B7B7B7B7B7B7B7777777777777777777979797979797979797E7E7E7E7E7E7E7E7E
+7E7E7E7F7F7F7F7F7F7F7F7F818181818181818181838383838383838383888888888888888888
+8A8A8A8A8A8A8A8A8A8A8A8A8C8C8C8C8C8C8C8C8C8E8E8E8E8E8E8E8E8E898989898989898989
+868686868686868686858585858585858585858585838383838383838383818181818181818181
+8585858585858585858787878787878787878787878F8F8F8F8F8F8F8F8F999999999999999999
+A1A1A1A1A1A1A1A1A1ACACACACACACACACACB8B8B8B8B8B8B8B8B8B8B8B8BBBBBBBBBBBBBBBBBB
+B8B8B8B8B8B8B8B8B8B5B5B5B5B5B5B5B5B5B3B3B3B3B3B3B3B3B3B0B0B0B0B0B0B0B0B0B0B0B0
+AEAEAEAEAEAEAEAEAEAAAAAAAAAAAAAAAAAAA8A8A8A8A8A8A8A8A8AAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAA8A8A8A8A8A8A8A8A89E9E9E9E9E9E9E9E9E959595959595959595B5B5B5
+B5B5B5B5B5B5B5B5B5F0F0F0F0F0F0F0F0F0FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFE
+FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9
+F9F9F9F9F9F9C6C6C6C6C6C6C6C6C6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6
+D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D6D6D5D6D6D5
+D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5
+D5D5D5D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3
+D3D3D3D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D2D2D2D2D2D2
+D2D2D2D2D2D2D2D2D2D2D2D2D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFCECECECECECE
+CECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECE
+CECECECDCDCDCDCDCDCDCDCDCECECECECECECECECECECECECECECECECECED0D0D0D0D0D0D0D0D0
+D0D0D0CFCFCFCFCFCFCFCFCFC6C6C6C6C6C6C6C6C6B8B8B8B8B8B8B8B8B8B3B3B3B3B3B3B3B3B3
+9B9B9B9B9B9B9B9B9B9B9B9B666666666666666666515151515151515151686868686868686868
+7979797979797979797979797B7B7B7B7B7B7B7B7B747474747474747474707070707070707070
+717171717171717171737373737373737373737373757575757575757575767676767676767676
+7878787878787878787979797979797979797B7B7B7B7B7B7B7B7B7B7B7B787878787878787878
+747474747474747474737373737373737373757575757575757575757575777777777777777777
+7D7D7D7D7D7D7D7D7D8181818181818181818585858585858585858A8A8A8A8A8A8A8A8A8A8A8A
+8F8F8F8F8F8F8F8F8F9090909090909090908B8B8B8B8B8B8B8B8B888888888888888888898989
+8989898989898989898888888888888888888A8A8A8A8A8A8A8A8A8F8F8F8F8F8F8F8F8F979797
+979797979797979797A2A2A2A2A2A2A2A2A2A8A8A8A8A8A8A8A8A8B0B0B0B0B0B0B0B0B0B9B9B9
+B9B9B9B9B9B9C0C0C0C0C0C0C0C0C0C0C0C0BFBFBFBFBFBFBFBFBFBEBEBEBEBEBEBEBEBEBEBEBE
+BEBEBEBEBEBEBCBCBCBCBCBCBCBCBCB7B7B7B7B7B7B7B7B7B7B7B7B0B0B0B0B0B0B0B0B0AEAEAE
+AEAEAEAEAEAEADADADADADADADADADADADADADADADADADADADADADAAAAAAAAAAAAAAAAAAA4A4A4
+A4A4A4A4A4A4999999999999999999929292929292929292BABABABABABABABABABABABAF1F1F1
+F1F1F1F1F1F1FDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9BBBBBBBBBBBB
+BBBBBBD6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6
+D6D6D6D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5
+D6D6D5D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4
+D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2
+D2D2D2D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2
+D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFCECECECECECECECECECECECECECECECECECE
+CECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECDCDCDCDCDCDCDCDCD
+CECECECECECECECECECECECECECECECECECED0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCF
+C6C6C6C6C6C6C6C6C6B8B8B8B8B8B8B8B8B8B3B3B3B3B3B3B3B3B39B9B9B9B9B9B9B9B9B9B9B9B
+666666666666666666515151515151515151686868686868686868797979797979797979797979
+7B7B7B7B7B7B7B7B7B747474747474747474707070707070707070717171717171717171737373
+737373737373737373757575757575757575767676767676767676787878787878787878797979
+7979797979797B7B7B7B7B7B7B7B7B7B7B7B787878787878787878747474747474747474737373
+7373737373737575757575757575757575757777777777777777777D7D7D7D7D7D7D7D7D818181
+8181818181818585858585858585858A8A8A8A8A8A8A8A8A8A8A8A8F8F8F8F8F8F8F8F8F909090
+9090909090908B8B8B8B8B8B8B8B8B888888888888888888898989898989898989898989888888
+8888888888888A8A8A8A8A8A8A8A8A8F8F8F8F8F8F8F8F8F979797979797979797979797A2A2A2
+A2A2A2A2A2A2A8A8A8A8A8A8A8A8A8B0B0B0B0B0B0B0B0B0B9B9B9B9B9B9B9B9B9C0C0C0C0C0C0
+C0C0C0C0C0C0BFBFBFBFBFBFBFBFBFBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBCBCBCBCBCBC
+BCBCBCB7B7B7B7B7B7B7B7B7B7B7B7B0B0B0B0B0B0B0B0B0AEAEAEAEAEAEAEAEAEADADADADADAD
+ADADADADADADADADADADADADADADADAAAAAAAAAAAAAAAAAAA4A4A4A4A4A4A4A4A4999999999999
+999999929292929292929292BABABABABABABABABABABABAF1F1F1F1F1F1F1F1F1FDFDFDFDFDFD
+FDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9BBBBBBBBBBBBBBBBBBD6D6D5D6D6D5D6D6D5
+D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5
+D5D5D5D5D5D5D5D5D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5
+D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2
+D3D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
+D1D1D1D1D1D1D1D1D1D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2CFCFCFCFCFCFCFCFCFCECECE
+CECECECECECECECECECECECECECECECECECECECECECECECECECECECDCDCDCDCDCDCDCDCDCECECE
+CECECECECECECECECECECECECECECECECECECECECECECECECECECECFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCFCFCFD0D0D0D0D0D0D0D0D0D0D0D0CECECECECECECECECEC6C6C6C6C6C6C6C6C6B9B9B9
+B9B9B9B9B9B9B4B4B4B4B4B4B4B4B4ADADADADADADADADADADADAD8A8A8A8A8A8A8A8A8A646464
+6464646464646565656565656565657676767676767676767676767C7C7C7C7C7C7C7C7C757575
+7575757575756F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F707070707070707070707070727272
+7272727272727575757575757575757878787878787878787A7A7A7A7A7A7A7A7A7B7B7B7B7B7B
+7B7B7B7B7B7B7878787878787878787373737373737373736E6E6E6E6E6E6E6E6E6D6D6D6D6D6D
+6D6D6D6D6D6D7474747474747474747C7C7C7C7C7C7C7C7C808080808080808080838383838383
+838383888888888888888888888888909090909090909090949494949494949494909090909090
+9090908F8F8F8F8F8F8F8F8F929292929292929292929292909090909090909090999999999999
+999999A3A3A3A3A3A3A3A3A3ABABABABABABABABABABABABB4B4B4B4B4B4B4B4B4B7B7B7B7B7B7
+B7B7B7C0C0C0C0C0C0C0C0C0C5C5C5C5C5C5C5C5C5C6C6C6C6C6C6C6C6C6C6C6C6C5C5C5C5C5C5
+C5C5C5C5C5C5C5C5C5C5C5C5C6C6C6C6C6C6C6C6C6C3C3C3C3C3C3C3C3C3B9B9B9B9B9B9B9B9B9
+B9B9B9B3B3B3B3B3B3B3B3B3B2B2B2B2B2B2B2B2B2AFAFAFAFAFAFAFAFAFA8A8A8A8A8A8A8A8A8
+A8A8A8A3A3A3A3A3A3A3A3A39E9E9E9E9E9E9E9E9E959595959595959595949494949494949494
+BCBCBCBCBCBCBCBCBCBCBCBCF1F1F1F1F1F1F1F1F1FDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+F9F9F9F9F9F9F9F9F9C5C5C5C5C5C5C5C5C5D6D6D5D6D6D5D6D6D5D6D6D6D6D6D6D6D6D6D6D6D6
+D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D6D6D5
+D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D4D4D4
+D4D4D4D4D4D4D3D3D3D3D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2D3D3D3D3D3D3D3D3D3D2D2D2
+D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D2D2D2
+D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2CFCFCFCFCFCFCFCFCFCECECECECECECECECECECECECECECE
+CECECECECECECECECECECECECECECECDCDCDCDCDCDCDCDCDCECECECECECECECECECECECECECECE
+CECECECECECECECECECECECECECECECFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFD0D0D0D0D0D0
+D0D0D0D0D0D0CECECECECECECECECEC6C6C6C6C6C6C6C6C6B9B9B9B9B9B9B9B9B9B4B4B4B4B4B4
+B4B4B4ADADADADADADADADADADADAD8A8A8A8A8A8A8A8A8A646464646464646464656565656565
+6565657676767676767676767676767C7C7C7C7C7C7C7C7C7575757575757575756F6F6F6F6F6F
+6F6F6F6F6F6F6F6F6F6F6F6F707070707070707070707070727272727272727272757575757575
+7575757878787878787878787A7A7A7A7A7A7A7A7A7B7B7B7B7B7B7B7B7B7B7B7B787878787878
+7878787373737373737373736E6E6E6E6E6E6E6E6E6D6D6D6D6D6D6D6D6D6D6D6D747474747474
+7474747C7C7C7C7C7C7C7C7C808080808080808080838383838383838383888888888888888888
+8888889090909090909090909494949494949494949090909090909090908F8F8F8F8F8F8F8F8F
+929292929292929292929292909090909090909090999999999999999999A3A3A3A3A3A3A3A3A3
+ABABABABABABABABABABABABB4B4B4B4B4B4B4B4B4B7B7B7B7B7B7B7B7B7C0C0C0C0C0C0C0C0C0
+C5C5C5C5C5C5C5C5C5C6C6C6C6C6C6C6C6C6C6C6C6C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5
+C6C6C6C6C6C6C6C6C6C3C3C3C3C3C3C3C3C3B9B9B9B9B9B9B9B9B9B9B9B9B3B3B3B3B3B3B3B3B3
+B2B2B2B2B2B2B2B2B2AFAFAFAFAFAFAFAFAFA8A8A8A8A8A8A8A8A8A8A8A8A3A3A3A3A3A3A3A3A3
+9E9E9E9E9E9E9E9E9E959595959595959595949494949494949494BCBCBCBCBCBCBCBCBCBCBCBC
+F1F1F1F1F1F1F1F1F1FDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C5C5C5
+C5C5C5C5C5C5D6D6D5D6D6D5D6D6D5D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6
+D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5
+D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3
+D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2D3D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1
+D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2
+D2D2D2CFCFCFCFCFCFCFCFCFCECECECECECECECECECECECECECECECECECECECECECECECECECECE
+CECECECDCDCDCDCDCDCDCDCDCECECECECECECECECECECECECECECECECECECECECECECECECECECE
+CECECECFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0D0D0D0CECECECECECE
+CECECEC6C6C6C6C6C6C6C6C6B9B9B9B9B9B9B9B9B9B4B4B4B4B4B4B4B4B4ADADADADADADADADAD
+ADADAD8A8A8A8A8A8A8A8A8A646464646464646464656565656565656565767676767676767676
+7676767C7C7C7C7C7C7C7C7C7575757575757575756F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F
+707070707070707070707070727272727272727272757575757575757575787878787878787878
+7A7A7A7A7A7A7A7A7A7B7B7B7B7B7B7B7B7B7B7B7B787878787878787878737373737373737373
+6E6E6E6E6E6E6E6E6E6D6D6D6D6D6D6D6D6D6D6D6D7474747474747474747C7C7C7C7C7C7C7C7C
+808080808080808080838383838383838383888888888888888888888888909090909090909090
+9494949494949494949090909090909090908F8F8F8F8F8F8F8F8F929292929292929292929292
+909090909090909090999999999999999999A3A3A3A3A3A3A3A3A3ABABABABABABABABABABABAB
+B4B4B4B4B4B4B4B4B4B7B7B7B7B7B7B7B7B7C0C0C0C0C0C0C0C0C0C5C5C5C5C5C5C5C5C5C6C6C6
+C6C6C6C6C6C6C6C6C6C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C6C6C6C6C6C6C6C6C6C3C3C3
+C3C3C3C3C3C3B9B9B9B9B9B9B9B9B9B9B9B9B3B3B3B3B3B3B3B3B3B2B2B2B2B2B2B2B2B2AFAFAF
+AFAFAFAFAFAFA8A8A8A8A8A8A8A8A8A8A8A8A3A3A3A3A3A3A3A3A39E9E9E9E9E9E9E9E9E959595
+959595959595949494949494949494BCBCBCBCBCBCBCBCBCBCBCBCF1F1F1F1F1F1F1F1F1FDFDFD
+FDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C5C5C5C5C5C5C5C5C5D6D6D6D6D6D6
+D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D5D6D6D5
+D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5
+D6D6D5D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D3D3D3D3D3D3D3D3D3D3D3D3D1D1D1D1D1D1
+D1D1D1D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2
+D2D2D2D1D1D1D1D1D1D1D1D1D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0
+CECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECE
+D0D0D0D0D0D0D0D0D0D0D0D0CECECECECECECECECECFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCDCDCDCDCDCDCDCDCDC5C5C5C5C5C5C5C5C5
+BCBCBCBCBCBCBCBCBCB5B5B5B5B5B5B5B5B5B6B6B6B6B6B6B6B6B6B6B6B6A4A4A4A4A4A4A4A4A4
+8383838383838383836A6A6A6A6A6A6A6A6A707070707070707070707070797979797979797979
+7777777777777777777070707070707070706E6E6E6E6E6E6E6E6E707070707070707070707070
+7070707070707070707474747474747474747878787878787878787B7B7B7B7B7B7B7B7B7C7C7C
+7C7C7C7C7C7C7C7C7C7A7A7A7A7A7A7A7A7A7575757575757575756F6F6F6F6F6F6F6F6F6E6E6E
+6E6E6E6E6E6E6E6E6E7575757575757575757D7D7D7D7D7D7D7D7D828282828282828282848484
+8484848484848888888888888888888888889090909090909090909797979797979797979A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9E9E9E9E9E9E9E9E9E9E9E9E9A9A9A9A9A9A9A9A9A9F9F9F
+9F9F9F9F9F9FABABABABABABABABABB0B1B0B0B1B0B0B1B0B0B1B0B6B6B6B6B6B6B6B6B6BDBDBD
+BDBDBDBDBDBDC7C7C7C7C7C7C7C7C7CBCBCBCBCBCBCBCBCBC5C5C5C5C5C5C5C5C5C5C5C5C4C4C4
+C4C4C4C4C4C4C8C8C8C8C8C8C8C8C8CACACACACACACACACAC5C5C5C5C5C5C5C5C5BEBEBEBEBEBE
+BEBEBEBEBEBEBBBBBBBBBBBBBBBBBBB8B8B8B8B8B8B8B8B8AEAEAEAEAEAEAEAEAEA4A4A4A4A4A4
+A4A4A4A4A4A49E9E9E9E9E9E9E9E9E989898989898989898919191919191919191969696969696
+969696BBBBBBBBBBBBBBBBBBBBBBBBF1F1F1F1F1F1F1F1F1FDFDFDFDFDFDFDFDFDFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFF9F9F9F9F9F9F9F9F9C6C6C6C6C6C6C6C6C6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7
+D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5
+D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5
+D5D5D5D5D5D5D5D5D5D3D3D3D3D3D3D3D3D3D3D3D3D1D1D1D1D1D1D1D1D1D2D2D2D2D2D2D2D2D2
+D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1
+D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0CECECECECECECECECECECECE
+CECECECECECECECECECECECECECECECECECECECECECECECECECECED0D0D0D0D0D0D0D0D0D0D0D0
+CECECECECECECECECECFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCFCFCFCFCFCFCDCDCDCDCDCDCDCDCDC5C5C5C5C5C5C5C5C5BCBCBCBCBCBCBCBCBCB5B5B5
+B5B5B5B5B5B5B6B6B6B6B6B6B6B6B6B6B6B6A4A4A4A4A4A4A4A4A48383838383838383836A6A6A
+6A6A6A6A6A6A707070707070707070707070797979797979797979777777777777777777707070
+7070707070706E6E6E6E6E6E6E6E6E707070707070707070707070707070707070707070747474
+7474747474747878787878787878787B7B7B7B7B7B7B7B7B7C7C7C7C7C7C7C7C7C7C7C7C7A7A7A
+7A7A7A7A7A7A7575757575757575756F6F6F6F6F6F6F6F6F6E6E6E6E6E6E6E6E6E6E6E6E757575
+7575757575757D7D7D7D7D7D7D7D7D828282828282828282848484848484848484888888888888
+8888888888889090909090909090909797979797979797979A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9E9E9E9E9E9E9E9E9E9E9E9E9A9A9A9A9A9A9A9A9A9F9F9F9F9F9F9F9F9FABABABABABAB
+ABABABB0B1B0B0B1B0B0B1B0B0B1B0B6B6B6B6B6B6B6B6B6BDBDBDBDBDBDBDBDBDC7C7C7C7C7C7
+C7C7C7CBCBCBCBCBCBCBCBCBC5C5C5C5C5C5C5C5C5C5C5C5C4C4C4C4C4C4C4C4C4C8C8C8C8C8C8
+C8C8C8CACACACACACACACACAC5C5C5C5C5C5C5C5C5BEBEBEBEBEBEBEBEBEBEBEBEBBBBBBBBBBBB
+BBBBBBB8B8B8B8B8B8B8B8B8AEAEAEAEAEAEAEAEAEA4A4A4A4A4A4A4A4A4A4A4A49E9E9E9E9E9E
+9E9E9E989898989898989898919191919191919191969696969696969696BBBBBBBBBBBBBBBBBB
+BBBBBBF1F1F1F1F1F1F1F1F1FDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9
+C6C6C6C6C6C6C6C6C6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7
+D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D4D4D4
+D4D4D4D4D4D4D4D4D4D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D3D3D3
+D3D3D3D3D3D3D3D3D3D1D1D1D1D1D1D1D1D1D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2
+D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D2D2D2D2D2D2D2D2D2D2D2D2
+D2D2D2D2D2D2D0D0D0D0D0D0D0D0D0CECECECECECECECECECECECECECECECECECECECECECFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFD0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CDCDCD
+CDCDCDCDCDCDC3C3C3C3C3C3C3C3C3BDBDBDBDBDBDBDBDBDB7B7B7B7B7B7B7B7B7B8B8B8B8B8B8
+B8B8B8B8B8B8B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A28282828282828282826E6E6E6E6E6E
+6E6E6E6E6E6E7474747474747474747777777777777777776F6F6F6F6F6F6F6F6F6D6D6D6D6D6D
+6D6D6D717171717171717171717171727272727272727272737373737373737373777777777777
+7777777A7A7A7A7A7A7A7A7A7B7B7B7B7B7B7B7B7B7B7B7B7C7C7C7C7C7C7C7C7C787878787878
+7878787272727272727272727070707070707070707070707676767676767676767C7C7C7C7C7C
+7C7C7C7F7F7F7F7F7F7F7F7F828282828282828282898989898989898989898989909090909090
+9090909595959595959595959B9B9B9B9B9B9B9B9B9E9E9E9E9E9E9E9E9EA2A2A2A2A2A2A2A2A2
+A2A2A2A2A2A2A2A2A2A2A2A2A6A6A6A6A6A6A6A6A6ACACACACACACACACACB0B0B0B0B0B0B0B0B0
+B0B0B0B8B8B8B8B8B8B8B8B8BFBFBFBFBFBFBFBFBFC5C5C5C5C5C5C5C5C5C8C8C8C8C8C8C8C8C8
+C5C5C5C5C5C5C5C5C5C5C5C5C3C3C3C3C3C3C3C3C3C8C8C8C8C8C8C8C8C8CACACACACACACACACA
+C5C5C5C5C5C5C5C5C5BFBFBFBFBFBFBFBFBFBFBFBFBABABABABABABABABAB3B3B3B3B3B3B3B3B3
+A9A9A9A9A9A9A9A9A99F9F9F9F9F9F9F9F9F9F9F9F989898989898989898929292929292929292
+909090909090909090959595959595959595B7B7B7B7B7B7B7B7B7B7B7B7F0F0F0F0F0F0F0F0F0
+FDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C3C3C3C3C3C3C3C3C3D6D6D6
+D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D5
+D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D4D4D4D5D5D5
+D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D3D3D3D3D3D3D3D3D3D3D3D3D1D1D1
+D1D1D1D1D1D1D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2
+D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D0D0D0D0D0D0
+D0D0D0CECECECECECECECECECECECECECECECECECECECECECFCFCFCFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CDCDCDCDCDCDCDCDCDC3C3C3C3C3C3
+C3C3C3BDBDBDBDBDBDBDBDBDB7B7B7B7B7B7B7B7B7B8B8B8B8B8B8B8B8B8B8B8B8B2B2B2B2B2B2
+B2B2B2A2A2A2A2A2A2A2A2A28282828282828282826E6E6E6E6E6E6E6E6E6E6E6E747474747474
+7474747777777777777777776F6F6F6F6F6F6F6F6F6D6D6D6D6D6D6D6D6D717171717171717171
+7171717272727272727272727373737373737373737777777777777777777A7A7A7A7A7A7A7A7A
+7B7B7B7B7B7B7B7B7B7B7B7B7C7C7C7C7C7C7C7C7C787878787878787878727272727272727272
+7070707070707070707070707676767676767676767C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F
+828282828282828282898989898989898989898989909090909090909090959595959595959595
+9B9B9B9B9B9B9B9B9B9E9E9E9E9E9E9E9E9EA2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2
+A6A6A6A6A6A6A6A6A6ACACACACACACACACACB0B0B0B0B0B0B0B0B0B0B0B0B8B8B8B8B8B8B8B8B8
+BFBFBFBFBFBFBFBFBFC5C5C5C5C5C5C5C5C5C8C8C8C8C8C8C8C8C8C5C5C5C5C5C5C5C5C5C5C5C5
+C3C3C3C3C3C3C3C3C3C8C8C8C8C8C8C8C8C8CACACACACACACACACAC5C5C5C5C5C5C5C5C5BFBFBF
+BFBFBFBFBFBFBFBFBFBABABABABABABABABAB3B3B3B3B3B3B3B3B3A9A9A9A9A9A9A9A9A99F9F9F
+9F9F9F9F9F9F9F9F9F989898989898989898929292929292929292909090909090909090959595
+959595959595B7B7B7B7B7B7B7B7B7B7B7B7F0F0F0F0F0F0F0F0F0FDFDFDFDFDFDFDFDFDFEFEFE
+FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9C3C3C3C3C3C3C3C3C3D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6
+D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5
+D6D6D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D4D4D4D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5
+D5D5D5D5D5D5D5D5D5D5D5D5D3D3D3D3D3D3D3D3D3D3D3D3D1D1D1D1D1D1D1D1D1D2D2D2D2D2D2
+D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1
+D1D1D1D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D0D0D0D0D0D0D0D0D0CECECECECECECECECE
+CECECECECECECECECECECECECFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0CDCDCDCDCDCDCDCDCDC3C3C3C3C3C3C3C3C3BDBDBDBDBDBDBDBDBD
+B7B7B7B7B7B7B7B7B7B8B8B8B8B8B8B8B8B8B8B8B8B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2
+8282828282828282826E6E6E6E6E6E6E6E6E6E6E6E747474747474747474777777777777777777
+6F6F6F6F6F6F6F6F6F6D6D6D6D6D6D6D6D6D717171717171717171717171727272727272727272
+7373737373737373737777777777777777777A7A7A7A7A7A7A7A7A7B7B7B7B7B7B7B7B7B7B7B7B
+7C7C7C7C7C7C7C7C7C787878787878787878727272727272727272707070707070707070707070
+7676767676767676767C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F828282828282828282898989
+8989898989898989899090909090909090909595959595959595959B9B9B9B9B9B9B9B9B9E9E9E
+9E9E9E9E9E9EA2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A6A6A6A6A6A6A6A6A6ACACAC
+ACACACACACACB0B0B0B0B0B0B0B0B0B0B0B0B8B8B8B8B8B8B8B8B8BFBFBFBFBFBFBFBFBFC5C5C5
+C5C5C5C5C5C5C8C8C8C8C8C8C8C8C8C5C5C5C5C5C5C5C5C5C5C5C5C3C3C3C3C3C3C3C3C3C8C8C8
+C8C8C8C8C8C8CACACACACACACACACAC5C5C5C5C5C5C5C5C5BFBFBFBFBFBFBFBFBFBFBFBFBABABA
+BABABABABABAB3B3B3B3B3B3B3B3B3A9A9A9A9A9A9A9A9A99F9F9F9F9F9F9F9F9F9F9F9F989898
+989898989898929292929292929292909090909090909090959595959595959595B7B7B7B7B7B7
+B7B7B7B7B7B7F0F0F0F0F0F0F0F0F0FDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9
+F9F9F9C3C3C3C3C3C3C3C3C3D6D6D5D6D6D5D6D6D5D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6
+D6D6D6D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4
+D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3
+D4D4D4D4D4D4D4D4D4D4D4D4D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D1D1D1D1D1D1D1D1D1
+D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0CECECECECECECECECECECECECDCDCDCDCDCDCDCDCD
+CECECECECECECECECECFCFCFCFCFCFCFCFCFCECECECECECECECECECECECECDCDCDCDCDCDCDCDCD
+CECECECECECECECECECFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+CBCBCBCBCBCBCBCBCBC0C0C0C0C0C0C0C0C0BCBCBCBCBCBCBCBCBCB8B8B8B8B8B8B8B8B8B6B6B6
+B6B6B6B6B6B6B6B6B6B8B8B8B8B8B8B8B8B8B0B1B0B0B1B0B0B1B0A1A1A1A1A1A1A1A1A1797979
+7979797979797979796C6C6C6C6C6C6C6C6C7272727272727272726E6E6E6E6E6E6E6E6E6B6B6B
+6B6B6B6B6B6B6D6D6D6D6D6D6D6D6D6D6D6D707070707070707070737373737373737373767676
+7676767676767878787878787878787878787878787878787878787B7B7B7B7B7B7B7B7B7A7A7A
+7A7A7A7A7A7A7575757575757575757474747474747474747474747979797979797979797B7B7B
+7B7B7B7B7B7B7C7C7C7C7C7C7C7C7C8080808080808080808A8A8A8A8A8A8A8A8A8A8A8A909090
+9090909090909797979797979797979A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9BA0A0A0A0A0A0
+A0A0A0A0A0A0A7A7A7A7A7A7A7A7A7AEAEAEAEAEAEAEAEAEB2B2B2B2B2B2B2B2B2B5B5B5B5B5B5
+B5B5B5B5B5B5B8B8B8B8B8B8B8B8B8BDBDBDBDBDBDBDBDBDC1C1C1C1C1C1C1C1C1C4C4C4C4C4C4
+C4C4C4C2C2C2C2C2C2C2C2C2C2C2C2C1C1C1C1C1C1C1C1C1C4C4C4C4C4C4C4C4C4C7C7C7C7C7C7
+C7C7C7C2C2C2C2C2C2C2C2C2BABABABABABABABABABABABAB6B6B6B6B6B6B6B6B6AEAEAEAEAEAE
+AEAEAEA3A3A3A3A3A3A3A3A3999999999999999999999999909090909090909090909090909090
+909090959595959595959595989898989898989898B4B4B4B4B4B4B4B4B4B4B4B4E8E9E8E8E9E8
+E8E9E8FBFBFBFBFBFBFBFBFBFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7F7F7F7F7F7F7F7F7B4B4B4B4B4B4B4B4B4
+D6D6D5D6D6D5D6D6D5D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5
+D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4
+D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D4D4D4D4D4D4D4D4D4D4D4D4
+D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D0D0D0
+D0D0D0D0D0D0CECECECECECECECECECECECECDCDCDCDCDCDCDCDCDCECECECECECECECECECFCFCF
+CFCFCFCFCFCFCECECECECECECECECECECECECDCDCDCDCDCDCDCDCDCECECECECECECECECECFCFCF
+CFCFCFCFCFCFD0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CBCBCBCBCBCBCBCBCBC0C0C0
+C0C0C0C0C0C0BCBCBCBCBCBCBCBCBCB8B8B8B8B8B8B8B8B8B6B6B6B6B6B6B6B6B6B6B6B6B8B8B8
+B8B8B8B8B8B8B0B1B0B0B1B0B0B1B0A1A1A1A1A1A1A1A1A17979797979797979797979796C6C6C
+6C6C6C6C6C6C7272727272727272726E6E6E6E6E6E6E6E6E6B6B6B6B6B6B6B6B6B6D6D6D6D6D6D
+6D6D6D6D6D6D707070707070707070737373737373737373767676767676767676787878787878
+7878787878787878787878787878787B7B7B7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A757575757575
+7575757474747474747474747474747979797979797979797B7B7B7B7B7B7B7B7B7C7C7C7C7C7C
+7C7C7C8080808080808080808A8A8A8A8A8A8A8A8A8A8A8A909090909090909090979797979797
+9797979A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9BA0A0A0A0A0A0A0A0A0A0A0A0A7A7A7A7A7A7
+A7A7A7AEAEAEAEAEAEAEAEAEB2B2B2B2B2B2B2B2B2B5B5B5B5B5B5B5B5B5B5B5B5B8B8B8B8B8B8
+B8B8B8BDBDBDBDBDBDBDBDBDC1C1C1C1C1C1C1C1C1C4C4C4C4C4C4C4C4C4C2C2C2C2C2C2C2C2C2
+C2C2C2C1C1C1C1C1C1C1C1C1C4C4C4C4C4C4C4C4C4C7C7C7C7C7C7C7C7C7C2C2C2C2C2C2C2C2C2
+BABABABABABABABABABABABAB6B6B6B6B6B6B6B6B6AEAEAEAEAEAEAEAEAEA3A3A3A3A3A3A3A3A3
+999999999999999999999999909090909090909090909090909090909090959595959595959595
+989898989898989898B4B4B4B4B4B4B4B4B4B4B4B4E8E9E8E8E9E8E8E9E8FBFBFBFBFBFBFBFBFB
+FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEF7F7F7F7F7F7F7F7F7B4B4B4B4B4B4B4B4B4D6D6D5D6D6D5D6D6D5D6D6D6
+D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D5D5D5
+D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D3D3D3
+D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D4D4D4D4D4D4D4D4D4D4D4D4D2D2D2D2D2D2D2D2D2D2D2D2
+D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0CECECECECECE
+CECECECECECECDCDCDCDCDCDCDCDCDCECECECECECECECECECFCFCFCFCFCFCFCFCFCECECECECECE
+CECECECECECECDCDCDCDCDCDCDCDCDCECECECECECECECECECFCFCFCFCFCFCFCFCFD0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CBCBCBCBCBCBCBCBCBC0C0C0C0C0C0C0C0C0BCBCBCBCBCBC
+BCBCBCB8B8B8B8B8B8B8B8B8B6B6B6B6B6B6B6B6B6B6B6B6B8B8B8B8B8B8B8B8B8B0B1B0B0B1B0
+B0B1B0A1A1A1A1A1A1A1A1A17979797979797979797979796C6C6C6C6C6C6C6C6C727272727272
+7272726E6E6E6E6E6E6E6E6E6B6B6B6B6B6B6B6B6B6D6D6D6D6D6D6D6D6D6D6D6D707070707070
+707070737373737373737373767676767676767676787878787878787878787878787878787878
+7878787B7B7B7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A757575757575757575747474747474747474
+7474747979797979797979797B7B7B7B7B7B7B7B7B7C7C7C7C7C7C7C7C7C808080808080808080
+8A8A8A8A8A8A8A8A8A8A8A8A9090909090909090909797979797979797979A9A9A9A9A9A9A9A9A
+9B9B9B9B9B9B9B9B9BA0A0A0A0A0A0A0A0A0A0A0A0A7A7A7A7A7A7A7A7A7AEAEAEAEAEAEAEAEAE
+B2B2B2B2B2B2B2B2B2B5B5B5B5B5B5B5B5B5B5B5B5B8B8B8B8B8B8B8B8B8BDBDBDBDBDBDBDBDBD
+C1C1C1C1C1C1C1C1C1C4C4C4C4C4C4C4C4C4C2C2C2C2C2C2C2C2C2C2C2C2C1C1C1C1C1C1C1C1C1
+C4C4C4C4C4C4C4C4C4C7C7C7C7C7C7C7C7C7C2C2C2C2C2C2C2C2C2BABABABABABABABABABABABA
+B6B6B6B6B6B6B6B6B6AEAEAEAEAEAEAEAEAEA3A3A3A3A3A3A3A3A3999999999999999999999999
+909090909090909090909090909090909090959595959595959595989898989898989898B4B4B4
+B4B4B4B4B4B4B4B4B4E8E9E8E8E9E8E8E9E8FBFBFBFBFBFBFBFBFBFEFEFEFEFEFEFEFEFEFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7F7F7
+F7F7F7F7F7F7B4B4B4B4B4B4B4B4B4D6D6D5D6D6D5D6D6D5D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5
+D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3
+D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3D3D3D3D2D2D2D2D2D2
+D2D2D2D3D3D3D3D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
+D1D1D1D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CECECECECECECECECECECECECCCCCCCCCCCC
+CCCCCCCECECECECECECECECECFCFCFCFCFCFCFCFCFCECECECECECECECECECECECECDCDCDCDCDCD
+CDCDCDCECECECECECECECECED0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CECECECECECECECECE
+CECECEC7C7C7C7C7C7C7C7C7BFBFBFBFBFBFBFBFBFBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9
+B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B4B4B4B4B4B4B4B4B4B2B2B2B2B2B2B2B2B2
+9696969696969696969696966E6E6E6E6E6E6E6E6E6A6A6A6A6A6A6A6A6A6C6C6C6C6C6C6C6C6C
+6A6A6A6A6A6A6A6A6A6969696969696969696969696E6E6E6E6E6E6E6E6E727272727272727272
+7474747474747474747777777777777777777878787878787878787878787B7B7B7B7B7B7B7B7B
+7A7A7A7A7A7A7A7A7A7878787878787878787878787878787878787878787C7C7C7C7C7C7C7C7C
+7D7D7D7D7D7D7D7D7D7E7E7E7E7E7E7E7E7E8383838383838383838C8C8C8C8C8C8C8C8C8C8C8C
+9393939393939393939B9B9B9B9B9B9B9B9B9898989898989898989898989898989898989E9E9E
+9E9E9E9E9E9E9E9E9EA8A8A8A8A8A8A8A8A8B2B2B2B2B2B2B2B2B2B7B7B7B7B7B7B7B7B7B8B8B8
+B8B8B8B8B8B8B8B8B8B6B6B6B6B6B6B6B6B6B9B9B9B9B9B9B9B9B9BFBFBFBFBFBFBFBFBFC2C2C2
+C2C2C2C2C2C2BFBFBFBFBFBFBFBFBFBFBFBFBDBDBDBDBDBDBDBDBDBEBEBEBEBEBEBEBEBEBFBFBF
+BFBFBFBFBFBFB8B8B8B8B8B8B8B8B8B1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B3B3B3B3B3ACACAC
+ACACACACACAC9E9E9E9E9E9E9E9E9E9191919191919191919191918E8E8E8E8E8E8E8E8E929292
+929292929292969696969696969696969696969696969696A7A7A7A7A7A7A7A7A7A7A7A7D0D0D0
+D0D0D0D0D0D0EEEEEEEEEEEEEEEEEEFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF9F9F9F9F9F9F9F9F9C1C1C1C1C1C1
+C1C1C1D6D6D5D6D6D5D6D6D5D6D6D6D6D6D6D6D6D6D6D6D5D6D6D5D6D6D5D6D6D5D5D5D5D5D5D5
+D5D5D5D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3
+D3D3D3D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2D3D3D3D3D3D3D3D3D3
+D3D3D3D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0CECECECECECECECECECECECECCCCCCCCCCCCCCCCCCCECECECECECECECECE
+CFCFCFCFCFCFCFCFCFCECECECECECECECECECECECECDCDCDCDCDCDCDCDCDCECECECECECECECECE
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CECECECECECECECECECECECEC7C7C7C7C7C7C7C7C7
+BFBFBFBFBFBFBFBFBFBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B8B8B8B8B8B8B8B8B8B8B8B8
+B8B8B8B8B8B8B8B8B8B4B4B4B4B4B4B4B4B4B2B2B2B2B2B2B2B2B2969696969696969696969696
+6E6E6E6E6E6E6E6E6E6A6A6A6A6A6A6A6A6A6C6C6C6C6C6C6C6C6C6A6A6A6A6A6A6A6A6A696969
+6969696969696969696E6E6E6E6E6E6E6E6E727272727272727272747474747474747474777777
+7777777777777878787878787878787878787B7B7B7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A787878
+7878787878787878787878787878787878787C7C7C7C7C7C7C7C7C7D7D7D7D7D7D7D7D7D7E7E7E
+7E7E7E7E7E7E8383838383838383838C8C8C8C8C8C8C8C8C8C8C8C9393939393939393939B9B9B
+9B9B9B9B9B9B9898989898989898989898989898989898989E9E9E9E9E9E9E9E9E9E9E9EA8A8A8
+A8A8A8A8A8A8B2B2B2B2B2B2B2B2B2B7B7B7B7B7B7B7B7B7B8B8B8B8B8B8B8B8B8B8B8B8B6B6B6
+B6B6B6B6B6B6B9B9B9B9B9B9B9B9B9BFBFBFBFBFBFBFBFBFC2C2C2C2C2C2C2C2C2BFBFBFBFBFBF
+BFBFBFBFBFBFBDBDBDBDBDBDBDBDBDBEBEBEBEBEBEBEBEBEBFBFBFBFBFBFBFBFBFB8B8B8B8B8B8
+B8B8B8B1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B3B3B3B3B3ACACACACACACACACAC9E9E9E9E9E9E
+9E9E9E9191919191919191919191918E8E8E8E8E8E8E8E8E929292929292929292969696969696
+969696969696969696969696A7A7A7A7A7A7A7A7A7A7A7A7D0D0D0D0D0D0D0D0D0EEEEEEEEEEEE
+EEEEEEFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEF9F9F9F9F9F9F9F9F9C1C1C1C1C1C1C1C1C1D5D5D5D5D5D5D5D5D5
+D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D3D3D3D3D3D3D3D3D3
+D3D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3
+D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCFCFCFCFCFCFCCCCCCCCCCCCCCCCCCCECECECECECECECECECECECECECECECECECECECECE
+CECECECECECECECECECDCDCDCDCDCDCDCDCDCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCECECE
+CECECECECECECCCCCCCCCCCCCCCCCCCCCCCCC3C3C3C3C3C3C3C3C3BDBDBDBDBDBDBDBDBDBBBBBB
+BBBBBBBBBBBBB9B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B8B8B8
+B8B8B8B8B8B8B5B5B5B5B5B5B5B5B5B1B1B1B1B1B1B1B1B1B1B1B1888888888888888888666666
+666666666666676767676767676767696969696969696969676767676767676767676767686868
+6868686868686E6E6E6E6E6E6E6E6E7373737373737373737878787878787878787B7B7B7B7B7B
+7B7B7B7B7B7B7C7C7C7C7C7C7C7C7C7A7A7A7A7A7A7A7A7A777777777777777777777777777777
+7777777777777B7B7B7B7B7B7B7B7B808080808080808080808080808080808080848484848484
+8484848A8A8A8A8A8A8A8A8A8A8A8A929292929292929292989898989898989898959595959595
+9595959595959595959595959C9C9C9C9C9C9C9C9C9C9C9CA4A4A4A4A4A4A4A4A4AFAFAFAFAFAF
+AFAFAFB1B1B1B1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B0B1B0B0B1B0B0B1B0B2B2B2B2B2B2
+B2B2B2B7B7B7B7B7B7B7B7B7BABABABABABABABABAB5B5B5B5B5B5B5B5B5B5B5B5B2B2B2B2B2B2
+B2B2B2B2B2B2B2B2B2B2B2B2B4B4B4B4B4B4B4B4B4ABABABABABABABABABAAAAAAAAAAAAAAAAAA
+AAAAAAACACACACACACACACACA4A4A4A4A4A4A4A4A49595959595959595958B8B8B8B8B8B8B8B8B
+8B8B8B8C8C8C8C8C8C8C8C8C929292929292929292949494949494949494939393939393939393
+959595959595959595959595A2A2A2A2A2A2A2A2A2C4C4C4C4C4C4C4C4C4E8E9E8E8E9E8E8E9E8
+FBFBFBFBFBFBFBFBFBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFD
+FAFAFAFAFAFAFAFAFAD0D0D0D0D0D0D0D0D0D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5
+D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D2D2D2
+D2D2D2D2D2D2D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2D2D2D2
+D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCCCCCC
+CCCCCCCCCCCCCECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECDCDCD
+CDCDCDCDCDCDCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCECECECECECECECECECCCCCCCCCCCC
+CCCCCCCCCCCCC3C3C3C3C3C3C3C3C3BDBDBDBDBDBDBDBDBDBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9
+B9B9B9BBBBBBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B8B8B8B8B8B8B8B8B8B5B5B5B5B5B5
+B5B5B5B1B1B1B1B1B1B1B1B1B1B1B1888888888888888888666666666666666666676767676767
+6767676969696969696969696767676767676767676767676868686868686868686E6E6E6E6E6E
+6E6E6E7373737373737373737878787878787878787B7B7B7B7B7B7B7B7B7B7B7B7C7C7C7C7C7C
+7C7C7C7A7A7A7A7A7A7A7A7A7777777777777777777777777777777777777777777B7B7B7B7B7B
+7B7B7B8080808080808080808080808080808080808484848484848484848A8A8A8A8A8A8A8A8A
+8A8A8A929292929292929292989898989898989898959595959595959595959595959595959595
+9C9C9C9C9C9C9C9C9C9C9C9CA4A4A4A4A4A4A4A4A4AFAFAFAFAFAFAFAFAFB1B1B1B1B1B1B1B1B1
+B3B3B3B3B3B3B3B3B3B3B3B3B0B1B0B0B1B0B0B1B0B2B2B2B2B2B2B2B2B2B7B7B7B7B7B7B7B7B7
+BABABABABABABABABAB5B5B5B5B5B5B5B5B5B5B5B5B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2
+B4B4B4B4B4B4B4B4B4ABABABABABABABABABAAAAAAAAAAAAAAAAAAAAAAAAACACACACACACACACAC
+A4A4A4A4A4A4A4A4A49595959595959595958B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C
+929292929292929292949494949494949494939393939393939393959595959595959595959595
+A2A2A2A2A2A2A2A2A2C4C4C4C4C4C4C4C4C4E8E9E8E8E9E8E8E9E8FBFBFBFBFBFBFBFBFBFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFAFAFAFAFAFAFAFAFAD0D0D0
+D0D0D0D0D0D0D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5
+D5D5D5D5D5D5D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2D3D3D3D3D3D3
+D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2
+D2D2D2D2D2D2D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCCCCCCCCCCCCCCCCCCCECECECECECE
+CECECECECECECECECECECECECECECECECECECECECECECECECDCDCDCDCDCDCDCDCDCFCFCFCFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCECECECECECECECECECCCCCCCCCCCCCCCCCCCCCCCCC3C3C3C3C3C3
+C3C3C3BDBDBDBDBDBDBDBDBDBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBBBB
+BBBBBBB9B9B9B9B9B9B9B9B9B8B8B8B8B8B8B8B8B8B5B5B5B5B5B5B5B5B5B1B1B1B1B1B1B1B1B1
+B1B1B1888888888888888888666666666666666666676767676767676767696969696969696969
+6767676767676767676767676868686868686868686E6E6E6E6E6E6E6E6E737373737373737373
+7878787878787878787B7B7B7B7B7B7B7B7B7B7B7B7C7C7C7C7C7C7C7C7C7A7A7A7A7A7A7A7A7A
+7777777777777777777777777777777777777777777B7B7B7B7B7B7B7B7B808080808080808080
+8080808080808080808484848484848484848A8A8A8A8A8A8A8A8A8A8A8A929292929292929292
+9898989898989898989595959595959595959595959595959595959C9C9C9C9C9C9C9C9C9C9C9C
+A4A4A4A4A4A4A4A4A4AFAFAFAFAFAFAFAFAFB1B1B1B1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3
+B0B1B0B0B1B0B0B1B0B2B2B2B2B2B2B2B2B2B7B7B7B7B7B7B7B7B7BABABABABABABABABAB5B5B5
+B5B5B5B5B5B5B5B5B5B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B4B4B4B4B4B4B4B4B4ABABAB
+ABABABABABABAAAAAAAAAAAAAAAAAAAAAAAAACACACACACACACACACA4A4A4A4A4A4A4A4A4959595
+9595959595958B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C929292929292929292949494
+949494949494939393939393939393959595959595959595959595A2A2A2A2A2A2A2A2A2C4C4C4
+C4C4C4C4C4C4E8E9E8E8E9E8E8E9E8FBFBFBFBFBFBFBFBFBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFAFAFAFAFAFAFAFAFAD0D0D0D0D0D0D0D0D0D4D4D4D4D4D4
+D4D4D4D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3
+D3D3D3D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2
+D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCF
+CDCDCDCDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCECECECECECECECECECECECECECECECECECE
+CECECECECECECECECECECECECDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCC9C9C9C9C9C9C9C9C9
+C4C4C4C4C4C4C4C4C4C2C2C2C2C2C2C2C2C2C2C2C2BDBDBDBDBDBDBDBDBDB9B9B9B9B9B9B9B9B9
+BABABABABABABABABAB9B9B9B9B9B9B9B9B9BDBDBDBDBDBDBDBDBDBDBDBDBEBEBEBEBEBEBEBEBE
+B8B8B8B8B8B8B8B8B8B6B6B6B6B6B6B6B6B6B8B8B8B8B8B8B8B8B8B8B8B8A8A8A8A8A8A8A8A8A8
+777777777777777777616161616161616161646464646464646464666666666666666666666666
+6363636363636363636868686868686868686F6F6F6F6F6F6F6F6F767676767676767676797979
+797979797979797979797979797979797979787878787878787878767676767676767676757575
+7575757575757575757A7A7A7A7A7A7A7A7A808080808080808080828282828282828282858585
+8585858585858A8A8A8A8A8A8A8A8A8A8A8A909090909090909090919191919191919191939393
+939393939393949494949494949494949494949494949494949494979797979797979797A3A3A3
+A3A3A3A3A3A3A9A9A9A9A9A9A9A9A9ABABABABABABABABABABABABACACACACACACACACACAFAFAF
+AFAFAFAFAFAFB0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0ABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABABABABA8A8A8A8A8A8A8A8A8A1A1A1A1A1A1A1A1A1A4A4A4A4A4A4
+A4A4A4A4A4A4A1A1A1A1A1A1A1A1A19797979797979797978C8C8C8C8C8C8C8C8C888888888888
+8888888888888F8F8F8F8F8F8F8F8F939393939393939393939393939393939393919191919191
+9191918C8C8C8C8C8C8C8C8C8C8C8C888888888888888888989898989898989898BEBEBEBEBEBE
+BEBEBEE7E7E7E7E7E7E7E7E7FBFBFBFBFBFBFBFBFBFBFBFBFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEF9F9F9F9F9F9F9F9F9CACACACACACACACACAD4D4D4D4D4D4D4D4D4D5D5D5D5D5D5D5D5D5
+D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2
+D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2
+D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+CFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCDCDCDCDCDCDCDCDCDCDCDCD
+CCCCCCCCCCCCCCCCCCCECECECECECECECECECECECECECECECECECECECECECECECECECECECECECE
+CDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCC9C9C9C9C9C9C9C9C9C4C4C4C4C4C4C4C4C4C2C2C2
+C2C2C2C2C2C2C2C2C2BDBDBDBDBDBDBDBDBDB9B9B9B9B9B9B9B9B9BABABABABABABABABAB9B9B9
+B9B9B9B9B9B9BDBDBDBDBDBDBDBDBDBDBDBDBEBEBEBEBEBEBEBEBEB8B8B8B8B8B8B8B8B8B6B6B6
+B6B6B6B6B6B6B8B8B8B8B8B8B8B8B8B8B8B8A8A8A8A8A8A8A8A8A8777777777777777777616161
+616161616161646464646464646464666666666666666666666666636363636363636363686868
+6868686868686F6F6F6F6F6F6F6F6F767676767676767676797979797979797979797979797979
+7979797979797878787878787878787676767676767676767575757575757575757575757A7A7A
+7A7A7A7A7A7A8080808080808080808282828282828282828585858585858585858A8A8A8A8A8A
+8A8A8A8A8A8A909090909090909090919191919191919191939393939393939393949494949494
+949494949494949494949494949494979797979797979797A3A3A3A3A3A3A3A3A3A9A9A9A9A9A9
+A9A9A9ABABABABABABABABABABABABACACACACACACACACACAFAFAFAFAFAFAFAFAFB0B0B0B0B0B0
+B0B0B0B0B0B0B0B0B0B0B0B0ABABABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABABA8A8A8A8A8A8A8A8A8A1A1A1A1A1A1A1A1A1A4A4A4A4A4A4A4A4A4A4A4A4A1A1A1A1A1A1
+A1A1A19797979797979797978C8C8C8C8C8C8C8C8C8888888888888888888888888F8F8F8F8F8F
+8F8F8F9393939393939393939393939393939393939191919191919191918C8C8C8C8C8C8C8C8C
+8C8C8C888888888888888888989898989898989898BEBEBEBEBEBEBEBEBEE7E7E7E7E7E7E7E7E7
+FBFBFBFBFBFBFBFBFBFBFBFBFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF9F9F9F9F9F9F9F9F9
+CACACACACACACACACAD3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2D2D2D2
+D3D3D3D3D3D3D3D3D3D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCECECECECECECECECECECECE
+CECECECECECECECECECECECECECECECECECECFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCFCFCFCECECECECECECECECECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCDCD
+CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC7C7C7C7C7C7C7C7C7BFBFBF
+BFBFBFBFBFBFB8B8B8B8B8B8B8B8B8B2B2B2B2B2B2B2B2B2ADADADADADADADADADADADADB0B0B0
+B0B0B0B0B0B0B6B6B6B6B6B6B6B6B6B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B9B9B9B9B9B9
+B9B9B9B9B9B9BFBFBFBFBFBFBFBFBFBABABABABABABABABAB8B8B8B8B8B8B8B8B8B5B5B5B5B5B5
+B5B5B5B5B5B5B8B8B8B8B8B8B8B8B89D9D9D9D9D9D9D9D9D6D6D6D6D6D6D6D6D6D5E5E5E5E5E5E
+5E5E5E6262626262626262626262626262626262626262625F605F5F605F5F605F656565656565
+6565656F6F6F6F6F6F6F6F6F757575757575757575757575767676767676767676757575757575
+7575757474747474747474747575757575757575757575757878787878787878787D7D7D7D7D7D
+7D7D7D8080808080808080808383838383838383838787878787878787878787878C8C8C8C8C8C
+8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8F8F8F8F8F8F8F8F8F
+8F8F8F9191919191919191919B9B9B9B9B9B9B9B9B9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9EA3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6
+A4A4A4A4A4A4A4A4A4A4A4A4A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A29E9E9E9E9E9E9E9E9E
+9898989898989898989999999999999999999999999494949494949494948C8C8C8C8C8C8C8C8C
+848484848484848484898989898989898989898989919191919191919191939393939393939393
+9292929292929292928F8F8F8F8F8F8F8F8F848484848484848484848484757575757575757575
+808080808080808080979797979797979797B9B9B9B9B9B9B9B9B9DFE0DFDFE0DFDFE0DFDFE0DF
+F6F6F6F6F6F6F6F6F6FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF9F9F9F9F9F9F9F9F9BDBDBDBDBDBDBDBDBDD3D3D3
+D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2D2D2D2D3D3D3D3D3D3D3D3D3D1D1D1
+D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCECECECECECECECECECECECECECECECECECECECECECECECE
+CECECECECECECFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCECECECECECE
+CECECECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD
+CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC7C7C7C7C7C7C7C7C7BFBFBFBFBFBFBFBFBFB8B8B8B8B8B8
+B8B8B8B2B2B2B2B2B2B2B2B2ADADADADADADADADADADADADB0B0B0B0B0B0B0B0B0B6B6B6B6B6B6
+B6B6B6B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B9B9B9B9B9B9B9B9B9B9B9B9BFBFBFBFBFBF
+BFBFBFBABABABABABABABABAB8B8B8B8B8B8B8B8B8B5B5B5B5B5B5B5B5B5B5B5B5B8B8B8B8B8B8
+B8B8B89D9D9D9D9D9D9D9D9D6D6D6D6D6D6D6D6D6D5E5E5E5E5E5E5E5E5E626262626262626262
+6262626262626262626262625F605F5F605F5F605F6565656565656565656F6F6F6F6F6F6F6F6F
+757575757575757575757575767676767676767676757575757575757575747474747474747474
+7575757575757575757575757878787878787878787D7D7D7D7D7D7D7D7D808080808080808080
+8383838383838383838787878787878787878787878C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D
+8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8F8F8F8F8F8F8F8F8F8F8F8F919191919191919191
+9B9B9B9B9B9B9B9B9B9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4
+A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A29E9E9E9E9E9E9E9E9E989898989898989898999999
+9999999999999999999494949494949494948C8C8C8C8C8C8C8C8C848484848484848484898989
+8989898989898989899191919191919191919393939393939393939292929292929292928F8F8F
+8F8F8F8F8F8F848484848484848484848484757575757575757575808080808080808080979797
+979797979797B9B9B9B9B9B9B9B9B9DFE0DFDFE0DFDFE0DFDFE0DFF6F6F6F6F6F6F6F6F6FDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDF9F9F9F9F9F9F9F9F9BDBDBDBDBDBDBDBDBDD3D3D3D3D3D3D3D3D3D3D3D3D3D3D3
+D3D3D3D2D2D2D2D2D2D2D2D2D2D2D2D3D3D3D3D3D3D3D3D3D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECFCFCFCFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCECECECECECECECECECCCCCCCCCCCCCCCCCC
+CCCCCCCCCCCCCCCCCCCCCCCCCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD
+CDCDCDC7C7C7C7C7C7C7C7C7BFBFBFBFBFBFBFBFBFB8B8B8B8B8B8B8B8B8B2B2B2B2B2B2B2B2B2
+ADADADADADADADADADADADADB0B0B0B0B0B0B0B0B0B6B6B6B6B6B6B6B6B6B8B8B8B8B8B8B8B8B8
+B8B8B8B8B8B8B8B8B8B9B9B9B9B9B9B9B9B9B9B9B9BFBFBFBFBFBFBFBFBFBABABABABABABABABA
+B8B8B8B8B8B8B8B8B8B5B5B5B5B5B5B5B5B5B5B5B5B8B8B8B8B8B8B8B8B89D9D9D9D9D9D9D9D9D
+6D6D6D6D6D6D6D6D6D5E5E5E5E5E5E5E5E5E626262626262626262626262626262626262626262
+5F605F5F605F5F605F6565656565656565656F6F6F6F6F6F6F6F6F757575757575757575757575
+767676767676767676757575757575757575747474747474747474757575757575757575757575
+7878787878787878787D7D7D7D7D7D7D7D7D808080808080808080838383838383838383878787
+8787878787878787878C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D
+8D8D8D8D8D8D8F8F8F8F8F8F8F8F8F8F8F8F9191919191919191919B9B9B9B9B9B9B9B9B9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A3A3A3A3A3A3A3A3A4A4A4
+A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A2A2A2A2A2A2A2A2A2A2A2A2
+A2A2A2A2A2A29E9E9E9E9E9E9E9E9E989898989898989898999999999999999999999999949494
+9494949494948C8C8C8C8C8C8C8C8C848484848484848484898989898989898989898989919191
+9191919191919393939393939393939292929292929292928F8F8F8F8F8F8F8F8F848484848484
+848484848484757575757575757575808080808080808080979797979797979797B9B9B9B9B9B9
+B9B9B9DFE0DFDFE0DFDFE0DFDFE0DFF6F6F6F6F6F6F6F6F6FDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF9F9F9F9F9F9
+F9F9F9BDBDBDBDBDBDBDBDBDD2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1
+D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCDCDCDCDCDCDCDCDCD
+CDCDCDCDCDCDCDCDCDCECECECECECECECECECECECED0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+CFCFCFCFCFCFCFCFCFCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCBCBCBCBCBCBCBCBCBCBCBCBBFBFBFBFBFBFBFBFBF
+AFAFAFAFAFAFAFAFAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5A5A5A5A5A5A5A5A5A5A5A5
+A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8BBBBBB
+BBBBBBBBBBBBBBBBBBBEBEBEBEBEBEBEBEBEBFBFBFBFBFBFBFBFBFB8B8B8B8B8B8B8B8B8B7B7B7
+B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B5B5B5B5B5B5B5B5B58F8F8F8F8F8F8F8F8F666666
+6666666666665C5C5C5C5C5C5C5C5C5C5C5C6161616161616161615C5C5C5C5C5C5C5C5C5C5C5C
+5C5C5C5C5C5C6565656565656565656F6F6F6F6F6F6F6F6F6F6F6F737373737373737373757575
+7575757575757575757575757575757575757575757575757575757777777777777777777B7B7B
+7B7B7B7B7B7B7F7F7F7F7F7F7F7F7F818181818181818181828282828282828282828282848484
+848484848484858585858585858585828282828282828282828282828282828282898989898989
+898989898989909090909090909090969696969696969696989898989898989898989898989898
+9898989898989090909090909090909494949494949494949898989898989898989D9D9D9D9D9D
+9D9D9D9C9C9C9C9C9C9C9C9C9C9C9C9797979797979797979090909090909090908D8D8D8D8D8D
+8D8D8D8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C8C8C8C8C8C8C898989898989898989818181818181
+8181818383838383838383838C8C8C8C8C8C8C8C8C8C8C8C909090909090909090939393939393
+9393939292929292929292928C8C8C8C8C8C8C8C8C7E7E7E7E7E7E7E7E7E7E7E7E686868686868
+6868686E6E6E6E6E6E6E6E6E7F7F7F7F7F7F7F7F7F959595959595959595B2B2B2B2B2B2B2B2B2
+B2B2B2D6D6D6D6D6D6D6D6D6EFEFEFEFEFEFEFEFEFF9F9F9F9F9F9F9F9F9FDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
+FEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF9F9F9F9F9F9F9F9F9C7C7C7C7C7C7C7C7C7
+D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCECECE
+CECECECECECECECECED0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCCCCCC
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCDCDCDCDCDCDCDCDCDCDCD
+CDCDCDCDCDCDCBCBCBCBCBCBCBCBCBCBCBCBBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5A5A5A5A5A5A5A5A5A5A5A5A2A2A2A2A2A2A2A2A2B2B2B2
+B2B2B2B2B2B2B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8BBBBBBBBBBBBBBBBBBBBBBBBBEBEBE
+BEBEBEBEBEBEBFBFBFBFBFBFBFBFBFB8B8B8B8B8B8B8B8B8B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7
+B7B7B7B7B7B7B5B5B5B5B5B5B5B5B58F8F8F8F8F8F8F8F8F6666666666666666665C5C5C5C5C5C
+5C5C5C5C5C5C6161616161616161615C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C656565656565
+6565656F6F6F6F6F6F6F6F6F6F6F6F737373737373737373757575757575757575757575757575
+7575757575757575757575757575757777777777777777777B7B7B7B7B7B7B7B7B7F7F7F7F7F7F
+7F7F7F818181818181818181828282828282828282828282848484848484848484858585858585
+858585828282828282828282828282828282828282898989898989898989898989909090909090
+909090969696969696969696989898989898989898989898989898989898989898909090909090
+9090909494949494949494949898989898989898989D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C
+9C9C9C9797979797979797979090909090909090908D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D
+8C8C8C8C8C8C8C8C8C8C8C8C898989898989898989818181818181818181838383838383838383
+8C8C8C8C8C8C8C8C8C8C8C8C909090909090909090939393939393939393929292929292929292
+8C8C8C8C8C8C8C8C8C7E7E7E7E7E7E7E7E7E7E7E7E6868686868686868686E6E6E6E6E6E6E6E6E
+7F7F7F7F7F7F7F7F7F959595959595959595B2B2B2B2B2B2B2B2B2B2B2B2D6D6D6D6D6D6D6D6D6
+EFEFEFEFEFEFEFEFEFF9F9F9F9F9F9F9F9F9FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFE
+FDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFF
+FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDF9F9F9F9F9F9F9F9F9C7C7C7C7C7C7C7C7C7D2D2D2D2D2D2D2D2D2D1D1D1
+D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCF
+CFCFCFCFCFCFD0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCECECE
+CECECECECECECDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDD0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB
+CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC8C8C8C8C8C8
+C8C8C8C8C8C8BABABABABABABABABAAAAAAAAAAAAAAAAAAAABABABABABABABABABAFAFAFAFAFAF
+AFAFAFA8A8A8A8A8A8A8A8A8A8A8A89F9F9F9F9F9F9F9F9FACACACACACACACACACB6B6B6B6B6B6
+B6B6B6B8B8B8B8B8B8B8B8B8BBBBBBBBBBBBBBBBBBBBBBBBBDBDBDBDBDBDBDBDBDC0C0C0C0C0C0
+C0C0C0BEBEBEBEBEBEBEBEBEB9B9B9B9B9B9B9B9B9B9B9B9B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6
+B6B6B6AEAEAEAEAEAEAEAEAE8989898989898989896767676767676767676767675E5E5E5E5E5E
+5E5E5E5D5D5D5D5D5D5D5D5D5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B656565656565656565
+6565656E6E6E6E6E6E6E6E6E757575757575757575767676767676767676757575757575757575
+7575757777777777777777777B7B7B7B7B7B7B7B7B7D7D7D7D7D7D7D7D7D7E7E7E7E7E7E7E7E7E
+7E7E7E7E7E7E7E7E7E7E7E7E7F7F7F7F7F7F7F7F7F8181818181818181817F7F7F7F7F7F7F7F7F
+7D7D7D7D7D7D7D7D7D8181818181818181818181818989898989898989898F8F8F8F8F8F8F8F8F
+9191919191919191919292929292929292929292928C8C8C8C8C8C8C8C8C8A8A8A8A8A8A8A8A8A
+8C8C8C8C8C8C8C8C8C8F8F8F8F8F8F8F8F8F8D8D8D8D8D8D8D8D8D8D8D8D8A8A8A8A8A8A8A8A8A
+8585858585858585858383838383838383838181818181818181817E7E7E7E7E7E7E7E7E7E7E7E
+7B7B7B7B7B7B7B7B7B7C7C7C7C7C7C7C7C7C8686868686868686868E8E8E8E8E8E8E8E8E8E8E8E
+9191919191919191919292929292929292929090909090909090908B8B8B8B8B8B8B8B8B7D7D7D
+7D7D7D7D7D7D7D7D7D6565656565656565656262626262626262626A6A6A6A6A6A6A6A6A797979
+7979797979798F8F8F8F8F8F8F8F8F8F8F8FA8A8A8A8A8A8A8A8A8C1C1C1C1C1C1C1C1C1E4E4E4
+E4E4E4E4E4E4FAFAFAFAFAFAFAFAFAFAFAFAFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE
+FEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFAFAFA
+FAFAFAFAFAFAD7D7D7D7D7D7D7D7D7D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFD0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCECECECECECECECECECDCDCDCDCDCD
+CDCDCDCDCDCDCDCDCDCDCDCDD0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0CFCFCFCFCFCFCFCFCFCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB
+CBCBCBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC8C8C8C8C8C8C8C8C8C8C8C8BABABABABABA
+BABABAAAAAAAAAAAAAAAAAAAABABABABABABABABABAFAFAFAFAFAFAFAFAFA8A8A8A8A8A8A8A8A8
+A8A8A89F9F9F9F9F9F9F9F9FACACACACACACACACACB6B6B6B6B6B6B6B6B6B8B8B8B8B8B8B8B8B8
+BBBBBBBBBBBBBBBBBBBBBBBBBDBDBDBDBDBDBDBDBDC0C0C0C0C0C0C0C0C0BEBEBEBEBEBEBEBEBE
+B9B9B9B9B9B9B9B9B9B9B9B9B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6AEAEAEAEAEAEAEAEAE
+8989898989898989896767676767676767676767675E5E5E5E5E5E5E5E5E5D5D5D5D5D5D5D5D5D
+5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B6565656565656565656565656E6E6E6E6E6E6E6E6E
+757575757575757575767676767676767676757575757575757575757575777777777777777777
+7B7B7B7B7B7B7B7B7B7D7D7D7D7D7D7D7D7D7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E
+7F7F7F7F7F7F7F7F7F8181818181818181817F7F7F7F7F7F7F7F7F7D7D7D7D7D7D7D7D7D818181
+8181818181818181818989898989898989898F8F8F8F8F8F8F8F8F919191919191919191929292
+9292929292929292928C8C8C8C8C8C8C8C8C8A8A8A8A8A8A8A8A8A8C8C8C8C8C8C8C8C8C8F8F8F
+8F8F8F8F8F8F8D8D8D8D8D8D8D8D8D8D8D8D8A8A8A8A8A8A8A8A8A858585858585858585838383
+8383838383838181818181818181817E7E7E7E7E7E7E7E7E7E7E7E7B7B7B7B7B7B7B7B7B7C7C7C
+7C7C7C7C7C7C8686868686868686868E8E8E8E8E8E8E8E8E8E8E8E919191919191919191929292
+9292929292929090909090909090908B8B8B8B8B8B8B8B8B7D7D7D7D7D7D7D7D7D7D7D7D656565
+6565656565656262626262626262626A6A6A6A6A6A6A6A6A7979797979797979798F8F8F8F8F8F
+8F8F8F8F8F8FA8A8A8A8A8A8A8A8A8C1C1C1C1C1C1C1C1C1E4E4E4E4E4E4E4E4E4FAFAFAFAFAFA
+FAFAFAFAFAFAFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFAFAFAFAFAFAFAFAFAD7D7D7D7D7D7
+D7D7D7D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCECECECECECECECECECDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCF
+CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCCCC
+CCCCCCCCCCCCCCCCCCC8C8C8C8C8C8C8C8C8C8C8C8BABABABABABABABABAAAAAAAAAAAAAAAAAAA
+ABABABABABABABABABAFAFAFAFAFAFAFAFAFA8A8A8A8A8A8A8A8A8A8A8A89F9F9F9F9F9F9F9F9F
+ACACACACACACACACACB6B6B6B6B6B6B6B6B6B8B8B8B8B8B8B8B8B8BBBBBBBBBBBBBBBBBBBBBBBB
+BDBDBDBDBDBDBDBDBDC0C0C0C0C0C0C0C0C0BEBEBEBEBEBEBEBEBEB9B9B9B9B9B9B9B9B9B9B9B9
+B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6AEAEAEAEAEAEAEAEAE898989898989898989676767
+6767676767676767675E5E5E5E5E5E5E5E5E5D5D5D5D5D5D5D5D5D5B5B5B5B5B5B5B5B5B5B5B5B
+5B5B5B5B5B5B6565656565656565656565656E6E6E6E6E6E6E6E6E757575757575757575767676
+7676767676767575757575757575757575757777777777777777777B7B7B7B7B7B7B7B7B7D7D7D
+7D7D7D7D7D7D7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7F7F7F7F7F7F7F7F7F818181
+8181818181817F7F7F7F7F7F7F7F7F7D7D7D7D7D7D7D7D7D818181818181818181818181898989
+8989898989898F8F8F8F8F8F8F8F8F9191919191919191919292929292929292929292928C8C8C
+8C8C8C8C8C8C8A8A8A8A8A8A8A8A8A8C8C8C8C8C8C8C8C8C8F8F8F8F8F8F8F8F8F8D8D8D8D8D8D
+8D8D8D8D8D8D8A8A8A8A8A8A8A8A8A858585858585858585838383838383838383818181818181
+8181817E7E7E7E7E7E7E7E7E7E7E7E7B7B7B7B7B7B7B7B7B7C7C7C7C7C7C7C7C7C868686868686
+8686868E8E8E8E8E8E8E8E8E8E8E8E919191919191919191929292929292929292909090909090
+9090908B8B8B8B8B8B8B8B8B7D7D7D7D7D7D7D7D7D7D7D7D656565656565656565626262626262
+6262626A6A6A6A6A6A6A6A6A7979797979797979798F8F8F8F8F8F8F8F8F8F8F8FA8A8A8A8A8A8
+A8A8A8C1C1C1C1C1C1C1C1C1E4E4E4E4E4E4E4E4E4FAFAFAFAFAFAFAFAFAFAFAFAFDFDFDFDFDFD
+FDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFAFAFAFAFAFAFAFAFAD7D7D7D7D7D7D7D7D7D1D1D1D1D1D1D1D1D1
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCF
+CECECECECECECECECECFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCECECECECECECECECE
+CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCECECECECECECECECECFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCECECECECECECECECECBCBCBCBCBCBCBCBCBCBCBCB
+CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC6C6C6
+C6C6C6C6C6C6C6C6C6B8B8B8B8B8B8B8B8B8ACACACACACACACACACADADADADADADADADADADADAD
+ADADADADADADAAAAAAAAAAAAAAAAAAAAAAAAA2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A9A9A9
+A9A9A9A9A9A9B1B1B1B1B1B1B1B1B1B7B7B7B7B7B7B7B7B7B7B7B7BEBEBEBEBEBEBEBEBEBEBEBE
+BEBEBEBEBEBEC3C3C3C3C3C3C3C3C3BBBBBBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B4B4B4
+B4B4B4B4B4B4B6B6B6B6B6B6B6B6B6AAAAAAAAAAAAAAAAAA8787878787878787878787876B6B6B
+6B6B6B6B6B6B5E5E5E5E5E5E5E5E5E5C5C5C5C5C5C5C5C5C595959595959595959595959595959
+5959595959596262626262626262626C6C6C6C6C6C6C6C6C727272727272727272737373737373
+737373737373757575757575757575767676767676767676777777777777777777767676767676
+7676767878787878787878787878787B7B7B7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A797979797979
+7979797A7A7A7A7A7A7A7A7A7979797979797979797979797A7A7A7A7A7A7A7A7A7D7D7D7D7D7D
+7D7D7D848484848484848484888888888888888888888888858585858585858585828282828282
+828282828282828282828282818181818181818181808080808080808080808080808080808080
+8080807D7D7D7D7D7D7D7D7D7A7A7A7A7A7A7A7A7A767676767676767676737373737373737373
+7373737474747474747474748080808080808080808B8B8B8B8B8B8B8B8B8F8F8F8F8F8F8F8F8F
+8F8F8F9292929292929292929090909090909090908E8E8E8E8E8E8E8E8E8C8C8C8C8C8C8C8C8C
+7F7F7F7F7F7F7F7F7F7F7F7F6666666666666666665F605F5F605F5F605F626262626262626262
+676767676767676767747474747474747474747474868686868686868686A0A0A0A0A0A0A0A0A0
+D3D3D3D3D3D3D3D3D3F7F7F7F7F7F7F7F7F7F7F7F7FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+F9F9F9F9F9F9F9F9F9CACACACACACACACACAD1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCECECECECECECECECECFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCECECECECECECECECECDCDCDCDCDCDCDCDCDCDCDCD
+CDCDCDCDCDCDCECECECECECECECECECFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCFCFCFCECECECECECECECECECBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB
+CBCBCBCBCBCBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC6C6C6C6C6C6C6C6C6C6C6C6B8B8B8
+B8B8B8B8B8B8ACACACACACACACACACADADADADADADADADADADADADADADADADADADAAAAAAAAAAAA
+AAAAAAAAAAAAA2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A9A9A9A9A9A9A9A9A9B1B1B1B1B1B1
+B1B1B1B7B7B7B7B7B7B7B7B7B7B7B7BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEC3C3C3C3C3C3
+C3C3C3BBBBBBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B4B4B4B4B4B4B4B4B4B6B6B6B6B6B6
+B6B6B6AAAAAAAAAAAAAAAAAA8787878787878787878787876B6B6B6B6B6B6B6B6B5E5E5E5E5E5E
+5E5E5E5C5C5C5C5C5C5C5C5C595959595959595959595959595959595959595959626262626262
+6262626C6C6C6C6C6C6C6C6C727272727272727272737373737373737373737373757575757575
+757575767676767676767676777777777777777777767676767676767676787878787878787878
+7878787B7B7B7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A7979797979797979797A7A7A7A7A7A7A7A7A
+7979797979797979797979797A7A7A7A7A7A7A7A7A7D7D7D7D7D7D7D7D7D848484848484848484
+888888888888888888888888858585858585858585828282828282828282828282828282828282
+8181818181818181818080808080808080808080808080808080808080807D7D7D7D7D7D7D7D7D
+7A7A7A7A7A7A7A7A7A767676767676767676737373737373737373737373747474747474747474
+8080808080808080808B8B8B8B8B8B8B8B8B8F8F8F8F8F8F8F8F8F8F8F8F929292929292929292
+9090909090909090908E8E8E8E8E8E8E8E8E8C8C8C8C8C8C8C8C8C7F7F7F7F7F7F7F7F7F7F7F7F
+6666666666666666665F605F5F605F5F605F626262626262626262676767676767676767747474
+747474747474747474868686868686868686A0A0A0A0A0A0A0A0A0D3D3D3D3D3D3D3D3D3F7F7F7
+F7F7F7F7F7F7F7F7F7FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF9F9F9F9F9F9F9F9F9CACACA
+CACACACACACAD1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCECECECECECECECECECFCFCFCFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCFCFCFCECECECECECECECECECDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCECECECECECE
+CECECECFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCECECECECECE
+CECECECBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCC
+CCCCCCCCCCCCCCCCCCCCCCCCC6C6C6C6C6C6C6C6C6C6C6C6B8B8B8B8B8B8B8B8B8ACACACACACAC
+ACACACADADADADADADADADADADADADADADADADADADAAAAAAAAAAAAAAAAAAAAAAAAA2A2A2A2A2A2
+A2A2A2A1A1A1A1A1A1A1A1A1A9A9A9A9A9A9A9A9A9B1B1B1B1B1B1B1B1B1B7B7B7B7B7B7B7B7B7
+B7B7B7BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEC3C3C3C3C3C3C3C3C3BBBBBBBBBBBBBBBBBB
+BBBBBBB9B9B9B9B9B9B9B9B9B4B4B4B4B4B4B4B4B4B6B6B6B6B6B6B6B6B6AAAAAAAAAAAAAAAAAA
+8787878787878787878787876B6B6B6B6B6B6B6B6B5E5E5E5E5E5E5E5E5E5C5C5C5C5C5C5C5C5C
+5959595959595959595959595959595959595959596262626262626262626C6C6C6C6C6C6C6C6C
+727272727272727272737373737373737373737373757575757575757575767676767676767676
+7777777777777777777676767676767676767878787878787878787878787B7B7B7B7B7B7B7B7B
+7A7A7A7A7A7A7A7A7A7979797979797979797A7A7A7A7A7A7A7A7A797979797979797979797979
+7A7A7A7A7A7A7A7A7A7D7D7D7D7D7D7D7D7D848484848484848484888888888888888888888888
+858585858585858585828282828282828282828282828282828282818181818181818181808080
+8080808080808080808080808080808080807D7D7D7D7D7D7D7D7D7A7A7A7A7A7A7A7A7A767676
+7676767676767373737373737373737373737474747474747474748080808080808080808B8B8B
+8B8B8B8B8B8B8F8F8F8F8F8F8F8F8F8F8F8F9292929292929292929090909090909090908E8E8E
+8E8E8E8E8E8E8C8C8C8C8C8C8C8C8C7F7F7F7F7F7F7F7F7F7F7F7F6666666666666666665F605F
+5F605F5F605F626262626262626262676767676767676767747474747474747474747474868686
+868686868686A0A0A0A0A0A0A0A0A0D3D3D3D3D3D3D3D3D3F7F7F7F7F7F7F7F7F7F7F7F7FDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF9F9F9F9F9F9F9F9F9CACACACACACACACACAD1D1D1D1D1D1
+D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCF
+CFCFCFCECECECECECECECECECFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCF
+CFCFCFCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCECECECECECECECECECECECECECECECECECE
+CECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECBCBCBCBCBCBCBCBCB
+CCCCCCCCCCCCCCCCCCCCCCCCCDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCB
+C2C2C2C2C2C2C2C2C2C2C2C2B5B5B5B5B5B5B5B5B5ABABABABABABABABABACACACACACACACACAC
+AEAEAEAEAEAEAEAEAEAAAAAAAAAAAAAAAAAAAAAAAAA1A1A1A1A1A1A1A1A19B9B9B9B9B9B9B9B9B
+9D9D9D9D9D9D9D9D9DA7A7A7A7A7A7A7A7A7B5B5B5B5B5B5B5B5B5B5B5B5BBBBBBBBBBBBBBBBBB
+BEBEBEBEBEBEBEBEBEC1C1C1C1C1C1C1C1C1C3C3C3C3C3C3C3C3C3C3C3C3BBBBBBBBBBBBBBBBBB
+BCBCBCBCBCBCBCBCBCB4B4B4B4B4B4B4B4B4B6B6B6B6B6B6B6B6B6A8A8A8A8A8A8A8A8A8A8A8A8
+8D8D8D8D8D8D8D8D8D7676767676767676766464646464646464645A5A5A5A5A5A5A5A5A565656
+5656565656565656565656565656565656565D5D5D5D5D5D5D5D5D6767676767676767676F6F6F
+6F6F6F6F6F6F6F6F6F7171717171717171716E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6F6F6F
+6F6F6F6F6F6F737373737373737373737373757575757575757575727272727272727272707070
+707070707070737373737373737373767676767676767676767676737373737373737373707070
+7070707070707979797979797979797E7E7E7E7E7E7E7E7E7E7E7E7D7D7D7D7D7D7D7D7D7A7A7A
+7A7A7A7A7A7A777777777777777777767676767676767676777777777777777777777777767676
+7676767676767373737373737373737171717171717171716C6C6C6C6C6C6C6C6C6D6D6D6D6D6D
+6D6D6D6D6D6D7B7B7B7B7B7B7B7B7B888888888888888888909090909090909090919191919191
+9191919191919191919191919191918E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C
+8C8C8C878787878787878787878787787878787878787878696969696969696969626262626262
+626262626262626262626262696969696969696969696969757575757575757575A5A5A5A5A5A5
+A5A5A5DBDBDBDBDBDBDBDBDBF5F5F5F5F5F5F5F5F5F5F5F5FDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFAFAFAFAFAFAFAFAFAD4D4D4D4D4D4D4D4D4D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCECECECECECECECECE
+CFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCDCDCDCDCDCDCDCDCD
+CDCDCDCDCDCDCDCDCDCECECECECECECECECECECECECECECECECECECECECECECECECECECECECECE
+CECECECECECECECECECECECECECECECECECECBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCCCCCCCCCC
+CDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBC2C2C2C2C2C2C2C2C2C2C2C2
+B5B5B5B5B5B5B5B5B5ABABABABABABABABABACACACACACACACACACAEAEAEAEAEAEAEAEAEAAAAAA
+AAAAAAAAAAAAAAAAAAA1A1A1A1A1A1A1A1A19B9B9B9B9B9B9B9B9B9D9D9D9D9D9D9D9D9DA7A7A7
+A7A7A7A7A7A7B5B5B5B5B5B5B5B5B5B5B5B5BBBBBBBBBBBBBBBBBBBEBEBEBEBEBEBEBEBEC1C1C1
+C1C1C1C1C1C1C3C3C3C3C3C3C3C3C3C3C3C3BBBBBBBBBBBBBBBBBBBCBCBCBCBCBCBCBCBCB4B4B4
+B4B4B4B4B4B4B6B6B6B6B6B6B6B6B6A8A8A8A8A8A8A8A8A8A8A8A88D8D8D8D8D8D8D8D8D767676
+7676767676766464646464646464645A5A5A5A5A5A5A5A5A565656565656565656565656565656
+5656565656565D5D5D5D5D5D5D5D5D6767676767676767676F6F6F6F6F6F6F6F6F6F6F6F717171
+7171717171716E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6F6F6F6F6F6F6F6F6F737373737373
+737373737373757575757575757575727272727272727272707070707070707070737373737373
+737373767676767676767676767676737373737373737373707070707070707070797979797979
+7979797E7E7E7E7E7E7E7E7E7E7E7E7D7D7D7D7D7D7D7D7D7A7A7A7A7A7A7A7A7A777777777777
+777777767676767676767676777777777777777777777777767676767676767676737373737373
+7373737171717171717171716C6C6C6C6C6C6C6C6C6D6D6D6D6D6D6D6D6D6D6D6D7B7B7B7B7B7B
+7B7B7B888888888888888888909090909090909090919191919191919191919191919191919191
+9191918E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C8C8C8C878787878787878787
+878787787878787878787878696969696969696969626262626262626262626262626262626262
+696969696969696969696969757575757575757575A5A5A5A5A5A5A5A5A5DBDBDBDBDBDBDBDBDB
+F5F5F5F5F5F5F5F5F5F5F5F5FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFAFAFAFAFAFAFAFAFA
+D4D4D4D4D4D4D4D4D4D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCECECE
+CECECECECECECECECECFCFCFCFCFCFCFCFCFCECECECECECECECECECFCFCFCFCFCFCFCFCFD0D0D0
+D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCDCDCDCDCDCDCDCDCDCECECE
+CECECECECECECDCDCDCDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCDCDCDCDCDCDCDCDCDCECECE
+CECECECECECECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCBCBCB
+CBCBCBCBCBCBC8C8C8C8C8C8C8C8C8BCBCBCBCBCBCBCBCBCBCBCBCB0B1B0B0B1B0B0B1B0AAAAAA
+AAAAAAAAAAAAAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFABABABABABABABABABABABABA1A1A1
+A1A1A1A1A1A19A9A9A9A9A9A9A9A9A989898989898989898999999999999999999B1B1B1B1B1B1
+B1B1B1B1B1B1B8B8B8B8B8B8B8B8B8BEBEBEBEBEBEBEBEBEBDBDBDBDBDBDBDBDBDC5C5C5C5C5C5
+C5C5C5C5C5C5C1C1C1C1C1C1C1C1C1BDBDBDBDBDBDBDBDBDBABABABABABABABABAB2B2B2B2B2B2
+B2B2B2B8B8B8B8B8B8B8B8B8B8B8B8A8A8A8A8A8A8A8A8A8929292929292929292808080808080
+808080666666666666666666575757575757575757575757545454545454545454545454545454
+5454545858585858585858586464646464646464646464646B6B6B6B6B6B6B6B6B6B6B6B6B6B6B
+6B6B6B6B6B6B6B6B6B6B6B6B6C6C6C6C6C6C6C6C6C6D6D6D6D6D6D6D6D6D6D6D6D6E6E6E6E6E6E
+6E6E6E6C6C6C6C6C6C6C6C6C6B6B6B6B6B6B6B6B6B6E6E6E6E6E6E6E6E6E727272727272727272
+7272726F6F6F6F6F6F6F6F6F6B6B6B6B6B6B6B6B6B707070707070707070717171717171717171
+7171717070707070707070706F6F6F6F6F6F6F6F6F6E6E6E6E6E6E6E6E6E6B6B6B6B6B6B6B6B6B
+6C6C6C6C6C6C6C6C6C6C6C6C6B6B6B6B6B6B6B6B6B6A6A6A6A6A6A6A6A6A676767676767676767
+6767676767676767677474747474747474747474748484848484848484848C8C8C8C8C8C8C8C8C
+9090909090909090909292929292929292929292929191919191919191918F8F8F8F8F8F8F8F8F
+8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8B8B8B8B8B8B8B8B8B8B8B8B878787878787878787
+838383838383838383707070707070707070646464646464646464666666666666666666666666
+777777777777777777B1B1B1B1B1B1B1B1B1E5E5E5E5E5E5E5E5E5F1F1F1F1F1F1F1F1F1F1F1F1
+FBFBFBFBFBFBFBFBFBFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFE
+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFBFBFBFBFBFBFBFBFBE0E0E0E0E0E0E0E0E0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCECECECECECECECECECECECECFCFCF
+CFCFCFCFCFCFCECECECECECECECECECFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0D0D0D0CFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCDCDCDCDCDCDCDCDCDCECECECECECECECECECDCDCDCDCDCD
+CDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCDCDCDCDCDCDCDCDCDCECECECECECECECECECCCCCCCCCCCC
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC8C8C8C8C8C8
+C8C8C8BCBCBCBCBCBCBCBCBCBCBCBCB0B1B0B0B1B0B0B1B0AAAAAAAAAAAAAAAAAAAFAFAFAFAFAF
+AFAFAFAFAFAFAFAFAFAFAFAFABABABABABABABABABABABABA1A1A1A1A1A1A1A1A19A9A9A9A9A9A
+9A9A9A989898989898989898999999999999999999B1B1B1B1B1B1B1B1B1B1B1B1B8B8B8B8B8B8
+B8B8B8BEBEBEBEBEBEBEBEBEBDBDBDBDBDBDBDBDBDC5C5C5C5C5C5C5C5C5C5C5C5C1C1C1C1C1C1
+C1C1C1BDBDBDBDBDBDBDBDBDBABABABABABABABABAB2B2B2B2B2B2B2B2B2B8B8B8B8B8B8B8B8B8
+B8B8B8A8A8A8A8A8A8A8A8A8929292929292929292808080808080808080666666666666666666
+575757575757575757575757545454545454545454545454545454545454585858585858585858
+6464646464646464646464646B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B
+6C6C6C6C6C6C6C6C6C6D6D6D6D6D6D6D6D6D6D6D6D6E6E6E6E6E6E6E6E6E6C6C6C6C6C6C6C6C6C
+6B6B6B6B6B6B6B6B6B6E6E6E6E6E6E6E6E6E7272727272727272727272726F6F6F6F6F6F6F6F6F
+6B6B6B6B6B6B6B6B6B707070707070707070717171717171717171717171707070707070707070
+6F6F6F6F6F6F6F6F6F6E6E6E6E6E6E6E6E6E6B6B6B6B6B6B6B6B6B6C6C6C6C6C6C6C6C6C6C6C6C
+6B6B6B6B6B6B6B6B6B6A6A6A6A6A6A6A6A6A676767676767676767676767676767676767747474
+7474747474747474748484848484848484848C8C8C8C8C8C8C8C8C909090909090909090929292
+9292929292929292929191919191919191918F8F8F8F8F8F8F8F8F8D8D8D8D8D8D8D8D8D8D8D8D
+8D8D8D8D8D8D8B8B8B8B8B8B8B8B8B8B8B8B878787878787878787838383838383838383707070
+707070707070646464646464646464666666666666666666666666777777777777777777B1B1B1
+B1B1B1B1B1B1E5E5E5E5E5E5E5E5E5F1F1F1F1F1F1F1F1F1F1F1F1FBFBFBFBFBFBFBFBFBFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+FEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFBFBFBFBFBFBFBFBFBE0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCECECECECECECECECECECECECFCFCFCFCFCFCFCFCFCECECECECECE
+CECECECFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCDCDCDCDCDCDCDCDCDCECECECECECECECECECDCDCDCDCDCDCDCDCDCDCDCDCCCCCCCCCCCC
+CCCCCCCDCDCDCDCDCDCDCDCDCECECECECECECECECECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+CCCCCCCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC8C8C8C8C8C8C8C8C8BCBCBCBCBCBCBCBCBC
+BCBCBCB0B1B0B0B1B0B0B1B0AAAAAAAAAAAAAAAAAAAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF
+ABABABABABABABABABABABABA1A1A1A1A1A1A1A1A19A9A9A9A9A9A9A9A9A989898989898989898
+999999999999999999B1B1B1B1B1B1B1B1B1B1B1B1B8B8B8B8B8B8B8B8B8BEBEBEBEBEBEBEBEBE
+BDBDBDBDBDBDBDBDBDC5C5C5C5C5C5C5C5C5C5C5C5C1C1C1C1C1C1C1C1C1BDBDBDBDBDBDBDBDBD
+BABABABABABABABABAB2B2B2B2B2B2B2B2B2B8B8B8B8B8B8B8B8B8B8B8B8A8A8A8A8A8A8A8A8A8
+929292929292929292808080808080808080666666666666666666575757575757575757575757
+545454545454545454545454545454545454585858585858585858646464646464646464646464
+6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6C6C6C6C6C6C6C6C6C6D6D6D
+6D6D6D6D6D6D6D6D6D6E6E6E6E6E6E6E6E6E6C6C6C6C6C6C6C6C6C6B6B6B6B6B6B6B6B6B6E6E6E
+6E6E6E6E6E6E7272727272727272727272726F6F6F6F6F6F6F6F6F6B6B6B6B6B6B6B6B6B707070
+7070707070707171717171717171717171717070707070707070706F6F6F6F6F6F6F6F6F6E6E6E
+6E6E6E6E6E6E6B6B6B6B6B6B6B6B6B6C6C6C6C6C6C6C6C6C6C6C6C6B6B6B6B6B6B6B6B6B6A6A6A
+6A6A6A6A6A6A676767676767676767676767676767676767747474747474747474747474848484
+8484848484848C8C8C8C8C8C8C8C8C909090909090909090929292929292929292929292919191
+9191919191918F8F8F8F8F8F8F8F8F8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8B8B8B8B8B8B
+8B8B8B8B8B8B878787878787878787838383838383838383707070707070707070646464646464
+646464666666666666666666666666777777777777777777B1B1B1B1B1B1B1B1B1E5E5E5E5E5E5
+E5E5E5F1F1F1F1F1F1F1F1F1F1F1F1FBFBFBFBFBFBFBFBFBFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFBFBFBFBFBFB
+FBFBFBE0E0E0E0E0E0E0E0E0CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCECECECECECECECECECDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCECECECECECECECECE
+CECECECECECECECECECECECECFCFCFCFCFCFCFCFCFCECECECECECECECECECECECECECECECECECE
+CFCFCFCFCFCFCFCFCFCFCFCFCECECECECECECECECECFCFCFCFCFCFCFCFCFCDCDCDCDCDCDCDCDCD
+CCCCCCCCCCCCCCCCCCCECECECECECECECECECECECECDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCB
+C7C7C7C7C7C7C7C7C7C2C2C2C2C2C2C2C2C2B7B7B7B7B7B7B7B7B7B7B7B7B0B0B0B0B0B0B0B0B0
+ACACACACACACACACACA9A9A9A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8ADADADADADADADADADADADAD
+9C9C9C9C9C9C9C9C9C939393939393939393989898989898989898959595959595959595A3A3A3
+A3A3A3A3A3A3A3A3A3B6B6B6B6B6B6B6B6B6B8B8B8B8B8B8B8B8B8BDBDBDBDBDBDBDBDBDBFBFBF
+BFBFBFBFBFBFBFBFBFC6C6C6C6C6C6C6C6C6BCBCBCBCBCBCBCBCBCBDBDBDBDBDBDBDBDBDB8B8B8
+B8B8B8B8B8B8B4B4B4B4B4B4B4B4B4B4B4B4B7B7B7B7B7B7B7B7B7A4A4A4A4A4A4A4A4A4989898
+9898989898988686868686868686866464646464646464646464645151515151515151514F4F4F
+4F4F4F4F4F4F5151515151515151515555555555555555555555555C5C5C5C5C5C5C5C5C646464
+646464646464686868686868686868696969696969696969676767676767676767676767676767
+676767676767666666666666666666656565656565656565666666666666666666686868686868
+6868686868686767676767676767676868686868686868686B6B6B6B6B6B6B6B6B6A6A6A6A6A6A
+6A6A6A6A6A6A686868686868686868676767676767676767676767676767676767666666666666
+6666666363636363636363636363635F605F5F605F5F605F5E5E5E5E5E5E5E5E5E636363636363
+6363637070707070707070708080808080808080808080808787878787878787878B8B8B8B8B8B
+8B8B8B8F8F8F8F8F8F8F8F8F9090909090909090909090909090909090909090908E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8C8C8C8C8C8C8C8C8C8585858585858585858585857E7E7E7E7E7E
+7E7E7E9090909090909090908484848484848484846D6D6D6D6D6D6D6D6D646464646464646464
+646464787878787878787878B1B1B1B1B1B1B1B1B1EAEAEAEAEAEAEAEAEAF1F1F1F1F1F1F1F1F1
+F1F1F1F9F9F9F9F9F9F9F9F9FCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF9F9F9F9F9F9F9F9F9C7C7C7C7C7C7C7C7C7
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCECECECECECECECECE
+CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCECECECECECECECECECECECECECECECECECECECECE
+CFCFCFCFCFCFCFCFCFCECECECECECECECECECECECECECECECECECECFCFCFCFCFCFCFCFCFCFCFCF
+CECECECECECECECECECFCFCFCFCFCFCFCFCFCDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCECECE
+CECECECECECECECECECDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCCCCCC
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBC7C7C7C7C7C7C7C7C7C2C2C2
+C2C2C2C2C2C2B7B7B7B7B7B7B7B7B7B7B7B7B0B0B0B0B0B0B0B0B0ACACACACACACACACACA9A9A9
+A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8ADADADADADADADADADADADAD9C9C9C9C9C9C9C9C9C939393
+939393939393989898989898989898959595959595959595A3A3A3A3A3A3A3A3A3A3A3A3B6B6B6
+B6B6B6B6B6B6B8B8B8B8B8B8B8B8B8BDBDBDBDBDBDBDBDBDBFBFBFBFBFBFBFBFBFBFBFBFC6C6C6
+C6C6C6C6C6C6BCBCBCBCBCBCBCBCBCBDBDBDBDBDBDBDBDBDB8B8B8B8B8B8B8B8B8B4B4B4B4B4B4
+B4B4B4B4B4B4B7B7B7B7B7B7B7B7B7A4A4A4A4A4A4A4A4A4989898989898989898868686868686
+8686866464646464646464646464645151515151515151514F4F4F4F4F4F4F4F4F515151515151
+5151515555555555555555555555555C5C5C5C5C5C5C5C5C646464646464646464686868686868
+686868696969696969696969676767676767676767676767676767676767676767666666666666
+666666656565656565656565666666666666666666686868686868686868686868676767676767
+6767676868686868686868686B6B6B6B6B6B6B6B6B6A6A6A6A6A6A6A6A6A6A6A6A686868686868
+686868676767676767676767676767676767676767666666666666666666636363636363636363
+6363635F605F5F605F5F605F5E5E5E5E5E5E5E5E5E636363636363636363707070707070707070
+8080808080808080808080808787878787878787878B8B8B8B8B8B8B8B8B8F8F8F8F8F8F8F8F8F
+9090909090909090909090909090909090909090908E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8C8C8C8C8C8C8C8C8C8585858585858585858585857E7E7E7E7E7E7E7E7E909090909090909090
+8484848484848484846D6D6D6D6D6D6D6D6D646464646464646464646464787878787878787878
+B1B1B1B1B1B1B1B1B1EAEAEAEAEAEAEAEAEAF1F1F1F1F1F1F1F1F1F1F1F1F9F9F9F9F9F9F9F9F9
+FCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDF9F9F9F9F9F9F9F9F9C7C7C7C7C7C7C7C7C7CFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCFCFCFCECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECE
+CECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECE
+CECECECECECECFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCDCDCDCDCDCDCDCDCDCDCDCD
+CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCECECECECECECECECECECECECECECE
+CECECECECECECECECECECECECECECECCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB
+CBCBCBCBCBCBC6C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C1BDBDBDBDBDBDBDBDBDB2B2B2B2B2B2
+B2B2B2B2B2B2AEAEAEAEAEAEAEAEAEAAAAAAAAAAAAAAAAAA9E9E9E9E9E9E9E9E9EA1A1A1A1A1A1
+A1A1A1A6A6A6A6A6A6A6A6A6A6A6A69595959595959595959898989898989898989E9E9E9E9E9E
+9E9E9E9B9B9B9B9B9B9B9B9B949494949494949494949494A9A9A9A9A9A9A9A9A9B4B4B4B4B4B4
+B4B4B4B8B8B8B8B8B8B8B8B8BDBDBDBDBDBDBDBDBDBDBDBDC0C0C0C0C0C0C0C0C0C3C3C3C3C3C3
+C3C3C3B8B8B8B8B8B8B8B8B8BEBEBEBEBEBEBEBEBEB7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7
+B7B7B7B7B7B7B7B7B7B7B7B7A2A2A2A2A2A2A2A2A29B9B9B9B9B9B9B9B9B888888888888888888
+8888886262626262626262624E4E4E4E4E4E4E4E4E505050505050505050515151515151515151
+5151515252525252525252525757575757575757575F605F5F605F5F605F646464646464646464
+646464646464646464646464616161616161616161616161616161616161616161616161616161
+6262626262626262626262626262626262626262625E5E5E5E5E5E5E5E5E636363636363636363
+6666666666666666666565656565656565656565655F605F5F605F5F605F5D5D5D5D5D5D5D5D5D
+5B5B5B5B5B5B5B5B5B595959595959595959565656565656565656565656575757575757575757
+5F605F5F605F5F605F717171717171717171818181818181818181888888888888888888888888
+8989898989898989898989898989898989898C8C8C8C8C8C8C8C8C8E8E8E8E8E8E8E8E8E8E8E8E
+9191919191919191919090909090909090908E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D848484
+8484848484848484847878787878787878788484848484848484847F7F7F7F7F7F7F7F7F6F6F6F
+6F6F6F6F6F6F676767676767676767676767787878787878787878A9A9A9A9A9A9A9A9A9E8E8E8
+E8E8E8E8E8E8F5F5F5F5F5F5F5F5F5F5F5F5F9F9F9F9F9F9F9F9F9FCFCFCFCFCFCFCFCFCFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF9F9F9
+F9F9F9F9F9F9C6C6C6C6C6C6C6C6C6CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCECECECECECE
+CECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECE
+CECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECFCFCFCFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD
+CDCDCDCDCDCDCDCDCDCDCDCDCECECECECECECECECECECECECECECECECECECECECECECECECECECE
+CECECECCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC6C6C6C6C6C6
+C6C6C6C1C1C1C1C1C1C1C1C1BDBDBDBDBDBDBDBDBDB2B2B2B2B2B2B2B2B2B2B2B2AEAEAEAEAEAE
+AEAEAEAAAAAAAAAAAAAAAAAA9E9E9E9E9E9E9E9E9EA1A1A1A1A1A1A1A1A1A6A6A6A6A6A6A6A6A6
+A6A6A69595959595959595959898989898989898989E9E9E9E9E9E9E9E9E9B9B9B9B9B9B9B9B9B
+949494949494949494949494A9A9A9A9A9A9A9A9A9B4B4B4B4B4B4B4B4B4B8B8B8B8B8B8B8B8B8
+BDBDBDBDBDBDBDBDBDBDBDBDC0C0C0C0C0C0C0C0C0C3C3C3C3C3C3C3C3C3B8B8B8B8B8B8B8B8B8
+BEBEBEBEBEBEBEBEBEB7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7
+A2A2A2A2A2A2A2A2A29B9B9B9B9B9B9B9B9B888888888888888888888888626262626262626262
+4E4E4E4E4E4E4E4E4E505050505050505050515151515151515151515151525252525252525252
+5757575757575757575F605F5F605F5F605F646464646464646464646464646464646464646464
+616161616161616161616161616161616161616161616161616161626262626262626262626262
+6262626262626262625E5E5E5E5E5E5E5E5E636363636363636363666666666666666666656565
+6565656565656565655F605F5F605F5F605F5D5D5D5D5D5D5D5D5D5B5B5B5B5B5B5B5B5B595959
+5959595959595656565656565656565656565757575757575757575F605F5F605F5F605F717171
+717171717171818181818181818181888888888888888888888888898989898989898989898989
+8989898989898C8C8C8C8C8C8C8C8C8E8E8E8E8E8E8E8E8E8E8E8E919191919191919191909090
+9090909090908E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D848484848484848484848484787878
+7878787878788484848484848484847F7F7F7F7F7F7F7F7F6F6F6F6F6F6F6F6F6F676767676767
+676767676767787878787878787878A9A9A9A9A9A9A9A9A9E8E8E8E8E8E8E8E8E8F5F5F5F5F5F5
+F5F5F5F5F5F5F9F9F9F9F9F9F9F9F9FCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF9F9F9F9F9F9F9F9F9C6C6C6C6C6C6
+C6C6C6CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCECECECECECECECECECECECECECECECECECE
+CECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECE
+CECECECECECECECECECECECECECECECECECECECECECFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF
+CFCFCFCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD
+CECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECCCCCCCCCCCCCCCCCC
+CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC6C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C1
+BDBDBDBDBDBDBDBDBDB2B2B2B2B2B2B2B2B2B2B2B2AEAEAEAEAEAEAEAEAEAAAAAAAAAAAAAAAAAA
+9E9E9E9E9E9E9E9E9EA1A1A1A1A1A1A1A1A1A6A6A6A6A6A6A6A6A6A6A6A6959595959595959595
+9898989898989898989E9E9E9E9E9E9E9E9E9B9B9B9B9B9B9B9B9B949494949494949494949494
+A9A9A9A9A9A9A9A9A9B4B4B4B4B4B4B4B4B4B8B8B8B8B8B8B8B8B8BDBDBDBDBDBDBDBDBDBDBDBD
+C0C0C0C0C0C0C0C0C0C3C3C3C3C3C3C3C3C3B8B8B8B8B8B8B8B8B8BEBEBEBEBEBEBEBEBEB7B7B7
+B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7A2A2A2A2A2A2A2A2A29B9B9B
+9B9B9B9B9B9B8888888888888888888888886262626262626262624E4E4E4E4E4E4E4E4E505050
+5050505050505151515151515151515151515252525252525252525757575757575757575F605F
+5F605F5F605F646464646464646464646464646464646464646464616161616161616161616161
+6161616161616161616161616161616262626262626262626262626262626262626262625E5E5E
+5E5E5E5E5E5E6363636363636363636666666666666666666565656565656565656565655F605F
+5F605F5F605F5D5D5D5D5D5D5D5D5D5B5B5B5B5B5B5B5B5B595959595959595959565656565656
+5656565656565757575757575757575F605F5F605F5F605F717171717171717171818181818181
+8181818888888888888888888888888989898989898989898989898989898989898C8C8C8C8C8C
+8C8C8C8E8E8E8E8E8E8E8E8E8E8E8E9191919191919191919090909090909090908E8E8E8E8E8E
+8E8E8E8D8D8D8D8D8D8D8D8D848484848484848484848484787878787878787878848484848484
+8484847F7F7F7F7F7F7F7F7F6F6F6F6F6F6F6F6F6F676767676767676767676767787878787878
+787878A9A9A9A9A9A9A9A9A9E8E8E8E8E8E8E8E8E8F5F5F5F5F5F5F5F5F5F5F5F5F9F9F9F9F9F9
+F9F9F9FCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+FDFDFDFDFDFDFDFDFDFDFDFDF9F9F9F9F9F9F9F9F9C6C6C6C6C6C6C6C6C6CECECECECECECECECE
+CDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+CCCCCCCCCCCCCCCCCCCDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCCCCCCCDCDCDCDCDCDCDCDCD
+CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCECECECECECECECECECECECECCCCCCCCCCCCCCCCCC
+CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB
+CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC5C5C5C5C5C5C5C5C5C1C1C1C1C1C1C1C1C1C5C5C5
+C5C5C5C5C5C5C5C5C5C4C4C4C4C4C4C4C4C4BFBFBFBFBFBFBFBFBFB4B4B4B4B4B4B4B4B4AEAEAE
+AEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1A7A7A7A7A7A7A7A7A79C9C9C9C9C9C9C9C9CA3A3A3
+A3A3A3A3A3A39E9E9E9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9DA4A4A4A4A4A4A4A4A49D9D9D
+9D9D9D9D9D9D909090909090909090898989898989898989898989929292929292929292ADADAD
+ADADADADADADB0B0B0B0B0B0B0B0B0B8B8B8B8B8B8B8B8B8B8B8B8B9B9B9B9B9B9B9B9B9BFBFBF
+BFBFBFBFBFBFBCBCBCBCBCBCBCBCBCB8B8B8B8B8B8B8B8B8BFBFBFBFBFBFBFBFBFBFBFBFB3B3B3
+B3B3B3B3B3B3B9B9B9B9B9B9B9B9B9B1B1B1B1B1B1B1B1B19F9F9F9F9F9F9F9F9F9E9E9E9E9E9E
+9E9E9E9E9E9E8787878787878787875C5C5C5C5C5C5C5C5C4949494949494949494D4D4D4D4D4D
+4D4D4D4D4D4D4F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E515151515151515151575757575757
+5757575A5A5A5A5A5A5A5A5A5A5A5A5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A5B5B5B5B5B5B
+5B5B5B5C5C5C5C5C5C5C5C5C595959595959595959595959575757575757575757575757575757
+575757585858585858585858565656565656565656565656525252525252525252505050505050
+5050504D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C525252525252525252525252636363636363
+6363637373737373737373737E7E7E7E7E7E7E7E7E858585858585858585888888888888888888
+8888888989898989898989898888888888888888888C8C8C8C8C8C8C8C8C8E8E8E8E8E8E8E8E8E
+8E8E8E9090909090909090908F8F8F8F8F8F8F8F8F9090909090909090908E8E8E8E8E8E8E8E8E
+8484848484848484848484847979797979797979797B7B7B7B7B7B7B7B7B6E6E6E6E6E6E6E6E6E
+6767676767676767676C6C6C6C6C6C6C6C6C6C6C6C787878787878787878A1A1A1A1A1A1A1A1A1
+E0E0E0E0E0E0E0E0E0F7F7F7F7F7F7F7F7F7F7F7F7F9F9F9F9F9F9F9F9F9FCFCFCFCFCFCFCFCFC
+FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
+FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFD
+FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFC
+F6F6F6F6F6F6F6F6F6BBBBBBBBBBBBBBBBBBCECECECECECECECECECDCDCDCDCDCDCDCDCDCCCCCC
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCDCD
+CDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCCCCCCCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD
+CDCDCDCDCDCDCECECECECECECECECECECECECCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCBCBCB
+CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB
+CBCBCBCBCBCBC5C5C5C5C5C5C5C5C5C1C1C1C1C1C1C1C1C1C5C5C5C5C5C5C5C5C5C5C5C5C4C4C4
+C4C4C4C4C4C4BFBFBFBFBFBFBFBFBFB4B4B4B4B4B4B4B4B4AEAEAEAEAEAEAEAEAEAEAEAEB1B1B1
+B1B1B1B1B1B1A7A7A7A7A7A7A7A7A79C9C9C9C9C9C9C9C9CA3A3A3A3A3A3A3A3A39E9E9E9E9E9E
+9E9E9E9E9E9E9D9D9D9D9D9D9D9D9DA4A4A4A4A4A4A4A4A49D9D9D9D9D9D9D9D9D909090909090
+909090898989898989898989898989929292929292929292ADADADADADADADADADB0B0B0B0B0B0
+B0B0B0B8B8B8B8B8B8B8B8B8B8B8B8B9B9B9B9B9B9B9B9B9BFBFBFBFBFBFBFBFBFBCBCBCBCBCBC
+BCBCBCB8B8B8B8B8B8B8B8B8BFBFBFBFBFBFBFBFBFBFBFBFB3B3B3B3B3B3B3B3B3B9B9B9B9B9B9
+B9B9B9B1B1B1B1B1B1B1B1B19F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E878787878787
+8787875C5C5C5C5C5C5C5C5C4949494949494949494D4D4D4D4D4D4D4D4D4D4D4D4F4F4F4F4F4F
+4F4F4F4E4E4E4E4E4E4E4E4E5151515151515151515757575757575757575A5A5A5A5A5A5A5A5A
+5A5A5A5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A5B5B5B5B5B5B5B5B5B5C5C5C5C5C5C5C5C5C
+595959595959595959595959575757575757575757575757575757575757585858585858585858
+5656565656565656565656565252525252525252525050505050505050504D4D4D4D4D4D4D4D4D
+4C4C4C4C4C4C4C4C4C525252525252525252525252636363636363636363737373737373737373
+7E7E7E7E7E7E7E7E7E858585858585858585888888888888888888888888898989898989898989
+8888888888888888888C8C8C8C8C8C8C8C8C8E8E8E8E8E8E8E8E8E8E8E8E909090909090909090
+8F8F8F8F8F8F8F8F8F9090909090909090908E8E8E8E8E8E8E8E8E848484848484848484848484
+7979797979797979797B7B7B7B7B7B7B7B7B6E6E6E6E6E6E6E6E6E6767676767676767676C6C6C
+6C6C6C6C6C6C6C6C6C787878787878787878A1A1A1A1A1A1A1A1A1E0E0E0E0E0E0E0E0E0F7F7F7
+F7F7F7F7F7F7F7F7F7F9F9F9F9F9F9F9F9F9FCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFB
+FBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
+FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFC
+FCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCF6F6F6F6F6F6F6F6F6BBBBBB
+BBBBBBBBBBBBCECECECECECECECECECDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCDCDCDCDCDCDCDCDCCCCCCCCCCCC
+CCCCCCCCCCCCCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCECECECECECE
+CECECECECECECCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB
+CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC5C5C5C5C5C5
+C5C5C5C1C1C1C1C1C1C1C1C1C5C5C5C5C5C5C5C5C5C5C5C5C4C4C4C4C4C4C4C4C4BFBFBFBFBFBF
+BFBFBFB4B4B4B4B4B4B4B4B4AEAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1A7A7A7A7A7A7
+A7A7A79C9C9C9C9C9C9C9C9CA3A3A3A3A3A3A3A3A39E9E9E9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D
+9D9D9DA4A4A4A4A4A4A4A4A49D9D9D9D9D9D9D9D9D909090909090909090898989898989898989
+898989929292929292929292ADADADADADADADADADB0B0B0B0B0B0B0B0B0B8B8B8B8B8B8B8B8B8
+B8B8B8B9B9B9B9B9B9B9B9B9BFBFBFBFBFBFBFBFBFBCBCBCBCBCBCBCBCBCB8B8B8B8B8B8B8B8B8
+BFBFBFBFBFBFBFBFBFBFBFBFB3B3B3B3B3B3B3B3B3B9B9B9B9B9B9B9B9B9B1B1B1B1B1B1B1B1B1
+9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E8787878787878787875C5C5C5C5C5C5C5C5C
+4949494949494949494D4D4D4D4D4D4D4D4D4D4D4D4F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E
+5151515151515151515757575757575757575A5A5A5A5A5A5A5A5A5A5A5A5B5B5B5B5B5B5B5B5B
+5A5A5A5A5A5A5A5A5A5B5B5B5B5B5B5B5B5B5C5C5C5C5C5C5C5C5C595959595959595959595959
+575757575757575757575757575757575757585858585858585858565656565656565656565656
+5252525252525252525050505050505050504D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C525252
+5252525252525252526363636363636363637373737373737373737E7E7E7E7E7E7E7E7E858585
+8585858585858888888888888888888888888989898989898989898888888888888888888C8C8C
+8C8C8C8C8C8C8E8E8E8E8E8E8E8E8E8E8E8E9090909090909090908F8F8F8F8F8F8F8F8F909090
+9090909090908E8E8E8E8E8E8E8E8E8484848484848484848484847979797979797979797B7B7B
+7B7B7B7B7B7B6E6E6E6E6E6E6E6E6E6767676767676767676C6C6C6C6C6C6C6C6C6C6C6C787878
+787878787878A1A1A1A1A1A1A1A1A1E0E0E0E0E0E0E0E0E0F7F7F7F7F7F7F7F7F7F7F7F7F9F9F9
+F9F9F9F9F9F9FCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFC
+FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
+FCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFD
+FDFDFDFCFCFCFCFCFCFCFCFCFCFCFCF6F6F6F6F6F6F6F6F6BBBBBBBBBBBBBBBBBBCDCDCDCDCDCD
+CDCDCDCDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+CCCCCCCCCCCCCCCCCCCCCCCCCDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCCCCCCCDCDCDCDCDCD
+CDCDCDCDCDCDCDCDCDCDCDCDCECECECECECECECECECECECECECECECECECECECECECCCCCCCCCCCC
+CCCCCCCBCBCBCBCBCBCBCBCBCACACACACACACACACACBCBCBCBCBCBCBCBCBC6C6C6C6C6C6C6C6C6
+C6C6C6C4C4C4C4C4C4C4C4C4BFBFBFBFBFBFBFBFBFA7A7A7A7A7A7A7A7A79E9E9E9E9E9E9E9E9E
+B4B4B4B4B4B4B4B4B4B4B4B4BFBFBFBFBFBFBFBFBFBEBEBEBEBEBEBEBEBEB5B5B5B5B5B5B5B5B5
+B6B6B6B6B6B6B6B6B6B6B6B6B7B7B7B7B7B7B7B7B7A5A5A5A5A5A5A5A5A5A7A7A7A7A7A7A7A7A7
+A8A8A8A8A8A8A8A8A89E9E9E9E9E9E9E9E9E9E9E9EA8A8A8A8A8A8A8A8A8A9A9A9A9A9A9A9A9A9
+9696969696969696968F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8A8A8A8A8A8A8A8A8A
+9C9C9C9C9C9C9C9C9CACACACACACACACACACB0B1B0B0B1B0B0B1B0B0B1B0B8B8B8B8B8B8B8B8B8
+B6B6B6B6B6B6B6B6B6BDBDBDBDBDBDBDBDBDB6B6B6B6B6B6B6B6B6BABABABABABABABABABABABA
+BABABABABABABABABAB2B2B2B2B2B2B2B2B2B9B9B9B9B9B9B9B9B9AEAEAEAEAEAEAEAEAEA2A2A2
+A2A2A2A2A2A2A2A2A2A0A0A0A0A0A0A0A0A0828282828282828282575757575757575757444444
+4444444444444444444747474747474747474C4C4C4C4C4C4C4C4C4D4D4D4D4D4D4D4D4D4C4C4C
+4C4C4C4C4C4C4F4F4F4F4F4F4F4F4F4F4F4F515151515151515151525252525252525252525252
+5252525252525454545454545454545050505050505050505050504E4E4E4E4E4E4E4E4E4C4C4C
+4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C494949494949494949494949484848484848484848474747
+474747474747474747474747474747515151515151515151656565656565656565656565777777
+7777777777777F7F7F7F7F7F7F7F7F848484848484848484858585858585858585878787878787
+8787878787878888888888888888888989898989898989898C8C8C8C8C8C8C8C8C8D8D8D8D8D8D
+8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F9090909090909090908E8E8E8E8E8E
+8E8E8E8282828282828282828282827171717171717171716F6F6F6F6F6F6F6F6F686868686868
+6868686666666666666666667070707070707070707070707A7A7A7A7A7A7A7A7A9F9F9F9F9F9F
+9F9F9FD8D8D8D8D8D8D8D8D8F5F5F5F5F5F5F5F5F5F5F5F5F8F8F8F8F8F8F8F8F8FCFCFCFCFCFC
+FCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFA
+FAFAFAFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFB
+FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFC
+FCFCFCF6F6F6F6F6F6F6F6F6C5C5C5C5C5C5C5C5C5CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+CDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCCCCCCCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD
+CECECECECECECECECECECECECECECECECECECECECECCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCB
+CACACACACACACACACACBCBCBCBCBCBCBCBCBC6C6C6C6C6C6C6C6C6C6C6C6C4C4C4C4C4C4C4C4C4
+BFBFBFBFBFBFBFBFBFA7A7A7A7A7A7A7A7A79E9E9E9E9E9E9E9E9EB4B4B4B4B4B4B4B4B4B4B4B4
+BFBFBFBFBFBFBFBFBFBEBEBEBEBEBEBEBEBEB5B5B5B5B5B5B5B5B5B6B6B6B6B6B6B6B6B6B6B6B6
+B7B7B7B7B7B7B7B7B7A5A5A5A5A5A5A5A5A5A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A8A8A89E9E9E
+9E9E9E9E9E9E9E9E9EA8A8A8A8A8A8A8A8A8A9A9A9A9A9A9A9A9A99696969696969696968F8F8F
+8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8A8A8A8A8A8A8A8A8A9C9C9C9C9C9C9C9C9CACACAC
+ACACACACACACB0B1B0B0B1B0B0B1B0B0B1B0B8B8B8B8B8B8B8B8B8B6B6B6B6B6B6B6B6B6BDBDBD
+BDBDBDBDBDBDB6B6B6B6B6B6B6B6B6BABABABABABABABABABABABABABABABABABABABABAB2B2B2
+B2B2B2B2B2B2B9B9B9B9B9B9B9B9B9AEAEAEAEAEAEAEAEAEA2A2A2A2A2A2A2A2A2A2A2A2A0A0A0
+A0A0A0A0A0A0828282828282828282575757575757575757444444444444444444444444474747
+4747474747474C4C4C4C4C4C4C4C4C4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4F4F4F4F4F4F
+4F4F4F4F4F4F515151515151515151525252525252525252525252525252525252545454545454
+5454545050505050505050505050504E4E4E4E4E4E4E4E4E4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C
+4C4C4C494949494949494949494949484848484848484848474747474747474747474747474747
+4747475151515151515151516565656565656565656565657777777777777777777F7F7F7F7F7F
+7F7F7F848484848484848484858585858585858585878787878787878787878787888888888888
+8888888989898989898989898C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E
+8E8E8E8F8F8F8F8F8F8F8F8F9090909090909090908E8E8E8E8E8E8E8E8E828282828282828282
+8282827171717171717171716F6F6F6F6F6F6F6F6F686868686868686868666666666666666666
+7070707070707070707070707A7A7A7A7A7A7A7A7A9F9F9F9F9F9F9F9F9FD8D8D8D8D8D8D8D8D8
+F5F5F5F5F5F5F5F5F5F5F5F5F8F8F8F8F8F8F8F8F8FCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFB
+FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFB
+FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB
+FBFBFBFBFBFBFBFBFBFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCF6F6F6F6F6F6F6F6F6
+C5C5C5C5C5C5C5C5C5CDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+CDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCECECECECECECECECECDCDCD
+CDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCDCDCDCDCDCDCDCDCDCFCFCFCFCFCFCFCFCFCECECE
+CECECECECECECECECECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBC9C9C9
+C9C9C9C9C9C9BEBEBEBEBEBEBEBEBEBEBEBEBABABABABABABABABAAEAEAEAEAEAEAEAEAE868686
+868686868686838383838383838383A7A7A7A7A7A7A7A7A7A7A7A7C2C2C2C2C2C2C2C2C2CCCCCC
+CCCCCCCCCCCCC1C1C1C1C1C1C1C1C1B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B0B1B0
+B0B1B0B0B1B0AFAFAFAFAFAFAFAFAFABABABABABABABABABA8A8A8A8A8A8A8A8A8A8A8A8AEAEAE
+AEAEAEAEAEAEA8A8A8A8A8A8A8A8A89E9E9E9E9E9E9E9E9EA4A4A4A4A4A4A4A4A4A1A1A1A1A1A1
+A1A1A1A1A1A18F8F8F8F8F8F8F8F8F898989898989898989A2A2A2A2A2A2A2A2A2B0B0B0B0B0B0
+B0B0B0B0B0B0B1B1B1B1B1B1B1B1B1B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B8B8B8B8B8B8
+B8B8B8B1B1B1B1B1B1B1B1B1B1B1B1B9B9B9B9B9B9B9B9B9B6B6B6B6B6B6B6B6B6B2B2B2B2B2B2
+B2B2B2BABABABABABABABABAACACACACACACACACACACACACA4A4A4A4A4A4A4A4A49E9E9E9E9E9E
+9E9E9E7777777777777777774F4F4F4F4F4F4F4F4F4F4F4F414141414141414141474747474747
+4747474E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C
+4C4C4C4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B494949494949494949464646464646464646
+464646444444444444444444454545454545454545444444444444444444444444444444444444
+4444444242424242424242424545454545454545454E4E4E4E4E4E4E4E4E616161616161616161
+757575757575757575757575818181818181818181848484848484848484868686868686868686
+8686868686868686868787878787878787878787878888888888888888888C8C8C8C8C8C8C8C8C
+8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E909090909090909090909090909090909090
+9090909090909090908D8D8D8D8D8D8D8D8D808080808080808080808080646464646464646464
+5D5D5D5D5D5D5D5D5D6262626262626262626A6A6A6A6A6A6A6A6A757575757575757575757575
+7E7E7E7E7E7E7E7E7EA4A4A4A4A4A4A4A4A4D3D3D3D3D3D3D3D3D3F2F2F2F2F2F2F2F2F2F2F2F2
+F9F9F9F9F9F9F9F9F9FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFA
+FAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBFBFBFBFBFBFBFBFBFB
+FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFC
+FCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBF7F7F7F7F7F7F7F7F7C5C5C5C5C5C5C5C5C5CDCDCD
+CDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCDCDCDCDCDCDCDCDCCCCCC
+CCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCECECECECECECECECECDCDCDCDCDCDCDCDCDCDCDCDCCCCCC
+CCCCCCCCCCCCCDCDCDCDCDCDCDCDCDCFCFCFCFCFCFCFCFCFCECECECECECECECECECECECECCCCCC
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBC9C9C9C9C9C9C9C9C9BEBEBEBEBEBE
+BEBEBEBEBEBEBABABABABABABABABAAEAEAEAEAEAEAEAEAE868686868686868686838383838383
+838383A7A7A7A7A7A7A7A7A7A7A7A7C2C2C2C2C2C2C2C2C2CCCCCCCCCCCCCCCCCCC1C1C1C1C1C1
+C1C1C1B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B0B1B0B0B1B0B0B1B0AFAFAFAFAFAF
+AFAFAFABABABABABABABABABA8A8A8A8A8A8A8A8A8A8A8A8AEAEAEAEAEAEAEAEAEA8A8A8A8A8A8
+A8A8A89E9E9E9E9E9E9E9E9EA4A4A4A4A4A4A4A4A4A1A1A1A1A1A1A1A1A1A1A1A18F8F8F8F8F8F
+8F8F8F898989898989898989A2A2A2A2A2A2A2A2A2B0B0B0B0B0B0B0B0B0B0B0B0B1B1B1B1B1B1
+B1B1B1B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B8B8B8B8B8B8B8B8B8B1B1B1B1B1B1B1B1B1
+B1B1B1B9B9B9B9B9B9B9B9B9B6B6B6B6B6B6B6B6B6B2B2B2B2B2B2B2B2B2BABABABABABABABABA
+ACACACACACACACACACACACACA4A4A4A4A4A4A4A4A49E9E9E9E9E9E9E9E9E777777777777777777
+4F4F4F4F4F4F4F4F4F4F4F4F4141414141414141414747474747474747474E4E4E4E4E4E4E4E4E
+4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C
+4B4B4B4B4B4B4B4B4B494949494949494949464646464646464646464646444444444444444444
+454545454545454545444444444444444444444444444444444444444444424242424242424242
+4545454545454545454E4E4E4E4E4E4E4E4E616161616161616161757575757575757575757575
+818181818181818181848484848484848484868686868686868686868686868686868686878787
+8787878787878787878888888888888888888C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8E8E8E
+8E8E8E8E8E8E8E8E8E9090909090909090909090909090909090909090909090909090908D8D8D
+8D8D8D8D8D8D8080808080808080808080806464646464646464645D5D5D5D5D5D5D5D5D626262
+6262626262626A6A6A6A6A6A6A6A6A7575757575757575757575757E7E7E7E7E7E7E7E7EA4A4A4
+A4A4A4A4A4A4D3D3D3D3D3D3D3D3D3F2F2F2F2F2F2F2F2F2F2F2F2F9F9F9F9F9F9F9F9F9FBFBFB
+FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFAFAFAF9F9F9
+F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB
+FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFBFBFBFBFBFB
+FBFBFBFBFBFBF7F7F7F7F7F7F7F7F7C5C5C5C5C5C5C5C5C5CDCDCDCDCDCDCDCDCDCCCCCCCCCCCC
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCBCBCBCBCBCB
+CBCBCBCECECECECECECECECECDCDCDCDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCDCDCDCDCDCD
+CDCDCDCFCFCFCFCFCFCFCFCFCECECECECECECECECECECECECCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+CCCCCCCBCBCBCBCBCBCBCBCBC9C9C9C9C9C9C9C9C9BEBEBEBEBEBEBEBEBEBEBEBEBABABABABABA
+BABABAAEAEAEAEAEAEAEAEAE868686868686868686838383838383838383A7A7A7A7A7A7A7A7A7
+A7A7A7C2C2C2C2C2C2C2C2C2CCCCCCCCCCCCCCCCCCC1C1C1C1C1C1C1C1C1B9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B0B1B0B0B1B0B0B1B0AFAFAFAFAFAFAFAFAFABABABABABABABABAB
+A8A8A8A8A8A8A8A8A8A8A8A8AEAEAEAEAEAEAEAEAEA8A8A8A8A8A8A8A8A89E9E9E9E9E9E9E9E9E
+A4A4A4A4A4A4A4A4A4A1A1A1A1A1A1A1A1A1A1A1A18F8F8F8F8F8F8F8F8F898989898989898989
+A2A2A2A2A2A2A2A2A2B0B0B0B0B0B0B0B0B0B0B0B0B1B1B1B1B1B1B1B1B1B4B4B4B4B4B4B4B4B4
+B4B4B4B4B4B4B4B4B4B8B8B8B8B8B8B8B8B8B1B1B1B1B1B1B1B1B1B1B1B1B9B9B9B9B9B9B9B9B9
+B6B6B6B6B6B6B6B6B6B2B2B2B2B2B2B2B2B2BABABABABABABABABAACACACACACACACACACACACAC
+A4A4A4A4A4A4A4A4A49E9E9E9E9E9E9E9E9E7777777777777777774F4F4F4F4F4F4F4F4F4F4F4F
+4141414141414141414747474747474747474E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4D4D
+4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B494949
+494949494949464646464646464646464646444444444444444444454545454545454545444444
+4444444444444444444444444444444444444242424242424242424545454545454545454E4E4E
+4E4E4E4E4E4E616161616161616161757575757575757575757575818181818181818181848484
+848484848484868686868686868686868686868686868686878787878787878787878787888888
+8888888888888C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E909090
+9090909090909090909090909090909090909090909090908D8D8D8D8D8D8D8D8D808080808080
+8080808080806464646464646464645D5D5D5D5D5D5D5D5D6262626262626262626A6A6A6A6A6A
+6A6A6A7575757575757575757575757E7E7E7E7E7E7E7E7EA4A4A4A4A4A4A4A4A4D3D3D3D3D3D3
+D3D3D3F2F2F2F2F2F2F2F2F2F2F2F2F9F9F9F9F9F9F9F9F9FBFBFBFBFBFBFBFBFBFBFBFBFBFBFB
+FBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
+F9F9F9FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB
+FBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBF7F7F7F7F7F7
+F7F7F7C5C5C5C5C5C5C5C5C5CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCB
+CBCBCBCDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCCCC
+CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCECECECECECECECECE
+CDCDCDCDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCDCDCDCDCDCDCDCDCD
+CBCBCBCBCBCBCBCBCBC6C6C6C6C6C6C6C6C6C6C6C6C7C7C7C7C7C7C7C7C7B1B1B1B1B1B1B1B1B1
+919191919191919191A2A2A2A2A2A2A2A2A2BFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCF
+D1D1D1D1D1D1D1D1D1C0C0C0C0C0C0C0C0C0B7B7B7B7B7B7B7B7B7B7B7B7BFBFBFBFBFBFBFBFBF
+BABABABABABABABABAB0B0B0B0B0B0B0B0B0ACACACACACACACACACB2B2B2B2B2B2B2B2B2B2B2B2
+ACACACACACACACACACAAAAAAAAAAAAAAAAAAAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA4A4A4
+A4A4A4A4A4A4A4A4A49191919191919191918D8D8D8D8D8D8D8D8D929292929292929292ABABAB
+ABABABABABABABABABAEAEAEAEAEAEAEAEAEB0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0AFAFAF
+AFAFAFAFAFAFB1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEB6B6B6B6B6B6B6B6B6B2B2B2
+B2B2B2B2B2B2B4B4B4B4B4B4B4B4B4B7B7B7B7B7B7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A7A5A5A5
+A5A5A5A5A5A59898989898989898986F6F6F6F6F6F6F6F6F6F6F6F4E4E4E4E4E4E4E4E4E3E3E3E
+3E3E3E3E3E3E4141414141414141414B4B4B4B4B4B4B4B4B505050505050505050505050505050
+5050505050505050505050505050504D4D4D4D4D4D4D4D4D494949494949494949444444444444
+4444444444444040404040404040403F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F
+3F3F3F3F3F3F4444444444444444444E4E4E4E4E4E4E4E4E5D5D5D5D5D5D5D5D5D6F6F6F6F6F6F
+6F6F6F7C7C7C7C7C7C7C7C7C7C7C7C848484848484848484858585858585858585858585858585
+8585858484848484848484848787878787878787878787878989898989898989898F8F8F8F8F8F
+8F8F8F9090909090909090909393939393939393939393939393939393939393938E8E8E8E8E8E
+8E8E8E8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E575757575757
+5757575151515151515151515F605F5F605F5F605F6D6D6D6D6D6D6D6D6D777777777777777777
+7777777E7E7E7E7E7E7E7E7EA5A5A5A5A5A5A5A5A5D8D8D8D8D8D8D8D8D8EFEFEFEFEFEFEFEFEF
+EFEFEFF9F9F9F9F9F9F9F9F9FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFA
+F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBFBFBFBFBFBFB
+FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFA
+FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF6F6F6F6F6F6F6F6F6C1C1C1C1C1C1C1C1C1
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCBCBCBCDCDCDCDCDCDCDCDCD
+CCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCCCCCDCDCDCDCDCDCDCDCDCDCDCD
+CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCECECECECECECECECECDCDCDCDCDCDCDCDCDCDCDCD
+CCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCDCDCDCDCDCDCDCDCDCBCBCBCBCBCBCBCBCBC6C6C6
+C6C6C6C6C6C6C6C6C6C7C7C7C7C7C7C7C7C7B1B1B1B1B1B1B1B1B1919191919191919191A2A2A2
+A2A2A2A2A2A2BFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFD1D1D1D1D1D1D1D1D1C0C0C0
+C0C0C0C0C0C0B7B7B7B7B7B7B7B7B7B7B7B7BFBFBFBFBFBFBFBFBFBABABABABABABABABAB0B0B0
+B0B0B0B0B0B0ACACACACACACACACACB2B2B2B2B2B2B2B2B2B2B2B2ACACACACACACACACACAAAAAA
+AAAAAAAAAAAAAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA4A4A4A4A4A4A4A4A4A4A4A4919191
+9191919191918D8D8D8D8D8D8D8D8D929292929292929292ABABABABABABABABABABABABAEAEAE
+AEAEAEAEAEAEB0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0AFAFAFAFAFAFAFAFAFB1B1B1B1B1B1
+B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEB6B6B6B6B6B6B6B6B6B2B2B2B2B2B2B2B2B2B4B4B4B4B4B4
+B4B4B4B7B7B7B7B7B7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A7A5A5A5A5A5A5A5A5A5989898989898
+9898986F6F6F6F6F6F6F6F6F6F6F6F4E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3E414141414141
+4141414B4B4B4B4B4B4B4B4B505050505050505050505050505050505050505050505050505050
+5050504D4D4D4D4D4D4D4D4D494949494949494949444444444444444444444444404040404040
+4040403F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F444444444444
+4444444E4E4E4E4E4E4E4E4E5D5D5D5D5D5D5D5D5D6F6F6F6F6F6F6F6F6F7C7C7C7C7C7C7C7C7C
+7C7C7C848484848484848484858585858585858585858585858585858585848484848484848484
+8787878787878787878787878989898989898989898F8F8F8F8F8F8F8F8F909090909090909090
+9393939393939393939393939393939393939393938E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D
+8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E575757575757575757515151515151515151
+5F605F5F605F5F605F6D6D6D6D6D6D6D6D6D7777777777777777777777777E7E7E7E7E7E7E7E7E
+A5A5A5A5A5A5A5A5A5D8D8D8D8D8D8D8D8D8EFEFEFEFEFEFEFEFEFEFEFEFF9F9F9F9F9F9F9F9F9
+FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9
+F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB
+FBFBFBFBFBFBFBFBFBF9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFB
+FBFBFBFBFBFBFBFBFBF6F6F6F6F6F6F6F6F6C1C1C1C1C1C1C1C1C1CBCBCBCBCBCBCBCBCBCBCBCB
+CBCBCBCBCBCBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBCBCB
+CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD
+CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCFCFCF
+CFCFCFCFCFCFC7C7C7C7C7C7C7C7C7BDBDBDBDBDBDBDBDBDC9C9C9C9C9C9C9C9C9C9C9C9D6D6D5
+D6D6D5D6D6D5C9C9C9C9C9C9C9C9C9B8B8B8B8B8B8B8B8B8B7B7B7B7B7B7B7B7B7B8B8B8B8B8B8
+B8B8B8B8B8B8C5C5C5C5C5C5C5C5C5CBCBCBCBCBCBCBCBCBC8C8C8C8C8C8C8C8C8C6C6C6C6C6C6
+C6C6C6C6C6C6C5C5C5C5C5C5C5C5C5BFBFBFBFBFBFBFBFBFB4B4B4B4B4B4B4B4B4B0B1B0B0B1B0
+B0B1B0B0B0B0B0B0B0B0B0B0B0B0B0A6A6A6A6A6A6A6A6A6ADADADADADADADADADB5B5B5B5B5B5
+B5B5B5ACACACACACACACACACA5A5A5A5A5A5A5A5A5A5A5A5A1A1A1A1A1A1A1A1A1A4A4A4A4A4A4
+A4A4A4979797979797979797979797979797979797979797A5A5A5A5A5A5A5A5A5A7A7A7A7A7A7
+A7A7A7A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8ABABABABABABABABABABABABADADADADADAD
+ADADADABABABABABABABABABB2B2B2B2B2B2B2B2B2AFAFAFAFAFAFAFAFAFB2B2B2B2B2B2B2B2B2
+B2B2B2B1B1B1B1B1B1B1B1B1A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5919191919191919191
+9191916C6C6C6C6C6C6C6C6C4D4D4D4D4D4D4D4D4D3C3C3C3C3C3C3C3C3C414141414141414141
+4C4C4C4C4C4C4C4C4C4C4C4C505050505050505050515151515151515151515151515151515151
+5050505050505050504E4E4E4E4E4E4E4E4E4E4E4E484848484848484848444444444444444444
+4242424242424242424545454545454545454545454F4F4F4F4F4F4F4F4F5E5E5E5E5E5E5E5E5E
+6E6E6E6E6E6E6E6E6E7878787878787878787E7E7E7E7E7E7E7E7E7E7E7E838383838383838383
+818181818181818181818181818181818181828282828282828282848484848484848484848484
+8A8A8A8A8A8A8A8A8A909090909090909090949494949494949494989898989898989898989898
+9595959595959595958F8F8F8F8F8F8F8F8F8D8D8D8D8D8D8D8D8D8F8F8F8F8F8F8F8F8F7C7C7C
+7C7C7C7C7C7C7C7C7C4E4E4E4E4E4E4E4E4E4C4C4C4C4C4C4C4C4C626262626262626262727272
+727272727272797979797979797979797979808080808080808080ADADADADADADADADADE4E4E4
+E4E4E4E4E4E4EFEFEFEFEFEFEFEFEFEFEFEFF7F7F7F7F7F7F7F7F7FAFAFAFAFAFAFAFAFAFBFBFB
+FBFBFBFBFBFBFAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
+F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF9F9F9
+F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBF4F4F4
+F4F4F4F4F4F4B2B2B2B2B2B2B2B2B2CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCC
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB
+CBCBCBCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD
+CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCFCFCFCFCFCFCFCFCFC7C7C7C7C7C7
+C7C7C7BDBDBDBDBDBDBDBDBDC9C9C9C9C9C9C9C9C9C9C9C9D6D6D5D6D6D5D6D6D5C9C9C9C9C9C9
+C9C9C9B8B8B8B8B8B8B8B8B8B7B7B7B7B7B7B7B7B7B8B8B8B8B8B8B8B8B8B8B8B8C5C5C5C5C5C5
+C5C5C5CBCBCBCBCBCBCBCBCBC8C8C8C8C8C8C8C8C8C6C6C6C6C6C6C6C6C6C6C6C6C5C5C5C5C5C5
+C5C5C5BFBFBFBFBFBFBFBFBFB4B4B4B4B4B4B4B4B4B0B1B0B0B1B0B0B1B0B0B0B0B0B0B0B0B0B0
+B0B0B0A6A6A6A6A6A6A6A6A6ADADADADADADADADADB5B5B5B5B5B5B5B5B5ACACACACACACACACAC
+A5A5A5A5A5A5A5A5A5A5A5A5A1A1A1A1A1A1A1A1A1A4A4A4A4A4A4A4A4A4979797979797979797
+979797979797979797979797A5A5A5A5A5A5A5A5A5A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8
+A8A8A8A8A8A8A8A8A8ABABABABABABABABABABABABADADADADADADADADADABABABABABABABABAB
+B2B2B2B2B2B2B2B2B2AFAFAFAFAFAFAFAFAFB2B2B2B2B2B2B2B2B2B2B2B2B1B1B1B1B1B1B1B1B1
+A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A59191919191919191919191916C6C6C6C6C6C6C6C6C
+4D4D4D4D4D4D4D4D4D3C3C3C3C3C3C3C3C3C4141414141414141414C4C4C4C4C4C4C4C4C4C4C4C
+5050505050505050505151515151515151515151515151515151515050505050505050504E4E4E
+4E4E4E4E4E4E4E4E4E484848484848484848444444444444444444424242424242424242454545
+4545454545454545454F4F4F4F4F4F4F4F4F5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E787878
+7878787878787E7E7E7E7E7E7E7E7E7E7E7E838383838383838383818181818181818181818181
+8181818181818282828282828282828484848484848484848484848A8A8A8A8A8A8A8A8A909090
+9090909090909494949494949494949898989898989898989898989595959595959595958F8F8F
+8F8F8F8F8F8F8D8D8D8D8D8D8D8D8D8F8F8F8F8F8F8F8F8F7C7C7C7C7C7C7C7C7C7C7C7C4E4E4E
+4E4E4E4E4E4E4C4C4C4C4C4C4C4C4C626262626262626262727272727272727272797979797979
+797979797979808080808080808080ADADADADADADADADADE4E4E4E4E4E4E4E4E4EFEFEFEFEFEF
+EFEFEFEFEFEFF7F7F7F7F7F7F7F7F7FAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFAFAFAFAFAFA
+FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFA
+FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
+F9F9F9FAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBF4F4F4F4F4F4F4F4F4B2B2B2B2B2B2
+B2B2B2CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+CCCCCCCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCDCDCDCDCDCDCDCDCD
+CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD
+CDCDCDCDCDCDCDCDCDCDCDCDCFCFCFCFCFCFCFCFCFC7C7C7C7C7C7C7C7C7BDBDBDBDBDBDBDBDBD
+C9C9C9C9C9C9C9C9C9C9C9C9D6D6D5D6D6D5D6D6D5C9C9C9C9C9C9C9C9C9B8B8B8B8B8B8B8B8B8
+B7B7B7B7B7B7B7B7B7B8B8B8B8B8B8B8B8B8B8B8B8C5C5C5C5C5C5C5C5C5CBCBCBCBCBCBCBCBCB
+C8C8C8C8C8C8C8C8C8C6C6C6C6C6C6C6C6C6C6C6C6C5C5C5C5C5C5C5C5C5BFBFBFBFBFBFBFBFBF
+B4B4B4B4B4B4B4B4B4B0B1B0B0B1B0B0B1B0B0B0B0B0B0B0B0B0B0B0B0B0A6A6A6A6A6A6A6A6A6
+ADADADADADADADADADB5B5B5B5B5B5B5B5B5ACACACACACACACACACA5A5A5A5A5A5A5A5A5A5A5A5
+A1A1A1A1A1A1A1A1A1A4A4A4A4A4A4A4A4A4979797979797979797979797979797979797979797
+A5A5A5A5A5A5A5A5A5A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8ABABAB
+ABABABABABABABABABADADADADADADADADADABABABABABABABABABB2B2B2B2B2B2B2B2B2AFAFAF
+AFAFAFAFAFAFB2B2B2B2B2B2B2B2B2B2B2B2B1B1B1B1B1B1B1B1B1A4A4A4A4A4A4A4A4A4A5A5A5
+A5A5A5A5A5A59191919191919191919191916C6C6C6C6C6C6C6C6C4D4D4D4D4D4D4D4D4D3C3C3C
+3C3C3C3C3C3C4141414141414141414C4C4C4C4C4C4C4C4C4C4C4C505050505050505050515151
+5151515151515151515151515151515050505050505050504E4E4E4E4E4E4E4E4E4E4E4E484848
+4848484848484444444444444444444242424242424242424545454545454545454545454F4F4F
+4F4F4F4F4F4F5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E7878787878787878787E7E7E7E7E7E
+7E7E7E7E7E7E838383838383838383818181818181818181818181818181818181828282828282
+8282828484848484848484848484848A8A8A8A8A8A8A8A8A909090909090909090949494949494
+9494949898989898989898989898989595959595959595958F8F8F8F8F8F8F8F8F8D8D8D8D8D8D
+8D8D8D8F8F8F8F8F8F8F8F8F7C7C7C7C7C7C7C7C7C7C7C7C4E4E4E4E4E4E4E4E4E4C4C4C4C4C4C
+4C4C4C626262626262626262727272727272727272797979797979797979797979808080808080
+808080ADADADADADADADADADE4E4E4E4E4E4E4E4E4EFEFEFEFEFEFEFEFEFEFEFEFF7F7F7F7F7F7
+F7F7F7FAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9
+F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA
+FAFAFAFAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFA
+FBFBFBFBFBFBFBFBFBFBFBFBF4F4F4F4F4F4F4F4F4B2B2B2B2B2B2B2B2B2CCCCCCCCCCCCCCCCCC
+CACACACACACACACACACBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCB
+CBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCBCBCBD0D0D0D0D0D0D0D0D0
+CFCFCFCFCFCFCFCFCFAEAEAEAEAEAEAEAEAE9D9D9D9D9D9D9D9D9DBABABABABABABABABABABABA
+CDCDCDCDCDCDCDCDCDC7C7C7C7C7C7C7C7C7BCBCBCBCBCBCBCBCBCA0A0A0A0A0A0A0A0A07C7C7C
+7C7C7C7C7C7C7C7C7C9E9E9E9E9E9E9E9E9ECDCDCDCDCDCDCDCDCDD5D5D5D5D5D5D5D5D5D2D2D2
+D2D2D2D2D2D2D2D2D2C6C6C6C6C6C6C6C6C6C0C0C0C0C0C0C0C0C0BFBFBFBFBFBFBFBFBFBABABA
+BABABABABABAA9A9A9A9A9A9A9A9A9A9A9A9A2A2A2A2A2A2A2A2A2ACACACACACACACACACA8A8A8
+A8A8A8A8A8A8A3A3A3A3A3A3A3A3A3AFAFAFAFAFAFAFAFAFAFAFAFB3B3B3B3B3B3B3B3B3ADADAD
+ADADADADADAD9797979797979797978888888888888888888888888F8F8F8F8F8F8F8F8FA0A0A0
+A0A0A0A0A0A09E9E9E9E9E9E9E9E9EA4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A5A5A5A8A8A8
+A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A9A9A9A9A9A9A9A9A9AFAFAFAFAFAFAFAFAFAAAAAAAAAAAA
+AAAAAAAAAAAAB0B0B0B0B0B0B0B0B0ABABABABABABABABABA5A5A5A5A5A5A5A5A5A8A8A8A8A8A8
+A8A8A8A8A8A88E8E8E8E8E8E8E8E8E6D6D6D6D6D6D6D6D6D5151515151515151513B3B3B3B3B3B
+3B3B3B4040404040404040404040404C4C4C4C4C4C4C4C4C515151515151515151525252525252
+5252525252525252525252525252525252525252525252525050505050505050504E4E4E4E4E4E
+4E4E4E4D4D4D4D4D4D4D4D4D5555555555555555555555555F605F5F605F5F605F6E6E6E6E6E6E
+6E6E6E7A7A7A7A7A7A7A7A7A7D7D7D7D7D7D7D7D7D7E7E7E7E7E7E7E7E7E7E7E7E7F7F7F7F7F7F
+7F7F7F7C7C7C7C7C7C7C7C7C7E7E7E7E7E7E7E7E7E808080808080808080828282828282828282
+8282828C8C8C8C8C8C8C8C8C949494949494949494989898989898989898949494949494949494
+9494948F8F8F8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F909090909090909090
+7C7C7C7C7C7C7C7C7C7C7C7C4C4C4C4C4C4C4C4C4C484848484848484848636363636363636363
+757575757575757575797979797979797979797979888888888888888888B3B3B3B3B3B3B3B3B3
+ECECECECECECECECECF2F2F2F2F2F2F2F2F2F2F2F2F5F5F5F5F5F5F5F5F5F9F9F9F9F9F9F9F9F9
+F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
+F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9
+F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
+F4F4F4F4F4F4F4F4F4BFBFBFBFBFBFBFBFBFCCCCCCCCCCCCCCCCCCCACACACACACACACACACBCBCB
+CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCCCCCCCCCC
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCC
+CCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCBCBCBD0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFAEAEAE
+AEAEAEAEAEAE9D9D9D9D9D9D9D9D9DBABABABABABABABABABABABACDCDCDCDCDCDCDCDCDC7C7C7
+C7C7C7C7C7C7BCBCBCBCBCBCBCBCBCA0A0A0A0A0A0A0A0A07C7C7C7C7C7C7C7C7C7C7C7C9E9E9E
+9E9E9E9E9E9ECDCDCDCDCDCDCDCDCDD5D5D5D5D5D5D5D5D5D2D2D2D2D2D2D2D2D2D2D2D2C6C6C6
+C6C6C6C6C6C6C0C0C0C0C0C0C0C0C0BFBFBFBFBFBFBFBFBFBABABABABABABABABAA9A9A9A9A9A9
+A9A9A9A9A9A9A2A2A2A2A2A2A2A2A2ACACACACACACACACACA8A8A8A8A8A8A8A8A8A3A3A3A3A3A3
+A3A3A3AFAFAFAFAFAFAFAFAFAFAFAFB3B3B3B3B3B3B3B3B3ADADADADADADADADAD979797979797
+9797978888888888888888888888888F8F8F8F8F8F8F8F8FA0A0A0A0A0A0A0A0A09E9E9E9E9E9E
+9E9E9EA4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A5A5A5A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8
+A8A8A8A9A9A9A9A9A9A9A9A9AFAFAFAFAFAFAFAFAFAAAAAAAAAAAAAAAAAAAAAAAAB0B0B0B0B0B0
+B0B0B0ABABABABABABABABABA5A5A5A5A5A5A5A5A5A8A8A8A8A8A8A8A8A8A8A8A88E8E8E8E8E8E
+8E8E8E6D6D6D6D6D6D6D6D6D5151515151515151513B3B3B3B3B3B3B3B3B404040404040404040
+4040404C4C4C4C4C4C4C4C4C515151515151515151525252525252525252525252525252525252
+5252525252525252525252525050505050505050504E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D
+5555555555555555555555555F605F5F605F5F605F6E6E6E6E6E6E6E6E6E7A7A7A7A7A7A7A7A7A
+7D7D7D7D7D7D7D7D7D7E7E7E7E7E7E7E7E7E7E7E7E7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C
+7E7E7E7E7E7E7E7E7E8080808080808080808282828282828282828282828C8C8C8C8C8C8C8C8C
+9494949494949494949898989898989898989494949494949494949494948F8F8F8F8F8F8F8F8F
+8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F9090909090909090907C7C7C7C7C7C7C7C7C7C7C7C
+4C4C4C4C4C4C4C4C4C484848484848484848636363636363636363757575757575757575797979
+797979797979797979888888888888888888B3B3B3B3B3B3B3B3B3ECECECECECECECECECF2F2F2
+F2F2F2F2F2F2F2F2F2F5F5F5F5F5F5F5F5F5F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA
+FAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
+F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
+F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F4F4F4F4F4F4F4F4F4BFBFBF
+BFBFBFBFBFBFCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCCCCCCCCCCCBCBCB
+CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBCBCBCBCBCB
+CBCBCBCBCBCBCACACACACACACACACAC6C6C6C6C6C6C6C6C6C5C5C5C5C5C5C5C5C5C2C2C2C2C2C2
+C2C2C2C2C2C2D0D0D0D0D0D0D0D0D0CBCBCBCBCBCBCBCBCBA1A1A1A1A1A1A1A1A1A6A6A6A6A6A6
+A6A6A6C3C3C3C3C3C3C3C3C3C3C3C3C8C8C8C8C8C8C8C8C8C7C7C7C7C7C7C7C7C7BBBBBBBBBBBB
+BBBBBB9494949494949494945D5D5D5D5D5D5D5D5D5D5D5D838383838383838383CCCCCCCCCCCC
+CCCCCCDFDFDFDFDFDFDFDFDFD6D6D5D6D6D5D6D6D5D6D6D5C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8
+C8C8C8CACACACACACACACACAB9B9B9B9B9B9B9B9B9A4A4A4A4A4A4A4A4A4A4A4A4A9A9A9A9A9A9
+A9A9A9B0B1B0B0B1B0B0B1B0A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8B5B5B5B5B5B5B5B5B5
+B5B5B5B4B4B4B4B4B4B4B4B4A6A6A6A6A6A6A6A6A69A9A9A9A9A9A9A9A9A969696969696969696
+9696968D8D8D8D8D8D8D8D8D9191919191919191919999999999999999999B9B9B9B9B9B9B9B9B
+A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A5A5A5A5A5A5A5A5A5A8A8A8A8A8A8A8A8A8
+A7A7A7A7A7A7A7A7A7AAAAAAAAAAAAAAAAAAAAAAAAA9A9A9A9A9A9A9A9A9AEAEAEAEAEAEAEAEAE
+A8A8A8A8A8A8A8A8A8ADADADADADADADADADADADADA9A9A9A9A9A9A9A9A9888888888888888888
+6969696969696969694444444444444444443535353535353535353535353E3E3E3E3E3E3E3E3E
+4949494949494949494F4F4F4F4F4F4F4F4F545454545454545454545454545454545454545454
+5555555555555555555757575757575757575B5B5B5B5B5B5B5B5B666666666666666666666666
+707070707070707070797979797979797979808080808080808080808080808080808080808080
+8080808080808080807E7E7E7E7E7E7E7E7E7D7D7D7D7D7D7D7D7D808080808080808080818181
+8181818181818383838383838383838383839090909090909090909999999999999999999C9C9C
+9C9C9C9C9C9C9393939393939393939393938E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F919191
+9191919191919191919191919191917E7E7E7E7E7E7E7E7E7E7E7E4D4D4D4D4D4D4D4D4D474747
+4747474747476565656565656565657979797979797979797E7E7E7E7E7E7E7E7E7E7E7E969696
+969696969696BABABABABABABABABAEBEBEBEBEBEBEBEBEBF5F5F5F5F5F5F5F5F5F5F5F5F1F1F1
+F1F1F1F1F1F1F7F7F7F7F7F7F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
+F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
+F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
+F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F5F5F5F5F5F5F5F5F5CECECECECECECECECECBCBCBCBCBCB
+CBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB
+CBCBCBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCBCBCBCACACACACACA
+CACACAC6C6C6C6C6C6C6C6C6C5C5C5C5C5C5C5C5C5C2C2C2C2C2C2C2C2C2C2C2C2D0D0D0D0D0D0
+D0D0D0CBCBCBCBCBCBCBCBCBA1A1A1A1A1A1A1A1A1A6A6A6A6A6A6A6A6A6C3C3C3C3C3C3C3C3C3
+C3C3C3C8C8C8C8C8C8C8C8C8C7C7C7C7C7C7C7C7C7BBBBBBBBBBBBBBBBBB949494949494949494
+5D5D5D5D5D5D5D5D5D5D5D5D838383838383838383CCCCCCCCCCCCCCCCCCDFDFDFDFDFDFDFDFDF
+D6D6D5D6D6D5D6D6D5D6D6D5C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8CACACACACACACACACA
+B9B9B9B9B9B9B9B9B9A4A4A4A4A4A4A4A4A4A4A4A4A9A9A9A9A9A9A9A9A9B0B1B0B0B1B0B0B1B0
+A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8B5B5B5B5B5B5B5B5B5B5B5B5B4B4B4B4B4B4B4B4B4
+A6A6A6A6A6A6A6A6A69A9A9A9A9A9A9A9A9A9696969696969696969696968D8D8D8D8D8D8D8D8D
+9191919191919191919999999999999999999B9B9B9B9B9B9B9B9BA0A0A0A0A0A0A0A0A0A0A0A0
+A0A0A0A0A0A0A0A0A0A5A5A5A5A5A5A5A5A5A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7AAAAAA
+AAAAAAAAAAAAAAAAAAA9A9A9A9A9A9A9A9A9AEAEAEAEAEAEAEAEAEA8A8A8A8A8A8A8A8A8ADADAD
+ADADADADADADADADADA9A9A9A9A9A9A9A9A9888888888888888888696969696969696969444444
+4444444444443535353535353535353535353E3E3E3E3E3E3E3E3E4949494949494949494F4F4F
+4F4F4F4F4F4F545454545454545454545454545454545454545454555555555555555555575757
+5757575757575B5B5B5B5B5B5B5B5B666666666666666666666666707070707070707070797979
+7979797979798080808080808080808080808080808080808080808080808080808080807E7E7E
+7E7E7E7E7E7E7D7D7D7D7D7D7D7D7D808080808080808080818181818181818181838383838383
+8383838383839090909090909090909999999999999999999C9C9C9C9C9C9C9C9C939393939393
+9393939393938E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F919191919191919191919191919191
+9191917E7E7E7E7E7E7E7E7E7E7E7E4D4D4D4D4D4D4D4D4D474747474747474747656565656565
+6565657979797979797979797E7E7E7E7E7E7E7E7E7E7E7E969696969696969696BABABABABABA
+BABABAEBEBEBEBEBEBEBEBEBF5F5F5F5F5F5F5F5F5F5F5F5F1F1F1F1F1F1F1F1F1F7F7F7F7F7F7
+F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8
+F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
+F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8
+F8F8F8F5F5F5F5F5F5F5F5F5CECECECECECECECECECBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB
+CCCCCCCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCCCC
+CCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCBCBCBCACACACACACACACACAC6C6C6C6C6C6C6C6C6
+C5C5C5C5C5C5C5C5C5C2C2C2C2C2C2C2C2C2C2C2C2D0D0D0D0D0D0D0D0D0CBCBCBCBCBCBCBCBCB
+A1A1A1A1A1A1A1A1A1A6A6A6A6A6A6A6A6A6C3C3C3C3C3C3C3C3C3C3C3C3C8C8C8C8C8C8C8C8C8
+C7C7C7C7C7C7C7C7C7BBBBBBBBBBBBBBBBBB9494949494949494945D5D5D5D5D5D5D5D5D5D5D5D
+838383838383838383CCCCCCCCCCCCCCCCCCDFDFDFDFDFDFDFDFDFD6D6D5D6D6D5D6D6D5D6D6D5
+C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8CACACACACACACACACAB9B9B9B9B9B9B9B9B9A4A4A4
+A4A4A4A4A4A4A4A4A4A9A9A9A9A9A9A9A9A9B0B1B0B0B1B0B0B1B0A8A8A8A8A8A8A8A8A8A8A8A8
+A8A8A8A8A8A8B5B5B5B5B5B5B5B5B5B5B5B5B4B4B4B4B4B4B4B4B4A6A6A6A6A6A6A6A6A69A9A9A
+9A9A9A9A9A9A9696969696969696969696968D8D8D8D8D8D8D8D8D919191919191919191999999
+9999999999999B9B9B9B9B9B9B9B9BA0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A5A5A5
+A5A5A5A5A5A5A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7AAAAAAAAAAAAAAAAAAAAAAAAA9A9A9
+A9A9A9A9A9A9AEAEAEAEAEAEAEAEAEA8A8A8A8A8A8A8A8A8ADADADADADADADADADADADADA9A9A9
+A9A9A9A9A9A9888888888888888888696969696969696969444444444444444444353535353535
+3535353535353E3E3E3E3E3E3E3E3E4949494949494949494F4F4F4F4F4F4F4F4F545454545454
+5454545454545454545454545454545555555555555555555757575757575757575B5B5B5B5B5B
+5B5B5B666666666666666666666666707070707070707070797979797979797979808080808080
+8080808080808080808080808080808080808080808080807E7E7E7E7E7E7E7E7E7D7D7D7D7D7D
+7D7D7D808080808080808080818181818181818181838383838383838383838383909090909090
+9090909999999999999999999C9C9C9C9C9C9C9C9C9393939393939393939393938E8E8E8E8E8E
+8E8E8E8F8F8F8F8F8F8F8F8F9191919191919191919191919191919191917E7E7E7E7E7E7E7E7E
+7E7E7E4D4D4D4D4D4D4D4D4D474747474747474747656565656565656565797979797979797979
+7E7E7E7E7E7E7E7E7E7E7E7E969696969696969696BABABABABABABABABAEBEBEBEBEBEBEBEBEB
+F5F5F5F5F5F5F5F5F5F5F5F5F1F1F1F1F1F1F1F1F1F7F7F7F7F7F7F7F7F7F9F9F9F9F9F9F9F9F9
+F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8
+F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
+F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F5F5F5F5F5F5F5F5F5
+CECECECECECECECECECBCBCBCBCBCBCBCBCBCACACACACACACACACACBCBCBCBCBCBCBCBCBCBCBCB
+CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCBCBCB
+CBCBCBCBCBCBCBCBCBC5C5C5C5C5C5C5C5C5B6B6B6B6B6B6B6B6B6AEAEAEAEAEAEAEAEAEBCBCBC
+BCBCBCBCBCBCBCBCBCD6D6D6D6D6D6D6D6D6D8D8D8D8D8D8D8D8D8C3C3C3C3C3C3C3C3C3B7B7B7
+B7B7B7B7B7B7B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0CDCDCDCDCDCDCDCDCDC9C9C9
+C9C9C9C9C9C9979797979797979797676767676767676767676767919191919191919191CACACA
+CACACACACACADFDFDFDFDFDFDFDFDFDCDCDCDCDCDCDCDCDCDCDCDCD3D3D3D3D3D3D3D3D3C5C5C5
+C5C5C5C5C5C5BEBEBEBEBEBEBEBEBEAFAFAFAFAFAFAFAFAFA3A3A3A3A3A3A3A3A3A3A3A3ABABAB
+ABABABABABABACACACACACACACACACA7A7A7A7A7A7A7A7A7B0B0B0B0B0B0B0B0B0B4B4B4B4B4B4
+B4B4B4B4B4B4ADADADADADADADADADA8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A1A1A1A1A1A1
+A1A1A1A1A1A1999999999999999999888888888888888888878787878787878787949494949494
+9494949696969696969696969696969999999999999999999B9B9B9B9B9B9B9B9BA3A3A3A3A3A3
+A3A3A3A5A5A5A5A5A5A5A5A5A8A8A8A8A8A8A8A8A8A8A8A8ACACACACACACACACACABABABABABAB
+ABABABAFAFAFAFAFAFAFAFAFABABABABABABABABABABABABB2B2B2B2B2B2B2B2B29A9A9A9A9A9A
+9A9A9A686868686868686868424242424242424242313131313131313131313131313131313131
+3131313B3B3B3B3B3B3B3B3B474747474747474747525252525252525252565656565656565656
+5656565858585858585858585D5D5D5D5D5D5D5D5D6464646464646464646E6E6E6E6E6E6E6E6E
+6E6E6E7777777777777777777E7E7E7E7E7E7E7E7E8282828282828282827F7F7F7F7F7F7F7F7F
+7E7E7E7E7E7E7E7E7E7E7E7E7B7B7B7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A818181818181818181
+8484848484848484848787878787878787878787879292929292929292929C9C9C9C9C9C9C9C9C
+9E9E9E9E9E9E9E9E9E999999999999999999999999939393939393939393919191919191919191
+9393939393939393939393939393939393938080808080808080808080804F4F4F4F4F4F4F4F4F
+4646464646464646466666666666666666667A7A7A7A7A7A7A7A7A868686868686868686868686
+A3A3A3A3A3A3A3A3A3C6C6C6C6C6C6C6C6C6E7E7E7E7E7E7E7E7E7F3F3F3F3F3F3F3F3F3F3F3F3
+E4E4E4E4E4E4E4E4E4EDEDEDEDEDEDEDEDEDF7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8
+F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F9F9F9
+F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F8F8F8
+F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F4F4F4F4F4F4F4F4F4C8C8C8C8C8C8C8C8C8CBCBCB
+CBCBCBCBCBCBCACACACACACACACACACBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB
+CBCBCBCBCBCBCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC5C5C5
+C5C5C5C5C5C5B6B6B6B6B6B6B6B6B6AEAEAEAEAEAEAEAEAEBCBCBCBCBCBCBCBCBCBCBCBCD6D6D6
+D6D6D6D6D6D6D8D8D8D8D8D8D8D8D8C3C3C3C3C3C3C3C3C3B7B7B7B7B7B7B7B7B7B0B0B0B0B0B0
+B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0CDCDCDCDCDCDCDCDCDC9C9C9C9C9C9C9C9C9979797979797
+979797676767676767676767676767919191919191919191CACACACACACACACACADFDFDFDFDFDF
+DFDFDFDCDCDCDCDCDCDCDCDCDCDCDCD3D3D3D3D3D3D3D3D3C5C5C5C5C5C5C5C5C5BEBEBEBEBEBE
+BEBEBEAFAFAFAFAFAFAFAFAFA3A3A3A3A3A3A3A3A3A3A3A3ABABABABABABABABABACACACACACAC
+ACACACA7A7A7A7A7A7A7A7A7B0B0B0B0B0B0B0B0B0B4B4B4B4B4B4B4B4B4B4B4B4ADADADADADAD
+ADADADA8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A1A1A1A1A1A1A1A1A1A1A1A1999999999999
+999999888888888888888888878787878787878787949494949494949494969696969696969696
+9696969999999999999999999B9B9B9B9B9B9B9B9BA3A3A3A3A3A3A3A3A3A5A5A5A5A5A5A5A5A5
+A8A8A8A8A8A8A8A8A8A8A8A8ACACACACACACACACACABABABABABABABABABAFAFAFAFAFAFAFAFAF
+ABABABABABABABABABABABABB2B2B2B2B2B2B2B2B29A9A9A9A9A9A9A9A9A686868686868686868
+4242424242424242423131313131313131313131313131313131313131313B3B3B3B3B3B3B3B3B
+474747474747474747525252525252525252565656565656565656565656585858585858585858
+5D5D5D5D5D5D5D5D5D6464646464646464646E6E6E6E6E6E6E6E6E6E6E6E777777777777777777
+7E7E7E7E7E7E7E7E7E8282828282828282827F7F7F7F7F7F7F7F7F7E7E7E7E7E7E7E7E7E7E7E7E
+7B7B7B7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A818181818181818181848484848484848484878787
+8787878787878787879292929292929292929C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E999999
+999999999999999999939393939393939393919191919191919191939393939393939393939393
+9393939393938080808080808080808080804F4F4F4F4F4F4F4F4F464646464646464646666666
+6666666666667A7A7A7A7A7A7A7A7A868686868686868686868686A3A3A3A3A3A3A3A3A3C6C6C6
+C6C6C6C6C6C6E7E7E7E7E7E7E7E7E7F3F3F3F3F3F3F3F3F3F3F3F3E4E4E4E4E4E4E4E4E4EDEDED
+EDEDEDEDEDEDF7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7
+F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
+F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7
+F7F7F7F7F7F7F4F4F4F4F4F4F4F4F4C8C8C8C8C8C8C8C8C8CBCBCBCBCBCBCBCBCBCACACACACACA
+CACACACBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCC
+CCCCCCCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC5C5C5C5C5C5C5C5C5B6B6B6B6B6B6
+B6B6B6AEAEAEAEAEAEAEAEAEBCBCBCBCBCBCBCBCBCBCBCBCD6D6D6D6D6D6D6D6D6D8D8D8D8D8D8
+D8D8D8C3C3C3C3C3C3C3C3C3B7B7B7B7B7B7B7B7B7B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0
+C0C0C0CDCDCDCDCDCDCDCDCDC9C9C9C9C9C9C9C9C9979797979797979797676767676767676767
+676767919191919191919191CACACACACACACACACADFDFDFDFDFDFDFDFDFDCDCDCDCDCDCDCDCDC
+DCDCDCD3D3D3D3D3D3D3D3D3C5C5C5C5C5C5C5C5C5BEBEBEBEBEBEBEBEBEAFAFAFAFAFAFAFAFAF
+A3A3A3A3A3A3A3A3A3A3A3A3ABABABABABABABABABACACACACACACACACACA7A7A7A7A7A7A7A7A7
+B0B0B0B0B0B0B0B0B0B4B4B4B4B4B4B4B4B4B4B4B4ADADADADADADADADADA8A8A8A8A8A8A8A8A8
+A7A7A7A7A7A7A7A7A7A1A1A1A1A1A1A1A1A1A1A1A1999999999999999999888888888888888888
+878787878787878787949494949494949494969696969696969696969696999999999999999999
+9B9B9B9B9B9B9B9B9BA3A3A3A3A3A3A3A3A3A5A5A5A5A5A5A5A5A5A8A8A8A8A8A8A8A8A8A8A8A8
+ACACACACACACACACACABABABABABABABABABAFAFAFAFAFAFAFAFAFABABABABABABABABABABABAB
+B2B2B2B2B2B2B2B2B29A9A9A9A9A9A9A9A9A686868686868686868424242424242424242313131
+3131313131313131313131313131313131313B3B3B3B3B3B3B3B3B474747474747474747525252
+5252525252525656565656565656565656565858585858585858585D5D5D5D5D5D5D5D5D646464
+6464646464646E6E6E6E6E6E6E6E6E6E6E6E7777777777777777777E7E7E7E7E7E7E7E7E828282
+8282828282827F7F7F7F7F7F7F7F7F7E7E7E7E7E7E7E7E7E7E7E7E7B7B7B7B7B7B7B7B7B7A7A7A
+7A7A7A7A7A7A818181818181818181848484848484848484878787878787878787878787929292
+9292929292929C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E999999999999999999999999939393
+939393939393919191919191919191939393939393939393939393939393939393808080808080
+8080808080804F4F4F4F4F4F4F4F4F4646464646464646466666666666666666667A7A7A7A7A7A
+7A7A7A868686868686868686868686A3A3A3A3A3A3A3A3A3C6C6C6C6C6C6C6C6C6E7E7E7E7E7E7
+E7E7E7F3F3F3F3F3F3F3F3F3F3F3F3E4E4E4E4E4E4E4E4E4EDEDEDEDEDEDEDEDEDF7F7F7F7F7F7
+F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7
+F7F7F7F7F7F7F7F7F7F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8
+F8F8F8F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F4F4F4F4F4F4
+F4F4F4C8C8C8C8C8C8C8C8C8CACACACACACACACACACACACACACACACACACACACACACACACACACACA
+CACACACBCBCBCBCBCBCBCBCBCDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCB
+CECECECECECECECECECECECEC2C2C2C2C2C2C2C2C2A6A6A6A6A6A6A6A6A69C9C9C9C9C9C9C9C9C
+BBBBBBBBBBBBBBBBBBBBBBBBDBDBDBDBDBDBDBDBDBE4E4E4E4E4E4E4E4E4DADADADADADADADADA
+A9A9A9A9A9A9A9A9A9848484848484848484848484B0B1B0B0B1B0B0B1B0DEDEDEDEDEDEDEDEDE
+E1E1E1E1E1E1E1E1E1B3B3B3B3B3B3B3B3B3828282828282828282828282A8A8A8A8A8A8A8A8A8
+C7C7C7C7C7C7C7C7C7CDCDCDCDCDCDCDCDCDD1D1D1D1D1D1D1D1D1D1D1D1CCCCCCCCCCCCCCCCCC
+B7B7B7B7B7B7B7B7B7B1B1B1B1B1B1B1B1B1B4B4B4B4B4B4B4B4B4B0B1B0B0B1B0B0B1B0B0B1B0
+B0B0B0B0B0B0B0B0B0A7A7A7A7A7A7A7A7A79E9E9E9E9E9E9E9E9EA7A7A7A7A7A7A7A7A7A8A8A8
+A8A8A8A8A8A8A8A8A8A5A5A5A5A5A5A5A5A5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0A0A0
+A0A0A0A0A0A0A0A0A09292929292929292928383838383838383837C7C7C7C7C7C7C7C7C858585
+858585858585919191919191919191919191909090909090909090929292929292929292989898
+989898989898A2A2A2A2A2A2A2A2A2A7A7A7A7A7A7A7A7A7A7A7A7ABABABABABABABABABADADAD
+ADADADADADADAFAFAFAFAFAFAFAFAFB0B1B0B0B1B0B0B1B0B0B1B0ADADADADADADADADAD9B9B9B
+9B9B9B9B9B9B5A5A5A5A5A5A5A5A5A3C3C3C3C3C3C3C3C3C373737373737373737373737363636
+3636363636363636363636363636363C3C3C3C3C3C3C3C3C4C4C4C4C4C4C4C4C4C585858585858
+5858585858586161616161616161616565656565656565656868686868686868686F6F6F6F6F6F
+6F6F6F6F6F6F7878787878787878787E7E7E7E7E7E7E7E7E8080808080808080807B7B7B7B7B7B
+7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7979797979797979797A7A7A7A7A7A7A7A7A838383838383
+8383838888888888888888889090909090909090909090909898989898989898989C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B999999999999999999939393939393
+9393939696969696969696969595959595959595958080808080808080808080804E4E4E4E4E4E
+4E4E4E424242424242424242666666666666666666828282828282828282949494949494949494
+949494AAAAAAAAAAAAAAAAAACACACACACACACACACADADADADADADADADADAEDEDEDEDEDEDEDEDED
+EDEDEDDBDBDBDBDBDBDBDBDBD3D3D3D3D3D3D3D3D3EAEAEAEAEAEAEAEAEAF5F5F5F5F5F5F5F5F5
+F6F6F6F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6
+F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7
+F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F3F3F3F3F3F3F3F3F3BBBBBBBBBBBBBBBBBB
+CACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACBCBCBCBCBCBCBCBCB
+CDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCECECECECECECECECECECECE
+C2C2C2C2C2C2C2C2C2A6A6A6A6A6A6A6A6A69C9C9C9C9C9C9C9C9CBBBBBBBBBBBBBBBBBBBBBBBB
+DBDBDBDBDBDBDBDBDBE4E4E4E4E4E4E4E4E4DADADADADADADADADAA9A9A9A9A9A9A9A9A9848484
+848484848484848484B0B1B0B0B1B0B0B1B0DEDEDEDEDEDEDEDEDEE1E1E1E1E1E1E1E1E1B3B3B3
+B3B3B3B3B3B3828282828282828282828282A8A8A8A8A8A8A8A8A8C7C7C7C7C7C7C7C7C7CDCDCD
+CDCDCDCDCDCDD1D1D1D1D1D1D1D1D1D1D1D1CCCCCCCCCCCCCCCCCCB7B7B7B7B7B7B7B7B7B1B1B1
+B1B1B1B1B1B1B4B4B4B4B4B4B4B4B4B0B1B0B0B1B0B0B1B0B0B1B0B0B0B0B0B0B0B0B0B0A7A7A7
+A7A7A7A7A7A79E9E9E9E9E9E9E9E9EA7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8A8A8A8A5A5A5
+A5A5A5A5A5A5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0A0A0A0A0A0A0A0A0A0A0A0929292
+9292929292928383838383838383837C7C7C7C7C7C7C7C7C858585858585858585919191919191
+919191919191909090909090909090929292929292929292989898989898989898A2A2A2A2A2A2
+A2A2A2A7A7A7A7A7A7A7A7A7A7A7A7ABABABABABABABABABADADADADADADADADADAFAFAFAFAFAF
+AFAFAFB0B1B0B0B1B0B0B1B0B0B1B0ADADADADADADADADAD9B9B9B9B9B9B9B9B9B5A5A5A5A5A5A
+5A5A5A3C3C3C3C3C3C3C3C3C373737373737373737373737363636363636363636363636363636
+3636363C3C3C3C3C3C3C3C3C4C4C4C4C4C4C4C4C4C585858585858585858585858616161616161
+6161616565656565656565656868686868686868686F6F6F6F6F6F6F6F6F6F6F6F787878787878
+7878787E7E7E7E7E7E7E7E7E8080808080808080807B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B
+7B7B7B7979797979797979797A7A7A7A7A7A7A7A7A838383838383838383888888888888888888
+9090909090909090909090909898989898989898989C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9B9B9B9B9B9B9B9B9B9B9B9B999999999999999999939393939393939393969696969696969696
+9595959595959595958080808080808080808080804E4E4E4E4E4E4E4E4E424242424242424242
+666666666666666666828282828282828282949494949494949494949494AAAAAAAAAAAAAAAAAA
+CACACACACACACACACADADADADADADADADADAEDEDEDEDEDEDEDEDEDEDEDEDDBDBDBDBDBDBDBDBDB
+D3D3D3D3D3D3D3D3D3EAEAEAEAEAEAEAEAEAF5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6
+F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F8F8F8F8F8F8F8F8F8F8F8F8
+F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8
+F8F8F8F8F8F8F8F8F8F3F3F3F3F3F3F3F3F3BBBBBBBBBBBBBBBBBBC9C9C9C9C9C9C9C9C9CACACA
+CACACACACACACACACACACACACACACACACACACBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCFCFCF
+CFCFCFCFCFCFD6D6D5D6D6D5D6D6D5D6D6D6D6D6D6D6D6D6D6D6D6CBCBCBCBCBCBCBCBCBB5B5B5
+B5B5B5B5B5B5AFAFAFAFAFAFAFAFAFC3C3C3C3C3C3C3C3C3C3C3C3D7D7D7D7D7D7D7D7D7E1E1E1
+E1E1E1E1E1E1D3D3D3D3D3D3D3D3D39B9B9B9B9B9B9B9B9B717171717171717171717171A6A6A6
+A6A6A6A6A6A6DEDEDEDEDEDEDEDEDEEAEAEAEAEAEAEAEAEADDDDDDDDDDDDDDDDDDBABABABABABA
+BABABABABABAC5C5C5C5C5C5C5C5C5D6D6D5D6D6D5D6D6D5CBCBCBCBCBCBCBCBCBB7B7B7B7B7B7
+B7B7B7B7B7B7B1B1B1B1B1B1B1B1B1B5B5B5B5B5B5B5B5B5BBBBBBBBBBBBBBBBBBC4C4C4C4C4C4
+C4C4C4C7C7C7C7C7C7C7C7C7C7C7C7BDBDBDBDBDBDBDBDBDAAAAAAAAAAAAAAAAAAA6A6A6A6A6A6
+A6A6A6A1A1A1A1A1A1A1A1A19C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9CA8A8A8A8A8A8
+A8A8A8A7A7A7A7A7A7A7A7A79797979797979797979797978D8D8D8D8D8D8D8D8D888888888888
+8888888888888888888888887C7C7C7C7C7C7C7C7C8080808080808080808080808C8C8C8C8C8C
+8C8C8C919191919191919191929292929292929292999999999999999999A5A5A5A5A5A5A5A5A5
+A5A5A5A8A8A8A8A8A8A8A8A8ADADADADADADADADADAFAFAFAFAFAFAFAFAFB2B2B2B2B2B2B2B2B2
+B2B2B2A8A8A8A8A8A8A8A8A88484848484848484844B4B4B4B4B4B4B4B4B3C3C3C3C3C3C3C3C3C
+4646464646464646464646465757575757575757575252525252525252524B4B4B4B4B4B4B4B4B
+4F4F4F4F4F4F4F4F4F5959595959595959595959596565656565656565656A6A6A6A6A6A6A6A6A
+6A6A6A6A6A6A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6C737373737373737373797979797979797979
+7B7B7B7B7B7B7B7B7B787878787878787878787878787878787878787878787878787878787878
+7D7D7D7D7D7D7D7D7D8686868686868686868E8E8E8E8E8E8E8E8E979797979797979797979797
+9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A9D9D9D9D9D9D9D9D9D9D9D9D
+9A9A9A9A9A9A9A9A9A9696969696969696969999999999999999999696969696969696967D7D7D
+7D7D7D7D7D7D7D7D7D4B4B4B4B4B4B4B4B4B464646464646464646707070707070707070949494
+949494949494A5A5A5A5A5A5A5A5A5A5A5A5A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A6A6A6
+A6A6A6A6A6A6D0D0D0D0D0D0D0D0D0D0D0D0C6C6C6C6C6C6C6C6C6A8A8A8A8A8A8A8A8A8CBCBCB
+CBCBCBCBCBCBE8E8E8E8E8E8E8E8E8F1F1F1F1F1F1F1F1F1F1F1F1F3F3F3F3F3F3F3F3F3F4F4F4
+F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5
+F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F3F3F3
+F3F3F3F3F3F3C5C5C5C5C5C5C5C5C5C9C9C9C9C9C9C9C9C9CACACACACACACACACACACACACACACA
+CACACACACACACBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCFCFCFCFCFCFCFCFCFD6D6D5D6D6D5
+D6D6D5D6D6D6D6D6D6D6D6D6D6D6D6CBCBCBCBCBCBCBCBCBB5B5B5B5B5B5B5B5B5AFAFAFAFAFAF
+AFAFAFC3C3C3C3C3C3C3C3C3C3C3C3D7D7D7D7D7D7D7D7D7E1E1E1E1E1E1E1E1E1D3D3D3D3D3D3
+D3D3D39B9B9B9B9B9B9B9B9B717171717171717171717171A6A6A6A6A6A6A6A6A6DEDEDEDEDEDE
+DEDEDEEAEAEAEAEAEAEAEAEADDDDDDDDDDDDDDDDDDBABABABABABABABABABABABAC5C5C5C5C5C5
+C5C5C5D6D6D5D6D6D5D6D6D5CBCBCBCBCBCBCBCBCBB7B7B7B7B7B7B7B7B7B7B7B7B1B1B1B1B1B1
+B1B1B1B5B5B5B5B5B5B5B5B5BBBBBBBBBBBBBBBBBBC4C4C4C4C4C4C4C4C4C7C7C7C7C7C7C7C7C7
+C7C7C7BDBDBDBDBDBDBDBDBDAAAAAAAAAAAAAAAAAAA6A6A6A6A6A6A6A6A6A1A1A1A1A1A1A1A1A1
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9CA8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7
+9797979797979797979797978D8D8D8D8D8D8D8D8D888888888888888888888888888888888888
+7C7C7C7C7C7C7C7C7C8080808080808080808080808C8C8C8C8C8C8C8C8C919191919191919191
+929292929292929292999999999999999999A5A5A5A5A5A5A5A5A5A5A5A5A8A8A8A8A8A8A8A8A8
+ADADADADADADADADADAFAFAFAFAFAFAFAFAFB2B2B2B2B2B2B2B2B2B2B2B2A8A8A8A8A8A8A8A8A8
+8484848484848484844B4B4B4B4B4B4B4B4B3C3C3C3C3C3C3C3C3C464646464646464646464646
+5757575757575757575252525252525252524B4B4B4B4B4B4B4B4B4F4F4F4F4F4F4F4F4F595959
+5959595959595959596565656565656565656A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6C6C6C
+6C6C6C6C6C6C6C6C6C7373737373737373737979797979797979797B7B7B7B7B7B7B7B7B787878
+7878787878787878787878787878787878787878787878787878787D7D7D7D7D7D7D7D7D868686
+8686868686868E8E8E8E8E8E8E8E8E9797979797979797979797979B9B9B9B9B9B9B9B9B9B9B9B
+9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A9D9D9D9D9D9D9D9D9D9D9D9D9A9A9A9A9A9A9A9A9A969696
+9696969696969999999999999999999696969696969696967D7D7D7D7D7D7D7D7D7D7D7D4B4B4B
+4B4B4B4B4B4B464646464646464646707070707070707070949494949494949494A5A5A5A5A5A5
+A5A5A5A5A5A5A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A6A6A6A6A6A6A6A6A6D0D0D0D0D0D0
+D0D0D0D0D0D0C6C6C6C6C6C6C6C6C6A8A8A8A8A8A8A8A8A8CBCBCBCBCBCBCBCBCBE8E8E8E8E8E8
+E8E8E8F1F1F1F1F1F1F1F1F1F1F1F1F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5
+F5F5F5F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6
+F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F3F3F3F3F3F3F3F3F3C5C5C5C5C5C5
+C5C5C5C9C9C9C9C9C9C9C9C9CACACACACACACACACACACACACACACACACACACACACACBCBCBCBCBCB
+CBCBCBCBCBCBCBCBCBCBCBCBCFCFCFCFCFCFCFCFCFD6D6D5D6D6D5D6D6D5D6D6D6D6D6D6D6D6D6
+D6D6D6CBCBCBCBCBCBCBCBCBB5B5B5B5B5B5B5B5B5AFAFAFAFAFAFAFAFAFC3C3C3C3C3C3C3C3C3
+C3C3C3D7D7D7D7D7D7D7D7D7E1E1E1E1E1E1E1E1E1D3D3D3D3D3D3D3D3D39B9B9B9B9B9B9B9B9B
+717171717171717171717171A6A6A6A6A6A6A6A6A6DEDEDEDEDEDEDEDEDEEAEAEAEAEAEAEAEAEA
+DDDDDDDDDDDDDDDDDDBABABABABABABABABABABABAC5C5C5C5C5C5C5C5C5D6D6D5D6D6D5D6D6D5
+CBCBCBCBCBCBCBCBCBB7B7B7B7B7B7B7B7B7B7B7B7B1B1B1B1B1B1B1B1B1B5B5B5B5B5B5B5B5B5
+BBBBBBBBBBBBBBBBBBC4C4C4C4C4C4C4C4C4C7C7C7C7C7C7C7C7C7C7C7C7BDBDBDBDBDBDBDBDBD
+AAAAAAAAAAAAAAAAAAA6A6A6A6A6A6A6A6A6A1A1A1A1A1A1A1A1A19C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9CA8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7979797979797979797979797
+8D8D8D8D8D8D8D8D8D8888888888888888888888888888888888887C7C7C7C7C7C7C7C7C808080
+8080808080808080808C8C8C8C8C8C8C8C8C919191919191919191929292929292929292999999
+999999999999A5A5A5A5A5A5A5A5A5A5A5A5A8A8A8A8A8A8A8A8A8ADADADADADADADADADAFAFAF
+AFAFAFAFAFAFB2B2B2B2B2B2B2B2B2B2B2B2A8A8A8A8A8A8A8A8A88484848484848484844B4B4B
+4B4B4B4B4B4B3C3C3C3C3C3C3C3C3C464646464646464646464646575757575757575757525252
+5252525252524B4B4B4B4B4B4B4B4B4F4F4F4F4F4F4F4F4F595959595959595959595959656565
+6565656565656A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6C737373
+7373737373737979797979797979797B7B7B7B7B7B7B7B7B787878787878787878787878787878
+7878787878787878787878787878787D7D7D7D7D7D7D7D7D8686868686868686868E8E8E8E8E8E
+8E8E8E9797979797979797979797979B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A
+9A9A9A9D9D9D9D9D9D9D9D9D9D9D9D9A9A9A9A9A9A9A9A9A969696969696969696999999999999
+9999999696969696969696967D7D7D7D7D7D7D7D7D7D7D7D4B4B4B4B4B4B4B4B4B464646464646
+464646707070707070707070949494949494949494A5A5A5A5A5A5A5A5A5A5A5A5A2A2A2A2A2A2
+A2A2A2A2A2A2A2A2A2A2A2A2A6A6A6A6A6A6A6A6A6D0D0D0D0D0D0D0D0D0D0D0D0C6C6C6C6C6C6
+C6C6C6A8A8A8A8A8A8A8A8A8CBCBCBCBCBCBCBCBCBE8E8E8E8E8E8E8E8E8F1F1F1F1F1F1F1F1F1
+F1F1F1F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6
+F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6
+F6F6F6F6F6F6F6F6F6F6F6F6F3F3F3F3F3F3F3F3F3C5C5C5C5C5C5C5C5C5CBCBCBCBCBCBCBCBCB
+CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBBFBFBFBFBFBFBFBFBFB7B7B7B7B7B7B7B7B7
+CACACACACACACACACADEDEDEDEDEDEDEDEDED7D7D7D7D7D7D7D7D7D7D7D7CECECECECECECECECE
+B8B8B8B8B8B8B8B8B89696969696969696969D9D9D9D9D9D9D9D9D9D9D9DCBCBCBCBCBCBCBCBCB
+DBDBDBDBDBDBDBDBDBBEBEBEBEBEBEBEBEBE8A8A8A8A8A8A8A8A8A7D7D7D7D7D7D7D7D7D7D7D7D
+ACACACACACACACACACCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFE9E9E9E9E9E9E9E9E9D3D3D3
+D3D3D3D3D3D3D3D3D3D6D6D6D6D6D6D6D6D6E4E4E4E4E4E4E4E4E4C9C9C9C9C9C9C9C9C98B8B8B
+8B8B8B8B8B8B8B8B8B757575757575757575A7A7A7A7A7A7A7A7A7C5C5C5C5C5C5C5C5C5CBCBCB
+CBCBCBCBCBCBD0D0D0D0D0D0D0D0D0D0D0D0C2C2C2C2C2C2C2C2C2B5B5B5B5B5B5B5B5B5B6B6B6
+B6B6B6B6B6B6A5A5A5A5A5A5A5A5A59494949494949494949494949D9D9D9D9D9D9D9D9DA8A8A8
+A8A8A8A8A8A8A5A5A5A5A5A5A5A5A59999999999999999999999999C9C9C9C9C9C9C9C9C999999
+9999999999998D8D8D8D8D8D8D8D8D7C7C7C7C7C7C7C7C7C7979797979797979797979797E7E7E
+7E7E7E7E7E7E9090909090909090909292929292929292929696969696969696969F9F9F9F9F9F
+9F9F9F9F9F9FA7A7A7A7A7A7A7A7A7A9A9A9A9A9A9A9A9A9ADADADADADADADADADAFAFAFAFAFAF
+AFAFAFAFAFAFA8A8A8A8A8A8A8A8A8767676767676767676494949494949494949464646464646
+4646465858585858585858585858587D7D7D7D7D7D7D7D7D898989898989898989878787878787
+8787877E7E7E7E7E7E7E7E7E6B6B6B6B6B6B6B6B6B6B6B6B6969696969696969696C6C6C6C6C6C
+6C6C6C6969696969696969696767676767676767676767676868686868686868686D6D6D6D6D6D
+6D6D6D717171717171717171727272727272727272757575757575757575757575797979797979
+7979798181818181818181818D8D8D8D8D8D8D8D8D9696969696969696969D9D9D9D9D9D9D9D9D
+9D9D9D9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E
+9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B979797979797979797
+7D7D7D7D7D7D7D7D7D7D7D7D4C4C4C4C4C4C4C4C4C5050505050505050507F7F7F7F7F7F7F7F7F
+9E9E9E9E9E9E9E9E9EAAAAAAAAAAAAAAAAAAAAAAAA8989898989898989895E5E5E5E5E5E5E5E5E
+5F605F5F605F5F605F8A8A8A8A8A8A8A8A8A8A8A8A9C9C9C9C9C9C9C9C9C8A8A8A8A8A8A8A8A8A
+B5B5B5B5B5B5B5B5B5D5D5D5D5D5D5D5D5D5E4E4E4E4E4E4E4E4E4E4E4E4EEEEEEEEEEEEEEEEEE
+F3F3F3F3F3F3F3F3F3F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5
+F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6
+F5F5F5F5F5F5F5F5F5D6D6D5D6D6D5D6D6D5CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB
+CBCBCBCBCBCBCBCBCBBFBFBFBFBFBFBFBFBFB7B7B7B7B7B7B7B7B7CACACACACACACACACADEDEDE
+DEDEDEDEDEDED7D7D7D7D7D7D7D7D7D7D7D7CECECECECECECECECEB8B8B8B8B8B8B8B8B8969696
+9696969696969D9D9D9D9D9D9D9D9D9D9D9DCBCBCBCBCBCBCBCBCBDBDBDBDBDBDBDBDBDBBEBEBE
+BEBEBEBEBEBE8A8A8A8A8A8A8A8A8A7D7D7D7D7D7D7D7D7D7D7D7DACACACACACACACACACCFCFCF
+CFCFCFCFCFCFDFDFDFDFDFDFDFDFDFE9E9E9E9E9E9E9E9E9D3D3D3D3D3D3D3D3D3D3D3D3D6D6D6
+D6D6D6D6D6D6E4E4E4E4E4E4E4E4E4C9C9C9C9C9C9C9C9C98B8B8B8B8B8B8B8B8B8B8B8B757575
+757575757575A7A7A7A7A7A7A7A7A7C5C5C5C5C5C5C5C5C5CBCBCBCBCBCBCBCBCBD0D0D0D0D0D0
+D0D0D0D0D0D0C2C2C2C2C2C2C2C2C2B5B5B5B5B5B5B5B5B5B6B6B6B6B6B6B6B6B6A5A5A5A5A5A5
+A5A5A59494949494949494949494949D9D9D9D9D9D9D9D9DA8A8A8A8A8A8A8A8A8A5A5A5A5A5A5
+A5A5A59999999999999999999999999C9C9C9C9C9C9C9C9C9999999999999999998D8D8D8D8D8D
+8D8D8D7C7C7C7C7C7C7C7C7C7979797979797979797979797E7E7E7E7E7E7E7E7E909090909090
+9090909292929292929292929696969696969696969F9F9F9F9F9F9F9F9F9F9F9FA7A7A7A7A7A7
+A7A7A7A9A9A9A9A9A9A9A9A9ADADADADADADADADADAFAFAFAFAFAFAFAFAFAFAFAFA8A8A8A8A8A8
+A8A8A8767676767676767676494949494949494949464646464646464646585858585858585858
+5858587D7D7D7D7D7D7D7D7D8989898989898989898787878787878787877E7E7E7E7E7E7E7E7E
+6B6B6B6B6B6B6B6B6B6B6B6B6969696969696969696C6C6C6C6C6C6C6C6C696969696969696969
+6767676767676767676767676868686868686868686D6D6D6D6D6D6D6D6D717171717171717171
+727272727272727272757575757575757575757575797979797979797979818181818181818181
+8D8D8D8D8D8D8D8D8D9696969696969696969D9D9D9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E
+9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C
+9A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9797979797979797977D7D7D7D7D7D7D7D7D7D7D7D
+4C4C4C4C4C4C4C4C4C5050505050505050507F7F7F7F7F7F7F7F7F9E9E9E9E9E9E9E9E9EAAAAAA
+AAAAAAAAAAAAAAAAAA8989898989898989895E5E5E5E5E5E5E5E5E5F605F5F605F5F605F8A8A8A
+8A8A8A8A8A8A8A8A8A9C9C9C9C9C9C9C9C9C8A8A8A8A8A8A8A8A8AB5B5B5B5B5B5B5B5B5D5D5D5
+D5D5D5D5D5D5E4E4E4E4E4E4E4E4E4E4E4E4EEEEEEEEEEEEEEEEEEF3F3F3F3F3F3F3F3F3F5F5F5
+F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F5F5F5
+F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5D6D6D5
+D6D6D5D6D6D5CECECECECECECECECED2D2D2D2D2D2D2D2D2D0D0D0D0D0D0D0D0D0D0D0D0B9B9B9
+B9B9B9B9B9B9AFAFAFAFAFAFAFAFAFC0C0C0C0C0C0C0C0C0D2D2D2D2D2D2D2D2D2D9D9D9D9D9D9
+D9D9D9D9D9D9D7D7D7D7D7D7D7D7D7B8B8B8B8B8B8B8B8B88484848484848484848E8E8E8E8E8E
+8E8E8E8E8E8ECECECECECECECECECEDFDFDFDFDFDFDFDFDFC8C8C8C8C8C8C8C8C8A8A8A8A8A8A8
+A8A8A89F9F9F9F9F9F9F9F9F9F9F9FB9B9B9B9B9B9B9B9B9C0C0C0C0C0C0C0C0C0C7C7C7C7C7C7
+C7C7C7CACACACACACACACACACACACACACACACACACACACACADDDDDDDDDDDDDDDDDDE3E3E3E3E3E3
+E3E3E3BABABABABABABABABA787878787878787878787878676767676767676767A2A2A2A2A2A2
+A2A2A2CCCCCCCCCCCCCCCCCCD0D0D0D0D0D0D0D0D0CDCDCDCDCDCDCDCDCDCDCDCDC5C5C5C5C5C5
+C5C5C5BABABABABABABABABAB2B2B2B2B2B2B2B2B29F9F9F9F9F9F9F9F9F959595959595959595
+9595959E9E9E9E9E9E9E9E9EA0A0A0A0A0A0A0A0A0A2A2A2A2A2A2A2A2A2ADADADADADADADADAD
+ADADADB2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A28B8B8B8B8B8B8B8B8B858585858585858585
+898989898989898989898989818181818181818181818181818181818181878787878787878787
+9090909090909090909D9D9D9D9D9D9D9D9D9D9D9DA1A1A1A1A1A1A1A1A1A8A8A8A8A8A8A8A8A8
+A8A8A8A8A8A8A8A8A8AAAAAAAAAAAAAAAAAAAAAAAAA4A4A4A4A4A4A4A4A4767676767676767676
+4C4C4C4C4C4C4C4C4C505050505050505050717171717171717171717171A5A5A5A5A5A5A5A5A5
+BFBFBFBFBFBFBFBFBFC6C6C6C6C6C6C6C6C6BABABABABABABABABA9F9F9F9F9F9F9F9F9F9F9F9F
+848484848484848484707070707070707070686868686868686868656565656565656565656565
+6262626262626262626565656565656565656B6B6B6B6B6B6B6B6B6F6F6F6F6F6F6F6F6F767676
+7676767676767676768080808080808080808C8C8C8C8C8C8C8C8C9696969696969696969D9D9D
+9D9D9D9D9D9DA0A0A0A0A0A0A0A0A0A0A0A0A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A2A2A2
+A2A2A2A2A2A2A0A0A0A0A0A0A0A0A0A0A0A09D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9D9D9D
+9D9D9D9D9D9D959595959595959595767676767676767676767676505050505050505050646464
+646464646464888888888888888888A5A5A5A5A5A5A5A5A5ABABABABABABABABABABABAB777777
+7777777777774545454545454545454848484848484848486A6A6A6A6A6A6A6A6A6A6A6A969696
+969696969696A1A1A1A1A1A1A1A1A1C0C0C0C0C0C0C0C0C0CBCBCBCBCBCBCBCBCBCFCFCFCFCFCF
+CFCFCFCFCFCFDCDCDCDCDCDCDCDCDCEAEAEAEAEAEAEAEAEAEFEFEFEFEFEFEFEFEFF5F5F5F5F5F5
+F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5
+F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F3F3F3F3F3F3F3F3F3C8C8C8C8C8C8C8C8C8CECECECECECE
+CECECED2D2D2D2D2D2D2D2D2D0D0D0D0D0D0D0D0D0D0D0D0B9B9B9B9B9B9B9B9B9AFAFAFAFAFAF
+AFAFAFC0C0C0C0C0C0C0C0C0D2D2D2D2D2D2D2D2D2D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7
+D7D7D7B8B8B8B8B8B8B8B8B88484848484848484848E8E8E8E8E8E8E8E8E8E8E8ECECECECECECE
+CECECEDFDFDFDFDFDFDFDFDFC8C8C8C8C8C8C8C8C8A8A8A8A8A8A8A8A8A89F9F9F9F9F9F9F9F9F
+9F9F9FB9B9B9B9B9B9B9B9B9C0C0C0C0C0C0C0C0C0C7C7C7C7C7C7C7C7C7CACACACACACACACACA
+CACACACACACACACACACACACADDDDDDDDDDDDDDDDDDE3E3E3E3E3E3E3E3E3BABABABABABABABABA
+787878787878787878787878676767676767676767A2A2A2A2A2A2A2A2A2CCCCCCCCCCCCCCCCCC
+D0D0D0D0D0D0D0D0D0CDCDCDCDCDCDCDCDCDCDCDCDC5C5C5C5C5C5C5C5C5BABABABABABABABABA
+B2B2B2B2B2B2B2B2B29F9F9F9F9F9F9F9F9F9595959595959595959595959E9E9E9E9E9E9E9E9E
+A0A0A0A0A0A0A0A0A0A2A2A2A2A2A2A2A2A2ADADADADADADADADADADADADB2B2B2B2B2B2B2B2B2
+A2A2A2A2A2A2A2A2A28B8B8B8B8B8B8B8B8B858585858585858585898989898989898989898989
+8181818181818181818181818181818181818787878787878787879090909090909090909D9D9D
+9D9D9D9D9D9D9D9D9DA1A1A1A1A1A1A1A1A1A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8AAAAAA
+AAAAAAAAAAAAAAAAAAA4A4A4A4A4A4A4A4A47676767676767676764C4C4C4C4C4C4C4C4C505050
+505050505050717171717171717171717171A5A5A5A5A5A5A5A5A5BFBFBFBFBFBFBFBFBFC6C6C6
+C6C6C6C6C6C6BABABABABABABABABA9F9F9F9F9F9F9F9F9F9F9F9F848484848484848484707070
+707070707070686868686868686868656565656565656565656565626262626262626262656565
+6565656565656B6B6B6B6B6B6B6B6B6F6F6F6F6F6F6F6F6F767676767676767676767676808080
+8080808080808C8C8C8C8C8C8C8C8C9696969696969696969D9D9D9D9D9D9D9D9DA0A0A0A0A0A0
+A0A0A0A0A0A0A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2A0A0A0A0A0A0
+A0A0A0A0A0A09D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D959595959595
+959595767676767676767676767676505050505050505050646464646464646464888888888888
+888888A5A5A5A5A5A5A5A5A5ABABABABABABABABABABABAB777777777777777777454545454545
+4545454848484848484848486A6A6A6A6A6A6A6A6A6A6A6A969696969696969696A1A1A1A1A1A1
+A1A1A1C0C0C0C0C0C0C0C0C0CBCBCBCBCBCBCBCBCBCFCFCFCFCFCFCFCFCFCFCFCFDCDCDCDCDCDC
+DCDCDCEAEAEAEAEAEAEAEAEAEFEFEFEFEFEFEFEFEFF5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6
+F6F6F6F7F7F7F7F7F7F7F7F7F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6
+F6F6F6F3F3F3F3F3F3F3F3F3C8C8C8C8C8C8C8C8C8CECECECECECECECECED2D2D2D2D2D2D2D2D2
+D0D0D0D0D0D0D0D0D0D0D0D0B9B9B9B9B9B9B9B9B9AFAFAFAFAFAFAFAFAFC0C0C0C0C0C0C0C0C0
+D2D2D2D2D2D2D2D2D2D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D7D7B8B8B8B8B8B8B8B8B8
+8484848484848484848E8E8E8E8E8E8E8E8E8E8E8ECECECECECECECECECEDFDFDFDFDFDFDFDFDF
+C8C8C8C8C8C8C8C8C8A8A8A8A8A8A8A8A8A89F9F9F9F9F9F9F9F9F9F9F9FB9B9B9B9B9B9B9B9B9
+C0C0C0C0C0C0C0C0C0C7C7C7C7C7C7C7C7C7CACACACACACACACACACACACACACACACACACACACACA
+DDDDDDDDDDDDDDDDDDE3E3E3E3E3E3E3E3E3BABABABABABABABABA787878787878787878787878
+676767676767676767A2A2A2A2A2A2A2A2A2CCCCCCCCCCCCCCCCCCD0D0D0D0D0D0D0D0D0CDCDCD
+CDCDCDCDCDCDCDCDCDC5C5C5C5C5C5C5C5C5BABABABABABABABABAB2B2B2B2B2B2B2B2B29F9F9F
+9F9F9F9F9F9F9595959595959595959595959E9E9E9E9E9E9E9E9EA0A0A0A0A0A0A0A0A0A2A2A2
+A2A2A2A2A2A2ADADADADADADADADADADADADB2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A28B8B8B
+8B8B8B8B8B8B858585858585858585898989898989898989898989818181818181818181818181
+8181818181818787878787878787879090909090909090909D9D9D9D9D9D9D9D9D9D9D9DA1A1A1
+A1A1A1A1A1A1A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8AAAAAAAAAAAAAAAAAAAAAAAAA4A4A4
+A4A4A4A4A4A47676767676767676764C4C4C4C4C4C4C4C4C505050505050505050717171717171
+717171717171A5A5A5A5A5A5A5A5A5BFBFBFBFBFBFBFBFBFC6C6C6C6C6C6C6C6C6BABABABABABA
+BABABA9F9F9F9F9F9F9F9F9F9F9F9F848484848484848484707070707070707070686868686868
+6868686565656565656565656565656262626262626262626565656565656565656B6B6B6B6B6B
+6B6B6B6F6F6F6F6F6F6F6F6F7676767676767676767676768080808080808080808C8C8C8C8C8C
+8C8C8C9696969696969696969D9D9D9D9D9D9D9D9DA0A0A0A0A0A0A0A0A0A0A0A0A2A2A2A2A2A2
+A2A2A2A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2A0A0A0A0A0A0A0A0A0A0A0A09D9D9D9D9D9D
+9D9D9D9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D959595959595959595767676767676767676
+767676505050505050505050646464646464646464888888888888888888A5A5A5A5A5A5A5A5A5
+ABABABABABABABABABABABAB777777777777777777454545454545454545484848484848484848
+6A6A6A6A6A6A6A6A6A6A6A6A969696969696969696A1A1A1A1A1A1A1A1A1C0C0C0C0C0C0C0C0C0
+CBCBCBCBCBCBCBCBCBCFCFCFCFCFCFCFCFCFCFCFCFDCDCDCDCDCDCDCDCDCEAEAEAEAEAEAEAEAEA
+EFEFEFEFEFEFEFEFEFF5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7
+F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F3F3F3F3F3F3F3F3F3
+C8C8C8C8C8C8C8C8C8D3D3D3D3D3D3D3D3D3DBDBDBDBDBDBDBDBDBD8D8D8D8D8D8D8D8D8D8D8D8
+C4C4C4C4C4C4C4C4C4A8A8A8A8A8A8A8A8A8929292929292929292B1B1B1B1B1B1B1B1B1DDDDDD
+DDDDDDDDDDDDDDDDDDE7E7E7E7E7E7E7E7E7CECECECECECECECECEA1A1A1A1A1A1A1A1A1AFAFAF
+AFAFAFAFAFAFAFAFAFD4D4D4D4D4D4D4D4D4DEDEDEDEDEDEDEDEDED2D2D2D2D2D2D2D2D2CDCDCD
+CDCDCDCDCDCDC9C9C9C9C9C9C9C9C9C9C9C9C8C8C8C8C8C8C8C8C8BBBBBBBBBBBBBBBBBBA7A7A7
+A7A7A7A7A7A78B8B8B8B8B8B8B8B8BA8A8A8A8A8A8A8A8A8A8A8A8DADADADADADADADADAE8E8E8
+E8E8E8E8E8E8B2B2B2B2B2B2B2B2B2707070707070707070707070868686868686868686BCBCBC
+BCBCBCBCBCBCCFCFCFCFCFCFCFCFCFD7D7D7D7D7D7D7D7D7D1D1D1D1D1D1D1D1D1D1D1D1C7C7C7
+C7C7C7C7C7C7B8B8B8B8B8B8B8B8B8A4A4A4A4A4A4A4A4A49A9A9A9A9A9A9A9A9A999999999999
+999999999999979797979797979797949494949494949494A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0
+B0B0B0B0B0B0B1B1B1B1B1B1B1B1B19D9D9D9D9D9D9D9D9D9090909090909090908E8E8E8E8E8E
+8E8E8E8686868686868686868686867E7E7E7E7E7E7E7E7E767676767676767676717171717171
+7171718484848484848484849393939393939393939393939B9B9B9B9B9B9B9B9B9E9E9E9E9E9E
+9E9E9EA2A2A2A2A2A2A2A2A2A4A4A4A4A4A4A4A4A4A4A4A49D9D9D9D9D9D9D9D9D787878787878
+7878785454545454545454545E5E5E5E5E5E5E5E5E858585858585858585858585B4B4B4B4B4B4
+B4B4B4CCCCCCCCCCCCCCCCCCE0E0E0E0E0E0E0E0E0E4E4E4E4E4E4E4E4E4D3D3D3D3D3D3D3D3D3
+D3D3D3B8B8B8B8B8B8B8B8B8828282828282828282696969696969696969656565656565656565
+6565656464646464646464646767676767676767676E6E6E6E6E6E6E6E6E777777777777777777
+8080808080808080808080808A8A8A8A8A8A8A8A8A9292929292929292929A9A9A9A9A9A9A9A9A
+A1A1A1A1A1A1A1A1A1A6A6A6A6A6A6A6A6A6A6A6A6A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8
+A6A6A6A6A6A6A6A6A6A3A3A3A3A3A3A3A3A3A3A3A39E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D
+9E9E9E9E9E9E9E9E9E9292929292929292926D6D6D6D6D6D6D6D6D6D6D6D5C5C5C5C5C5C5C5C5C
+7676767676767676768F8F8F8F8F8F8F8F8FB3B3B3B3B3B3B3B3B3ACACACACACACACACACACACAC
+6F6F6F6F6F6F6F6F6F4747474747474747474F4F4F4F4F4F4F4F4F707070707070707070707070
+9C9C9C9C9C9C9C9C9CB1B1B1B1B1B1B1B1B1CACACACACACACACACAC3C3C3C3C3C3C3C3C3AEAEAE
+AEAEAEAEAEAEAEAEAEBCBCBCBCBCBCBCBCBCD4D4D4D4D4D4D4D4D4DBDBDBDBDBDBDBDBDBEDEDED
+EDEDEDEDEDEDF5F5F5F5F5F5F5F5F5F5F5F5F7F7F7F7F7F7F7F7F7F6F6F6F6F6F6F6F6F6F5F5F5
+F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5D2D2D2D2D2D2D2D2D2D3D3D3
+D3D3D3D3D3D3DBDBDBDBDBDBDBDBDBD8D8D8D8D8D8D8D8D8D8D8D8C4C4C4C4C4C4C4C4C4A8A8A8
+A8A8A8A8A8A8929292929292929292B1B1B1B1B1B1B1B1B1DDDDDDDDDDDDDDDDDDDDDDDDE7E7E7
+E7E7E7E7E7E7CECECECECECECECECEA1A1A1A1A1A1A1A1A1AFAFAFAFAFAFAFAFAFAFAFAFD4D4D4
+D4D4D4D4D4D4DEDEDEDEDEDEDEDEDED2D2D2D2D2D2D2D2D2CDCDCDCDCDCDCDCDCDC9C9C9C9C9C9
+C9C9C9C9C9C9C8C8C8C8C8C8C8C8C8BBBBBBBBBBBBBBBBBBA7A7A7A7A7A7A7A7A78B8B8B8B8B8B
+8B8B8BA8A8A8A8A8A8A8A8A8A8A8A8DADADADADADADADADAE8E8E8E8E8E8E8E8E8B2B2B2B2B2B2
+B2B2B2707070707070707070707070868686868686868686BCBCBCBCBCBCBCBCBCCFCFCFCFCFCF
+CFCFCFD7D7D7D7D7D7D7D7D7D1D1D1D1D1D1D1D1D1D1D1D1C7C7C7C7C7C7C7C7C7B8B8B8B8B8B8
+B8B8B8A4A4A4A4A4A4A4A4A49A9A9A9A9A9A9A9A9A999999999999999999999999979797979797
+979797949494949494949494A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B1B1B1B1B1B1
+B1B1B19D9D9D9D9D9D9D9D9D9090909090909090908E8E8E8E8E8E8E8E8E868686868686868686
+8686867E7E7E7E7E7E7E7E7E767676767676767676717171717171717171848484848484848484
+9393939393939393939393939B9B9B9B9B9B9B9B9B9E9E9E9E9E9E9E9E9EA2A2A2A2A2A2A2A2A2
+A4A4A4A4A4A4A4A4A4A4A4A49D9D9D9D9D9D9D9D9D787878787878787878545454545454545454
+5E5E5E5E5E5E5E5E5E858585858585858585858585B4B4B4B4B4B4B4B4B4CCCCCCCCCCCCCCCCCC
+E0E0E0E0E0E0E0E0E0E4E4E4E4E4E4E4E4E4D3D3D3D3D3D3D3D3D3D3D3D3B8B8B8B8B8B8B8B8B8
+828282828282828282696969696969696969656565656565656565656565646464646464646464
+6767676767676767676E6E6E6E6E6E6E6E6E777777777777777777808080808080808080808080
+8A8A8A8A8A8A8A8A8A9292929292929292929A9A9A9A9A9A9A9A9AA1A1A1A1A1A1A1A1A1A6A6A6
+A6A6A6A6A6A6A6A6A6A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A6A6A6A6A6A6A6A6A6A3A3A3
+A3A3A3A3A3A3A3A3A39E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E929292
+9292929292926D6D6D6D6D6D6D6D6D6D6D6D5C5C5C5C5C5C5C5C5C7676767676767676768F8F8F
+8F8F8F8F8F8FB3B3B3B3B3B3B3B3B3ACACACACACACACACACACACAC6F6F6F6F6F6F6F6F6F474747
+4747474747474F4F4F4F4F4F4F4F4F7070707070707070707070709C9C9C9C9C9C9C9C9CB1B1B1
+B1B1B1B1B1B1CACACACACACACACACAC3C3C3C3C3C3C3C3C3AEAEAEAEAEAEAEAEAEAEAEAEBCBCBC
+BCBCBCBCBCBCD4D4D4D4D4D4D4D4D4DBDBDBDBDBDBDBDBDBEDEDEDEDEDEDEDEDEDF5F5F5F5F5F5
+F5F5F5F5F5F5F7F7F7F7F7F7F7F7F7F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6
+F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5D2D2D2D2D2D2D2D2D2D7D7D7D7D7D7D7D7D7DFDFDFDFDFDF
+DFDFDFD7D7D7D7D7D7D7D7D7D7D7D7C2C2C2C2C2C2C2C2C2949494949494949494848484848484
+848484B3B3B3B3B3B3B3B3B3DBDBDBDBDBDBDBDBDBDBDBDBE1E1E1E1E1E1E1E1E1E1E1E1E1E1E1
+E1E1E1D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3D3D3D3D3D3D3D9D9D9D9D9D9D9D9D9D0D0D0D0D0D0
+D0D0D0B8B8B8B8B8B8B8B8B8B9B9B9B9B9B9B9B9B9D0D0D0D0D0D0D0D0D0D0D0D0D2D2D2D2D2D2
+D2D2D2BFBFBFBFBFBFBFBFBF9393939393939393936969696969696969698F8F8F8F8F8F8F8F8F
+8F8F8FC9C9C9C9C9C9C9C9C9E3E3E3E3E3E3E3E3E3D1D1D1D1D1D1D1D1D19B9B9B9B9B9B9B9B9B
+9B9B9BAEAEAEAEAEAEAEAEAED6D6D6D6D6D6D6D6D6DADADADADADADADADADEDEDEDEDEDEDEDEDE
+DBDBDBDBDBDBDBDBDBDBDBDBCBCBCBCBCBCBCBCBCBAEAEAEAEAEAEAEAEAE9F9F9F9F9F9F9F9F9F
+A9A9A9A9A9A9A9A9A9A5A5A5A5A5A5A5A5A5A5A5A5999999999999999999919191919191919191
+9F9F9F9F9F9F9F9F9FAAAAAAAAAAAAAAAAAAAAAAAAA8A8A8A8A8A8A8A8A89B9B9B9B9B9B9B9B9B
+9D9D9D9D9D9D9D9D9D979797979797979797858585858585858585858585777777777777777777
+7676767676767676767676767676767676768181818181818181818B8B8B8B8B8B8B8B8B8B8B8B
+8E8E8E8E8E8E8E8E8E9595959595959595959C9C9C9C9C9C9C9C9CA2A2A2A2A2A2A2A2A2A2A2A2
+A0A0A0A0A0A0A0A0A0868686868686868686595959595959595959656565656565656565949494
+949494949494949494BABABABABABABABABAC2C2C2C2C2C2C2C2C2C4C4C4C4C4C4C4C4C4D6D6D6
+D6D6D6D6D6D6D9D9D9D9D9D9D9D9D9D9D9D9CECECECECECECECECEA5A5A5A5A5A5A5A5A57B7B7B
+7B7B7B7B7B7B6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7373737373737373737A7A7A
+7A7A7A7A7A7A8383838383838383838989898989898989898989898F8F8F8F8F8F8F8F8F979797
+9797979797979E9E9E9E9E9E9E9E9EA6A6A6A6A6A6A6A6A6ABABABABABABABABABABABABADADAD
+ADADADADADADAAAAAAAAAAAAAAAAAAA7A7A7A7A7A7A7A7A7A2A2A2A2A2A2A2A2A2A2A2A29F9F9F
+9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E898989898989898989696969696969
+696969696969787878787878787878939393939393939393AAAAAAAAAAAAAAAAAACCCCCCCCCCCC
+CCCCCCB2B2B2B2B2B2B2B2B2B2B2B27272727272727272725959595959595959596F6F6F6F6F6F
+6F6F6F949494949494949494949494A5A5A5A5A5A5A5A5A5AFAFAFAFAFAFAFAFAFC1C1C1C1C1C1
+C1C1C1B3B3B3B3B3B3B3B3B39E9E9E9E9E9E9E9E9E9E9E9EAFAFAFAFAFAFAFAFAFCCCCCCCCCCCC
+CCCCCCD0D0D0D0D0D0D0D0D0DDDDDDDDDDDDDDDDDDF0F0F0F0F0F0F0F0F0F0F0F0F5F5F5F5F5F5
+F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5
+F5F5F5DFE0DFDFE0DFDFE0DFD7D7D7D7D7D7D7D7D7DFDFDFDFDFDFDFDFDFD7D7D7D7D7D7D7D7D7
+D7D7D7C2C2C2C2C2C2C2C2C2949494949494949494848484848484848484B3B3B3B3B3B3B3B3B3
+DBDBDBDBDBDBDBDBDBDBDBDBE1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D4D4D4D4D4D4D4D4D4
+D3D3D3D3D3D3D3D3D3D3D3D3D9D9D9D9D9D9D9D9D9D0D0D0D0D0D0D0D0D0B8B8B8B8B8B8B8B8B8
+B9B9B9B9B9B9B9B9B9D0D0D0D0D0D0D0D0D0D0D0D0D2D2D2D2D2D2D2D2D2BFBFBFBFBFBFBFBFBF
+9393939393939393936969696969696969698F8F8F8F8F8F8F8F8F8F8F8FC9C9C9C9C9C9C9C9C9
+E3E3E3E3E3E3E3E3E3D1D1D1D1D1D1D1D1D19B9B9B9B9B9B9B9B9B9B9B9BAEAEAEAEAEAEAEAEAE
+D6D6D6D6D6D6D6D6D6DADADADADADADADADADEDEDEDEDEDEDEDEDEDBDBDBDBDBDBDBDBDBDBDBDB
+CBCBCBCBCBCBCBCBCBAEAEAEAEAEAEAEAEAE9F9F9F9F9F9F9F9F9FA9A9A9A9A9A9A9A9A9A5A5A5
+A5A5A5A5A5A5A5A5A59999999999999999999191919191919191919F9F9F9F9F9F9F9F9FAAAAAA
+AAAAAAAAAAAAAAAAAAA8A8A8A8A8A8A8A8A89B9B9B9B9B9B9B9B9B9D9D9D9D9D9D9D9D9D979797
+979797979797858585858585858585858585777777777777777777767676767676767676767676
+7676767676768181818181818181818B8B8B8B8B8B8B8B8B8B8B8B8E8E8E8E8E8E8E8E8E959595
+9595959595959C9C9C9C9C9C9C9C9CA2A2A2A2A2A2A2A2A2A2A2A2A0A0A0A0A0A0A0A0A0868686
+868686868686595959595959595959656565656565656565949494949494949494949494BABABA
+BABABABABABAC2C2C2C2C2C2C2C2C2C4C4C4C4C4C4C4C4C4D6D6D6D6D6D6D6D6D6D9D9D9D9D9D9
+D9D9D9D9D9D9CECECECECECECECECEA5A5A5A5A5A5A5A5A57B7B7B7B7B7B7B7B7B6D6D6D6D6D6D
+6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7373737373737373737A7A7A7A7A7A7A7A7A838383838383
+8383838989898989898989898989898F8F8F8F8F8F8F8F8F9797979797979797979E9E9E9E9E9E
+9E9E9EA6A6A6A6A6A6A6A6A6ABABABABABABABABABABABABADADADADADADADADADAAAAAAAAAAAA
+AAAAAAA7A7A7A7A7A7A7A7A7A2A2A2A2A2A2A2A2A2A2A2A29F9F9F9F9F9F9F9F9F9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E898989898989898989696969696969696969696969787878787878
+787878939393939393939393AAAAAAAAAAAAAAAAAACCCCCCCCCCCCCCCCCCB2B2B2B2B2B2B2B2B2
+B2B2B27272727272727272725959595959595959596F6F6F6F6F6F6F6F6F949494949494949494
+949494A5A5A5A5A5A5A5A5A5AFAFAFAFAFAFAFAFAFC1C1C1C1C1C1C1C1C1B3B3B3B3B3B3B3B3B3
+9E9E9E9E9E9E9E9E9E9E9E9EAFAFAFAFAFAFAFAFAFCCCCCCCCCCCCCCCCCCD0D0D0D0D0D0D0D0D0
+DDDDDDDDDDDDDDDDDDF0F0F0F0F0F0F0F0F0F0F0F0F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5
+F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5DFE0DFDFE0DFDFE0DF
+D7D7D7D7D7D7D7D7D7DFDFDFDFDFDFDFDFDFD7D7D7D7D7D7D7D7D7D7D7D7C2C2C2C2C2C2C2C2C2
+949494949494949494848484848484848484B3B3B3B3B3B3B3B3B3DBDBDBDBDBDBDBDBDBDBDBDB
+E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D4D4D4D4D4D4D4D4D4D3D3D3D3D3D3D3D3D3D3D3D3
+D9D9D9D9D9D9D9D9D9D0D0D0D0D0D0D0D0D0B8B8B8B8B8B8B8B8B8B9B9B9B9B9B9B9B9B9D0D0D0
+D0D0D0D0D0D0D0D0D0D2D2D2D2D2D2D2D2D2BFBFBFBFBFBFBFBFBF939393939393939393696969
+6969696969698F8F8F8F8F8F8F8F8F8F8F8FC9C9C9C9C9C9C9C9C9E3E3E3E3E3E3E3E3E3D1D1D1
+D1D1D1D1D1D19B9B9B9B9B9B9B9B9B9B9B9BAEAEAEAEAEAEAEAEAED6D6D6D6D6D6D6D6D6DADADA
+DADADADADADADEDEDEDEDEDEDEDEDEDBDBDBDBDBDBDBDBDBDBDBDBCBCBCBCBCBCBCBCBCBAEAEAE
+AEAEAEAEAEAE9F9F9F9F9F9F9F9F9FA9A9A9A9A9A9A9A9A9A5A5A5A5A5A5A5A5A5A5A5A5999999
+9999999999999191919191919191919F9F9F9F9F9F9F9F9FAAAAAAAAAAAAAAAAAAAAAAAAA8A8A8
+A8A8A8A8A8A89B9B9B9B9B9B9B9B9B9D9D9D9D9D9D9D9D9D979797979797979797858585858585
+858585858585777777777777777777767676767676767676767676767676767676818181818181
+8181818B8B8B8B8B8B8B8B8B8B8B8B8E8E8E8E8E8E8E8E8E9595959595959595959C9C9C9C9C9C
+9C9C9CA2A2A2A2A2A2A2A2A2A2A2A2A0A0A0A0A0A0A0A0A0868686868686868686595959595959
+595959656565656565656565949494949494949494949494BABABABABABABABABAC2C2C2C2C2C2
+C2C2C2C4C4C4C4C4C4C4C4C4D6D6D6D6D6D6D6D6D6D9D9D9D9D9D9D9D9D9D9D9D9CECECECECECE
+CECECEA5A5A5A5A5A5A5A5A57B7B7B7B7B7B7B7B7B6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D
+6D6D6D7373737373737373737A7A7A7A7A7A7A7A7A838383838383838383898989898989898989
+8989898F8F8F8F8F8F8F8F8F9797979797979797979E9E9E9E9E9E9E9E9EA6A6A6A6A6A6A6A6A6
+ABABABABABABABABABABABABADADADADADADADADADAAAAAAAAAAAAAAAAAAA7A7A7A7A7A7A7A7A7
+A2A2A2A2A2A2A2A2A2A2A2A29F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+898989898989898989696969696969696969696969787878787878787878939393939393939393
+AAAAAAAAAAAAAAAAAACCCCCCCCCCCCCCCCCCB2B2B2B2B2B2B2B2B2B2B2B2727272727272727272
+5959595959595959596F6F6F6F6F6F6F6F6F949494949494949494949494A5A5A5A5A5A5A5A5A5
+AFAFAFAFAFAFAFAFAFC1C1C1C1C1C1C1C1C1B3B3B3B3B3B3B3B3B39E9E9E9E9E9E9E9E9E9E9E9E
+AFAFAFAFAFAFAFAFAFCCCCCCCCCCCCCCCCCCD0D0D0D0D0D0D0D0D0DDDDDDDDDDDDDDDDDDF0F0F0
+F0F0F0F0F0F0F0F0F0F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6
+F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5DFE0DFDFE0DFDFE0DFCBCBCBCBCBCBCBCBCBDFE0DF
+DFE0DFDFE0DFDBDBDBDBDBDBDBDBDBDBDBDBCBCBCBCBCBCBCBCBCBA9A9A9A9A9A9A9A9A9B0B0B0
+B0B0B0B0B0B0D6D6D5D6D6D5D6D6D5D2D2D2D2D2D2D2D2D2D2D2D2C0C0C0C0C0C0C0C0C0C3C3C3
+C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3DADADADADADADADADADADADAD5D5D5D5D5D5D5D5D5BBBBBB
+BBBBBBBBBBBB8B8B8B8B8B8B8B8B8B838383838383838383BBBBBBBBBBBBBBBBBBBBBBBBD2D2D2
+D2D2D2D2D2D2C3C3C3C3C3C3C3C3C38A8A8A8A8A8A8A8A8A777777777777777777AAAAAAAAAAAA
+AAAAAAAAAAAACBCBCBCBCBCBCBCBCBD9D9D9D9D9D9D9D9D9E0E0E0E0E0E0E0E0E0D5D5D5D5D5D5
+D5D5D5D5D5D5D6D6D5D6D6D5D6D6D5D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E3E3E3E3E3E3
+E3E3E3E2E2E2E2E2E2E2E2E2E2E2E2DADADADADADADADADABDBDBDBDBDBDBDBDBDB0B0B0B0B0B0
+B0B0B0BDBDBDBDBDBDBDBDBDB4B4B4B4B4B4B4B4B4B4B4B4A3A3A3A3A3A3A3A3A39A9A9A9A9A9A
+9A9A9A9F9F9F9F9F9F9F9F9FA5A5A5A5A5A5A5A5A5A5A5A59F9F9F9F9F9F9F9F9F9D9D9D9D9D9D
+9D9D9DA0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0909090909090909090909090898989898989
+8989898E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D848484848484848484
+8484848181818181818181818A8A8A8A8A8A8A8A8A9696969696969696969E9E9E9E9E9E9E9E9E
+9E9E9EA4A4A4A4A4A4A4A4A4919191919191919191646464646464646464636363636363636363
+979797979797979797979797BBBBBBBBBBBBBBBBBBBDBDBDBDBDBDBDBDBDB8B8B8B8B8B8B8B8B8
+CECECECECECECECECEE4E4E4E4E4E4E4E4E4E4E4E4ECECECECECECECECECD3D3D3D3D3D3D3D3D3
+9F9F9F9F9F9F9F9F9F7C7C7C7C7C7C7C7C7C7C7C7C7777777777777777777A7A7A7A7A7A7A7A7A
+8080808080808080808585858585858585858A8A8A8A8A8A8A8A8A8A8A8A919191919191919191
+9A9A9A9A9A9A9A9A9AA2A2A2A2A2A2A2A2A2A8A8A8A8A8A8A8A8A8AEAEAEAEAEAEAEAEAEAEAEAE
+B0B0B0B0B0B0B0B0B0ADADADADADADADADADA8A8A8A8A8A8A8A8A8A1A1A1A1A1A1A1A1A1A1A1A1
+9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9D9D9D9D9D9D9D9D9D8B8B8B8B8B8B8B8B8B8F8F8F
+8F8F8F8F8F8F8F8F8FB4B4B4B4B4B4B4B4B4CACACACACACACACACAD6D6D6D6D6D6D6D6D6E0E0E0
+E0E0E0E0E0E0AEAEAEAEAEAEAEAEAEAEAEAE7878787878787878787B7B7B7B7B7B7B7B7B989898
+989898989898B6B6B6B6B6B6B6B6B6B6B6B6BBBBBBBBBBBBBBBBBBB3B3B3B3B3B3B3B3B3A9A9A9
+A9A9A9A9A9A9919191919191919191949494949494949494949494BBBBBBBBBBBBBBBBBBD0D0D0
+D0D0D0D0D0D0C5C5C5C5C5C5C5C5C5BFBFBFBFBFBFBFBFBFDCDCDCDCDCDCDCDCDCDCDCDCECECEC
+ECECECECECECECECECECECECECECECEEEEEEEEEEEEEEEEEEF3F3F3F3F3F3F3F3F3F3F3F3F2F2F2
+F2F2F2F2F2F2C5C5C5C5C5C5C5C5C5CBCBCBCBCBCBCBCBCBDFE0DFDFE0DFDFE0DFDBDBDBDBDBDB
+DBDBDBDBDBDBCBCBCBCBCBCBCBCBCBA9A9A9A9A9A9A9A9A9B0B0B0B0B0B0B0B0B0D6D6D5D6D6D5
+D6D6D5D2D2D2D2D2D2D2D2D2D2D2D2C0C0C0C0C0C0C0C0C0C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3
+D3D3D3DADADADADADADADADADADADAD5D5D5D5D5D5D5D5D5BBBBBBBBBBBBBBBBBB8B8B8B8B8B8B
+8B8B8B838383838383838383BBBBBBBBBBBBBBBBBBBBBBBBD2D2D2D2D2D2D2D2D2C3C3C3C3C3C3
+C3C3C38A8A8A8A8A8A8A8A8A777777777777777777AAAAAAAAAAAAAAAAAAAAAAAACBCBCBCBCBCB
+CBCBCBD9D9D9D9D9D9D9D9D9E0E0E0E0E0E0E0E0E0D5D5D5D5D5D5D5D5D5D5D5D5D6D6D5D6D6D5
+D6D6D5D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E3E3E3E3E3E3E3E3E3E2E2E2E2E2E2E2E2E2
+E2E2E2DADADADADADADADADABDBDBDBDBDBDBDBDBDB0B0B0B0B0B0B0B0B0BDBDBDBDBDBDBDBDBD
+B4B4B4B4B4B4B4B4B4B4B4B4A3A3A3A3A3A3A3A3A39A9A9A9A9A9A9A9A9A9F9F9F9F9F9F9F9F9F
+A5A5A5A5A5A5A5A5A5A5A5A59F9F9F9F9F9F9F9F9F9D9D9D9D9D9D9D9D9DA0A0A0A0A0A0A0A0A0
+A0A0A0A0A0A0A0A0A09090909090909090909090908989898989898989898E8E8E8E8E8E8E8E8E
+8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D848484848484848484848484818181818181818181
+8A8A8A8A8A8A8A8A8A9696969696969696969E9E9E9E9E9E9E9E9E9E9E9EA4A4A4A4A4A4A4A4A4
+919191919191919191646464646464646464636363636363636363979797979797979797979797
+BBBBBBBBBBBBBBBBBBBDBDBDBDBDBDBDBDBDB8B8B8B8B8B8B8B8B8CECECECECECECECECEE4E4E4
+E4E4E4E4E4E4E4E4E4ECECECECECECECECECD3D3D3D3D3D3D3D3D39F9F9F9F9F9F9F9F9F7C7C7C
+7C7C7C7C7C7C7C7C7C7777777777777777777A7A7A7A7A7A7A7A7A808080808080808080858585
+8585858585858A8A8A8A8A8A8A8A8A8A8A8A9191919191919191919A9A9A9A9A9A9A9A9AA2A2A2
+A2A2A2A2A2A2A8A8A8A8A8A8A8A8A8AEAEAEAEAEAEAEAEAEAEAEAEB0B0B0B0B0B0B0B0B0ADADAD
+ADADADADADADA8A8A8A8A8A8A8A8A8A1A1A1A1A1A1A1A1A1A1A1A19F9F9F9F9F9F9F9F9F9F9F9F
+9F9F9F9F9F9F9D9D9D9D9D9D9D9D9D8B8B8B8B8B8B8B8B8B8F8F8F8F8F8F8F8F8F8F8F8FB4B4B4
+B4B4B4B4B4B4CACACACACACACACACAD6D6D6D6D6D6D6D6D6E0E0E0E0E0E0E0E0E0AEAEAEAEAEAE
+AEAEAEAEAEAE7878787878787878787B7B7B7B7B7B7B7B7B989898989898989898B6B6B6B6B6B6
+B6B6B6B6B6B6BBBBBBBBBBBBBBBBBBB3B3B3B3B3B3B3B3B3A9A9A9A9A9A9A9A9A9919191919191
+919191949494949494949494949494BBBBBBBBBBBBBBBBBBD0D0D0D0D0D0D0D0D0C5C5C5C5C5C5
+C5C5C5BFBFBFBFBFBFBFBFBFDCDCDCDCDCDCDCDCDCDCDCDCECECECECECECECECECECECECECECEC
+ECECECEEEEEEEEEEEEEEEEEEF3F3F3F3F3F3F3F3F3F3F3F3F2F2F2F2F2F2F2F2F2C5C5C5C5C5C5
+C5C5C5CBCBCBCBCBCBCBCBCBDFE0DFDFE0DFDFE0DFDBDBDBDBDBDBDBDBDBDBDBDBCBCBCBCBCBCB
+CBCBCBA9A9A9A9A9A9A9A9A9B0B0B0B0B0B0B0B0B0D6D6D5D6D6D5D6D6D5D2D2D2D2D2D2D2D2D2
+D2D2D2C0C0C0C0C0C0C0C0C0C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3DADADADADADADADADA
+DADADAD5D5D5D5D5D5D5D5D5BBBBBBBBBBBBBBBBBB8B8B8B8B8B8B8B8B8B838383838383838383
+BBBBBBBBBBBBBBBBBBBBBBBBD2D2D2D2D2D2D2D2D2C3C3C3C3C3C3C3C3C38A8A8A8A8A8A8A8A8A
+777777777777777777AAAAAAAAAAAAAAAAAAAAAAAACBCBCBCBCBCBCBCBCBD9D9D9D9D9D9D9D9D9
+E0E0E0E0E0E0E0E0E0D5D5D5D5D5D5D5D5D5D5D5D5D6D6D5D6D6D5D6D6D5D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0D0D0D0E3E3E3E3E3E3E3E3E3E2E2E2E2E2E2E2E2E2E2E2E2DADADADADADADADADA
+BDBDBDBDBDBDBDBDBDB0B0B0B0B0B0B0B0B0BDBDBDBDBDBDBDBDBDB4B4B4B4B4B4B4B4B4B4B4B4
+A3A3A3A3A3A3A3A3A39A9A9A9A9A9A9A9A9A9F9F9F9F9F9F9F9F9FA5A5A5A5A5A5A5A5A5A5A5A5
+9F9F9F9F9F9F9F9F9F9D9D9D9D9D9D9D9D9DA0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0909090
+9090909090909090908989898989898989898E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D8D8D8D
+8D8D8D8D8D8D8484848484848484848484848181818181818181818A8A8A8A8A8A8A8A8A969696
+9696969696969E9E9E9E9E9E9E9E9E9E9E9EA4A4A4A4A4A4A4A4A4919191919191919191646464
+646464646464636363636363636363979797979797979797979797BBBBBBBBBBBBBBBBBBBDBDBD
+BDBDBDBDBDBDB8B8B8B8B8B8B8B8B8CECECECECECECECECEE4E4E4E4E4E4E4E4E4E4E4E4ECECEC
+ECECECECECECD3D3D3D3D3D3D3D3D39F9F9F9F9F9F9F9F9F7C7C7C7C7C7C7C7C7C7C7C7C777777
+7777777777777A7A7A7A7A7A7A7A7A8080808080808080808585858585858585858A8A8A8A8A8A
+8A8A8A8A8A8A9191919191919191919A9A9A9A9A9A9A9A9AA2A2A2A2A2A2A2A2A2A8A8A8A8A8A8
+A8A8A8AEAEAEAEAEAEAEAEAEAEAEAEB0B0B0B0B0B0B0B0B0ADADADADADADADADADA8A8A8A8A8A8
+A8A8A8A1A1A1A1A1A1A1A1A1A1A1A19F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9D9D9D9D9D9D
+9D9D9D8B8B8B8B8B8B8B8B8B8F8F8F8F8F8F8F8F8F8F8F8FB4B4B4B4B4B4B4B4B4CACACACACACA
+CACACAD6D6D6D6D6D6D6D6D6E0E0E0E0E0E0E0E0E0AEAEAEAEAEAEAEAEAEAEAEAE787878787878
+7878787B7B7B7B7B7B7B7B7B989898989898989898B6B6B6B6B6B6B6B6B6B6B6B6BBBBBBBBBBBB
+BBBBBBB3B3B3B3B3B3B3B3B3A9A9A9A9A9A9A9A9A9919191919191919191949494949494949494
+949494BBBBBBBBBBBBBBBBBBD0D0D0D0D0D0D0D0D0C5C5C5C5C5C5C5C5C5BFBFBFBFBFBFBFBFBF
+DCDCDCDCDCDCDCDCDCDCDCDCECECECECECECECECECECECECECECECECECECEEEEEEEEEEEEEEEEEE
+F3F3F3F3F3F3F3F3F3F3F3F3F2F2F2F2F2F2F2F2F2C5C5C5C5C5C5C5C5C5ACACACACACACACACAC
+DEDEDEDEDEDEDEDEDEE6E6E6E6E6E6E6E6E6E6E6E6D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9
+E3E3E3E3E3E3E3E3E3E8E9E8E8E9E8E8E9E8CECECECECECECECECECECECE989898989898989898
+7B7B7B7B7B7B7B7B7BA8A8A8A8A8A8A8A8A8D4D4D4D4D4D4D4D4D4D4D4D4D7D7D7D7D7D7D7D7D7
+A8A8A8A8A8A8A8A8A8717171717171717171707070707070707070AEAEAEAEAEAEAEAEAEAEAEAE
+D4D4D4D4D4D4D4D4D4D5D5D5D5D5D5D5D5D5A2A2A2A2A2A2A2A2A2949494949494949494CBCBCB
+CBCBCBCBCBCBCBCBCBD7D7D7D7D7D7D7D7D7D0D0D0D0D0D0D0D0D0DBDBDBDBDBDBDBDBDBECECEC
+ECECECECECECECECECDADADADADADADADADAACACACACACACACACACA8A8A8A8A8A8A8A8A8D5D5D5
+D5D5D5D5D5D5E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4CCCCCCCCCCCCCCCCCCAFAFAF
+AFAFAFAFAFAFAEAEAEAEAEAEAEAEAEA8A8A8A8A8A8A8A8A8A8A8A8A3A3A3A3A3A3A3A3A3989898
+9898989898989999999999999999999D9D9D9D9D9D9D9D9D9D9D9D9999999999999999999E9E9E
+9E9E9E9E9E9EA1A1A1A1A1A1A1A1A1A0A0A0A0A0A0A0A0A09595959595959595959595959E9E9E
+9E9E9E9E9E9EA2A2A2A2A2A2A2A2A29F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9797979797979797979393939393939393939292929292929292929C9C9C9C9C9C
+9C9C9C9C9C9CA3A3A3A3A3A3A3A3A39D9D9D9D9D9D9D9D9D7272727272727272725C5C5C5C5C5C
+5C5C5C8C8C8C8C8C8C8C8C8C8C8C8CB4B4B4B4B4B4B4B4B4AFAFAFAFAFAFAFAFAFA4A4A4A4A4A4
+A4A4A4BABABABABABABABABAD1D1D1D1D1D1D1D1D1D1D1D1DFDFDFDFDFDFDFDFDFDBDBDBDBDBDB
+DBDBDBB6B6B6B6B6B6B6B6B68787878787878787878787877B7B7B7B7B7B7B7B7B7A7A7A7A7A7A
+7A7A7A7F7F7F7F7F7F7F7F7F828282828282828282888888888888888888888888949494949494
+9494949F9F9F9F9F9F9F9F9FA7A7A7A7A7A7A7A7A7ADADADADADADADADADB0B1B0B0B1B0B0B1B0
+B0B1B0B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1A8A8A8A8A8A8A8A8A89F9F9F9F9F9F9F9F9F
+9F9F9F9E9E9E9E9E9E9E9E9EA1A1A1A1A1A1A1A1A1A4A4A4A4A4A4A4A4A4B1B1B1B1B1B1B1B1B1
+CECECECECECECECECECECECEE6E6E6E6E6E6E6E6E6F2F2F2F2F2F2F2F2F2EDEDEDEDEDEDEDEDED
+D2D2D2D2D2D2D2D2D29A9A9A9A9A9A9A9A9A9A9A9A888888888888888888A2A2A2A2A2A2A2A2A2
+B8B8B8B8B8B8B8B8B8C2C2C2C2C2C2C2C2C2C2C2C2CACACACACACACACACABCBCBCBCBCBCBCBCBC
+9B9B9B9B9B9B9B9B9B7676767676767676768B8B8B8B8B8B8B8B8B8B8B8BBDBDBDBDBDBDBDBDBD
+CACACACACACACACACAB4B4B4B4B4B4B4B4B49D9D9D9D9D9D9D9D9DBABABABABABABABABABABABA
+D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7DCDCDCDCDCDCDCDCDCE8E9E8E8E9E8E8E9E8E8E9E8
+EEEEEEEEEEEEEEEEEEC3C3C3C3C3C3C3C3C3ACACACACACACACACACDEDEDEDEDEDEDEDEDEE6E6E6
+E6E6E6E6E6E6E6E6E6D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9E3E3E3E3E3E3E3E3E3E8E9E8
+E8E9E8E8E9E8CECECECECECECECECECECECE9898989898989898987B7B7B7B7B7B7B7B7BA8A8A8
+A8A8A8A8A8A8D4D4D4D4D4D4D4D4D4D4D4D4D7D7D7D7D7D7D7D7D7A8A8A8A8A8A8A8A8A8717171
+717171717171707070707070707070AEAEAEAEAEAEAEAEAEAEAEAED4D4D4D4D4D4D4D4D4D5D5D5
+D5D5D5D5D5D5A2A2A2A2A2A2A2A2A2949494949494949494CBCBCBCBCBCBCBCBCBCBCBCBD7D7D7
+D7D7D7D7D7D7D0D0D0D0D0D0D0D0D0DBDBDBDBDBDBDBDBDBECECECECECECECECECECECECDADADA
+DADADADADADAACACACACACACACACACA8A8A8A8A8A8A8A8A8D5D5D5D5D5D5D5D5D5E4E4E4E4E4E4
+E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4CCCCCCCCCCCCCCCCCCAFAFAFAFAFAFAFAFAFAEAEAEAEAEAE
+AEAEAEA8A8A8A8A8A8A8A8A8A8A8A8A3A3A3A3A3A3A3A3A3989898989898989898999999999999
+9999999D9D9D9D9D9D9D9D9D9D9D9D9999999999999999999E9E9E9E9E9E9E9E9EA1A1A1A1A1A1
+A1A1A1A0A0A0A0A0A0A0A0A09595959595959595959595959E9E9E9E9E9E9E9E9EA2A2A2A2A2A2
+A2A2A29F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E979797979797
+9797979393939393939393939292929292929292929C9C9C9C9C9C9C9C9C9C9C9CA3A3A3A3A3A3
+A3A3A39D9D9D9D9D9D9D9D9D7272727272727272725C5C5C5C5C5C5C5C5C8C8C8C8C8C8C8C8C8C
+8C8C8CB4B4B4B4B4B4B4B4B4AFAFAFAFAFAFAFAFAFA4A4A4A4A4A4A4A4A4BABABABABABABABABA
+D1D1D1D1D1D1D1D1D1D1D1D1DFDFDFDFDFDFDFDFDFDBDBDBDBDBDBDBDBDBB6B6B6B6B6B6B6B6B6
+8787878787878787878787877B7B7B7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A7F7F7F7F7F7F7F7F7F
+8282828282828282828888888888888888888888889494949494949494949F9F9F9F9F9F9F9F9F
+A7A7A7A7A7A7A7A7A7ADADADADADADADADADB0B1B0B0B1B0B0B1B0B0B1B0B3B3B3B3B3B3B3B3B3
+B1B1B1B1B1B1B1B1B1A8A8A8A8A8A8A8A8A89F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E
+A1A1A1A1A1A1A1A1A1A4A4A4A4A4A4A4A4A4B1B1B1B1B1B1B1B1B1CECECECECECECECECECECECE
+E6E6E6E6E6E6E6E6E6F2F2F2F2F2F2F2F2F2EDEDEDEDEDEDEDEDEDD2D2D2D2D2D2D2D2D29A9A9A
+9A9A9A9A9A9A9A9A9A888888888888888888A2A2A2A2A2A2A2A2A2B8B8B8B8B8B8B8B8B8C2C2C2
+C2C2C2C2C2C2C2C2C2CACACACACACACACACABCBCBCBCBCBCBCBCBC9B9B9B9B9B9B9B9B9B767676
+7676767676768B8B8B8B8B8B8B8B8B8B8B8BBDBDBDBDBDBDBDBDBDCACACACACACACACACAB4B4B4
+B4B4B4B4B4B49D9D9D9D9D9D9D9D9DBABABABABABABABABABABABAD8D8D8D8D8D8D8D8D8D7D7D7
+D7D7D7D7D7D7DCDCDCDCDCDCDCDCDCE8E9E8E8E9E8E8E9E8E8E9E8EEEEEEEEEEEEEEEEEEC3C3C3
+C3C3C3C3C3C3BABABABABABABABABAD5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5BDBDBD
+BDBDBDBDBDBDCACACACACACACACACAE8E9E8E8E9E8E8E9E8E9E9E9E9E9E9E9E9E9CACACACACACA
+CACACACACACA8686868686868686866868686868686868689E9E9E9E9E9E9E9E9ED1D1D1D1D1D1
+D1D1D1D1D1D1D6D6D6D6D6D6D6D6D6B0B0B0B0B0B0B0B0B0868686868686868686969696969696
+969696C0C0C0C0C0C0C0C0C0C0C0C0DEDEDEDEDEDEDEDEDEE1E1E1E1E1E1E1E1E1D2D2D2D2D2D2
+D2D2D2CFCFCFCFCFCFCFCFCFD6D6D6D6D6D6D6D6D6D6D6D6CCCCCCCCCCCCCCCCCCCDCDCDCDCDCD
+CDCDCDE4E4E4E4E4E4E4E4E4EDEDEDEDEDEDEDEDEDEDEDEDC1C1C1C1C1C1C1C1C17C7C7C7C7C7C
+7C7C7C808080808080808080CBCBCBCBCBCBCBCBCBE9E9E9E9E9E9E9E9E9E9E9E9DFDFDFDFDFDF
+DFDFDFB6B6B6B6B6B6B6B6B68A8A8A8A8A8A8A8A8A868686868686868686999999999999999999
+999999A8A8A8A8A8A8A8A8A89C9C9C9C9C9C9C9C9C959595959595959595979797979797979797
+9797979E9E9E9E9E9E9E9E9EA0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F999999999999999999
+9A9A9A9A9A9A9A9A9A9A9A9AA8A8A8A8A8A8A8A8A89F9F9F9F9F9F9F9F9F989898989898989898
+A2A2A2A2A2A2A2A2A2B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B4B4B4B4B4B4B4B4B4
+A2A2A2A2A2A2A2A2A2989898989898989898989898A3A3A3A3A3A3A3A3A3A5A5A5A5A5A5A5A5A5
+7F7F7F7F7F7F7F7F7F5656565656565656566C6C6C6C6C6C6C6C6C6C6C6C9A9A9A9A9A9A9A9A9A
+A4A4A4A4A4A4A4A4A49B9B9B9B9B9B9B9B9BA1A1A1A1A1A1A1A1A1AAAAAAAAAAAAAAAAAAAAAAAA
+BBBBBBBBBBBBBBBBBBD2D2D2D2D2D2D2D2D2CBCBCBCBCBCBCBCBCB959595959595959595959595
+7F7F7F7F7F7F7F7F7F7D7D7D7D7D7D7D7D7D808080808080808080818181818181818181878787
+878787878787878787949494949494949494A3A3A3A3A3A3A3A3A3ADADADADADADADADADB4B4B4
+B4B4B4B4B4B4B7B7B7B7B7B7B7B7B7B7B7B7B8B8B8B8B8B8B8B8B8B3B3B3B3B3B3B3B3B3A8A8A8
+A8A8A8A8A8A89E9E9E9E9E9E9E9E9E9E9E9EA0A0A0A0A0A0A0A0A0ADADADADADADADADADB8B8B8
+B8B8B8B8B8B8D7D7D7D7D7D7D7D7D7EEEEEEEEEEEEEEEEEEEEEEEEF5F5F5F5F5F5F5F5F5EDEDED
+EDEDEDEDEDEDD6D6D5D6D6D5D6D6D5A7A7A7A7A7A7A7A7A7909090909090909090909090A2A2A2
+A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2BEBEBEBEBEBEBEBEBEC4C4C4C4C4C4C4C4C4C4C4C4C9C9C9
+C9C9C9C9C9C9C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B19A9A9A9A9A9A9A9A9AACACACACACAC
+ACACACACACACCACACACACACACACACAC4C4C4C4C4C4C4C4C4ACACACACACACACACACA2A2A2A2A2A2
+A2A2A2AFAFAFAFAFAFAFAFAFAFAFAFC6C6C6C6C6C6C6C6C6C9C9C9C9C9C9C9C9C9C2C2C2C2C2C2
+C2C2C2C6C6C6C6C6C6C6C6C6C6C6C6D9D9D9D9D9D9D9D9D9B4B4B4B4B4B4B4B4B4BABABABABABA
+BABABAD5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5BDBDBDBDBDBDBDBDBDCACACACACACA
+CACACAE8E9E8E8E9E8E8E9E8E9E9E9E9E9E9E9E9E9CACACACACACACACACACACACA868686868686
+8686866868686868686868689E9E9E9E9E9E9E9E9ED1D1D1D1D1D1D1D1D1D1D1D1D6D6D6D6D6D6
+D6D6D6B0B0B0B0B0B0B0B0B0868686868686868686969696969696969696C0C0C0C0C0C0C0C0C0
+C0C0C0DEDEDEDEDEDEDEDEDEE1E1E1E1E1E1E1E1E1D2D2D2D2D2D2D2D2D2CFCFCFCFCFCFCFCFCF
+D6D6D6D6D6D6D6D6D6D6D6D6CCCCCCCCCCCCCCCCCCCDCDCDCDCDCDCDCDCDE4E4E4E4E4E4E4E4E4
+EDEDEDEDEDEDEDEDEDEDEDEDC1C1C1C1C1C1C1C1C17C7C7C7C7C7C7C7C7C808080808080808080
+CBCBCBCBCBCBCBCBCBE9E9E9E9E9E9E9E9E9E9E9E9DFDFDFDFDFDFDFDFDFB6B6B6B6B6B6B6B6B6
+8A8A8A8A8A8A8A8A8A868686868686868686999999999999999999999999A8A8A8A8A8A8A8A8A8
+9C9C9C9C9C9C9C9C9C9595959595959595959797979797979797979797979E9E9E9E9E9E9E9E9E
+A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9999999999999999999A9A9A9A9A9A9A9A9A9A9A9A
+A8A8A8A8A8A8A8A8A89F9F9F9F9F9F9F9F9F989898989898989898A2A2A2A2A2A2A2A2A2B7B7B7
+B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B4B4B4B4B4B4B4B4B4A2A2A2A2A2A2A2A2A2989898
+989898989898989898A3A3A3A3A3A3A3A3A3A5A5A5A5A5A5A5A5A57F7F7F7F7F7F7F7F7F565656
+5656565656566C6C6C6C6C6C6C6C6C6C6C6C9A9A9A9A9A9A9A9A9AA4A4A4A4A4A4A4A4A49B9B9B
+9B9B9B9B9B9BA1A1A1A1A1A1A1A1A1AAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBD2D2D2
+D2D2D2D2D2D2CBCBCBCBCBCBCBCBCB9595959595959595959595957F7F7F7F7F7F7F7F7F7D7D7D
+7D7D7D7D7D7D808080808080808080818181818181818181878787878787878787878787949494
+949494949494A3A3A3A3A3A3A3A3A3ADADADADADADADADADB4B4B4B4B4B4B4B4B4B7B7B7B7B7B7
+B7B7B7B7B7B7B8B8B8B8B8B8B8B8B8B3B3B3B3B3B3B3B3B3A8A8A8A8A8A8A8A8A89E9E9E9E9E9E
+9E9E9E9E9E9EA0A0A0A0A0A0A0A0A0ADADADADADADADADADB8B8B8B8B8B8B8B8B8D7D7D7D7D7D7
+D7D7D7EEEEEEEEEEEEEEEEEEEEEEEEF5F5F5F5F5F5F5F5F5EDEDEDEDEDEDEDEDEDD6D6D5D6D6D5
+D6D6D5A7A7A7A7A7A7A7A7A7909090909090909090909090A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2
+B2B2B2BEBEBEBEBEBEBEBEBEC4C4C4C4C4C4C4C4C4C4C4C4C9C9C9C9C9C9C9C9C9C1C1C1C1C1C1
+C1C1C1B1B1B1B1B1B1B1B1B19A9A9A9A9A9A9A9A9AACACACACACACACACACACACACCACACACACACA
+CACACAC4C4C4C4C4C4C4C4C4ACACACACACACACACACA2A2A2A2A2A2A2A2A2AFAFAFAFAFAFAFAFAF
+AFAFAFC6C6C6C6C6C6C6C6C6C9C9C9C9C9C9C9C9C9C2C2C2C2C2C2C2C2C2C6C6C6C6C6C6C6C6C6
+C6C6C6D9D9D9D9D9D9D9D9D9B4B4B4B4B4B4B4B4B4BABABABABABABABABAD5D5D5D5D5D5D5D5D5
+D5D5D5D5D5D5D5D5D5D5D5D5BDBDBDBDBDBDBDBDBDCACACACACACACACACAE8E9E8E8E9E8E8E9E8
+E9E9E9E9E9E9E9E9E9CACACACACACACACACACACACA868686868686868686686868686868686868
+9E9E9E9E9E9E9E9E9ED1D1D1D1D1D1D1D1D1D1D1D1D6D6D6D6D6D6D6D6D6B0B0B0B0B0B0B0B0B0
+868686868686868686969696969696969696C0C0C0C0C0C0C0C0C0C0C0C0DEDEDEDEDEDEDEDEDE
+E1E1E1E1E1E1E1E1E1D2D2D2D2D2D2D2D2D2CFCFCFCFCFCFCFCFCFD6D6D6D6D6D6D6D6D6D6D6D6
+CCCCCCCCCCCCCCCCCCCDCDCDCDCDCDCDCDCDE4E4E4E4E4E4E4E4E4EDEDEDEDEDEDEDEDEDEDEDED
+C1C1C1C1C1C1C1C1C17C7C7C7C7C7C7C7C7C808080808080808080CBCBCBCBCBCBCBCBCBE9E9E9
+E9E9E9E9E9E9E9E9E9DFDFDFDFDFDFDFDFDFB6B6B6B6B6B6B6B6B68A8A8A8A8A8A8A8A8A868686
+868686868686999999999999999999999999A8A8A8A8A8A8A8A8A89C9C9C9C9C9C9C9C9C959595
+9595959595959797979797979797979797979E9E9E9E9E9E9E9E9EA0A0A0A0A0A0A0A0A09F9F9F
+9F9F9F9F9F9F9999999999999999999A9A9A9A9A9A9A9A9A9A9A9AA8A8A8A8A8A8A8A8A89F9F9F
+9F9F9F9F9F9F989898989898989898A2A2A2A2A2A2A2A2A2B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7
+B7B7B7B7B7B7B4B4B4B4B4B4B4B4B4A2A2A2A2A2A2A2A2A2989898989898989898989898A3A3A3
+A3A3A3A3A3A3A5A5A5A5A5A5A5A5A57F7F7F7F7F7F7F7F7F5656565656565656566C6C6C6C6C6C
+6C6C6C6C6C6C9A9A9A9A9A9A9A9A9AA4A4A4A4A4A4A4A4A49B9B9B9B9B9B9B9B9BA1A1A1A1A1A1
+A1A1A1AAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBD2D2D2D2D2D2D2D2D2CBCBCBCBCBCB
+CBCBCB9595959595959595959595957F7F7F7F7F7F7F7F7F7D7D7D7D7D7D7D7D7D808080808080
+808080818181818181818181878787878787878787878787949494949494949494A3A3A3A3A3A3
+A3A3A3ADADADADADADADADADB4B4B4B4B4B4B4B4B4B7B7B7B7B7B7B7B7B7B7B7B7B8B8B8B8B8B8
+B8B8B8B3B3B3B3B3B3B3B3B3A8A8A8A8A8A8A8A8A89E9E9E9E9E9E9E9E9E9E9E9EA0A0A0A0A0A0
+A0A0A0ADADADADADADADADADB8B8B8B8B8B8B8B8B8D7D7D7D7D7D7D7D7D7EEEEEEEEEEEEEEEEEE
+EEEEEEF5F5F5F5F5F5F5F5F5EDEDEDEDEDEDEDEDEDD6D6D5D6D6D5D6D6D5A7A7A7A7A7A7A7A7A7
+909090909090909090909090A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2BEBEBEBEBEBEBEBEBE
+C4C4C4C4C4C4C4C4C4C4C4C4C9C9C9C9C9C9C9C9C9C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1
+9A9A9A9A9A9A9A9A9AACACACACACACACACACACACACCACACACACACACACACAC4C4C4C4C4C4C4C4C4
+ACACACACACACACACACA2A2A2A2A2A2A2A2A2AFAFAFAFAFAFAFAFAFAFAFAFC6C6C6C6C6C6C6C6C6
+C9C9C9C9C9C9C9C9C9C2C2C2C2C2C2C2C2C2C6C6C6C6C6C6C6C6C6C6C6C6D9D9D9D9D9D9D9D9D9
+B4B4B4B4B4B4B4B4B4D1D1D1D1D1D1D1D1D1CECECECECECECECECEADADADADADADADADADADADAD
+838383838383838383A3A3A3A3A3A3A3A3A3D6D6D6D6D6D6D6D6D6E0E0E0E0E0E0E0E0E0D0D0D0
+D0D0D0D0D0D0D0D0D09A9A9A9A9A9A9A9A9A919191919191919191BDBDBDBDBDBDBDBDBDD6D6D5
+D6D6D5D6D6D5D6D6D5D9D9D9D9D9D9D9D9D9D0D0D0D0D0D0D0D0D0C2C2C2C2C2C2C2C2C2C5C5C5
+C5C5C5C5C5C5D3D3D3D3D3D3D3D3D3D3D3D3DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDFDFDF
+DFDFDFDFDFDFE0E0E0E0E0E0E0E0E0B8B8B8B8B8B8B8B8B8B8B8B8A8A8A8A8A8A8A8A8A8CACACA
+CACACACACACAE5E5E5E5E5E5E5E5E5E3E3E3E3E3E3E3E3E3E3E3E3ACACACACACACACACAC646464
+6464646464646B6B6B6B6B6B6B6B6BB8B8B8B8B8B8B8B8B8E4E4E4E4E4E4E4E4E4E4E4E4DADADA
+DADADADADADAA9A9A9A9A9A9A9A9A97474747474747474747878787878787878789E9E9E9E9E9E
+9E9E9E9E9E9EB5B5B5B5B5B5B5B5B5B3B3B3B3B3B3B3B3B3A7A7A7A7A7A7A7A7A79B9B9B9B9B9B
+9B9B9B9B9B9BA1A1A1A1A1A1A1A1A19D9D9D9D9D9D9D9D9D999999999999999999919191919191
+9191919A9A9A9A9A9A9A9A9A9A9A9AA5A5A5A5A5A5A5A5A5989898989898989898999999999999
+999999A7A7A7A7A7A7A7A7A7B4B4B4B4B4B4B4B4B4B4B4B4B9B9B9B9B9B9B9B9B9C5C5C5C5C5C5
+C5C5C5C3C3C3C3C3C3C3C3C3B0B1B0B0B1B0B0B1B0B0B1B0AAAAAAAAAAAAAAAAAAAEAEAEAEAEAE
+AEAEAE898989898989898989565656565656565656656565656565656565656565949494949494
+949494ABABABABABABABABABACACACACACACACACACABABABABABABABABABABABABABABABABABAB
+ABABABB5B5B5B5B5B5B5B5B5CDCDCDCDCDCDCDCDCDC7C7C7C7C7C7C7C7C7969696969696969696
+969696828282828282828282818181818181818181818181818181818181838383838383838383
+8A8A8A8A8A8A8A8A8A8A8A8A959595959595959595A2A2A2A2A2A2A2A2A2AFAFAFAFAFAFAFAFAF
+B8B8B8B8B8B8B8B8B8BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB4B4B4B4B4B4B4B4B4
+ACACACACACACACACACAAAAAAAAAAAAAAAAAAAAAAAAB9B9B9B9B9B9B9B9B9CBCBCBCBCBCBCBCBCB
+D2D2D2D2D2D2D2D2D2EBEBEBEBEBEBEBEBEBECECECECECECECECECECECECDEDEDEDEDEDEDEDEDE
+B4B4B4B4B4B4B4B4B49090909090909090908E8E8E8E8E8E8E8E8E989898989898989898989898
+AEAEAEAEAEAEAEAEAEB9B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBBBBC1C1C1C1C1C1C1C1C1C1C1C1
+C1C1C1C1C1C1C1C1C1BABABABABABABABABABABABABABABABABABAB7B7B7B7B7B7B7B7B7C7C7C7
+C7C7C7C7C7C7C7C7C7D1D1D1D1D1D1D1D1D1B3B3B3B3B3B3B3B3B38E8E8E8E8E8E8E8E8EA1A1A1
+A1A1A1A1A1A1B6B6B6B6B6B6B6B6B6B6B6B6BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAAAAAA
+AAAAAAAAAAAA9E9E9E9E9E9E9E9E9E9E9E9EBBBBBBBBBBBBBBBBBBB7B7B7B7B7B7B7B7B7D1D1D1
+D1D1D1D1D1D1CECECECECECECECECEADADADADADADADADADADADAD838383838383838383A3A3A3
+A3A3A3A3A3A3D6D6D6D6D6D6D6D6D6E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D09A9A9A
+9A9A9A9A9A9A919191919191919191BDBDBDBDBDBDBDBDBDD6D6D5D6D6D5D6D6D5D6D6D5D9D9D9
+D9D9D9D9D9D9D0D0D0D0D0D0D0D0D0C2C2C2C2C2C2C2C2C2C5C5C5C5C5C5C5C5C5D3D3D3D3D3D3
+D3D3D3D3D3D3DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDFDFDFDFDFDFDFDFDFE0E0E0E0E0E0
+E0E0E0B8B8B8B8B8B8B8B8B8B8B8B8A8A8A8A8A8A8A8A8A8CACACACACACACACACAE5E5E5E5E5E5
+E5E5E5E3E3E3E3E3E3E3E3E3E3E3E3ACACACACACACACACAC6464646464646464646B6B6B6B6B6B
+6B6B6BB8B8B8B8B8B8B8B8B8E4E4E4E4E4E4E4E4E4E4E4E4DADADADADADADADADAA9A9A9A9A9A9
+A9A9A97474747474747474747878787878787878789E9E9E9E9E9E9E9E9E9E9E9EB5B5B5B5B5B5
+B5B5B5B3B3B3B3B3B3B3B3B3A7A7A7A7A7A7A7A7A79B9B9B9B9B9B9B9B9B9B9B9BA1A1A1A1A1A1
+A1A1A19D9D9D9D9D9D9D9D9D9999999999999999999191919191919191919A9A9A9A9A9A9A9A9A
+9A9A9AA5A5A5A5A5A5A5A5A5989898989898989898999999999999999999A7A7A7A7A7A7A7A7A7
+B4B4B4B4B4B4B4B4B4B4B4B4B9B9B9B9B9B9B9B9B9C5C5C5C5C5C5C5C5C5C3C3C3C3C3C3C3C3C3
+B0B1B0B0B1B0B0B1B0B0B1B0AAAAAAAAAAAAAAAAAAAEAEAEAEAEAEAEAEAE898989898989898989
+565656565656565656656565656565656565656565949494949494949494ABABABABABABABABAB
+ACACACACACACACACACABABABABABABABABABABABABABABABABABABABABABB5B5B5B5B5B5B5B5B5
+CDCDCDCDCDCDCDCDCDC7C7C7C7C7C7C7C7C7969696969696969696969696828282828282828282
+8181818181818181818181818181818181818383838383838383838A8A8A8A8A8A8A8A8A8A8A8A
+959595959595959595A2A2A2A2A2A2A2A2A2AFAFAFAFAFAFAFAFAFB8B8B8B8B8B8B8B8B8BBBBBB
+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB4B4B4B4B4B4B4B4B4ACACACACACACACACACAAAAAA
+AAAAAAAAAAAAAAAAAAB9B9B9B9B9B9B9B9B9CBCBCBCBCBCBCBCBCBD2D2D2D2D2D2D2D2D2EBEBEB
+EBEBEBEBEBEBECECECECECECECECECECECECDEDEDEDEDEDEDEDEDEB4B4B4B4B4B4B4B4B4909090
+9090909090908E8E8E8E8E8E8E8E8E989898989898989898989898AEAEAEAEAEAEAEAEAEB9B9B9
+B9B9B9B9B9B9BBBBBBBBBBBBBBBBBBC1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1BABABA
+BABABABABABABABABABABABABABABAB7B7B7B7B7B7B7B7B7C7C7C7C7C7C7C7C7C7C7C7C7D1D1D1
+D1D1D1D1D1D1B3B3B3B3B3B3B3B3B38E8E8E8E8E8E8E8E8EA1A1A1A1A1A1A1A1A1B6B6B6B6B6B6
+B6B6B6B6B6B6BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAAAAAAAAAAAAAAAAAA9E9E9E9E9E9E
+9E9E9E9E9E9EBBBBBBBBBBBBBBBBBBB7B7B7B7B7B7B7B7B7D6D6D5D6D6D5D6D6D5C1C1C1C1C1C1
+C1C1C1929292929292929292929292868686868686868686B7B7B7B7B7B7B7B7B7D4D4D4D4D4D4
+D4D4D4D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7C5C5C5C5C5C5C5C5C5C3C3C3C3C3C3
+C3C3C3D1D1D1D1D1D1D1D1D1D8D8D8D8D8D8D8D8D8D8D8D8D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7
+D7D7D7D1D1D1D1D1D1D1D1D1C3C3C3C3C3C3C3C3C3BDBDBDBDBDBDBDBDBDBDBDBDCBCBCBCBCBCB
+CBCBCBDADADADADADADADADAE6E6E6E6E6E6E6E6E6DBDBDBDBDBDBDBDBDB909090909090909090
+909090777777777777777777B6B6B6B6B6B6B6B6B6E1E1E1E1E1E1E1E1E1D8D8D8D8D8D8D8D8D8
+D8D8D89292929292929292925D5D5D5D5D5D5D5D5D7E7E7E7E7E7E7E7E7EBFBFBFBFBFBFBFBFBF
+E6E6E6E6E6E6E6E6E6E6E6E6DBDBDBDBDBDBDBDBDBBABABABABABABABABA9E9E9E9E9E9E9E9E9E
+A8A8A8A8A8A8A8A8A8C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B8B8B8B8B8B8B8B8B8
+A8A8A8A8A8A8A8A8A8A3A3A3A3A3A3A3A3A3A3A3A3A5A5A5A5A5A5A5A5A59A9A9A9A9A9A9A9A9A
+9393939393939393939696969696969696969C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E
+9090909090909090909F9F9F9F9F9F9F9F9FB0B0B0B0B0B0B0B0B0B0B1B0B0B1B0B0B1B0B0B1B0
+B2B2B2B2B2B2B2B2B2C9C9C9C9C9C9C9C9C9D6D6D6D6D6D6D6D6D6CFCFCFCFCFCFCFCFCFCFCFCF
+C4C4C4C4C4C4C4C4C4B2B2B2B2B2B2B2B2B2909090909090909090616161616161616161616161
+6161616161616161618B8B8B8B8B8B8B8B8BAEAEAEAEAEAEAEAEAEB9B9B9B9B9B9B9B9B9B4B4B4
+B4B4B4B4B4B4A8A8A8A8A8A8A8A8A8A8A8A8A2A2A2A2A2A2A2A2A2A8A8A8A8A8A8A8A8A8ADADAD
+ADADADADADAD909090909090909090909090848484848484848484838383838383838383848484
+8484848484848787878787878787878B8B8B8B8B8B8B8B8B8B8B8B9393939393939393939F9F9F
+9F9F9F9F9F9FADADADADADADADADADB8B8B8B8B8B8B8B8B8BEBEBEBEBEBEBEBEBEBEBEBEBFBFBF
+BFBFBFBFBFBFBDBDBDBDBDBDBDBDBDC3C3C3C3C3C3C3C3C3D0D0D0D0D0D0D0D0D0D0D0D0DBDBDB
+DBDBDBDBDBDBDDDDDDDDDDDDDDDDDDD2D2D2D2D2D2D2D2D2D4D4D4D4D4D4D4D4D4B1B1B1B1B1B1
+B1B1B1B1B1B18989898989898989896A6A6A6A6A6A6A6A6A7A7A7A7A7A7A7A7A7A979797979797
+9797979B9B9B9B9B9B9B9B9B9B9B9BAAAAAAAAAAAAAAAAAAB8B8B8B8B8B8B8B8B8BABABABABABA
+BABABABBBBBBBBBBBBBBBBBBBBBBBBB8B8B8B8B8B8B8B8B8ADADADADADADADADADA9A9A9A9A9A9
+A9A9A99E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEC5C5C5C5C5C5C5C5C5B0B0B0B0B0B0
+B0B0B0909090909090909090ABABABABABABABABABBDBDBDBDBDBDBDBDBDBDBDBDB8B8B8B8B8B8
+B8B8B8ABABABABABABABABABACACACACACACACACACB5B5B5B5B5B5B5B5B5B5B5B5C5C5C5C5C5C5
+C5C5C5B8B8B8B8B8B8B8B8B8D6D6D5D6D6D5D6D6D5C1C1C1C1C1C1C1C1C1929292929292929292
+929292868686868686868686B7B7B7B7B7B7B7B7B7D4D4D4D4D4D4D4D4D4D8D8D8D8D8D8D8D8D8
+D7D7D7D7D7D7D7D7D7D7D7D7C5C5C5C5C5C5C5C5C5C3C3C3C3C3C3C3C3C3D1D1D1D1D1D1D1D1D1
+D8D8D8D8D8D8D8D8D8D8D8D8D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D1D1D1D1D1D1D1D1D1
+C3C3C3C3C3C3C3C3C3BDBDBDBDBDBDBDBDBDBDBDBDCBCBCBCBCBCBCBCBCBDADADADADADADADADA
+E6E6E6E6E6E6E6E6E6DBDBDBDBDBDBDBDBDB909090909090909090909090777777777777777777
+B6B6B6B6B6B6B6B6B6E1E1E1E1E1E1E1E1E1D8D8D8D8D8D8D8D8D8D8D8D8929292929292929292
+5D5D5D5D5D5D5D5D5D7E7E7E7E7E7E7E7E7EBFBFBFBFBFBFBFBFBFE6E6E6E6E6E6E6E6E6E6E6E6
+DBDBDBDBDBDBDBDBDBBABABABABABABABABA9E9E9E9E9E9E9E9E9EA8A8A8A8A8A8A8A8A8C2C2C2
+C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B8B8B8B8B8B8B8B8B8A8A8A8A8A8A8A8A8A8A3A3A3
+A3A3A3A3A3A3A3A3A3A5A5A5A5A5A5A5A5A59A9A9A9A9A9A9A9A9A939393939393939393969696
+9696969696969C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9090909090909090909F9F9F
+9F9F9F9F9F9FB0B0B0B0B0B0B0B0B0B0B1B0B0B1B0B0B1B0B0B1B0B2B2B2B2B2B2B2B2B2C9C9C9
+C9C9C9C9C9C9D6D6D6D6D6D6D6D6D6CFCFCFCFCFCFCFCFCFCFCFCFC4C4C4C4C4C4C4C4C4B2B2B2
+B2B2B2B2B2B29090909090909090906161616161616161616161616161616161616161618B8B8B
+8B8B8B8B8B8BAEAEAEAEAEAEAEAEAEB9B9B9B9B9B9B9B9B9B4B4B4B4B4B4B4B4B4A8A8A8A8A8A8
+A8A8A8A8A8A8A2A2A2A2A2A2A2A2A2A8A8A8A8A8A8A8A8A8ADADADADADADADADAD909090909090
+909090909090848484848484848484838383838383838383848484848484848484878787878787
+8787878B8B8B8B8B8B8B8B8B8B8B8B9393939393939393939F9F9F9F9F9F9F9F9FADADADADADAD
+ADADADB8B8B8B8B8B8B8B8B8BEBEBEBEBEBEBEBEBEBEBEBEBFBFBFBFBFBFBFBFBFBDBDBDBDBDBD
+BDBDBDC3C3C3C3C3C3C3C3C3D0D0D0D0D0D0D0D0D0D0D0D0DBDBDBDBDBDBDBDBDBDDDDDDDDDDDD
+DDDDDDD2D2D2D2D2D2D2D2D2D4D4D4D4D4D4D4D4D4B1B1B1B1B1B1B1B1B1B1B1B1898989898989
+8989896A6A6A6A6A6A6A6A6A7A7A7A7A7A7A7A7A7A9797979797979797979B9B9B9B9B9B9B9B9B
+9B9B9BAAAAAAAAAAAAAAAAAAB8B8B8B8B8B8B8B8B8BABABABABABABABABABBBBBBBBBBBBBBBBBB
+BBBBBBB8B8B8B8B8B8B8B8B8ADADADADADADADADADA9A9A9A9A9A9A9A9A99E9E9E9E9E9E9E9E9E
+AEAEAEAEAEAEAEAEAEAEAEAEC5C5C5C5C5C5C5C5C5B0B0B0B0B0B0B0B0B0909090909090909090
+ABABABABABABABABABBDBDBDBDBDBDBDBDBDBDBDBDB8B8B8B8B8B8B8B8B8ABABABABABABABABAB
+ACACACACACACACACACB5B5B5B5B5B5B5B5B5B5B5B5C5C5C5C5C5C5C5C5C5B8B8B8B8B8B8B8B8B8
+D6D6D5D6D6D5D6D6D5C1C1C1C1C1C1C1C1C1929292929292929292929292868686868686868686
+B7B7B7B7B7B7B7B7B7D4D4D4D4D4D4D4D4D4D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7
+C5C5C5C5C5C5C5C5C5C3C3C3C3C3C3C3C3C3D1D1D1D1D1D1D1D1D1D8D8D8D8D8D8D8D8D8D8D8D8
+D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D1D1D1D1D1D1D1D1D1C3C3C3C3C3C3C3C3C3BDBDBD
+BDBDBDBDBDBDBDBDBDCBCBCBCBCBCBCBCBCBDADADADADADADADADAE6E6E6E6E6E6E6E6E6DBDBDB
+DBDBDBDBDBDB909090909090909090909090777777777777777777B6B6B6B6B6B6B6B6B6E1E1E1
+E1E1E1E1E1E1D8D8D8D8D8D8D8D8D8D8D8D89292929292929292925D5D5D5D5D5D5D5D5D7E7E7E
+7E7E7E7E7E7EBFBFBFBFBFBFBFBFBFE6E6E6E6E6E6E6E6E6E6E6E6DBDBDBDBDBDBDBDBDBBABABA
+BABABABABABA9E9E9E9E9E9E9E9E9EA8A8A8A8A8A8A8A8A8C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2
+C2C2C2C2C2C2B8B8B8B8B8B8B8B8B8A8A8A8A8A8A8A8A8A8A3A3A3A3A3A3A3A3A3A3A3A3A5A5A5
+A5A5A5A5A5A59A9A9A9A9A9A9A9A9A9393939393939393939696969696969696969C9C9C9C9C9C
+9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9090909090909090909F9F9F9F9F9F9F9F9FB0B0B0B0B0B0
+B0B0B0B0B1B0B0B1B0B0B1B0B0B1B0B2B2B2B2B2B2B2B2B2C9C9C9C9C9C9C9C9C9D6D6D6D6D6D6
+D6D6D6CFCFCFCFCFCFCFCFCFCFCFCFC4C4C4C4C4C4C4C4C4B2B2B2B2B2B2B2B2B2909090909090
+9090906161616161616161616161616161616161616161618B8B8B8B8B8B8B8B8BAEAEAEAEAEAE
+AEAEAEB9B9B9B9B9B9B9B9B9B4B4B4B4B4B4B4B4B4A8A8A8A8A8A8A8A8A8A8A8A8A2A2A2A2A2A2
+A2A2A2A8A8A8A8A8A8A8A8A8ADADADADADADADADAD909090909090909090909090848484848484
+8484848383838383838383838484848484848484848787878787878787878B8B8B8B8B8B8B8B8B
+8B8B8B9393939393939393939F9F9F9F9F9F9F9F9FADADADADADADADADADB8B8B8B8B8B8B8B8B8
+BEBEBEBEBEBEBEBEBEBEBEBEBFBFBFBFBFBFBFBFBFBDBDBDBDBDBDBDBDBDC3C3C3C3C3C3C3C3C3
+D0D0D0D0D0D0D0D0D0D0D0D0DBDBDBDBDBDBDBDBDBDDDDDDDDDDDDDDDDDDD2D2D2D2D2D2D2D2D2
+D4D4D4D4D4D4D4D4D4B1B1B1B1B1B1B1B1B1B1B1B18989898989898989896A6A6A6A6A6A6A6A6A
+7A7A7A7A7A7A7A7A7A9797979797979797979B9B9B9B9B9B9B9B9B9B9B9BAAAAAAAAAAAAAAAAAA
+B8B8B8B8B8B8B8B8B8BABABABABABABABABABBBBBBBBBBBBBBBBBBBBBBBBB8B8B8B8B8B8B8B8B8
+ADADADADADADADADADA9A9A9A9A9A9A9A9A99E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAE
+C5C5C5C5C5C5C5C5C5B0B0B0B0B0B0B0B0B0909090909090909090ABABABABABABABABABBDBDBD
+BDBDBDBDBDBDBDBDBDB8B8B8B8B8B8B8B8B8ABABABABABABABABABACACACACACACACACACB5B5B5
+B5B5B5B5B5B5B5B5B5C5C5C5C5C5C5C5C5C5B8B8B8B8B8B8B8B8B8E1E1E1E1E1E1E1E1E1CACACA
+CACACACACACAA1A1A1A1A1A1A1A1A1A1A1A19E9E9E9E9E9E9E9E9EC5C5C5C5C5C5C5C5C5D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0DDDDDDDDDDDDDDDDDDDDDDDDD0D0D0D0D0D0D0D0D0C0C0C0
+C0C0C0C0C0C0B7B7B7B7B7B7B7B7B7C1C1C1C1C1C1C1C1C1C1C1C1D5D5D5D5D5D5D5D5D5D0D0D0
+D0D0D0D0D0D0BEBEBEBEBEBEBEBEBE9393939393939393937D7D7D7D7D7D7D7D7D7D7D7DA8A8A8
+A8A8A8A8A8A8D8D8D8D8D8D8D8D8D8E0E0E0E0E0E0E0E0E0C4C4C4C4C4C4C4C4C4828282828282
+8282828282826D6D6D6D6D6D6D6D6DAEAEAEAEAEAEAEAEAEE0E0E0E0E0E0E0E0E0CFCFCFCFCFCF
+CFCFCFCFCFCF969696969696969696676767676767676767979797979797979797D5D5D5D5D5D5
+D5D5D5E8E9E8E8E9E8E8E9E8E8E9E8DEDEDEDEDEDEDEDEDEC6C6C6C6C6C6C6C6C6CCCCCCCCCCCC
+CCCCCCE0E0E0E0E0E0E0E0E0E6E6E6E6E6E6E6E6E6E6E6E6D1D1D1D1D1D1D1D1D1B7B7B7B7B7B7
+B7B7B7B0B1B0B0B1B0B0B1B0B3B3B3B3B3B3B3B3B3B3B3B3B0B0B0B0B0B0B0B0B0A1A1A1A1A1A1
+A1A1A19A9A9A9A9A9A9A9A9A9696969696969696969999999999999999999999999A9A9A9A9A9A
+9A9A9A8F8F8F8F8F8F8F8F8F9A9A9A9A9A9A9A9A9AADADADADADADADADADB3B3B3B3B3B3B3B3B3
+B3B3B3B1B1B1B1B1B1B1B1B1BEBEBEBEBEBEBEBEBED1D1D1D1D1D1D1D1D1D5D5D5D5D5D5D5D5D5
+D5D5D5CBCBCBCBCBCBCBCBCBC5C5C5C5C5C5C5C5C5B7B7B7B7B7B7B7B7B7939393939393939393
+757575757575757575757575707070707070707070797979797979797979797979797979797979
+7878787878787878787B7B7B7B7B7B7B7B7B7B7B7B818181818181818181898989898989898989
+9696969696969696968D8D8D8D8D8D8D8D8D8D8D8D898989898989898989878787878787878787
+8686868686868686868787878787878787878B8B8B8B8B8B8B8B8B8B8B8B939393939393939393
+9C9C9C9C9C9C9C9C9CA9A9A9A9A9A9A9A9A9B6B6B6B6B6B6B6B6B6B9B9B9B9B9B9B9B9B9B9B9B9
+AFAFAFAFAFAFAFAFAF9A9A9A9A9A9A9A9A9A9999999999999999999E9E9E9E9E9E9E9E9E9E9E9E
+9B9B9B9B9B9B9B9B9B9999999999999999999090909090909090908E8E8E8E8E8E8E8E8E727272
+7272727272727272724F4F4F4F4F4F4F4F4F6868686868686868688A8A8A8A8A8A8A8A8A939393
+939393939393A3A3A3A3A3A3A3A3A3A3A3A3B0B1B0B0B1B0B0B1B0B6B6B6B6B6B6B6B6B6B1B1B1
+B1B1B1B1B1B1B6B6B6B6B6B6B6B6B6B6B6B6B4B4B4B4B4B4B4B4B4A2A2A2A2A2A2A2A2A28E8E8E
+8E8E8E8E8E8E797979797979797979898989898989898989898989B9B9B9B9B9B9B9B9B9BFBFBF
+BFBFBFBFBFBFB1B1B1B1B1B1B1B1B1C0C0C0C0C0C0C0C0C0C5C5C5C5C5C5C5C5C5C5C5C5A6A6A6
+A6A6A6A6A6A68787878787878787879F9F9F9F9F9F9F9F9FC3C3C3C3C3C3C3C3C3C3C3C3D0D0D0
+D0D0D0D0D0D0B4B4B4B4B4B4B4B4B4E1E1E1E1E1E1E1E1E1CACACACACACACACACAA1A1A1A1A1A1
+A1A1A1A1A1A19E9E9E9E9E9E9E9E9EC5C5C5C5C5C5C5C5C5D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0DDDDDDDDDDDDDDDDDDDDDDDDD0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0B7B7B7B7B7B7
+B7B7B7C1C1C1C1C1C1C1C1C1C1C1C1D5D5D5D5D5D5D5D5D5D0D0D0D0D0D0D0D0D0BEBEBEBEBEBE
+BEBEBE9393939393939393937D7D7D7D7D7D7D7D7D7D7D7DA8A8A8A8A8A8A8A8A8D8D8D8D8D8D8
+D8D8D8E0E0E0E0E0E0E0E0E0C4C4C4C4C4C4C4C4C48282828282828282828282826D6D6D6D6D6D
+6D6D6DAEAEAEAEAEAEAEAEAEE0E0E0E0E0E0E0E0E0CFCFCFCFCFCFCFCFCFCFCFCF969696969696
+969696676767676767676767979797979797979797D5D5D5D5D5D5D5D5D5E8E9E8E8E9E8E8E9E8
+E8E9E8DEDEDEDEDEDEDEDEDEC6C6C6C6C6C6C6C6C6CCCCCCCCCCCCCCCCCCE0E0E0E0E0E0E0E0E0
+E6E6E6E6E6E6E6E6E6E6E6E6D1D1D1D1D1D1D1D1D1B7B7B7B7B7B7B7B7B7B0B1B0B0B1B0B0B1B0
+B3B3B3B3B3B3B3B3B3B3B3B3B0B0B0B0B0B0B0B0B0A1A1A1A1A1A1A1A1A19A9A9A9A9A9A9A9A9A
+9696969696969696969999999999999999999999999A9A9A9A9A9A9A9A9A8F8F8F8F8F8F8F8F8F
+9A9A9A9A9A9A9A9A9AADADADADADADADADADB3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1
+BEBEBEBEBEBEBEBEBED1D1D1D1D1D1D1D1D1D5D5D5D5D5D5D5D5D5D5D5D5CBCBCBCBCBCBCBCBCB
+C5C5C5C5C5C5C5C5C5B7B7B7B7B7B7B7B7B7939393939393939393757575757575757575757575
+7070707070707070707979797979797979797979797979797979797878787878787878787B7B7B
+7B7B7B7B7B7B7B7B7B8181818181818181818989898989898989899696969696969696968D8D8D
+8D8D8D8D8D8D8D8D8D898989898989898989878787878787878787868686868686868686878787
+8787878787878B8B8B8B8B8B8B8B8B8B8B8B9393939393939393939C9C9C9C9C9C9C9C9CA9A9A9
+A9A9A9A9A9A9B6B6B6B6B6B6B6B6B6B9B9B9B9B9B9B9B9B9B9B9B9AFAFAFAFAFAFAFAFAF9A9A9A
+9A9A9A9A9A9A9999999999999999999E9E9E9E9E9E9E9E9E9E9E9E9B9B9B9B9B9B9B9B9B999999
+9999999999999090909090909090908E8E8E8E8E8E8E8E8E7272727272727272727272724F4F4F
+4F4F4F4F4F4F6868686868686868688A8A8A8A8A8A8A8A8A939393939393939393A3A3A3A3A3A3
+A3A3A3A3A3A3B0B1B0B0B1B0B0B1B0B6B6B6B6B6B6B6B6B6B1B1B1B1B1B1B1B1B1B6B6B6B6B6B6
+B6B6B6B6B6B6B4B4B4B4B4B4B4B4B4A2A2A2A2A2A2A2A2A28E8E8E8E8E8E8E8E8E797979797979
+797979898989898989898989898989B9B9B9B9B9B9B9B9B9BFBFBFBFBFBFBFBFBFB1B1B1B1B1B1
+B1B1B1C0C0C0C0C0C0C0C0C0C5C5C5C5C5C5C5C5C5C5C5C5A6A6A6A6A6A6A6A6A6878787878787
+8787879F9F9F9F9F9F9F9F9FC3C3C3C3C3C3C3C3C3C3C3C3D0D0D0D0D0D0D0D0D0B4B4B4B4B4B4
+B4B4B4EDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDCDCDCDC0C0C0C0C0C0
+C0C0C0BBBBBBBBBBBBBBBBBBC1C1C1C1C1C1C1C1C1CECECECECECECECECEDEDEDEDEDEDEDEDEDE
+DEDEDED5D5D5D5D5D5D5D5D5B4B4B4B4B4B4B4B4B4838383838383838383999999999999999999
+999999D1D1D1D1D1D1D1D1D1D5D5D5D5D5D5D5D5D5C1C1C1C1C1C1C1C1C1828282828282828282
+6C6C6C6C6C6C6C6C6C6C6C6CA3A3A3A3A3A3A3A3A3D8D8D8D8D8D8D8D8D8D2D2D2D2D2D2D2D2D2
+ACACACACACACACACAC7B7B7B7B7B7B7B7B7B7B7B7B929292929292929292C5C5C5C5C5C5C5C5C5
+E2E2E2E2E2E2E2E2E2D6D6D6D6D6D6D6D6D6D6D6D6AEAEAEAEAEAEAEAEAE949494949494949494
+AEAEAEAEAEAEAEAEAED5D5D5D5D5D5D5D5D5DBDBDBDBDBDBDBDBDBDBDBDBD6D6D5D6D6D5D6D6D5
+C6C6C6C6C6C6C6C6C6D4D4D4D4D4D4D4D4D4EDEDEDEDEDEDEDEDEDE7E7E7E7E7E7E7E7E7E7E7E7
+D4D4D4D4D4D4D4D4D4C1C1C1C1C1C1C1C1C1B5B5B5B5B5B5B5B5B5C6C6C6C6C6C6C6C6C6C6C6C6
+C1C1C1C1C1C1C1C1C1AEAEAEAEAEAEAEAEAEA7A7A7A7A7A7A7A7A79A9A9A9A9A9A9A9A9A9E9E9E
+9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C939393939393939393989898989898989898A0A0A0
+A0A0A0A0A0A0ADADADADADADADADADADADADB5B5B5B5B5B5B5B5B5BEBEBEBEBEBEBEBEBECDCDCD
+CDCDCDCDCDCDCFCFCFCFCFCFCFCFCFCFCFCFBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECE
+CECECECECECEC2C2C2C2C2C2C2C2C2A7A7A7A7A7A7A7A7A7A7A7A79898989898989898988B8B8B
+8B8B8B8B8B8B7979797979797979796868686868686868686A6A6A6A6A6A6A6A6A6A6A6A6C6C6C
+6C6C6C6C6C6C6E6E6E6E6E6E6E6E6E737373737373737373797979797979797979797979868686
+8686868686868989898989898989898787878787878787878989898989898989898E8E8E8E8E8E
+8E8E8E8E8E8E9393939393939393939797979797979797979F9F9F9F9F9F9F9F9FB0B1B0B0B1B0
+B0B1B0A2A2A2A2A2A2A2A2A2A2A2A27B7B7B7B7B7B7B7B7B5E5E5E5E5E5E5E5E5E575757575757
+575757555555555555555555555555545454545454545454585858585858585858636363636363
+6363637676767676767676766464646464646464646464645151515151515151517C7C7C7C7C7C
+7C7C7C9B9B9B9B9B9B9B9B9BA3A3A3A3A3A3A3A3A3B2B2B2B2B2B2B2B2B2B2B2B2B8B8B8B8B8B8
+B8B8B8B3B3B3B3B3B3B3B3B3ACACACACACACACACACB5B5B5B5B5B5B5B5B5B5B5B5B4B4B4B4B4B4
+B4B4B4A8A8A8A8A8A8A8A8A89797979797979797978B8B8B8B8B8B8B8B8BA0A0A0A0A0A0A0A0A0
+A0A0A0C1C1C1C1C1C1C1C1C1C5C5C5C5C5C5C5C5C5B0B0B0B0B0B0B0B0B0B8B8B8B8B8B8B8B8B8
+CACACACACACACACACACACACAB0B1B0B0B1B0B0B1B09B9B9B9B9B9B9B9B9BACACACACACACACACAC
+C6C6C6C6C6C6C6C6C6C6C6C6C5C5C5C5C5C5C5C5C59F9F9F9F9F9F9F9F9FEDEDEDEDEDEDEDEDED
+DDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDCDCDCDC0C0C0C0C0C0C0C0C0BBBBBBBBBBBBBBBBBB
+C1C1C1C1C1C1C1C1C1CECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDED5D5D5D5D5D5D5D5D5
+B4B4B4B4B4B4B4B4B4838383838383838383999999999999999999999999D1D1D1D1D1D1D1D1D1
+D5D5D5D5D5D5D5D5D5C1C1C1C1C1C1C1C1C18282828282828282826C6C6C6C6C6C6C6C6C6C6C6C
+A3A3A3A3A3A3A3A3A3D8D8D8D8D8D8D8D8D8D2D2D2D2D2D2D2D2D2ACACACACACACACACAC7B7B7B
+7B7B7B7B7B7B7B7B7B929292929292929292C5C5C5C5C5C5C5C5C5E2E2E2E2E2E2E2E2E2D6D6D6
+D6D6D6D6D6D6D6D6D6AEAEAEAEAEAEAEAEAE949494949494949494AEAEAEAEAEAEAEAEAED5D5D5
+D5D5D5D5D5D5DBDBDBDBDBDBDBDBDBDBDBDBD6D6D5D6D6D5D6D6D5C6C6C6C6C6C6C6C6C6D4D4D4
+D4D4D4D4D4D4EDEDEDEDEDEDEDEDEDE7E7E7E7E7E7E7E7E7E7E7E7D4D4D4D4D4D4D4D4D4C1C1C1
+C1C1C1C1C1C1B5B5B5B5B5B5B5B5B5C6C6C6C6C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C1AEAEAE
+AEAEAEAEAEAEA7A7A7A7A7A7A7A7A79A9A9A9A9A9A9A9A9A9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C
+9C9C9C9C9C9C939393939393939393989898989898989898A0A0A0A0A0A0A0A0A0ADADADADADAD
+ADADADADADADB5B5B5B5B5B5B5B5B5BEBEBEBEBEBEBEBEBECDCDCDCDCDCDCDCDCDCFCFCFCFCFCF
+CFCFCFCFCFCFBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECEC2C2C2C2C2C2
+C2C2C2A7A7A7A7A7A7A7A7A7A7A7A79898989898989898988B8B8B8B8B8B8B8B8B797979797979
+7979796868686868686868686A6A6A6A6A6A6A6A6A6A6A6A6C6C6C6C6C6C6C6C6C6E6E6E6E6E6E
+6E6E6E737373737373737373797979797979797979797979868686868686868686898989898989
+8989898787878787878787878989898989898989898E8E8E8E8E8E8E8E8E8E8E8E939393939393
+9393939797979797979797979F9F9F9F9F9F9F9F9FB0B1B0B0B1B0B0B1B0A2A2A2A2A2A2A2A2A2
+A2A2A27B7B7B7B7B7B7B7B7B5E5E5E5E5E5E5E5E5E575757575757575757555555555555555555
+555555545454545454545454585858585858585858636363636363636363767676767676767676
+6464646464646464646464645151515151515151517C7C7C7C7C7C7C7C7C9B9B9B9B9B9B9B9B9B
+A3A3A3A3A3A3A3A3A3B2B2B2B2B2B2B2B2B2B2B2B2B8B8B8B8B8B8B8B8B8B3B3B3B3B3B3B3B3B3
+ACACACACACACACACACB5B5B5B5B5B5B5B5B5B5B5B5B4B4B4B4B4B4B4B4B4A8A8A8A8A8A8A8A8A8
+9797979797979797978B8B8B8B8B8B8B8B8BA0A0A0A0A0A0A0A0A0A0A0A0C1C1C1C1C1C1C1C1C1
+C5C5C5C5C5C5C5C5C5B0B0B0B0B0B0B0B0B0B8B8B8B8B8B8B8B8B8CACACACACACACACACACACACA
+B0B1B0B0B1B0B0B1B09B9B9B9B9B9B9B9B9BACACACACACACACACACC6C6C6C6C6C6C6C6C6C6C6C6
+C5C5C5C5C5C5C5C5C59F9F9F9F9F9F9F9F9FEDEDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDCDCDCD
+CDCDCDCDCDCDCDCDCDC0C0C0C0C0C0C0C0C0BBBBBBBBBBBBBBBBBBC1C1C1C1C1C1C1C1C1CECECE
+CECECECECECEDEDEDEDEDEDEDEDEDEDEDEDED5D5D5D5D5D5D5D5D5B4B4B4B4B4B4B4B4B4838383
+838383838383999999999999999999999999D1D1D1D1D1D1D1D1D1D5D5D5D5D5D5D5D5D5C1C1C1
+C1C1C1C1C1C18282828282828282826C6C6C6C6C6C6C6C6C6C6C6CA3A3A3A3A3A3A3A3A3D8D8D8
+D8D8D8D8D8D8D2D2D2D2D2D2D2D2D2ACACACACACACACACAC7B7B7B7B7B7B7B7B7B7B7B7B929292
+929292929292C5C5C5C5C5C5C5C5C5E2E2E2E2E2E2E2E2E2D6D6D6D6D6D6D6D6D6D6D6D6AEAEAE
+AEAEAEAEAEAE949494949494949494AEAEAEAEAEAEAEAEAED5D5D5D5D5D5D5D5D5DBDBDBDBDBDB
+DBDBDBDBDBDBD6D6D5D6D6D5D6D6D5C6C6C6C6C6C6C6C6C6D4D4D4D4D4D4D4D4D4EDEDEDEDEDED
+EDEDEDE7E7E7E7E7E7E7E7E7E7E7E7D4D4D4D4D4D4D4D4D4C1C1C1C1C1C1C1C1C1B5B5B5B5B5B5
+B5B5B5C6C6C6C6C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C1AEAEAEAEAEAEAEAEAEA7A7A7A7A7A7
+A7A7A79A9A9A9A9A9A9A9A9A9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C939393939393
+939393989898989898989898A0A0A0A0A0A0A0A0A0ADADADADADADADADADADADADB5B5B5B5B5B5
+B5B5B5BEBEBEBEBEBEBEBEBECDCDCDCDCDCDCDCDCDCFCFCFCFCFCFCFCFCFCFCFCFBEBEBEBEBEBE
+BEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECEC2C2C2C2C2C2C2C2C2A7A7A7A7A7A7A7A7A7
+A7A7A79898989898989898988B8B8B8B8B8B8B8B8B797979797979797979686868686868686868
+6A6A6A6A6A6A6A6A6A6A6A6A6C6C6C6C6C6C6C6C6C6E6E6E6E6E6E6E6E6E737373737373737373
+797979797979797979797979868686868686868686898989898989898989878787878787878787
+8989898989898989898E8E8E8E8E8E8E8E8E8E8E8E939393939393939393979797979797979797
+9F9F9F9F9F9F9F9F9FB0B1B0B0B1B0B0B1B0A2A2A2A2A2A2A2A2A2A2A2A27B7B7B7B7B7B7B7B7B
+5E5E5E5E5E5E5E5E5E575757575757575757555555555555555555555555545454545454545454
+585858585858585858636363636363636363767676767676767676646464646464646464646464
+5151515151515151517C7C7C7C7C7C7C7C7C9B9B9B9B9B9B9B9B9BA3A3A3A3A3A3A3A3A3B2B2B2
+B2B2B2B2B2B2B2B2B2B8B8B8B8B8B8B8B8B8B3B3B3B3B3B3B3B3B3ACACACACACACACACACB5B5B5
+B5B5B5B5B5B5B5B5B5B4B4B4B4B4B4B4B4B4A8A8A8A8A8A8A8A8A89797979797979797978B8B8B
+8B8B8B8B8B8BA0A0A0A0A0A0A0A0A0A0A0A0C1C1C1C1C1C1C1C1C1C5C5C5C5C5C5C5C5C5B0B0B0
+B0B0B0B0B0B0B8B8B8B8B8B8B8B8B8CACACACACACACACACACACACAB0B1B0B0B1B0B0B1B09B9B9B
+9B9B9B9B9B9BACACACACACACACACACC6C6C6C6C6C6C6C6C6C6C6C6C5C5C5C5C5C5C5C5C59F9F9F
+9F9F9F9F9F9FE5E5E5E5E5E5E5E5E5E0E0E0E0E0E0E0E0E0D1D1D1D1D1D1D1D1D1D1D1D1B0B0B0
+B0B0B0B0B0B08282828282828282828A8A8A8A8A8A8A8A8ABCBCBCBCBCBCBCBCBCD6D6D5D6D6D5
+D6D6D5D6D6D5C8C8C8C8C8C8C8C8C89797979797979797977272727272727272729C9C9C9C9C9C
+9C9C9C9C9C9CD8D8D8D8D8D8D8D8D8DBDBDBDBDBDBDBDBDBD3D3D3D3D3D3D3D3D3A1A1A1A1A1A1
+A1A1A1939393939393939393939393C1C1C1C1C1C1C1C1C1DFE0DFDFE0DFDFE0DFD5D5D5D5D5D5
+D5D5D5C5C5C5C5C5C5C5C5C5AAAAAAAAAAAAAAAAAAAAAAAAB4B4B4B4B4B4B4B4B4D3D3D3D3D3D3
+D3D3D3DFE0DFDFE0DFDFE0DFDCDCDCDCDCDCDCDCDCDCDCDCBEBEBEBEBEBEBEBEBEB2B2B2B2B2B2
+B2B2B2BABABABABABABABABABFBFBFBFBFBFBFBFBFBEBEBEBEBEBEBEBEBEBEBEBEB0B0B0B0B0B0
+B0B0B08C8C8C8C8C8C8C8C8CA2A2A2A2A2A2A2A2A2DBDBDBDBDBDBDBDBDBE3E3E3E3E3E3E3E3E3
+E3E3E3CECECECECECECECECEBDBDBDBDBDBDBDBDBD9C9C9C9C9C9C9C9C9CA0A0A0A0A0A0A0A0A0
+A0A0A0B4B4B4B4B4B4B4B4B4BCBCBCBCBCBCBCBCBCBABABABABABABABABAA8A8A8A8A8A8A8A8A8
+AAAAAAAAAAAAAAAAAAAAAAAA9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B
+9E9E9E9E9E9E9E9E9EA3A3A3A3A3A3A3A3A3A3A3A3A6A6A6A6A6A6A6A6A6B0B1B0B0B1B0B0B1B0
+BBBBBBBBBBBBBBBBBBBABABABABABABABABABABABAAAAAAAAAAAAAAAAAAAADADADADADADADADAD
+C9C9C9C9C9C9C9C9C9CBCBCBCBCBCBCBCBCBC4C4C4C4C4C4C4C4C4C4C4C4C5C5C5C5C5C5C5C5C5
+B9B9B9B9B9B9B9B9B9AEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E959595959595959595959595
+8989898989898989897D7D7D7D7D7D7D7D7D7C7C7C7C7C7C7C7C7C797979797979797979797979
+8787878787878787879292929292929292928D8D8D8D8D8D8D8D8D8A8A8A8A8A8A8A8A8A8C8C8C
+8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D888888888888888888969696969696969696AFAFAF
+AFAFAFAFAFAFABABABABABABABABABABABAB8D8D8D8D8D8D8D8D8D676767676767676767545454
+5454545454544D4D4D4D4D4D4D4D4D4D4D4D5050505050505050506161616161616161617C7C7C
+7C7C7C7C7C7C8484848484848484846C6C6C6C6C6C6C6C6C6C6C6C787878787878787878919191
+919191919191A5A5A5A5A5A5A5A5A5B0B1B0B0B1B0B0B1B0B2B2B2B2B2B2B2B2B2B2B2B2B3B3B3
+B3B3B3B3B3B3ADADADADADADADADADAEAEAEAEAEAEAEAEAEB9B9B9B9B9B9B9B9B9B9B9B9B5B5B5
+B5B5B5B5B5B5B6B6B6B6B6B6B6B6B6BDBDBDBDBDBDBDBDBDB7B7B7B7B7B7B7B7B7BEBEBEBEBEBE
+BEBEBEBEBEBEC7C7C7C7C7C7C7C7C7BDBDBDBDBDBDBDBDBD929292929292929292969696969696
+969696BFBFBFBFBFBFBFBFBFBFBFBFBEBEBEBEBEBEBEBEBEB4B4B4B4B4B4B4B4B4B8B8B8B8B8B8
+B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8C3C3C3C3C3C3C3C3C3ABABABABABABABABABE5E5E5E5E5E5
+E5E5E5E0E0E0E0E0E0E0E0E0D1D1D1D1D1D1D1D1D1D1D1D1B0B0B0B0B0B0B0B0B0828282828282
+8282828A8A8A8A8A8A8A8A8ABCBCBCBCBCBCBCBCBCD6D6D5D6D6D5D6D6D5D6D6D5C8C8C8C8C8C8
+C8C8C89797979797979797977272727272727272729C9C9C9C9C9C9C9C9C9C9C9CD8D8D8D8D8D8
+D8D8D8DBDBDBDBDBDBDBDBDBD3D3D3D3D3D3D3D3D3A1A1A1A1A1A1A1A1A1939393939393939393
+939393C1C1C1C1C1C1C1C1C1DFE0DFDFE0DFDFE0DFD5D5D5D5D5D5D5D5D5C5C5C5C5C5C5C5C5C5
+AAAAAAAAAAAAAAAAAAAAAAAAB4B4B4B4B4B4B4B4B4D3D3D3D3D3D3D3D3D3DFE0DFDFE0DFDFE0DF
+DCDCDCDCDCDCDCDCDCDCDCDCBEBEBEBEBEBEBEBEBEB2B2B2B2B2B2B2B2B2BABABABABABABABABA
+BFBFBFBFBFBFBFBFBFBEBEBEBEBEBEBEBEBEBEBEBEB0B0B0B0B0B0B0B0B08C8C8C8C8C8C8C8C8C
+A2A2A2A2A2A2A2A2A2DBDBDBDBDBDBDBDBDBE3E3E3E3E3E3E3E3E3E3E3E3CECECECECECECECECE
+BDBDBDBDBDBDBDBDBD9C9C9C9C9C9C9C9C9CA0A0A0A0A0A0A0A0A0A0A0A0B4B4B4B4B4B4B4B4B4
+BCBCBCBCBCBCBCBCBCBABABABABABABABABAA8A8A8A8A8A8A8A8A8AAAAAAAAAAAAAAAAAAAAAAAA
+9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9E9E9E9E9E9E9E9E9EA3A3A3
+A3A3A3A3A3A3A3A3A3A6A6A6A6A6A6A6A6A6B0B1B0B0B1B0B0B1B0BBBBBBBBBBBBBBBBBBBABABA
+BABABABABABABABABAAAAAAAAAAAAAAAAAAAADADADADADADADADADC9C9C9C9C9C9C9C9C9CBCBCB
+CBCBCBCBCBCBC4C4C4C4C4C4C4C4C4C4C4C4C5C5C5C5C5C5C5C5C5B9B9B9B9B9B9B9B9B9AEAEAE
+AEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9595959595959595959595958989898989898989897D7D7D
+7D7D7D7D7D7D7C7C7C7C7C7C7C7C7C797979797979797979797979878787878787878787929292
+9292929292928D8D8D8D8D8D8D8D8D8A8A8A8A8A8A8A8A8A8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D
+8D8D8D8D8D8D888888888888888888969696969696969696AFAFAFAFAFAFAFAFAFABABABABABAB
+ABABABABABAB8D8D8D8D8D8D8D8D8D6767676767676767675454545454545454544D4D4D4D4D4D
+4D4D4D4D4D4D5050505050505050506161616161616161617C7C7C7C7C7C7C7C7C848484848484
+8484846C6C6C6C6C6C6C6C6C6C6C6C787878787878787878919191919191919191A5A5A5A5A5A5
+A5A5A5B0B1B0B0B1B0B0B1B0B2B2B2B2B2B2B2B2B2B2B2B2B3B3B3B3B3B3B3B3B3ADADADADADAD
+ADADADAEAEAEAEAEAEAEAEAEB9B9B9B9B9B9B9B9B9B9B9B9B5B5B5B5B5B5B5B5B5B6B6B6B6B6B6
+B6B6B6BDBDBDBDBDBDBDBDBDB7B7B7B7B7B7B7B7B7BEBEBEBEBEBEBEBEBEBEBEBEC7C7C7C7C7C7
+C7C7C7BDBDBDBDBDBDBDBDBD929292929292929292969696969696969696BFBFBFBFBFBFBFBFBF
+BFBFBFBEBEBEBEBEBEBEBEBEB4B4B4B4B4B4B4B4B4B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8
+C8C8C8C3C3C3C3C3C3C3C3C3ABABABABABABABABABE5E5E5E5E5E5E5E5E5E0E0E0E0E0E0E0E0E0
+D1D1D1D1D1D1D1D1D1D1D1D1B0B0B0B0B0B0B0B0B08282828282828282828A8A8A8A8A8A8A8A8A
+BCBCBCBCBCBCBCBCBCD6D6D5D6D6D5D6D6D5D6D6D5C8C8C8C8C8C8C8C8C8979797979797979797
+7272727272727272729C9C9C9C9C9C9C9C9C9C9C9CD8D8D8D8D8D8D8D8D8DBDBDBDBDBDBDBDBDB
+D3D3D3D3D3D3D3D3D3A1A1A1A1A1A1A1A1A1939393939393939393939393C1C1C1C1C1C1C1C1C1
+DFE0DFDFE0DFDFE0DFD5D5D5D5D5D5D5D5D5C5C5C5C5C5C5C5C5C5AAAAAAAAAAAAAAAAAAAAAAAA
+B4B4B4B4B4B4B4B4B4D3D3D3D3D3D3D3D3D3DFE0DFDFE0DFDFE0DFDCDCDCDCDCDCDCDCDCDCDCDC
+BEBEBEBEBEBEBEBEBEB2B2B2B2B2B2B2B2B2BABABABABABABABABABFBFBFBFBFBFBFBFBFBEBEBE
+BEBEBEBEBEBEBEBEBEB0B0B0B0B0B0B0B0B08C8C8C8C8C8C8C8C8CA2A2A2A2A2A2A2A2A2DBDBDB
+DBDBDBDBDBDBE3E3E3E3E3E3E3E3E3E3E3E3CECECECECECECECECEBDBDBDBDBDBDBDBDBD9C9C9C
+9C9C9C9C9C9CA0A0A0A0A0A0A0A0A0A0A0A0B4B4B4B4B4B4B4B4B4BCBCBCBCBCBCBCBCBCBABABA
+BABABABABABAA8A8A8A8A8A8A8A8A8AAAAAAAAAAAAAAAAAAAAAAAA9B9B9B9B9B9B9B9B9B9A9A9A
+9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9E9E9E9E9E9E9E9E9EA3A3A3A3A3A3A3A3A3A3A3A3A6A6A6
+A6A6A6A6A6A6B0B1B0B0B1B0B0B1B0BBBBBBBBBBBBBBBBBBBABABABABABABABABABABABAAAAAAA
+AAAAAAAAAAAAADADADADADADADADADC9C9C9C9C9C9C9C9C9CBCBCBCBCBCBCBCBCBC4C4C4C4C4C4
+C4C4C4C4C4C4C5C5C5C5C5C5C5C5C5B9B9B9B9B9B9B9B9B9AEAEAEAEAEAEAEAEAE9E9E9E9E9E9E
+9E9E9E9595959595959595959595958989898989898989897D7D7D7D7D7D7D7D7D7C7C7C7C7C7C
+7C7C7C7979797979797979797979798787878787878787879292929292929292928D8D8D8D8D8D
+8D8D8D8A8A8A8A8A8A8A8A8A8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D888888888888
+888888969696969696969696AFAFAFAFAFAFAFAFAFABABABABABABABABABABABAB8D8D8D8D8D8D
+8D8D8D6767676767676767675454545454545454544D4D4D4D4D4D4D4D4D4D4D4D505050505050
+5050506161616161616161617C7C7C7C7C7C7C7C7C8484848484848484846C6C6C6C6C6C6C6C6C
+6C6C6C787878787878787878919191919191919191A5A5A5A5A5A5A5A5A5B0B1B0B0B1B0B0B1B0
+B2B2B2B2B2B2B2B2B2B2B2B2B3B3B3B3B3B3B3B3B3ADADADADADADADADADAEAEAEAEAEAEAEAEAE
+B9B9B9B9B9B9B9B9B9B9B9B9B5B5B5B5B5B5B5B5B5B6B6B6B6B6B6B6B6B6BDBDBDBDBDBDBDBDBD
+B7B7B7B7B7B7B7B7B7BEBEBEBEBEBEBEBEBEBEBEBEC7C7C7C7C7C7C7C7C7BDBDBDBDBDBDBDBDBD
+929292929292929292969696969696969696BFBFBFBFBFBFBFBFBFBFBFBFBEBEBEBEBEBEBEBEBE
+B4B4B4B4B4B4B4B4B4B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8C3C3C3C3C3C3C3C3C3
+ABABABABABABABABABD6D6D5D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5C0C0C0C0C0C0C0C0C0C0C0C0
+8E8E8E8E8E8E8E8E8E6161616161616161617B7B7B7B7B7B7B7B7BBABABABABABABABABAD0D0D0
+D0D0D0D0D0D0D0D0D0CCCCCCCCCCCCCCCCCCA1A1A1A1A1A1A1A1A1909090909090909090C1C1C1
+C1C1C1C1C1C1C1C1C1DFDFDFDFDFDFDFDFDFDBDBDBDBDBDBDBDBDBD2D2D2D2D2D2D2D2D2CBCBCB
+CBCBCBCBCBCBC1C1C1C1C1C1C1C1C1C1C1C1CDCDCDCDCDCDCDCDCDD3D3D3D3D3D3D3D3D3C4C4C4
+C4C4C4C4C4C4C5C5C5C5C5C5C5C5C5CBCBCBCBCBCBCBCBCBCBCBCBD6D6D6D6D6D6D6D6D6D8D8D8
+D8D8D8D8D8D8D2D2D2D2D2D2D2D2D2CACACACACACACACACACACACAB3B3B3B3B3B3B3B3B3B7B7B7
+B7B7B7B7B7B7C5C5C5C5C5C5C5C5C5C1C1C1C1C1C1C1C1C1B2B2B2B2B2B2B2B2B2B2B2B2959595
+959595959595616161616161616161757575757575757575C8C8C8C8C8C8C8C8C8E1E1E1E1E1E1
+E1E1E1E1E1E1D3D3D3D3D3D3D3D3D3A9A9A9A9A9A9A9A9A9707070707070707070676767676767
+6767676767679A9A9A9A9A9A9A9A9AC0C0C0C0C0C0C0C0C0C5C5C5C5C5C5C5C5C5B6B6B6B6B6B6
+B6B6B6A9A9A9A9A9A9A9A9A9A9A9A9A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A29F9F9F9F9F9F
+9F9F9F9B9B9B9B9B9B9B9B9B9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9EA0A0A0A0A0A0A0A0A0A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8ABABABABABAB
+ABABABB7B7B7B7B7B7B7B7B7C3C3C3C3C3C3C3C3C3C5C5C5C5C5C5C5C5C5C5C5C5BFBFBFBFBFBF
+BFBFBFC5C5C5C5C5C5C5C5C5C8C8C8C8C8C8C8C8C8CFCFCFCFCFCFCFCFCFC7C7C7C7C7C7C7C7C7
+C7C7C7BABABABABABABABABAB0B1B0B0B1B0B0B1B0AFAFAFAFAFAFAFAFAFACACACACACACACACAC
+ACACACB4B4B4B4B4B4B4B4B4B3B3B3B3B3B3B3B3B39B9B9B9B9B9B9B9B9B909090909090909090
+8C8C8C8C8C8C8C8C8C8C8C8C8383838383838383837E7E7E7E7E7E7E7E7E9F9F9F9F9F9F9F9F9F
+B0B1B0B0B1B0B0B1B0C1C1C1C1C1C1C1C1C1C1C1C1B6B6B6B6B6B6B6B6B68F8F8F8F8F8F8F8F8F
+6767676767676767675D5D5D5D5D5D5D5D5D5D5D5D6B6B6B6B6B6B6B6B6B888888888888888888
+999999999999999999939393939393939393999999999999999999999999B2B2B2B2B2B2B2B2B2
+BDBDBDBDBDBDBDBDBDB8B8B8B8B8B8B8B8B8BBBBBBBBBBBBBBBBBBB3B3B3B3B3B3B3B3B3B3B3B3
+ADADADADADADADADADABABABABABABABABABB1B1B1B1B1B1B1B1B1B9B9B9B9B9B9B9B9B9B9B9B9
+A8A8A8A8A8A8A8A8A8A1A1A1A1A1A1A1A1A1BDBDBDBDBDBDBDBDBDC9C9C9C9C9C9C9C9C9C9C9C9
+C9C9C9C9C9C9C9C9C9C3C3C3C3C3C3C3C3C3B7B7B7B7B7B7B7B7B7909090909090909090989898
+989898989898BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFA3A3A3A3A3A3A3A3A39B9B9B
+9B9B9B9B9B9BBCBCBCBCBCBCBCBCBCBCBCBCC5C5C5C5C5C5C5C5C5BDBDBDBDBDBDBDBDBDD6D6D5
+D6D6D5D6D6D5D6D6D5D6D6D5D6D6D5C0C0C0C0C0C0C0C0C0C0C0C08E8E8E8E8E8E8E8E8E616161
+6161616161617B7B7B7B7B7B7B7B7BBABABABABABABABABAD0D0D0D0D0D0D0D0D0D0D0D0CCCCCC
+CCCCCCCCCCCCA1A1A1A1A1A1A1A1A1909090909090909090C1C1C1C1C1C1C1C1C1C1C1C1DFDFDF
+DFDFDFDFDFDFDBDBDBDBDBDBDBDBDBD2D2D2D2D2D2D2D2D2CBCBCBCBCBCBCBCBCBC1C1C1C1C1C1
+C1C1C1C1C1C1CDCDCDCDCDCDCDCDCDD3D3D3D3D3D3D3D3D3C4C4C4C4C4C4C4C4C4C5C5C5C5C5C5
+C5C5C5CBCBCBCBCBCBCBCBCBCBCBCBD6D6D6D6D6D6D6D6D6D8D8D8D8D8D8D8D8D8D2D2D2D2D2D2
+D2D2D2CACACACACACACACACACACACAB3B3B3B3B3B3B3B3B3B7B7B7B7B7B7B7B7B7C5C5C5C5C5C5
+C5C5C5C1C1C1C1C1C1C1C1C1B2B2B2B2B2B2B2B2B2B2B2B2959595959595959595616161616161
+616161757575757575757575C8C8C8C8C8C8C8C8C8E1E1E1E1E1E1E1E1E1E1E1E1D3D3D3D3D3D3
+D3D3D3A9A9A9A9A9A9A9A9A97070707070707070706767676767676767676767679A9A9A9A9A9A
+9A9A9AC0C0C0C0C0C0C0C0C0C5C5C5C5C5C5C5C5C5B6B6B6B6B6B6B6B6B6A9A9A9A9A9A9A9A9A9
+A9A9A9A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A29F9F9F9F9F9F9F9F9F9B9B9B9B9B9B9B9B9B
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA0A0A0A0A0A0A0A0A0
+A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8ABABABABABABABABABB7B7B7B7B7B7B7B7B7
+C3C3C3C3C3C3C3C3C3C5C5C5C5C5C5C5C5C5C5C5C5BFBFBFBFBFBFBFBFBFC5C5C5C5C5C5C5C5C5
+C8C8C8C8C8C8C8C8C8CFCFCFCFCFCFCFCFCFC7C7C7C7C7C7C7C7C7C7C7C7BABABABABABABABABA
+B0B1B0B0B1B0B0B1B0AFAFAFAFAFAFAFAFAFACACACACACACACACACACACACB4B4B4B4B4B4B4B4B4
+B3B3B3B3B3B3B3B3B39B9B9B9B9B9B9B9B9B9090909090909090908C8C8C8C8C8C8C8C8C8C8C8C
+8383838383838383837E7E7E7E7E7E7E7E7E9F9F9F9F9F9F9F9F9FB0B1B0B0B1B0B0B1B0C1C1C1
+C1C1C1C1C1C1C1C1C1B6B6B6B6B6B6B6B6B68F8F8F8F8F8F8F8F8F6767676767676767675D5D5D
+5D5D5D5D5D5D5D5D5D6B6B6B6B6B6B6B6B6B888888888888888888999999999999999999939393
+939393939393999999999999999999999999B2B2B2B2B2B2B2B2B2BDBDBDBDBDBDBDBDBDB8B8B8
+B8B8B8B8B8B8BBBBBBBBBBBBBBBBBBB3B3B3B3B3B3B3B3B3B3B3B3ADADADADADADADADADABABAB
+ABABABABABABB1B1B1B1B1B1B1B1B1B9B9B9B9B9B9B9B9B9B9B9B9A8A8A8A8A8A8A8A8A8A1A1A1
+A1A1A1A1A1A1BDBDBDBDBDBDBDBDBDC9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C3C3C3
+C3C3C3C3C3C3B7B7B7B7B7B7B7B7B7909090909090909090989898989898989898BFBFBFBFBFBF
+BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFA3A3A3A3A3A3A3A3A39B9B9B9B9B9B9B9B9BBCBCBCBCBCBC
+BCBCBCBCBCBCC5C5C5C5C5C5C5C5C5BDBDBDBDBDBDBDBDBDBFBFBFBFBFBFBFBFBFC9C9C9C9C9C9
+C9C9C9BBBBBBBBBBBBBBBBBBBBBBBB8B8B8B8B8B8B8B8B8B7D7D7D7D7D7D7D7D7DA6A6A6A6A6A6
+A6A6A6C9C9C9C9C9C9C9C9C9CBCBCBCBCBCBCBCBCBCBCBCBC4C4C4C4C4C4C4C4C4C8C8C8C8C8C8
+C8C8C8CECECECECECECECECEE1E1E1E1E1E1E1E1E1E1E1E1D9D9D9D9D9D9D9D9D9CDCDCDCDCDCD
+CDCDCDC6C6C6C6C6C6C6C6C6CDCDCDCDCDCDCDCDCDD6D6D6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7
+D7D7D7CECECECECECECECECEABABABABABABABABAB9E9E9E9E9E9E9E9E9EB7B7B7B7B7B7B7B7B7
+B7B7B7DBDBDBDBDBDBDBDBDBE9E9E9E9E9E9E9E9E9D6D6D5D6D6D5D6D6D5A8A8A8A8A8A8A8A8A8
+A8A8A87E7E7E7E7E7E7E7E7E999999999999999999C7C7C7C7C7C7C7C7C7C5C5C5C5C5C5C5C5C5
+B2B2B2B2B2B2B2B2B2B2B2B28888888888888888885A5A5A5A5A5A5A5A5A717171717171717171
+BCBCBCBCBCBCBCBCBCDDDDDDDDDDDDDDDDDDDDDDDDE1E1E1E1E1E1E1E1E1BDBDBDBDBDBDBDBDBD
+888888888888888888818181818181818181818181B2B2B2B2B2B2B2B2B2C7C7C7C7C7C7C7C7C7
+C4C4C4C4C4C4C4C4C4B6B6B6B6B6B6B6B6B6B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1
+A5A5A5A5A5A5A5A5A59E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9E9E9E
+9D9D9D9D9D9D9D9D9D9B9B9B9B9B9B9B9B9B9999999999999999999C9C9C9C9C9C9C9C9C9C9C9C
+AAAAAAAAAAAAAAAAAAA8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7BBBBBBBBBBBBBBBBBBC0C0C0
+C0C0C0C0C0C0C0C0C0B4B4B4B4B4B4B4B4B4B9B9B9B9B9B9B9B9B9C0C0C0C0C0C0C0C0C0CACACA
+CACACACACACAD1D1D1D1D1D1D1D1D1D1D1D1CBCBCBCBCBCBCBCBCBC1C1C1C1C1C1C1C1C1BFBFBF
+BFBFBFBFBFBFC5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C1C1C1C1C1C1C1C1C1B3B3B3
+B3B3B3B3B3B3AFAFAFAFAFAFAFAFAFA7A7A7A7A7A7A7A7A7A7A7A79B9B9B9B9B9B9B9B9B9F9F9F
+9F9F9F9F9F9FB7B7B7B7B7B7B7B7B7BDBDBDBDBDBDBDBDBDCACACACACACACACACACACACABFBFBF
+BFBFBFBFBFBFA8A8A8A8A8A8A8A8A89292929292929292928F8F8F8F8F8F8F8F8F8F8F8F959595
+959595959595A8A8A8A8A8A8A8A8A8AEAEAEAEAEAEAEAEAEB0B0B0B0B0B0B0B0B0B9B9B9B9B9B9
+B9B9B9B9B9B9BFBFBFBFBFBFBFBFBFC4C4C4C4C4C4C4C4C4BABABABABABABABABAAEAEAEAEAEAE
+AEAEAEACACACACACACACACACACACACA8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8B2B2B2B2B2B2
+B2B2B2AFAFAFAFAFAFAFAFAFAFAFAF818181818181818181727272727272727272AEAEAEAEAEAE
+AEAEAED3D3D3D3D3D3D3D3D3CDCDCDCDCDCDCDCDCDCDCDCDB0B1B0B0B1B0B0B1B0ABABABABABAB
+ABABABB2B2B2B2B2B2B2B2B2BABABABABABABABABACFCFCFCFCFCFCFCFCFCFCFCFC7C7C7C7C7C7
+C7C7C78F8F8F8F8F8F8F8F8F838383838383838383B6B6B6B6B6B6B6B6B6B6B6B6C8C8C8C8C8C8
+C8C8C8B8B8B8B8B8B8B8B8B8BFBFBFBFBFBFBFBFBFC9C9C9C9C9C9C9C9C9BBBBBBBBBBBBBBBBBB
+BBBBBB8B8B8B8B8B8B8B8B8B7D7D7D7D7D7D7D7D7DA6A6A6A6A6A6A6A6A6C9C9C9C9C9C9C9C9C9
+CBCBCBCBCBCBCBCBCBCBCBCBC4C4C4C4C4C4C4C4C4C8C8C8C8C8C8C8C8C8CECECECECECECECECE
+E1E1E1E1E1E1E1E1E1E1E1E1D9D9D9D9D9D9D9D9D9CDCDCDCDCDCDCDCDCDC6C6C6C6C6C6C6C6C6
+CDCDCDCDCDCDCDCDCDD6D6D6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7CECECECECECECECECE
+ABABABABABABABABAB9E9E9E9E9E9E9E9E9EB7B7B7B7B7B7B7B7B7B7B7B7DBDBDBDBDBDBDBDBDB
+E9E9E9E9E9E9E9E9E9D6D6D5D6D6D5D6D6D5A8A8A8A8A8A8A8A8A8A8A8A87E7E7E7E7E7E7E7E7E
+999999999999999999C7C7C7C7C7C7C7C7C7C5C5C5C5C5C5C5C5C5B2B2B2B2B2B2B2B2B2B2B2B2
+8888888888888888885A5A5A5A5A5A5A5A5A717171717171717171BCBCBCBCBCBCBCBCBCDDDDDD
+DDDDDDDDDDDDDDDDDDE1E1E1E1E1E1E1E1E1BDBDBDBDBDBDBDBDBD888888888888888888818181
+818181818181818181B2B2B2B2B2B2B2B2B2C7C7C7C7C7C7C7C7C7C4C4C4C4C4C4C4C4C4B6B6B6
+B6B6B6B6B6B6B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A5A5A5A5A5A5A5A5A59E9E9E
+9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9B9B9B
+9B9B9B9B9B9B9999999999999999999C9C9C9C9C9C9C9C9C9C9C9CAAAAAAAAAAAAAAAAAAA8A8A8
+A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7BBBBBBBBBBBBBBBBBBC0C0C0C0C0C0C0C0C0C0C0C0B4B4B4
+B4B4B4B4B4B4B9B9B9B9B9B9B9B9B9C0C0C0C0C0C0C0C0C0CACACACACACACACACAD1D1D1D1D1D1
+D1D1D1D1D1D1CBCBCBCBCBCBCBCBCBC1C1C1C1C1C1C1C1C1BFBFBFBFBFBFBFBFBFC5C5C5C5C5C5
+C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C1C1C1C1C1C1C1C1C1B3B3B3B3B3B3B3B3B3AFAFAFAFAFAF
+AFAFAFA7A7A7A7A7A7A7A7A7A7A7A79B9B9B9B9B9B9B9B9B9F9F9F9F9F9F9F9F9FB7B7B7B7B7B7
+B7B7B7BDBDBDBDBDBDBDBDBDCACACACACACACACACACACACABFBFBFBFBFBFBFBFBFA8A8A8A8A8A8
+A8A8A89292929292929292928F8F8F8F8F8F8F8F8F8F8F8F959595959595959595A8A8A8A8A8A8
+A8A8A8AEAEAEAEAEAEAEAEAEB0B0B0B0B0B0B0B0B0B9B9B9B9B9B9B9B9B9B9B9B9BFBFBFBFBFBF
+BFBFBFC4C4C4C4C4C4C4C4C4BABABABABABABABABAAEAEAEAEAEAEAEAEAEACACACACACACACACAC
+ACACACA8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8B2B2B2B2B2B2B2B2B2AFAFAFAFAFAFAFAFAF
+AFAFAF818181818181818181727272727272727272AEAEAEAEAEAEAEAEAED3D3D3D3D3D3D3D3D3
+CDCDCDCDCDCDCDCDCDCDCDCDB0B1B0B0B1B0B0B1B0ABABABABABABABABABB2B2B2B2B2B2B2B2B2
+BABABABABABABABABACFCFCFCFCFCFCFCFCFCFCFCFC7C7C7C7C7C7C7C7C78F8F8F8F8F8F8F8F8F
+838383838383838383B6B6B6B6B6B6B6B6B6B6B6B6C8C8C8C8C8C8C8C8C8B8B8B8B8B8B8B8B8B8
+BFBFBFBFBFBFBFBFBFC9C9C9C9C9C9C9C9C9BBBBBBBBBBBBBBBBBBBBBBBB8B8B8B8B8B8B8B8B8B
+7D7D7D7D7D7D7D7D7DA6A6A6A6A6A6A6A6A6C9C9C9C9C9C9C9C9C9CBCBCBCBCBCBCBCBCBCBCBCB
+C4C4C4C4C4C4C4C4C4C8C8C8C8C8C8C8C8C8CECECECECECECECECEE1E1E1E1E1E1E1E1E1E1E1E1
+D9D9D9D9D9D9D9D9D9CDCDCDCDCDCDCDCDCDC6C6C6C6C6C6C6C6C6CDCDCDCDCDCDCDCDCDD6D6D6
+D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7CECECECECECECECECEABABABABABABABABAB9E9E9E
+9E9E9E9E9E9EB7B7B7B7B7B7B7B7B7B7B7B7DBDBDBDBDBDBDBDBDBE9E9E9E9E9E9E9E9E9D6D6D5
+D6D6D5D6D6D5A8A8A8A8A8A8A8A8A8A8A8A87E7E7E7E7E7E7E7E7E999999999999999999C7C7C7
+C7C7C7C7C7C7C5C5C5C5C5C5C5C5C5B2B2B2B2B2B2B2B2B2B2B2B28888888888888888885A5A5A
+5A5A5A5A5A5A717171717171717171BCBCBCBCBCBCBCBCBCDDDDDDDDDDDDDDDDDDDDDDDDE1E1E1
+E1E1E1E1E1E1BDBDBDBDBDBDBDBDBD888888888888888888818181818181818181818181B2B2B2
+B2B2B2B2B2B2C7C7C7C7C7C7C7C7C7C4C4C4C4C4C4C4C4C4B6B6B6B6B6B6B6B6B6B1B1B1B1B1B1
+B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A5A5A5A5A5A5A5A5A59E9E9E9E9E9E9E9E9E9D9D9D9D9D9D
+9D9D9D9E9E9E9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9B9B9B9B9B9B9B9B9B999999999999
+9999999C9C9C9C9C9C9C9C9C9C9C9CAAAAAAAAAAAAAAAAAAA8A8A8A8A8A8A8A8A8A7A7A7A7A7A7
+A7A7A7BBBBBBBBBBBBBBBBBBC0C0C0C0C0C0C0C0C0C0C0C0B4B4B4B4B4B4B4B4B4B9B9B9B9B9B9
+B9B9B9C0C0C0C0C0C0C0C0C0CACACACACACACACACAD1D1D1D1D1D1D1D1D1D1D1D1CBCBCBCBCBCB
+CBCBCBC1C1C1C1C1C1C1C1C1BFBFBFBFBFBFBFBFBFC5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5
+C5C5C5C1C1C1C1C1C1C1C1C1B3B3B3B3B3B3B3B3B3AFAFAFAFAFAFAFAFAFA7A7A7A7A7A7A7A7A7
+A7A7A79B9B9B9B9B9B9B9B9B9F9F9F9F9F9F9F9F9FB7B7B7B7B7B7B7B7B7BDBDBDBDBDBDBDBDBD
+CACACACACACACACACACACACABFBFBFBFBFBFBFBFBFA8A8A8A8A8A8A8A8A8929292929292929292
+8F8F8F8F8F8F8F8F8F8F8F8F959595959595959595A8A8A8A8A8A8A8A8A8AEAEAEAEAEAEAEAEAE
+B0B0B0B0B0B0B0B0B0B9B9B9B9B9B9B9B9B9B9B9B9BFBFBFBFBFBFBFBFBFC4C4C4C4C4C4C4C4C4
+BABABABABABABABABAAEAEAEAEAEAEAEAEAEACACACACACACACACACACACACA8A8A8A8A8A8A8A8A8
+A8A8A8A8A8A8A8A8A8B2B2B2B2B2B2B2B2B2AFAFAFAFAFAFAFAFAFAFAFAF818181818181818181
+727272727272727272AEAEAEAEAEAEAEAEAED3D3D3D3D3D3D3D3D3CDCDCDCDCDCDCDCDCDCDCDCD
+B0B1B0B0B1B0B0B1B0ABABABABABABABABABB2B2B2B2B2B2B2B2B2BABABABABABABABABACFCFCF
+CFCFCFCFCFCFCFCFCFC7C7C7C7C7C7C7C7C78F8F8F8F8F8F8F8F8F838383838383838383B6B6B6
+B6B6B6B6B6B6B6B6B6C8C8C8C8C8C8C8C8C8B8B8B8B8B8B8B8B8B8C7C7C7C7C7C7C7C7C7C5C5C5
+C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5BABABABABABABABABABDBDBDBDBDBDBDBDBDD2D2D2
+D2D2D2D2D2D2D3D3D3D3D3D3D3D3D3C5C5C5C5C5C5C5C5C5C5C5C5B3B3B3B3B3B3B3B3B3B9B9B9
+B9B9B9B9B9B9D7D7D7D7D7D7D7D7D7EDEDEDEDEDEDEDEDEDEDEDEDD0D0D0D0D0D0D0D0D0B8B8B8
+B8B8B8B8B8B8A1A1A1A1A1A1A1A1A1A6A6A6A6A6A6A6A6A6CBCBCBCBCBCBCBCBCBCBCBCBD5D5D5
+D5D5D5D5D5D5BFBFBFBFBFBFBFBFBF9595959595959595956969696969696969698B8B8B8B8B8B
+8B8B8B8B8B8BD0D0D0D0D0D0D0D0D0E4E4E4E4E4E4E4E4E4D2D2D2D2D2D2D2D2D2979797979797
+9797979797975E5E5E5E5E5E5E5E5E7E7E7E7E7E7E7E7E7EBEBEBEBEBEBEBEBEBEC5C5C5C5C5C5
+C5C5C5C3C3C3C3C3C3C3C3C3C3C3C38C8C8C8C8C8C8C8C8C636363636363636363909090909090
+909090BEBEBEBEBEBEBEBEBED1D1D1D1D1D1D1D1D1D1D1D1E4E4E4E4E4E4E4E4E4D0D0D0D0D0D0
+D0D0D0C3C3C3C3C3C3C3C3C3C1C1C1C1C1C1C1C1C1C1C1C1D5D5D5D5D5D5D5D5D5DCDCDCDCDCDC
+DCDCDCD6D6D6D6D6D6D6D6D6C8C8C8C8C8C8C8C8C8C4C4C4C4C4C4C4C4C4C4C4C4C5C5C5C5C5C5
+C5C5C5B1B1B1B1B1B1B1B1B1A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5999999999999999999
+9999999C9C9C9C9C9C9C9C9CA6A6A6A6A6A6A6A6A69B9B9B9B9B9B9B9B9B949494949494949494
+949494A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A1A1A1A1A1A1A1A1A1AEAEAEAEAEAEAEAEAE
+B4B4B4B4B4B4B4B4B4B4B4B4A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A9A9A9A9A9A9A9A9A9
+B8B8B8B8B8B8B8B8B8C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2BCBCBCBCBCBCBCBCBC
+BABABABABABABABABAC8C8C8C8C8C8C8C8C8C8C8C8C5C5C5C5C5C5C5C5C5C4C4C4C4C4C4C4C4C4
+C3C3C3C3C3C3C3C3C3CCCCCCCCCCCCCCCCCCCACACACACACACACACACACACACBCBCBCBCBCBCBCBCB
+CECECECECECECECECECDCDCDCDCDCDCDCDCDC9C9C9C9C9C9C9C9C9CECECECECECECECECECECECE
+CACACACACACACACACABEBEBEBEBEBEBEBEBEBFBFBFBFBFBFBFBFBFC3C3C3C3C3C3C3C3C3C3C3C3
+B9B9B9B9B9B9B9B9B9BFBFBFBFBFBFBFBFBFB9B9B9B9B9B9B9B9B9B4B4B4B4B4B4B4B4B4B6B6B6
+B6B6B6B6B6B6B6B6B6B0B1B0B0B1B0B0B1B0B1B1B1B1B1B1B1B1B1AAAAAAAAAAAAAAAAAAA1A1A1
+A1A1A1A1A1A1A8A8A8A8A8A8A8A8A8A8A8A8AAAAAAAAAAAAAAAAAAA8A8A8A8A8A8A8A8A8B3B3B3
+B3B3B3B3B3B3A0A0A0A0A0A0A0A0A0A0A0A06D6D6D6D6D6D6D6D6D7B7B7B7B7B7B7B7B7BB7B7B7
+B7B7B7B7B7B7D9D9D9D9D9D9D9D9D9C5C5C5C5C5C5C5C5C5C5C5C58E8E8E8E8E8E8E8E8E888888
+888888888888BABABABABABABABABAC1C1C1C1C1C1C1C1C1CECECECECECECECECECECECECCCCCC
+CCCCCCCCCCCCA3A3A3A3A3A3A3A3A3A7A7A7A7A7A7A7A7A7C5C5C5C5C5C5C5C5C5C5C5C5CECECE
+CECECECECECEACACACACACACACACACC7C7C7C7C7C7C7C7C7C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5
+C5C5C5C5C5C5BABABABABABABABABABDBDBDBDBDBDBDBDBDD2D2D2D2D2D2D2D2D2D3D3D3D3D3D3
+D3D3D3C5C5C5C5C5C5C5C5C5C5C5C5B3B3B3B3B3B3B3B3B3B9B9B9B9B9B9B9B9B9D7D7D7D7D7D7
+D7D7D7EDEDEDEDEDEDEDEDEDEDEDEDD0D0D0D0D0D0D0D0D0B8B8B8B8B8B8B8B8B8A1A1A1A1A1A1
+A1A1A1A6A6A6A6A6A6A6A6A6CBCBCBCBCBCBCBCBCBCBCBCBD5D5D5D5D5D5D5D5D5BFBFBFBFBFBF
+BFBFBF9595959595959595956969696969696969698B8B8B8B8B8B8B8B8B8B8B8BD0D0D0D0D0D0
+D0D0D0E4E4E4E4E4E4E4E4E4D2D2D2D2D2D2D2D2D29797979797979797979797975E5E5E5E5E5E
+5E5E5E7E7E7E7E7E7E7E7E7EBEBEBEBEBEBEBEBEBEC5C5C5C5C5C5C5C5C5C3C3C3C3C3C3C3C3C3
+C3C3C38C8C8C8C8C8C8C8C8C636363636363636363909090909090909090BEBEBEBEBEBEBEBEBE
+D1D1D1D1D1D1D1D1D1D1D1D1E4E4E4E4E4E4E4E4E4D0D0D0D0D0D0D0D0D0C3C3C3C3C3C3C3C3C3
+C1C1C1C1C1C1C1C1C1C1C1C1D5D5D5D5D5D5D5D5D5DCDCDCDCDCDCDCDCDCD6D6D6D6D6D6D6D6D6
+C8C8C8C8C8C8C8C8C8C4C4C4C4C4C4C4C4C4C4C4C4C5C5C5C5C5C5C5C5C5B1B1B1B1B1B1B1B1B1
+A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A59999999999999999999999999C9C9C9C9C9C9C9C9C
+A6A6A6A6A6A6A6A6A69B9B9B9B9B9B9B9B9B949494949494949494949494A6A6A6A6A6A6A6A6A6
+A5A5A5A5A5A5A5A5A5A1A1A1A1A1A1A1A1A1AEAEAEAEAEAEAEAEAEB4B4B4B4B4B4B4B4B4B4B4B4
+A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A9A9A9A9A9A9A9A9A9B8B8B8B8B8B8B8B8B8C2C2C2
+C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2BCBCBCBCBCBCBCBCBCBABABABABABABABABAC8C8C8
+C8C8C8C8C8C8C8C8C8C5C5C5C5C5C5C5C5C5C4C4C4C4C4C4C4C4C4C3C3C3C3C3C3C3C3C3CCCCCC
+CCCCCCCCCCCCCACACACACACACACACACACACACBCBCBCBCBCBCBCBCBCECECECECECECECECECDCDCD
+CDCDCDCDCDCDC9C9C9C9C9C9C9C9C9CECECECECECECECECECECECECACACACACACACACACABEBEBE
+BEBEBEBEBEBEBFBFBFBFBFBFBFBFBFC3C3C3C3C3C3C3C3C3C3C3C3B9B9B9B9B9B9B9B9B9BFBFBF
+BFBFBFBFBFBFB9B9B9B9B9B9B9B9B9B4B4B4B4B4B4B4B4B4B6B6B6B6B6B6B6B6B6B6B6B6B0B1B0
+B0B1B0B0B1B0B1B1B1B1B1B1B1B1B1AAAAAAAAAAAAAAAAAAA1A1A1A1A1A1A1A1A1A8A8A8A8A8A8
+A8A8A8A8A8A8AAAAAAAAAAAAAAAAAAA8A8A8A8A8A8A8A8A8B3B3B3B3B3B3B3B3B3A0A0A0A0A0A0
+A0A0A0A0A0A06D6D6D6D6D6D6D6D6D7B7B7B7B7B7B7B7B7BB7B7B7B7B7B7B7B7B7D9D9D9D9D9D9
+D9D9D9C5C5C5C5C5C5C5C5C5C5C5C58E8E8E8E8E8E8E8E8E888888888888888888BABABABABABA
+BABABAC1C1C1C1C1C1C1C1C1CECECECECECECECECECECECECCCCCCCCCCCCCCCCCCA3A3A3A3A3A3
+A3A3A3A7A7A7A7A7A7A7A7A7C5C5C5C5C5C5C5C5C5C5C5C5CECECECECECECECECEACACACACACAC
+ACACACCECECECECECECECECEC7C7C7C7C7C7C7C7C7C5C5C5C5C5C5C5C5C5C5C5C5C7C7C7C7C7C7
+C7C7C7D3D3D3D3D3D3D3D3D3DEDEDEDEDEDEDEDEDED6D6D6D6D6D6D6D6D6B8B8B8B8B8B8B8B8B8
+B8B8B88A8A8A8A8A8A8A8A8A858585858585858585BABABABABABABABABAE8E9E8E8E9E8E8E9E8
+E8E9E8D7D7D7D7D7D7D7D7D7ACACACACACACACACAC7B7B7B7B7B7B7B7B7B747474747474747474
+B3B3B3B3B3B3B3B3B3B3B3B3D6D6D6D6D6D6D6D6D6C5C5C5C5C5C5C5C5C58C8C8C8C8C8C8C8C8C
+5A5A5A5A5A5A5A5A5A7B7B7B7B7B7B7B7B7B7B7B7BC6C6C6C6C6C6C6C6C6DBDBDBDBDBDBDBDBDB
+D2D2D2D2D2D2D2D2D29C9C9C9C9C9C9C9C9C9C9C9C6E6E6E6E6E6E6E6E6E929292929292929292
+BDBDBDBDBDBDBDBDBDC1C1C1C1C1C1C1C1C1D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0
+9C9C9C9C9C9C9C9C9CADADADADADADADADADC3C3C3C3C3C3C3C3C3CFCFCFCFCFCFCFCFCFCFCFCF
+DFE0DFDFE0DFDFE0DFD6D6D6D6D6D6D6D6D6DADADADADADADADADADFE0DFDFE0DFDFE0DFDFE0DF
+CACACACACACACACACAC8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D5D5D5D5D5D5D5D5D5D2D2D2
+D2D2D2D2D2D2D2D2D2C8C8C8C8C8C8C8C8C8B2B2B2B2B2B2B2B2B2A9A9A9A9A9A9A9A9A9AFAFAF
+AFAFAFAFAFAFA0A0A0A0A0A0A0A0A0A0A0A0A4A4A4A4A4A4A4A4A4B0B0B0B0B0B0B0B0B0A2A2A2
+A2A2A2A2A2A29898989898989898989898989A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9B9B9B
+9B9B9B9B9B9B9B9B9B9B9B9B9B9B9BA8A8A8A8A8A8A8A8A8A8A8A89C9C9C9C9C9C9C9C9C939393
+9393939393939E9E9E9E9E9E9E9E9EAFAFAFAFAFAFAFAFAFB8B8B8B8B8B8B8B8B8B8B8B8B3B3B3
+B3B3B3B3B3B3B4B4B4B4B4B4B4B4B4B2B2B2B2B2B2B2B2B2BEBEBEBEBEBEBEBEBEBEBEBEC3C3C3
+C3C3C3C3C3C3C4C4C4C4C4C4C4C4C4BABABABABABABABABAC5C5C5C5C5C5C5C5C5C8C8C8C8C8C8
+C8C8C8C8C8C8CDCDCDCDCDCDCDCDCDD2D2D2D2D2D2D2D2D2CECECECECECECECECECACACACACACA
+CACACACDCDCDCDCDCDCDCDCDCDCDCDD3D3D3D3D3D3D3D3D3CDCDCDCDCDCDCDCDCDD1D1D1D1D1D1
+D1D1D1D5D5D5D5D5D5D5D5D5D5D5D5C3C3C3C3C3C3C3C3C3BFBFBFBFBFBFBFBFBFBABABABABABA
+BABABAACACACACACACACACACA7A7A7A7A7A7A7A7A7A7A7A7A3A3A3A3A3A3A3A3A39F9F9F9F9F9F
+9F9F9F9E9E9E9E9E9E9E9E9EA1A1A1A1A1A1A1A1A1A9A9A9A9A9A9A9A9A9A9A9A9AEAEAEAEAEAE
+AEAEAEAFAFAFAFAFAFAFAFAFB2B2B2B2B2B2B2B2B2959595959595959595959595787878787878
+787878999999999999999999C1C1C1C1C1C1C1C1C1DADADADADADADADADAC0C0C0C0C0C0C0C0C0
+C0C0C08C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8CBDBDBDBDBDBDBDBDBDBFBFBFBFBFBFBFBFBF
+BBBBBBBBBBBBBBBBBBBBBBBBC5C5C5C5C5C5C5C5C5CCCCCCCCCCCCCCCCCCD0D0D0D0D0D0D0D0D0
+CFCFCFCFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0B8B8B8B8B8B8B8B8B8CECECECECECECECECE
+C7C7C7C7C7C7C7C7C7C5C5C5C5C5C5C5C5C5C5C5C5C7C7C7C7C7C7C7C7C7D3D3D3D3D3D3D3D3D3
+DEDEDEDEDEDEDEDEDED6D6D6D6D6D6D6D6D6B8B8B8B8B8B8B8B8B8B8B8B88A8A8A8A8A8A8A8A8A
+858585858585858585BABABABABABABABABAE8E9E8E8E9E8E8E9E8E8E9E8D7D7D7D7D7D7D7D7D7
+ACACACACACACACACAC7B7B7B7B7B7B7B7B7B747474747474747474B3B3B3B3B3B3B3B3B3B3B3B3
+D6D6D6D6D6D6D6D6D6C5C5C5C5C5C5C5C5C58C8C8C8C8C8C8C8C8C5A5A5A5A5A5A5A5A5A7B7B7B
+7B7B7B7B7B7B7B7B7BC6C6C6C6C6C6C6C6C6DBDBDBDBDBDBDBDBDBD2D2D2D2D2D2D2D2D29C9C9C
+9C9C9C9C9C9C9C9C9C6E6E6E6E6E6E6E6E6E929292929292929292BDBDBDBDBDBDBDBDBDC1C1C1
+C1C1C1C1C1C1D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C09C9C9C9C9C9C9C9C9CADADAD
+ADADADADADADC3C3C3C3C3C3C3C3C3CFCFCFCFCFCFCFCFCFCFCFCFDFE0DFDFE0DFDFE0DFD6D6D6
+D6D6D6D6D6D6DADADADADADADADADADFE0DFDFE0DFDFE0DFDFE0DFCACACACACACACACACAC8C8C8
+C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D5D5D5D5D5D5D5D5D5D2D2D2D2D2D2D2D2D2D2D2D2C8C8C8
+C8C8C8C8C8C8B2B2B2B2B2B2B2B2B2A9A9A9A9A9A9A9A9A9AFAFAFAFAFAFAFAFAFA0A0A0A0A0A0
+A0A0A0A0A0A0A4A4A4A4A4A4A4A4A4B0B0B0B0B0B0B0B0B0A2A2A2A2A2A2A2A2A2989898989898
+9898989898989A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B
+9B9B9BA8A8A8A8A8A8A8A8A8A8A8A89C9C9C9C9C9C9C9C9C9393939393939393939E9E9E9E9E9E
+9E9E9EAFAFAFAFAFAFAFAFAFB8B8B8B8B8B8B8B8B8B8B8B8B3B3B3B3B3B3B3B3B3B4B4B4B4B4B4
+B4B4B4B2B2B2B2B2B2B2B2B2BEBEBEBEBEBEBEBEBEBEBEBEC3C3C3C3C3C3C3C3C3C4C4C4C4C4C4
+C4C4C4BABABABABABABABABAC5C5C5C5C5C5C5C5C5C8C8C8C8C8C8C8C8C8C8C8C8CDCDCDCDCDCD
+CDCDCDD2D2D2D2D2D2D2D2D2CECECECECECECECECECACACACACACACACACACDCDCDCDCDCDCDCDCD
+CDCDCDD3D3D3D3D3D3D3D3D3CDCDCDCDCDCDCDCDCDD1D1D1D1D1D1D1D1D1D5D5D5D5D5D5D5D5D5
+D5D5D5C3C3C3C3C3C3C3C3C3BFBFBFBFBFBFBFBFBFBABABABABABABABABAACACACACACACACACAC
+A7A7A7A7A7A7A7A7A7A7A7A7A3A3A3A3A3A3A3A3A39F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E
+A1A1A1A1A1A1A1A1A1A9A9A9A9A9A9A9A9A9A9A9A9AEAEAEAEAEAEAEAEAEAFAFAFAFAFAFAFAFAF
+B2B2B2B2B2B2B2B2B2959595959595959595959595787878787878787878999999999999999999
+C1C1C1C1C1C1C1C1C1DADADADADADADADADAC0C0C0C0C0C0C0C0C0C0C0C08C8C8C8C8C8C8C8C8C
+8C8C8C8C8C8C8C8C8CBDBDBDBDBDBDBDBDBDBFBFBFBFBFBFBFBFBFBBBBBBBBBBBBBBBBBBBBBBBB
+C5C5C5C5C5C5C5C5C5CCCCCCCCCCCCCCCCCCD0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCF
+D0D0D0D0D0D0D0D0D0B8B8B8B8B8B8B8B8B8CECECECECECECECECEC7C7C7C7C7C7C7C7C7C5C5C5
+C5C5C5C5C5C5C5C5C5C7C7C7C7C7C7C7C7C7D3D3D3D3D3D3D3D3D3DEDEDEDEDEDEDEDEDED6D6D6
+D6D6D6D6D6D6B8B8B8B8B8B8B8B8B8B8B8B88A8A8A8A8A8A8A8A8A858585858585858585BABABA
+BABABABABABAE8E9E8E8E9E8E8E9E8E8E9E8D7D7D7D7D7D7D7D7D7ACACACACACACACACAC7B7B7B
+7B7B7B7B7B7B747474747474747474B3B3B3B3B3B3B3B3B3B3B3B3D6D6D6D6D6D6D6D6D6C5C5C5
+C5C5C5C5C5C58C8C8C8C8C8C8C8C8C5A5A5A5A5A5A5A5A5A7B7B7B7B7B7B7B7B7B7B7B7BC6C6C6
+C6C6C6C6C6C6DBDBDBDBDBDBDBDBDBD2D2D2D2D2D2D2D2D29C9C9C9C9C9C9C9C9C9C9C9C6E6E6E
+6E6E6E6E6E6E929292929292929292BDBDBDBDBDBDBDBDBDC1C1C1C1C1C1C1C1C1D0D0D0D0D0D0
+D0D0D0D0D0D0C0C0C0C0C0C0C0C0C09C9C9C9C9C9C9C9C9CADADADADADADADADADC3C3C3C3C3C3
+C3C3C3CFCFCFCFCFCFCFCFCFCFCFCFDFE0DFDFE0DFDFE0DFD6D6D6D6D6D6D6D6D6DADADADADADA
+DADADADFE0DFDFE0DFDFE0DFDFE0DFCACACACACACACACACAC8C8C8C8C8C8C8C8C8D8D8D8D8D8D8
+D8D8D8D5D5D5D5D5D5D5D5D5D2D2D2D2D2D2D2D2D2D2D2D2C8C8C8C8C8C8C8C8C8B2B2B2B2B2B2
+B2B2B2A9A9A9A9A9A9A9A9A9AFAFAFAFAFAFAFAFAFA0A0A0A0A0A0A0A0A0A0A0A0A4A4A4A4A4A4
+A4A4A4B0B0B0B0B0B0B0B0B0A2A2A2A2A2A2A2A2A29898989898989898989898989A9A9A9A9A9A
+9A9A9A9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9BA8A8A8A8A8A8A8A8A8
+A8A8A89C9C9C9C9C9C9C9C9C9393939393939393939E9E9E9E9E9E9E9E9EAFAFAFAFAFAFAFAFAF
+B8B8B8B8B8B8B8B8B8B8B8B8B3B3B3B3B3B3B3B3B3B4B4B4B4B4B4B4B4B4B2B2B2B2B2B2B2B2B2
+BEBEBEBEBEBEBEBEBEBEBEBEC3C3C3C3C3C3C3C3C3C4C4C4C4C4C4C4C4C4BABABABABABABABABA
+C5C5C5C5C5C5C5C5C5C8C8C8C8C8C8C8C8C8C8C8C8CDCDCDCDCDCDCDCDCDD2D2D2D2D2D2D2D2D2
+CECECECECECECECECECACACACACACACACACACDCDCDCDCDCDCDCDCDCDCDCDD3D3D3D3D3D3D3D3D3
+CDCDCDCDCDCDCDCDCDD1D1D1D1D1D1D1D1D1D5D5D5D5D5D5D5D5D5D5D5D5C3C3C3C3C3C3C3C3C3
+BFBFBFBFBFBFBFBFBFBABABABABABABABABAACACACACACACACACACA7A7A7A7A7A7A7A7A7A7A7A7
+A3A3A3A3A3A3A3A3A39F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9EA1A1A1A1A1A1A1A1A1A9A9A9
+A9A9A9A9A9A9A9A9A9AEAEAEAEAEAEAEAEAEAFAFAFAFAFAFAFAFAFB2B2B2B2B2B2B2B2B2959595
+959595959595959595787878787878787878999999999999999999C1C1C1C1C1C1C1C1C1DADADA
+DADADADADADAC0C0C0C0C0C0C0C0C0C0C0C08C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8CBDBDBD
+BDBDBDBDBDBDBFBFBFBFBFBFBFBFBFBBBBBBBBBBBBBBBBBBBBBBBBC5C5C5C5C5C5C5C5C5CCCCCC
+CCCCCCCCCCCCD0D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D0B8B8B8
+B8B8B8B8B8B8D4D4D4D4D4D4D4D4D4C5C5C5C5C5C5C5C5C5A3A3A3A3A3A3A3A3A3A3A3A3A2A2A2
+A2A2A2A2A2A2C6C6C6C6C6C6C6C6C6DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBB0B1B0B0B1B0
+B0B1B0B0B1B06F6F6F6F6F6F6F6F6F626262626262626262A8A8A8A8A8A8A8A8A8E2E2E2E2E2E2
+E2E2E2E2E2E2E4E4E4E4E4E4E4E4E4A9A9A9A9A9A9A9A9A96E6E6E6E6E6E6E6E6E7D7D7D7D7D7D
+7D7D7DBBBBBBBBBBBBBBBBBBBBBBBBE0E0E0E0E0E0E0E0E0DFE0DFDFE0DFDFE0DFA8A8A8A8A8A8
+A8A8A8737373737373737373969696969696969696969696CCCCCCCCCCCCCCCCCCDDDDDDDDDDDD
+DDDDDDD6D6D6D6D6D6D6D6D6C4C4C4C4C4C4C4C4C4C4C4C4A1A1A1A1A1A1A1A1A1AFAFAFAFAFAF
+AFAFAFCBCBCBCBCBCBCBCBCBCFCFCFCFCFCFCFCFCFCCCCCCCCCCCCCCCCCCCCCCCCCECECECECECE
+CECECEC9C9C9C9C9C9C9C9C9C6C6C6C6C6C6C6C6C6CCCCCCCCCCCCCCCCCCDFDFDFDFDFDFDFDFDF
+DFDFDFE8E8E8E8E8E8E8E8E8E1E1E1E1E1E1E1E1E1E2E2E2E2E2E2E2E2E2DBDBDBDBDBDBDBDBDB
+DBDBDBACACACACACACACACAC9A9A9A9A9A9A9A9A9ABDBDBDBDBDBDBDBDBDD3D3D3D3D3D3D3D3D3
+D7D7D7D7D7D7D7D7D7D7D7D7C3C3C3C3C3C3C3C3C3B2B2B2B2B2B2B2B2B2B8B8B8B8B8B8B8B8B8
+BEBEBEBEBEBEBEBEBEB6B6B6B6B6B6B6B6B6B6B6B6B8B8B8B8B8B8B8B8B8BDBDBDBDBDBDBDBDBD
+ADADADADADADADADAD9A9A9A9A9A9A9A9A9A9A9A9A939393939393939393969696969696969696
+9A9A9A9A9A9A9A9A9A9898989898989898989B9B9B9B9B9B9B9B9B9B9B9B979797979797979797
+959595959595959595A1A1A1A1A1A1A1A1A1A7A7A7A7A7A7A7A7A7B0B1B0B0B1B0B0B1B0B0B1B0
+ACACACACACACACACACA8A8A8A8A8A8A8A8A8AAAAAAAAAAAAAAAAAAB0B1B0B0B1B0B0B1B0B0B1B0
+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB0B0B0B0B0B0B0B0B0B1B1B1B1B1B1B1B1B1B7B7B7
+B7B7B7B7B7B7B7B7B7BFBFBFBFBFBFBFBFBFC7C7C7C7C7C7C7C7C7C3C3C3C3C3C3C3C3C3B7B7B7
+B7B7B7B7B7B7C7C7C7C7C7C7C7C7C7C7C7C7CECECECECECECECECEC2C2C2C2C2C2C2C2C2CCCCCC
+CCCCCCCCCCCCD2D2D2D2D2D2D2D2D2D2D2D2BEBEBEBEBEBEBEBEBEB3B3B3B3B3B3B3B3B3AFAFAF
+AFAFAFAFAFAFA5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A6A6A69F9F9F9F9F9F9F9F9F979797
+9797979797979E9E9E9E9E9E9E9E9EA5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A6A6A6B0B0B0
+B0B0B0B0B0B0B4B4B4B4B4B4B4B4B4B2B2B2B2B2B2B2B2B29B9B9B9B9B9B9B9B9B9B9B9B919191
+919191919191A2A2A2A2A2A2A2A2A2B8B8B8B8B8B8B8B8B8D7D7D7D7D7D7D7D7D7C7C7C7C7C7C7
+C7C7C7C7C7C7B0B1B0B0B1B0B0B1B0B2B2B2B2B2B2B2B2B2C6C6C6C6C6C6C6C6C6BDBDBDBDBDBD
+BDBDBD9898989898989898989898989C9C9C9C9C9C9C9C9CCCCCCCCCCCCCCCCCCCD1D1D1D1D1D1
+D1D1D1BEBEBEBEBEBEBEBEBEBEBEBEB5B5B5B5B5B5B5B5B5C0C0C0C0C0C0C0C0C0D4D4D4D4D4D4
+D4D4D4C5C5C5C5C5C5C5C5C5A3A3A3A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2C6C6C6C6C6C6
+C6C6C6DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBB0B1B0B0B1B0B0B1B0B0B1B06F6F6F6F6F6F
+6F6F6F626262626262626262A8A8A8A8A8A8A8A8A8E2E2E2E2E2E2E2E2E2E2E2E2E4E4E4E4E4E4
+E4E4E4A9A9A9A9A9A9A9A9A96E6E6E6E6E6E6E6E6E7D7D7D7D7D7D7D7D7DBBBBBBBBBBBBBBBBBB
+BBBBBBE0E0E0E0E0E0E0E0E0DFE0DFDFE0DFDFE0DFA8A8A8A8A8A8A8A8A8737373737373737373
+969696969696969696969696CCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDD6D6D6D6D6D6D6D6D6
+C4C4C4C4C4C4C4C4C4C4C4C4A1A1A1A1A1A1A1A1A1AFAFAFAFAFAFAFAFAFCBCBCBCBCBCBCBCBCB
+CFCFCFCFCFCFCFCFCFCCCCCCCCCCCCCCCCCCCCCCCCCECECECECECECECECEC9C9C9C9C9C9C9C9C9
+C6C6C6C6C6C6C6C6C6CCCCCCCCCCCCCCCCCCDFDFDFDFDFDFDFDFDFDFDFDFE8E8E8E8E8E8E8E8E8
+E1E1E1E1E1E1E1E1E1E2E2E2E2E2E2E2E2E2DBDBDBDBDBDBDBDBDBDBDBDBACACACACACACACACAC
+9A9A9A9A9A9A9A9A9ABDBDBDBDBDBDBDBDBDD3D3D3D3D3D3D3D3D3D7D7D7D7D7D7D7D7D7D7D7D7
+C3C3C3C3C3C3C3C3C3B2B2B2B2B2B2B2B2B2B8B8B8B8B8B8B8B8B8BEBEBEBEBEBEBEBEBEB6B6B6
+B6B6B6B6B6B6B6B6B6B8B8B8B8B8B8B8B8B8BDBDBDBDBDBDBDBDBDADADADADADADADADAD9A9A9A
+9A9A9A9A9A9A9A9A9A9393939393939393939696969696969696969A9A9A9A9A9A9A9A9A989898
+9898989898989B9B9B9B9B9B9B9B9B9B9B9B979797979797979797959595959595959595A1A1A1
+A1A1A1A1A1A1A7A7A7A7A7A7A7A7A7B0B1B0B0B1B0B0B1B0B0B1B0ACACACACACACACACACA8A8A8
+A8A8A8A8A8A8AAAAAAAAAAAAAAAAAAB0B1B0B0B1B0B0B1B0B0B1B0BBBBBBBBBBBBBBBBBBBBBBBB
+BBBBBBBBBBBBB0B0B0B0B0B0B0B0B0B1B1B1B1B1B1B1B1B1B7B7B7B7B7B7B7B7B7B7B7B7BFBFBF
+BFBFBFBFBFBFC7C7C7C7C7C7C7C7C7C3C3C3C3C3C3C3C3C3B7B7B7B7B7B7B7B7B7C7C7C7C7C7C7
+C7C7C7C7C7C7CECECECECECECECECEC2C2C2C2C2C2C2C2C2CCCCCCCCCCCCCCCCCCD2D2D2D2D2D2
+D2D2D2D2D2D2BEBEBEBEBEBEBEBEBEB3B3B3B3B3B3B3B3B3AFAFAFAFAFAFAFAFAFA5A5A5A5A5A5
+A5A5A5A6A6A6A6A6A6A6A6A6A6A6A69F9F9F9F9F9F9F9F9F9797979797979797979E9E9E9E9E9E
+9E9E9EA5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A6A6A6B0B0B0B0B0B0B0B0B0B4B4B4B4B4B4
+B4B4B4B2B2B2B2B2B2B2B2B29B9B9B9B9B9B9B9B9B9B9B9B919191919191919191A2A2A2A2A2A2
+A2A2A2B8B8B8B8B8B8B8B8B8D7D7D7D7D7D7D7D7D7C7C7C7C7C7C7C7C7C7C7C7C7B0B1B0B0B1B0
+B0B1B0B2B2B2B2B2B2B2B2B2C6C6C6C6C6C6C6C6C6BDBDBDBDBDBDBDBDBD989898989898989898
+9898989C9C9C9C9C9C9C9C9CCCCCCCCCCCCCCCCCCCD1D1D1D1D1D1D1D1D1BEBEBEBEBEBEBEBEBE
+BEBEBEB5B5B5B5B5B5B5B5B5C0C0C0C0C0C0C0C0C0D4D4D4D4D4D4D4D4D4C5C5C5C5C5C5C5C5C5
+A3A3A3A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2C6C6C6C6C6C6C6C6C6DBDBDBDBDBDBDBDBDB
+DBDBDBDBDBDBDBDBDBB0B1B0B0B1B0B0B1B0B0B1B06F6F6F6F6F6F6F6F6F626262626262626262
+A8A8A8A8A8A8A8A8A8E2E2E2E2E2E2E2E2E2E2E2E2E4E4E4E4E4E4E4E4E4A9A9A9A9A9A9A9A9A9
+6E6E6E6E6E6E6E6E6E7D7D7D7D7D7D7D7D7DBBBBBBBBBBBBBBBBBBBBBBBBE0E0E0E0E0E0E0E0E0
+DFE0DFDFE0DFDFE0DFA8A8A8A8A8A8A8A8A8737373737373737373969696969696969696969696
+CCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDD6D6D6D6D6D6D6D6D6C4C4C4C4C4C4C4C4C4C4C4C4
+A1A1A1A1A1A1A1A1A1AFAFAFAFAFAFAFAFAFCBCBCBCBCBCBCBCBCBCFCFCFCFCFCFCFCFCFCCCCCC
+CCCCCCCCCCCCCCCCCCCECECECECECECECECEC9C9C9C9C9C9C9C9C9C6C6C6C6C6C6C6C6C6CCCCCC
+CCCCCCCCCCCCDFDFDFDFDFDFDFDFDFDFDFDFE8E8E8E8E8E8E8E8E8E1E1E1E1E1E1E1E1E1E2E2E2
+E2E2E2E2E2E2DBDBDBDBDBDBDBDBDBDBDBDBACACACACACACACACAC9A9A9A9A9A9A9A9A9ABDBDBD
+BDBDBDBDBDBDD3D3D3D3D3D3D3D3D3D7D7D7D7D7D7D7D7D7D7D7D7C3C3C3C3C3C3C3C3C3B2B2B2
+B2B2B2B2B2B2B8B8B8B8B8B8B8B8B8BEBEBEBEBEBEBEBEBEB6B6B6B6B6B6B6B6B6B6B6B6B8B8B8
+B8B8B8B8B8B8BDBDBDBDBDBDBDBDBDADADADADADADADADAD9A9A9A9A9A9A9A9A9A9A9A9A939393
+9393939393939696969696969696969A9A9A9A9A9A9A9A9A9898989898989898989B9B9B9B9B9B
+9B9B9B9B9B9B979797979797979797959595959595959595A1A1A1A1A1A1A1A1A1A7A7A7A7A7A7
+A7A7A7B0B1B0B0B1B0B0B1B0B0B1B0ACACACACACACACACACA8A8A8A8A8A8A8A8A8AAAAAAAAAAAA
+AAAAAAB0B1B0B0B1B0B0B1B0B0B1B0BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB0B0B0B0B0B0
+B0B0B0B1B1B1B1B1B1B1B1B1B7B7B7B7B7B7B7B7B7B7B7B7BFBFBFBFBFBFBFBFBFC7C7C7C7C7C7
+C7C7C7C3C3C3C3C3C3C3C3C3B7B7B7B7B7B7B7B7B7C7C7C7C7C7C7C7C7C7C7C7C7CECECECECECE
+CECECEC2C2C2C2C2C2C2C2C2CCCCCCCCCCCCCCCCCCD2D2D2D2D2D2D2D2D2D2D2D2BEBEBEBEBEBE
+BEBEBEB3B3B3B3B3B3B3B3B3AFAFAFAFAFAFAFAFAFA5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6
+A6A6A69F9F9F9F9F9F9F9F9F9797979797979797979E9E9E9E9E9E9E9E9EA5A5A5A5A5A5A5A5A5
+A6A6A6A6A6A6A6A6A6A6A6A6B0B0B0B0B0B0B0B0B0B4B4B4B4B4B4B4B4B4B2B2B2B2B2B2B2B2B2
+9B9B9B9B9B9B9B9B9B9B9B9B919191919191919191A2A2A2A2A2A2A2A2A2B8B8B8B8B8B8B8B8B8
+D7D7D7D7D7D7D7D7D7C7C7C7C7C7C7C7C7C7C7C7C7B0B1B0B0B1B0B0B1B0B2B2B2B2B2B2B2B2B2
+C6C6C6C6C6C6C6C6C6BDBDBDBDBDBDBDBDBD9898989898989898989898989C9C9C9C9C9C9C9C9C
+CCCCCCCCCCCCCCCCCCD1D1D1D1D1D1D1D1D1BEBEBEBEBEBEBEBEBEBEBEBEB5B5B5B5B5B5B5B5B5
+C0C0C0C0C0C0C0C0C0DBDBDBDBDBDBDBDBDBBDBDBDBDBDBDBDBDBD797979797979797979797979
+6E6E6E6E6E6E6E6E6EB3B3B3B3B3B3B3B3B3D6D6D5D6D6D5D6D6D5DADADADADADADADADAA6A6A6
+A6A6A6A6A6A6A6A6A66C6C6C6C6C6C6C6C6C7E7E7E7E7E7E7E7E7EB6B6B6B6B6B6B6B6B6DBDBDB
+DBDBDBDBDBDBDBDBDBE9E9E9E9E9E9E9E9E9C2C2C2C2C2C2C2C2C28E8E8E8E8E8E8E8E8EA7A7A7
+A7A7A7A7A7A7DADADADADADADADADADADADAEEEEEEEEEEEEEEEEEEE8E8E8E8E8E8E8E8E8CBCBCB
+CBCBCBCBCBCBABABABABABABABABABB8B8B8B8B8B8B8B8B8B8B8B8D6D6D6D6D6D6D6D6D6DDDDDD
+DDDDDDDDDDDDD6D6D5D6D6D5D6D6D5D5D5D5D5D5D5D5D5D5D5D5D5C4C4C4C4C4C4C4C4C4BDBDBD
+BDBDBDBDBDBDCBCBCBCBCBCBCBCBCBE0E0E0E0E0E0E0E0E0D6D6D6D6D6D6D6D6D6D6D6D6C5C5C5
+C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5B9B9B9B9B9B9B9B9B9B4B4B4B4B4B4B4B4B4CECECECECECE
+CECECECECECEE5E5E5E5E5E5E5E5E5E2E2E2E2E2E2E2E2E2DDDDDDDDDDDDDDDDDDCBCBCBCBCBCB
+CBCBCBCBCBCB8686868686868686865B5B5B5B5B5B5B5B5B8C8C8C8C8C8C8C8C8CCFCFCFCFCFCF
+CFCFCFE3E3E3E3E3E3E3E3E3E3E3E3CDCDCDCDCDCDCDCDCDB0B0B0B0B0B0B0B0B0B0B1B0B0B1B0
+B0B1B0BFBFBFBFBFBFBFBFBFC5C5C5C5C5C5C5C5C5C5C5C5C6C6C6C6C6C6C6C6C6BDBDBDBDBDBD
+BDBDBDB0B0B0B0B0B0B0B0B09E9E9E9E9E9E9E9E9E9E9E9EA1A1A1A1A1A1A1A1A1AAAAAAAAAAAA
+AAAAAAB0B0B0B0B0B0B0B0B0A7A7A7A7A7A7A7A7A79C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A
+9A9A9A9797979797979797979C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9EA0A0A0A0A0A0A0A0A0
+A0A0A09D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9EA1A1A1A1A1A1A1A1A1AAAAAAAAAAAAAAAAAA
+AAAAAAAEAEAEAEAEAEAEAEAEA2A2A2A2A2A2A2A2A2AEAEAEAEAEAEAEAEAEB8B8B8B8B8B8B8B8B8
+BCBCBCBCBCBCBCBCBCBCBCBCC1C1C1C1C1C1C1C1C1C9C9C9C9C9C9C9C9C9BFBFBFBFBFBFBFBFBF
+B0B1B0B0B1B0B0B1B0C2C2C2C2C2C2C2C2C2C2C2C2C4C4C4C4C4C4C4C4C4B0B1B0B0B1B0B0B1B0
+C1C1C1C1C1C1C1C1C1C7C7C7C7C7C7C7C7C7C7C7C7B3B3B3B3B3B3B3B3B3A8A8A8A8A8A8A8A8A8
+A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A8A8A8A8A8A8A8A8A8A8A8A89B9B9B9B9B9B9B9B9B
+9898989898989898989F9F9F9F9F9F9F9F9FA6A6A6A6A6A6A6A6A6A8A8A8A8A8A8A8A8A8A8A8A8
+B2B2B2B2B2B2B2B2B2B8B8B8B8B8B8B8B8B8B1B1B1B1B1B1B1B1B1A0A0A0A0A0A0A0A0A0A0A0A0
+8A8A8A8A8A8A8A8A8A7F7F7F7F7F7F7F7F7FA1A1A1A1A1A1A1A1A1CDCDCDCDCDCDCDCDCDC3C3C3
+C3C3C3C3C3C3C3C3C3B7B7B7B7B7B7B7B7B7BEBEBEBEBEBEBEBEBECBCBCBCBCBCBCBCBCBBEBEBE
+BEBEBEBEBEBE8C8C8C8C8C8C8C8C8C8C8C8C949494949494949494C7C7C7C7C7C7C7C7C7C8C8C8
+C8C8C8C8C8C8A6A6A6A6A6A6A6A6A6A6A6A68383838383838383839E9E9E9E9E9E9E9E9EDBDBDB
+DBDBDBDBDBDBBDBDBDBDBDBDBDBDBD7979797979797979797979796E6E6E6E6E6E6E6E6EB3B3B3
+B3B3B3B3B3B3D6D6D5D6D6D5D6D6D5DADADADADADADADADAA6A6A6A6A6A6A6A6A6A6A6A66C6C6C
+6C6C6C6C6C6C7E7E7E7E7E7E7E7E7EB6B6B6B6B6B6B6B6B6DBDBDBDBDBDBDBDBDBDBDBDBE9E9E9
+E9E9E9E9E9E9C2C2C2C2C2C2C2C2C28E8E8E8E8E8E8E8E8EA7A7A7A7A7A7A7A7A7DADADADADADA
+DADADADADADAEEEEEEEEEEEEEEEEEEE8E8E8E8E8E8E8E8E8CBCBCBCBCBCBCBCBCBABABABABABAB
+ABABABB8B8B8B8B8B8B8B8B8B8B8B8D6D6D6D6D6D6D6D6D6DDDDDDDDDDDDDDDDDDD6D6D5D6D6D5
+D6D6D5D5D5D5D5D5D5D5D5D5D5D5D5C4C4C4C4C4C4C4C4C4BDBDBDBDBDBDBDBDBDCBCBCBCBCBCB
+CBCBCBE0E0E0E0E0E0E0E0E0D6D6D6D6D6D6D6D6D6D6D6D6C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5
+C5C5C5B9B9B9B9B9B9B9B9B9B4B4B4B4B4B4B4B4B4CECECECECECECECECECECECEE5E5E5E5E5E5
+E5E5E5E2E2E2E2E2E2E2E2E2DDDDDDDDDDDDDDDDDDCBCBCBCBCBCBCBCBCBCBCBCB868686868686
+8686865B5B5B5B5B5B5B5B5B8C8C8C8C8C8C8C8C8CCFCFCFCFCFCFCFCFCFE3E3E3E3E3E3E3E3E3
+E3E3E3CDCDCDCDCDCDCDCDCDB0B0B0B0B0B0B0B0B0B0B1B0B0B1B0B0B1B0BFBFBFBFBFBFBFBFBF
+C5C5C5C5C5C5C5C5C5C5C5C5C6C6C6C6C6C6C6C6C6BDBDBDBDBDBDBDBDBDB0B0B0B0B0B0B0B0B0
+9E9E9E9E9E9E9E9E9E9E9E9EA1A1A1A1A1A1A1A1A1AAAAAAAAAAAAAAAAAAB0B0B0B0B0B0B0B0B0
+A7A7A7A7A7A7A7A7A79C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A979797979797979797
+9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9EA0A0A0A0A0A0A0A0A0A0A0A09D9D9D9D9D9D9D9D9D
+9E9E9E9E9E9E9E9E9EA1A1A1A1A1A1A1A1A1AAAAAAAAAAAAAAAAAAAAAAAAAEAEAEAEAEAEAEAEAE
+A2A2A2A2A2A2A2A2A2AEAEAEAEAEAEAEAEAEB8B8B8B8B8B8B8B8B8BCBCBCBCBCBCBCBCBCBCBCBC
+C1C1C1C1C1C1C1C1C1C9C9C9C9C9C9C9C9C9BFBFBFBFBFBFBFBFBFB0B1B0B0B1B0B0B1B0C2C2C2
+C2C2C2C2C2C2C2C2C2C4C4C4C4C4C4C4C4C4B0B1B0B0B1B0B0B1B0C1C1C1C1C1C1C1C1C1C7C7C7
+C7C7C7C7C7C7C7C7C7B3B3B3B3B3B3B3B3B3A8A8A8A8A8A8A8A8A8A6A6A6A6A6A6A6A6A6A5A5A5
+A5A5A5A5A5A5A8A8A8A8A8A8A8A8A8A8A8A89B9B9B9B9B9B9B9B9B9898989898989898989F9F9F
+9F9F9F9F9F9FA6A6A6A6A6A6A6A6A6A8A8A8A8A8A8A8A8A8A8A8A8B2B2B2B2B2B2B2B2B2B8B8B8
+B8B8B8B8B8B8B1B1B1B1B1B1B1B1B1A0A0A0A0A0A0A0A0A0A0A0A08A8A8A8A8A8A8A8A8A7F7F7F
+7F7F7F7F7F7FA1A1A1A1A1A1A1A1A1CDCDCDCDCDCDCDCDCDC3C3C3C3C3C3C3C3C3C3C3C3B7B7B7
+B7B7B7B7B7B7BEBEBEBEBEBEBEBEBECBCBCBCBCBCBCBCBCBBEBEBEBEBEBEBEBEBE8C8C8C8C8C8C
+8C8C8C8C8C8C949494949494949494C7C7C7C7C7C7C7C7C7C8C8C8C8C8C8C8C8C8A6A6A6A6A6A6
+A6A6A6A6A6A68383838383838383839E9E9E9E9E9E9E9E9ED0D0D0D0D0D0D0D0D0A7A7A7A7A7A7
+A7A7A7707070707070707070707070737373737373737373B1B1B1B1B1B1B1B1B1D9D9D9D9D9D9
+D9D9D9E1E1E1E1E1E1E1E1E1C1C1C1C1C1C1C1C1C1C1C1C1979797979797979797B4B4B4B4B4B4
+B4B4B4DBDBDBDBDBDBDBDBDBE2E2E2E2E2E2E2E2E2E2E2E2E4E4E4E4E4E4E4E4E4DCDCDCDCDCDC
+DCDCDCCBCBCBCBCBCBCBCBCBD2D2D2D2D2D2D2D2D2E6E6E6E6E6E6E6E6E6E6E6E6EDEDEDEDEDED
+EDEDEDE9E9E9E9E9E9E9E9E9DADADADADADADADADAC8C8C8C8C8C8C8C8C8BFBFBFBFBFBFBFBFBF
+BFBFBFD0D0D0D0D0D0D0D0D0D9D9D9D9D9D9D9D9D9D4D4D4D4D4D4D4D4D4D0D0D0D0D0D0D0D0D0
+D0D0D0C7C7C7C7C7C7C7C7C7B3B3B3B3B3B3B3B3B3AEAEAEAEAEAEAEAEAED3D3D3D3D3D3D3D3D3
+D0D0D0D0D0D0D0D0D0D0D0D0C8C8C8C8C8C8C8C8C8C0C0C0C0C0C0C0C0C09A9A9A9A9A9A9A9A9A
+717171717171717171848484848484848484848484C2C2C2C2C2C2C2C2C2DEDEDEDEDEDEDEDEDE
+D6D6D5D6D6D5D6D6D5A8A8A8A8A8A8A8A8A8A8A8A86B6B6B6B6B6B6B6B6B4E4E4E4E4E4E4E4E4E
+7C7C7C7C7C7C7C7C7CD0D0D0D0D0D0D0D0D0E9E9E9E9E9E9E9E9E9E9E9E9D3D3D3D3D3D3D3D3D3
+A0A0A0A0A0A0A0A0A08686868686868686869D9D9D9D9D9D9D9D9DB9B9B9B9B9B9B9B9B9B9B9B9
+C7C7C7C7C7C7C7C7C7C0C0C0C0C0C0C0C0C0B8B8B8B8B8B8B8B8B8ADADADADADADADADADADADAD
+AEAEAEAEAEAEAEAEAEB4B4B4B4B4B4B4B4B4B9B9B9B9B9B9B9B9B9B0B0B0B0B0B0B0B0B0ACACAC
+ACACACACACACACACACA2A2A2A2A2A2A2A2A29E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F
+9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E9191919191919191919B9B9B9B9B9B9B9B9BA4A4A4
+A4A4A4A4A4A4AAAAAAAAAAAAAAAAAAAAAAAAA6A6A6A6A6A6A6A6A6A7A7A7A7A7A7A7A7A7B8B8B8
+B8B8B8B8B8B8B9B9B9B9B9B9B9B9B9B4B4B4B4B4B4B4B4B4B4B4B4BBBBBBBBBBBBBBBBBBBEBEBE
+BEBEBEBEBEBEB5B5B5B5B5B5B5B5B5B3B3B3B3B3B3B3B3B3B7B7B7B7B7B7B7B7B7B7B7B7B4B4B4
+B4B4B4B4B4B4AAAAAAAAAAAAAAAAAAB2B2B2B2B2B2B2B2B2B7B7B7B7B7B7B7B7B7B7B7B7AEAEAE
+AEAEAEAEAEAEA8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3
+A3A3A3A3A3A39B9B9B9B9B9B9B9B9BA2A2A2A2A2A2A2A2A2A6A6A6A6A6A6A6A6A6ABABABABABAB
+ABABABB1B1B1B1B1B1B1B1B1B1B1B1BABABABABABABABABABFBFBFBFBFBFBFBFBFAFAFAFAFAFAF
+AFAFAF9191919191919191919191916F6F6F6F6F6F6F6F6F6A6A6A6A6A6A6A6A6A9E9E9E9E9E9E
+9E9E9EC5C5C5C5C5C5C5C5C5B4B4B4B4B4B4B4B4B4B4B4B49191919191919191919A9A9A9A9A9A
+9A9A9AC6C6C6C6C6C6C6C6C6CCCCCCCCCCCCCCCCCCB0B0B0B0B0B0B0B0B0B0B0B0BEBEBEBEBEBE
+BEBEBEDDDDDDDDDDDDDDDDDDD5D5D5D5D5D5D5D5D5A7A7A7A7A7A7A7A7A7A7A7A77D7D7D7D7D7D
+7D7D7DA8A8A8A8A8A8A8A8A8D0D0D0D0D0D0D0D0D0A7A7A7A7A7A7A7A7A7707070707070707070
+707070737373737373737373B1B1B1B1B1B1B1B1B1D9D9D9D9D9D9D9D9D9E1E1E1E1E1E1E1E1E1
+C1C1C1C1C1C1C1C1C1C1C1C1979797979797979797B4B4B4B4B4B4B4B4B4DBDBDBDBDBDBDBDBDB
+E2E2E2E2E2E2E2E2E2E2E2E2E4E4E4E4E4E4E4E4E4DCDCDCDCDCDCDCDCDCCBCBCBCBCBCBCBCBCB
+D2D2D2D2D2D2D2D2D2E6E6E6E6E6E6E6E6E6E6E6E6EDEDEDEDEDEDEDEDEDE9E9E9E9E9E9E9E9E9
+DADADADADADADADADAC8C8C8C8C8C8C8C8C8BFBFBFBFBFBFBFBFBFBFBFBFD0D0D0D0D0D0D0D0D0
+D9D9D9D9D9D9D9D9D9D4D4D4D4D4D4D4D4D4D0D0D0D0D0D0D0D0D0D0D0D0C7C7C7C7C7C7C7C7C7
+B3B3B3B3B3B3B3B3B3AEAEAEAEAEAEAEAEAED3D3D3D3D3D3D3D3D3D0D0D0D0D0D0D0D0D0D0D0D0
+C8C8C8C8C8C8C8C8C8C0C0C0C0C0C0C0C0C09A9A9A9A9A9A9A9A9A717171717171717171848484
+848484848484848484C2C2C2C2C2C2C2C2C2DEDEDEDEDEDEDEDEDED6D6D5D6D6D5D6D6D5A8A8A8
+A8A8A8A8A8A8A8A8A86B6B6B6B6B6B6B6B6B4E4E4E4E4E4E4E4E4E7C7C7C7C7C7C7C7C7CD0D0D0
+D0D0D0D0D0D0E9E9E9E9E9E9E9E9E9E9E9E9D3D3D3D3D3D3D3D3D3A0A0A0A0A0A0A0A0A0868686
+8686868686869D9D9D9D9D9D9D9D9DB9B9B9B9B9B9B9B9B9B9B9B9C7C7C7C7C7C7C7C7C7C0C0C0
+C0C0C0C0C0C0B8B8B8B8B8B8B8B8B8ADADADADADADADADADADADADAEAEAEAEAEAEAEAEAEB4B4B4
+B4B4B4B4B4B4B9B9B9B9B9B9B9B9B9B0B0B0B0B0B0B0B0B0ACACACACACACACACACACACACA2A2A2
+A2A2A2A2A2A29E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E
+9E9E9E9E9E9E9191919191919191919B9B9B9B9B9B9B9B9BA4A4A4A4A4A4A4A4A4AAAAAAAAAAAA
+AAAAAAAAAAAAA6A6A6A6A6A6A6A6A6A7A7A7A7A7A7A7A7A7B8B8B8B8B8B8B8B8B8B9B9B9B9B9B9
+B9B9B9B4B4B4B4B4B4B4B4B4B4B4B4BBBBBBBBBBBBBBBBBBBEBEBEBEBEBEBEBEBEB5B5B5B5B5B5
+B5B5B5B3B3B3B3B3B3B3B3B3B7B7B7B7B7B7B7B7B7B7B7B7B4B4B4B4B4B4B4B4B4AAAAAAAAAAAA
+AAAAAAB2B2B2B2B2B2B2B2B2B7B7B7B7B7B7B7B7B7B7B7B7AEAEAEAEAEAEAEAEAEA8A8A8A8A8A8
+A8A8A8A8A8A8A8A8A8A8A8A8A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A3A3A39B9B9B9B9B9B
+9B9B9BA2A2A2A2A2A2A2A2A2A6A6A6A6A6A6A6A6A6ABABABABABABABABABB1B1B1B1B1B1B1B1B1
+B1B1B1BABABABABABABABABABFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAF919191919191919191
+9191916F6F6F6F6F6F6F6F6F6A6A6A6A6A6A6A6A6A9E9E9E9E9E9E9E9E9EC5C5C5C5C5C5C5C5C5
+B4B4B4B4B4B4B4B4B4B4B4B49191919191919191919A9A9A9A9A9A9A9A9AC6C6C6C6C6C6C6C6C6
+CCCCCCCCCCCCCCCCCCB0B0B0B0B0B0B0B0B0B0B0B0BEBEBEBEBEBEBEBEBEDDDDDDDDDDDDDDDDDD
+D5D5D5D5D5D5D5D5D5A7A7A7A7A7A7A7A7A7A7A7A77D7D7D7D7D7D7D7D7DA8A8A8A8A8A8A8A8A8
+D0D0D0D0D0D0D0D0D0A7A7A7A7A7A7A7A7A7707070707070707070707070737373737373737373
+B1B1B1B1B1B1B1B1B1D9D9D9D9D9D9D9D9D9E1E1E1E1E1E1E1E1E1C1C1C1C1C1C1C1C1C1C1C1C1
+979797979797979797B4B4B4B4B4B4B4B4B4DBDBDBDBDBDBDBDBDBE2E2E2E2E2E2E2E2E2E2E2E2
+E4E4E4E4E4E4E4E4E4DCDCDCDCDCDCDCDCDCCBCBCBCBCBCBCBCBCBD2D2D2D2D2D2D2D2D2E6E6E6
+E6E6E6E6E6E6E6E6E6EDEDEDEDEDEDEDEDEDE9E9E9E9E9E9E9E9E9DADADADADADADADADAC8C8C8
+C8C8C8C8C8C8BFBFBFBFBFBFBFBFBFBFBFBFD0D0D0D0D0D0D0D0D0D9D9D9D9D9D9D9D9D9D4D4D4
+D4D4D4D4D4D4D0D0D0D0D0D0D0D0D0D0D0D0C7C7C7C7C7C7C7C7C7B3B3B3B3B3B3B3B3B3AEAEAE
+AEAEAEAEAEAED3D3D3D3D3D3D3D3D3D0D0D0D0D0D0D0D0D0D0D0D0C8C8C8C8C8C8C8C8C8C0C0C0
+C0C0C0C0C0C09A9A9A9A9A9A9A9A9A717171717171717171848484848484848484848484C2C2C2
+C2C2C2C2C2C2DEDEDEDEDEDEDEDEDED6D6D5D6D6D5D6D6D5A8A8A8A8A8A8A8A8A8A8A8A86B6B6B
+6B6B6B6B6B6B4E4E4E4E4E4E4E4E4E7C7C7C7C7C7C7C7C7CD0D0D0D0D0D0D0D0D0E9E9E9E9E9E9
+E9E9E9E9E9E9D3D3D3D3D3D3D3D3D3A0A0A0A0A0A0A0A0A08686868686868686869D9D9D9D9D9D
+9D9D9DB9B9B9B9B9B9B9B9B9B9B9B9C7C7C7C7C7C7C7C7C7C0C0C0C0C0C0C0C0C0B8B8B8B8B8B8
+B8B8B8ADADADADADADADADADADADADAEAEAEAEAEAEAEAEAEB4B4B4B4B4B4B4B4B4B9B9B9B9B9B9
+B9B9B9B0B0B0B0B0B0B0B0B0ACACACACACACACACACACACACA2A2A2A2A2A2A2A2A29E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E919191919191
+9191919B9B9B9B9B9B9B9B9BA4A4A4A4A4A4A4A4A4AAAAAAAAAAAAAAAAAAAAAAAAA6A6A6A6A6A6
+A6A6A6A7A7A7A7A7A7A7A7A7B8B8B8B8B8B8B8B8B8B9B9B9B9B9B9B9B9B9B4B4B4B4B4B4B4B4B4
+B4B4B4BBBBBBBBBBBBBBBBBBBEBEBEBEBEBEBEBEBEB5B5B5B5B5B5B5B5B5B3B3B3B3B3B3B3B3B3
+B7B7B7B7B7B7B7B7B7B7B7B7B4B4B4B4B4B4B4B4B4AAAAAAAAAAAAAAAAAAB2B2B2B2B2B2B2B2B2
+B7B7B7B7B7B7B7B7B7B7B7B7AEAEAEAEAEAEAEAEAEA8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8
+A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A3A3A39B9B9B9B9B9B9B9B9BA2A2A2A2A2A2A2A2A2
+A6A6A6A6A6A6A6A6A6ABABABABABABABABABB1B1B1B1B1B1B1B1B1B1B1B1BABABABABABABABABA
+BFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAF9191919191919191919191916F6F6F6F6F6F6F6F6F
+6A6A6A6A6A6A6A6A6A9E9E9E9E9E9E9E9E9EC5C5C5C5C5C5C5C5C5B4B4B4B4B4B4B4B4B4B4B4B4
+9191919191919191919A9A9A9A9A9A9A9A9AC6C6C6C6C6C6C6C6C6CCCCCCCCCCCCCCCCCCB0B0B0
+B0B0B0B0B0B0B0B0B0BEBEBEBEBEBEBEBEBEDDDDDDDDDDDDDDDDDDD5D5D5D5D5D5D5D5D5A7A7A7
+A7A7A7A7A7A7A7A7A77D7D7D7D7D7D7D7D7DA8A8A8A8A8A8A8A8A8E2E2E2E2E2E2E2E2E2BABABA
+BABABABABABA8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9EC9C9C9C9C9C9C9C9C9E0E0E0
+E0E0E0E0E0E0E8E8E8E8E8E8E8E8E8D7D7D7D7D7D7D7D7D7D7D7D7CECECECECECECECECED6D6D5
+D6D6D5D6D6D5E7E7E7E7E7E7E7E7E7E8E9E8E8E9E8E8E9E8E8E9E8E1E1E1E1E1E1E1E1E1DBDBDB
+DBDBDBDBDBDBD1D1D1D1D1D1D1D1D1C2C2C2C2C2C2C2C2C2C5C5C5C5C5C5C5C5C5C5C5C5D6D6D6
+D6D6D6D6D6D6E7E7E7E7E7E7E7E7E7DADADADADADADADADAC3C3C3C3C3C3C3C3C39A9A9A9A9A9A
+9A9A9A9A9A9A989898989898989898C1C1C1C1C1C1C1C1C1DADADADADADADADADACBCBCBCBCBCB
+CBCBCBCBCBCBBBBBBBBBBBBBBBBBBB979797979797979797787878787878787878AAAAAAAAAAAA
+AAAAAACECECECECECECECECECECECED7D7D7D7D7D7D7D7D7C4C4C4C4C4C4C4C4C48E8E8E8E8E8E
+8E8E8E5A5A5A5A5A5A5A5A5A626262626262626262626262AAAAAAAAAAAAAAAAAAD8D8D8D8D8D8
+D8D8D8D5D5D5D5D5D5D5D5D5A2A2A2A2A2A2A2A2A2A2A2A26B6B6B6B6B6B6B6B6B727272727272
+727272969696969696969696CFCFCFCFCFCFCFCFCFE0E0E0E0E0E0E0E0E0E0E0E0D6D6D5D6D6D5
+D6D6D5C0C0C0C0C0C0C0C0C0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2BDBDBDBDBDBDBDBDBD
+BDBDBDD0D0D0D0D0D0D0D0D0CBCBCBCBCBCBCBCBCBBEBEBEBEBEBEBEBEBEB7B7B7B7B7B7B7B7B7
+B7B7B7B4B4B4B4B4B4B4B4B4B5B5B5B5B5B5B5B5B5B7B7B7B7B7B7B7B7B7B3B3B3B3B3B3B3B3B3
+BCBCBCBCBCBCBCBCBCBCBCBCB2B2B2B2B2B2B2B2B2A7A7A7A7A7A7A7A7A7A1A1A1A1A1A1A1A1A1
+ABABABABABABABABABACACACACACACACACACACACACA3A3A3A3A3A3A3A3A3AAAAAAAAAAAAAAAAAA
+ABABABABABABABABABAEAEAEAEAEAEAEAEAEAEAEAEA6A6A6A6A6A6A6A6A6AFAFAFAFAFAFAFAFAF
+BBBBBBBBBBBBBBBBBBB7B7B7B7B7B7B7B7B7A3A3A3A3A3A3A3A3A3A3A3A3AEAEAEAEAEAEAEAEAE
+B1B1B1B1B1B1B1B1B1ACACACACACACACACACB0B0B0B0B0B0B0B0B0B2B2B2B2B2B2B2B2B2B2B2B2
+AEAEAEAEAEAEAEAEAEA9A9A9A9A9A9A9A9A9ADADADADADADADADADAAAAAAAAAAAAAAAAAAAAAAAA
+B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A7A7A7A7A7A7A7A7A79D9D9D9D9D9D9D9D9D989898
+989898989898989898999999999999999999A7A7A7A7A7A7A7A7A7AAAAAAAAAAAAAAAAAAB3B3B3
+B3B3B3B3B3B3B8B8B8B8B8B8B8B8B8B8B8B8BBBBBBBBBBBBBBBBBBBDBDBDBDBDBDBDBDBDB0B0B0
+B0B0B0B0B0B08888888888888888888888887272727272727272729B9B9B9B9B9B9B9B9BBDBDBD
+BDBDBDBDBDBDC9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9767676767676767676858585
+858585858585C4C4C4C4C4C4C4C4C4D2D2D2D2D2D2D2D2D2BFBFBFBFBFBFBFBFBFBFBFBFCACACA
+CACACACACACAE6E6E6E6E6E6E6E6E6E2E2E2E2E2E2E2E2E2C7C7C7C7C7C7C7C7C7C7C7C7B3B3B3
+B3B3B3B3B3B3C7C7C7C7C7C7C7C7C7E2E2E2E2E2E2E2E2E2BABABABABABABABABA8E8E8E8E8E8E
+8E8E8E8E8E8E9E9E9E9E9E9E9E9E9EC9C9C9C9C9C9C9C9C9E0E0E0E0E0E0E0E0E0E8E8E8E8E8E8
+E8E8E8D7D7D7D7D7D7D7D7D7D7D7D7CECECECECECECECECED6D6D5D6D6D5D6D6D5E7E7E7E7E7E7
+E7E7E7E8E9E8E8E9E8E8E9E8E8E9E8E1E1E1E1E1E1E1E1E1DBDBDBDBDBDBDBDBDBD1D1D1D1D1D1
+D1D1D1C2C2C2C2C2C2C2C2C2C5C5C5C5C5C5C5C5C5C5C5C5D6D6D6D6D6D6D6D6D6E7E7E7E7E7E7
+E7E7E7DADADADADADADADADAC3C3C3C3C3C3C3C3C39A9A9A9A9A9A9A9A9A9A9A9A989898989898
+989898C1C1C1C1C1C1C1C1C1DADADADADADADADADACBCBCBCBCBCBCBCBCBCBCBCBBBBBBBBBBBBB
+BBBBBB979797979797979797787878787878787878AAAAAAAAAAAAAAAAAACECECECECECECECECE
+CECECED7D7D7D7D7D7D7D7D7C4C4C4C4C4C4C4C4C48E8E8E8E8E8E8E8E8E5A5A5A5A5A5A5A5A5A
+626262626262626262626262AAAAAAAAAAAAAAAAAAD8D8D8D8D8D8D8D8D8D5D5D5D5D5D5D5D5D5
+A2A2A2A2A2A2A2A2A2A2A2A26B6B6B6B6B6B6B6B6B727272727272727272969696969696969696
+CFCFCFCFCFCFCFCFCFE0E0E0E0E0E0E0E0E0E0E0E0D6D6D5D6D6D5D6D6D5C0C0C0C0C0C0C0C0C0
+A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2BDBDBDBDBDBDBDBDBDBDBDBDD0D0D0D0D0D0D0D0D0
+CBCBCBCBCBCBCBCBCBBEBEBEBEBEBEBEBEBEB7B7B7B7B7B7B7B7B7B7B7B7B4B4B4B4B4B4B4B4B4
+B5B5B5B5B5B5B5B5B5B7B7B7B7B7B7B7B7B7B3B3B3B3B3B3B3B3B3BCBCBCBCBCBCBCBCBCBCBCBC
+B2B2B2B2B2B2B2B2B2A7A7A7A7A7A7A7A7A7A1A1A1A1A1A1A1A1A1ABABABABABABABABABACACAC
+ACACACACACACACACACA3A3A3A3A3A3A3A3A3AAAAAAAAAAAAAAAAAAABABABABABABABABABAEAEAE
+AEAEAEAEAEAEAEAEAEA6A6A6A6A6A6A6A6A6AFAFAFAFAFAFAFAFAFBBBBBBBBBBBBBBBBBBB7B7B7
+B7B7B7B7B7B7A3A3A3A3A3A3A3A3A3A3A3A3AEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1ACACAC
+ACACACACACACB0B0B0B0B0B0B0B0B0B2B2B2B2B2B2B2B2B2B2B2B2AEAEAEAEAEAEAEAEAEA9A9A9
+A9A9A9A9A9A9ADADADADADADADADADAAAAAAAAAAAAAAAAAAAAAAAAB0B0B0B0B0B0B0B0B0B0B0B0
+B0B0B0B0B0B0A7A7A7A7A7A7A7A7A79D9D9D9D9D9D9D9D9D989898989898989898989898999999
+999999999999A7A7A7A7A7A7A7A7A7AAAAAAAAAAAAAAAAAAB3B3B3B3B3B3B3B3B3B8B8B8B8B8B8
+B8B8B8B8B8B8BBBBBBBBBBBBBBBBBBBDBDBDBDBDBDBDBDBDB0B0B0B0B0B0B0B0B0888888888888
+8888888888887272727272727272729B9B9B9B9B9B9B9B9BBDBDBDBDBDBDBDBDBDC9C9C9C9C9C9
+C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9767676767676767676858585858585858585C4C4C4C4C4C4
+C4C4C4D2D2D2D2D2D2D2D2D2BFBFBFBFBFBFBFBFBFBFBFBFCACACACACACACACACAE6E6E6E6E6E6
+E6E6E6E2E2E2E2E2E2E2E2E2C7C7C7C7C7C7C7C7C7C7C7C7B3B3B3B3B3B3B3B3B3C7C7C7C7C7C7
+C7C7C7F1F1F1F1F1F1F1F1F1E4E4E4E4E4E4E4E4E4C0C0C0C0C0C0C0C0C0C0C0C0B1B1B1B1B1B1
+B1B1B1C4C4C4C4C4C4C4C4C4D8D8D8D8D8D8D8D8D8EDEDEDEDEDEDEDEDEDE5E5E5E5E5E5E5E5E5
+E5E5E5D9D9D9D9D9D9D9D9D9C6C6C6C6C6C6C6C6C6B8B8B8B8B8B8B8B8B8BDBDBDBDBDBDBDBDBD
+BDBDBDD0D0D0D0D0D0D0D0D0D8D8D8D8D8D8D8D8D8CCCCCCCCCCCCCCCCCC9A9A9A9A9A9A9A9A9A
+7979797979797979797979799E9E9E9E9E9E9E9E9ED3D3D3D3D3D3D3D3D3CACACACACACACACACA
+B4B4B4B4B4B4B4B4B48686868686868686868686865F605F5F605F5F605F939393939393939393
+CBCBCBCBCBCBCBCBCBC5C5C5C5C5C5C5C5C5C5C5C5A6A6A6A6A6A6A6A6A67A7A7A7A7A7A7A7A7A
+636363636363636363939393939393939393CFCFCFCFCFCFCFCFCFCFCFCFE4E4E4E4E4E4E4E4E4
+C8C8C8C8C8C8C8C8C87F7F7F7F7F7F7F7F7F6767676767676767678A8A8A8A8A8A8A8A8A8A8A8A
+B1B1B1B1B1B1B1B1B1D3D3D3D3D3D3D3D3D3D8D8D8D8D8D8D8D8D8C5C5C5C5C5C5C5C5C5C5C5C5
+A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2ADADADADADADADADADC3C3C3C3C3C3C3C3C3D0D0D0
+D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0DEDEDEDEDEDEDEDEDED3D3D3D3D3D3D3D3D3C7C7C7
+C7C7C7C7C7C7D9D9D9D9D9D9D9D9D9D9D9D9E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C0C0C0
+C0C0C0C0C0C0BDBDBDBDBDBDBDBDBDBDBDBDBEBEBEBEBEBEBEBEBEC0C0C0C0C0C0C0C0C0BEBEBE
+BEBEBEBEBEBEBFBFBFBFBFBFBFBFBFC4C4C4C4C4C4C4C4C4C4C4C4BABABABABABABABABAA8A8A8
+A8A8A8A8A8A8A4A4A4A4A4A4A4A4A4AFAFAFAFAFAFAFAFAFB6B6B6B6B6B6B6B6B6B6B6B6B4B4B4
+B4B4B4B4B4B4B6B6B6B6B6B6B6B6B6B2B2B2B2B2B2B2B2B2A8A8A8A8A8A8A8A8A8A8A8A8A2A2A2
+A2A2A2A2A2A2ADADADADADADADADADC0C0C0C0C0C0C0C0C0B8B8B8B8B8B8B8B8B8AFAFAFAFAFAF
+AFAFAFAFAFAFB0B1B0B0B1B0B0B1B0AAAAAAAAAAAAAAAAAAA4A4A4A4A4A4A4A4A4B1B1B1B1B1B1
+B1B1B1B5B5B5B5B5B5B5B5B5B5B5B5A9A9A9A9A9A9A9A9A9AAAAAAAAAAAAAAAAAAB0B1B0B0B1B0
+B0B1B0AAAAAAAAAAAAAAAAAAAAAAAAB0B1B0B0B1B0B0B1B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0
+A0A0A09A9A9A9A9A9A9A9A9A949494949494949494949494A3A3A3A3A3A3A3A3A3AEAEAEAEAEAE
+AEAEAEADADADADADADADADADB1B1B1B1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B7B7B7B7B7B7
+B7B7B7BABABABABABABABABABEBEBEBEBEBEBEBEBEB3B3B3B3B3B3B3B3B3B3B3B3B0B1B0B0B1B0
+B0B1B0D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2CBCBCBCBCBCBCBCBCBB8B8B8B8B8B8B8B8B8
+B8B8B8979797979797979797A3A3A3A3A3A3A3A3A3C9C9C9C9C9C9C9C9C9CACACACACACACACACA
+A1A1A1A1A1A1A1A1A1A1A1A1A8A8A8A8A8A8A8A8A8D3D3D3D3D3D3D3D3D3D9D9D9D9D9D9D9D9D9
+D6D6D6D6D6D6D6D6D6D6D6D6CECECECECECECECECEB7B7B7B7B7B7B7B7B7F1F1F1F1F1F1F1F1F1
+E4E4E4E4E4E4E4E4E4C0C0C0C0C0C0C0C0C0C0C0C0B1B1B1B1B1B1B1B1B1C4C4C4C4C4C4C4C4C4
+D8D8D8D8D8D8D8D8D8EDEDEDEDEDEDEDEDEDE5E5E5E5E5E5E5E5E5E5E5E5D9D9D9D9D9D9D9D9D9
+C6C6C6C6C6C6C6C6C6B8B8B8B8B8B8B8B8B8BDBDBDBDBDBDBDBDBDBDBDBDD0D0D0D0D0D0D0D0D0
+D8D8D8D8D8D8D8D8D8CCCCCCCCCCCCCCCCCC9A9A9A9A9A9A9A9A9A797979797979797979797979
+9E9E9E9E9E9E9E9E9ED3D3D3D3D3D3D3D3D3CACACACACACACACACAB4B4B4B4B4B4B4B4B4868686
+8686868686868686865F605F5F605F5F605F939393939393939393CBCBCBCBCBCBCBCBCBC5C5C5
+C5C5C5C5C5C5C5C5C5A6A6A6A6A6A6A6A6A67A7A7A7A7A7A7A7A7A636363636363636363939393
+939393939393CFCFCFCFCFCFCFCFCFCFCFCFE4E4E4E4E4E4E4E4E4C8C8C8C8C8C8C8C8C87F7F7F
+7F7F7F7F7F7F6767676767676767678A8A8A8A8A8A8A8A8A8A8A8AB1B1B1B1B1B1B1B1B1D3D3D3
+D3D3D3D3D3D3D8D8D8D8D8D8D8D8D8C5C5C5C5C5C5C5C5C5C5C5C5A3A3A3A3A3A3A3A3A3A2A2A2
+A2A2A2A2A2A2ADADADADADADADADADC3C3C3C3C3C3C3C3C3D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0
+D0D0D0D0D0D0DEDEDEDEDEDEDEDEDED3D3D3D3D3D3D3D3D3C7C7C7C7C7C7C7C7C7D9D9D9D9D9D9
+D9D9D9D9D9D9E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C0C0C0C0C0C0C0C0C0BDBDBDBDBDBD
+BDBDBDBDBDBDBEBEBEBEBEBEBEBEBEC0C0C0C0C0C0C0C0C0BEBEBEBEBEBEBEBEBEBFBFBFBFBFBF
+BFBFBFC4C4C4C4C4C4C4C4C4C4C4C4BABABABABABABABABAA8A8A8A8A8A8A8A8A8A4A4A4A4A4A4
+A4A4A4AFAFAFAFAFAFAFAFAFB6B6B6B6B6B6B6B6B6B6B6B6B4B4B4B4B4B4B4B4B4B6B6B6B6B6B6
+B6B6B6B2B2B2B2B2B2B2B2B2A8A8A8A8A8A8A8A8A8A8A8A8A2A2A2A2A2A2A2A2A2ADADADADADAD
+ADADADC0C0C0C0C0C0C0C0C0B8B8B8B8B8B8B8B8B8AFAFAFAFAFAFAFAFAFAFAFAFB0B1B0B0B1B0
+B0B1B0AAAAAAAAAAAAAAAAAAA4A4A4A4A4A4A4A4A4B1B1B1B1B1B1B1B1B1B5B5B5B5B5B5B5B5B5
+B5B5B5A9A9A9A9A9A9A9A9A9AAAAAAAAAAAAAAAAAAB0B1B0B0B1B0B0B1B0AAAAAAAAAAAAAAAAAA
+AAAAAAB0B1B0B0B1B0B0B1B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A09A9A9A9A9A9A9A9A9A
+949494949494949494949494A3A3A3A3A3A3A3A3A3AEAEAEAEAEAEAEAEAEADADADADADADADADAD
+B1B1B1B1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B7B7B7B7B7B7B7B7B7BABABABABABABABABA
+BEBEBEBEBEBEBEBEBEB3B3B3B3B3B3B3B3B3B3B3B3B0B1B0B0B1B0B0B1B0D2D2D2D2D2D2D2D2D2
+D2D2D2D2D2D2D2D2D2CBCBCBCBCBCBCBCBCBB8B8B8B8B8B8B8B8B8B8B8B8979797979797979797
+A3A3A3A3A3A3A3A3A3C9C9C9C9C9C9C9C9C9CACACACACACACACACAA1A1A1A1A1A1A1A1A1A1A1A1
+A8A8A8A8A8A8A8A8A8D3D3D3D3D3D3D3D3D3D9D9D9D9D9D9D9D9D9D6D6D6D6D6D6D6D6D6D6D6D6
+CECECECECECECECECEB7B7B7B7B7B7B7B7B7F1F1F1F1F1F1F1F1F1E4E4E4E4E4E4E4E4E4C0C0C0
+C0C0C0C0C0C0C0C0C0B1B1B1B1B1B1B1B1B1C4C4C4C4C4C4C4C4C4D8D8D8D8D8D8D8D8D8EDEDED
+EDEDEDEDEDEDE5E5E5E5E5E5E5E5E5E5E5E5D9D9D9D9D9D9D9D9D9C6C6C6C6C6C6C6C6C6B8B8B8
+B8B8B8B8B8B8BDBDBDBDBDBDBDBDBDBDBDBDD0D0D0D0D0D0D0D0D0D8D8D8D8D8D8D8D8D8CCCCCC
+CCCCCCCCCCCC9A9A9A9A9A9A9A9A9A7979797979797979797979799E9E9E9E9E9E9E9E9ED3D3D3
+D3D3D3D3D3D3CACACACACACACACACAB4B4B4B4B4B4B4B4B48686868686868686868686865F605F
+5F605F5F605F939393939393939393CBCBCBCBCBCBCBCBCBC5C5C5C5C5C5C5C5C5C5C5C5A6A6A6
+A6A6A6A6A6A67A7A7A7A7A7A7A7A7A636363636363636363939393939393939393CFCFCFCFCFCF
+CFCFCFCFCFCFE4E4E4E4E4E4E4E4E4C8C8C8C8C8C8C8C8C87F7F7F7F7F7F7F7F7F676767676767
+6767678A8A8A8A8A8A8A8A8A8A8A8AB1B1B1B1B1B1B1B1B1D3D3D3D3D3D3D3D3D3D8D8D8D8D8D8
+D8D8D8C5C5C5C5C5C5C5C5C5C5C5C5A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2ADADADADADAD
+ADADADC3C3C3C3C3C3C3C3C3D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0DEDEDEDEDEDE
+DEDEDED3D3D3D3D3D3D3D3D3C7C7C7C7C7C7C7C7C7D9D9D9D9D9D9D9D9D9D9D9D9E2E2E2E2E2E2
+E2E2E2D2D2D2D2D2D2D2D2D2C0C0C0C0C0C0C0C0C0BDBDBDBDBDBDBDBDBDBDBDBDBEBEBEBEBEBE
+BEBEBEC0C0C0C0C0C0C0C0C0BEBEBEBEBEBEBEBEBEBFBFBFBFBFBFBFBFBFC4C4C4C4C4C4C4C4C4
+C4C4C4BABABABABABABABABAA8A8A8A8A8A8A8A8A8A4A4A4A4A4A4A4A4A4AFAFAFAFAFAFAFAFAF
+B6B6B6B6B6B6B6B6B6B6B6B6B4B4B4B4B4B4B4B4B4B6B6B6B6B6B6B6B6B6B2B2B2B2B2B2B2B2B2
+A8A8A8A8A8A8A8A8A8A8A8A8A2A2A2A2A2A2A2A2A2ADADADADADADADADADC0C0C0C0C0C0C0C0C0
+B8B8B8B8B8B8B8B8B8AFAFAFAFAFAFAFAFAFAFAFAFB0B1B0B0B1B0B0B1B0AAAAAAAAAAAAAAAAAA
+A4A4A4A4A4A4A4A4A4B1B1B1B1B1B1B1B1B1B5B5B5B5B5B5B5B5B5B5B5B5A9A9A9A9A9A9A9A9A9
+AAAAAAAAAAAAAAAAAAB0B1B0B0B1B0B0B1B0AAAAAAAAAAAAAAAAAAAAAAAAB0B1B0B0B1B0B0B1B0
+B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A09A9A9A9A9A9A9A9A9A949494949494949494949494
+A3A3A3A3A3A3A3A3A3AEAEAEAEAEAEAEAEAEADADADADADADADADADB1B1B1B1B1B1B1B1B1B3B3B3
+B3B3B3B3B3B3B3B3B3B7B7B7B7B7B7B7B7B7BABABABABABABABABABEBEBEBEBEBEBEBEBEB3B3B3
+B3B3B3B3B3B3B3B3B3B0B1B0B0B1B0B0B1B0D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2CBCBCB
+CBCBCBCBCBCBB8B8B8B8B8B8B8B8B8B8B8B8979797979797979797A3A3A3A3A3A3A3A3A3C9C9C9
+C9C9C9C9C9C9CACACACACACACACACAA1A1A1A1A1A1A1A1A1A1A1A1A8A8A8A8A8A8A8A8A8D3D3D3
+D3D3D3D3D3D3D9D9D9D9D9D9D9D9D9D6D6D6D6D6D6D6D6D6D6D6D6CECECECECECECECECEB7B7B7
+B7B7B7B7B7B7DFE0DFDFE0DFDFE0DFE2E2E2E2E2E2E2E2E2D1D1D1D1D1D1D1D1D1D1D1D1A8A8A8
+A8A8A8A8A8A88E8E8E8E8E8E8E8E8EA9A9A9A9A9A9A9A9A9DEDEDEDEDEDEDEDEDEE4E4E4E4E4E4
+E4E4E4E4E4E4D0D0D0D0D0D0D0D0D0A2A2A2A2A2A2A2A2A2727272727272727272898989898989
+898989898989B8B8B8B8B8B8B8B8B8C6C6C6C6C6C6C6C6C6BFBFBFBFBFBFBFBFBF8D8D8D8D8D8D
+8D8D8D5F605F5F605F5F605F5F605F828282828282828282C3C3C3C3C3C3C3C3C3C6C6C6C6C6C6
+C6C6C6A7A7A7A7A7A7A7A7A77474747474747474747474745F605F5F605F5F605F878787878787
+878787BFBFBFBFBFBFBFBFBFCACACACACACACACACACACACAA9A9A9A9A9A9A9A9A9767676767676
+767676848484848484848484B8B8B8B8B8B8B8B8B8DBDBDBDBDBDBDBDBDBDBDBDBE8E8E8E8E8E8
+E8E8E8E0E0E0E0E0E0E0E0E0ADADADADADADADADAD909090909090909090B0B0B0B0B0B0B0B0B0
+B0B0B0C0C0C0C0C0C0C0C0C0CECECECECECECECECEDBDBDBDBDBDBDBDBDBD5D5D5D5D5D5D5D5D5
+D5D5D5C5C5C5C5C5C5C5C5C5BDBDBDBDBDBDBDBDBDBEBEBEBEBEBEBEBEBEC7C7C7C7C7C7C7C7C7
+D0D0D0D0D0D0D0D0D0D0D0D0C8C8C8C8C8C8C8C8C8D0D0D0D0D0D0D0D0D0DADADADADADADADADA
+DCDCDCDCDCDCDCDCDCEAEAEAEAEAEAEAEAEAEAEAEAE6E6E6E6E6E6E6E6E6D0D0D0D0D0D0D0D0D0
+B9B9B9B9B9B9B9B9B9B6B6B6B6B6B6B6B6B6B6B6B6BBBBBBBBBBBBBBBBBBC0C0C0C0C0C0C0C0C0
+BCBCBCBCBCBCBCBCBCC6C6C6C6C6C6C6C6C6C8C8C8C8C8C8C8C8C8C8C8C8BABABABABABABABABA
+ABABABABABABABABABB0B1B0B0B1B0B0B1B0B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1
+AFAFAFAFAFAFAFAFAFB1B1B1B1B1B1B1B1B1B5B5B5B5B5B5B5B5B5AAAAAAAAAAAAAAAAAAAAAAAA
+A6A6A6A6A6A6A6A6A6ADADADADADADADADADC2C2C2C2C2C2C2C2C2BDBDBDBDBDBDBDBDBDC1C1C1
+C1C1C1C1C1C1C1C1C1B8B8B8B8B8B8B8B8B8B2B2B2B2B2B2B2B2B2B0B1B0B0B1B0B0B1B0B8B8B8
+B8B8B8B8B8B8B4B4B4B4B4B4B4B4B4B4B4B4A8A8A8A8A8A8A8A8A8A9A9A9A9A9A9A9A9A9AEAEAE
+AEAEAEAEAEAEA9A9A9A9A9A9A9A9A9A9A9A9ABABABABABABABABABABABABABABABABABABA1A1A1
+A1A1A1A1A1A1A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9F9F9FB0B1B0B0B1B0B0B1B0B8B8B8
+B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B5B5B5B5B5B5B5B5B5B7B7B7B7B7B7B7B7B7B7B7B7B8B8B8
+B8B8B8B8B8B8B5B5B5B5B5B5B5B5B5BFBFBFBFBFBFBFBFBFCACACACACACACACACACACACAD6D6D5
+D6D6D5D6D6D5D9D9D9D9D9D9D9D9D9C4C4C4C4C4C4C4C4C4BDBDBDBDBDBDBDBDBDCACACACACACA
+CACACACACACABCBCBCBCBCBCBCBCBCB0B1B0B0B1B0B0B1B0BBBBBBBBBBBBBBBBBBB2B2B2B2B2B2
+B2B2B27B7B7B7B7B7B7B7B7B7B7B7B818181818181818181BDBDBDBDBDBDBDBDBDCBCBCBCBCBCB
+CBCBCBC2C2C2C2C2C2C2C2C2C2C2C2A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4DFE0DFDFE0DF
+DFE0DFE2E2E2E2E2E2E2E2E2D1D1D1D1D1D1D1D1D1D1D1D1A8A8A8A8A8A8A8A8A88E8E8E8E8E8E
+8E8E8EA9A9A9A9A9A9A9A9A9DEDEDEDEDEDEDEDEDEE4E4E4E4E4E4E4E4E4E4E4E4D0D0D0D0D0D0
+D0D0D0A2A2A2A2A2A2A2A2A2727272727272727272898989898989898989898989B8B8B8B8B8B8
+B8B8B8C6C6C6C6C6C6C6C6C6BFBFBFBFBFBFBFBFBF8D8D8D8D8D8D8D8D8D5F605F5F605F5F605F
+5F605F828282828282828282C3C3C3C3C3C3C3C3C3C6C6C6C6C6C6C6C6C6A7A7A7A7A7A7A7A7A7
+7474747474747474747474745F605F5F605F5F605F878787878787878787BFBFBFBFBFBFBFBFBF
+CACACACACACACACACACACACAA9A9A9A9A9A9A9A9A9767676767676767676848484848484848484
+B8B8B8B8B8B8B8B8B8DBDBDBDBDBDBDBDBDBDBDBDBE8E8E8E8E8E8E8E8E8E0E0E0E0E0E0E0E0E0
+ADADADADADADADADAD909090909090909090B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0
+CECECECECECECECECEDBDBDBDBDBDBDBDBDBD5D5D5D5D5D5D5D5D5D5D5D5C5C5C5C5C5C5C5C5C5
+BDBDBDBDBDBDBDBDBDBEBEBEBEBEBEBEBEBEC7C7C7C7C7C7C7C7C7D0D0D0D0D0D0D0D0D0D0D0D0
+C8C8C8C8C8C8C8C8C8D0D0D0D0D0D0D0D0D0DADADADADADADADADADCDCDCDCDCDCDCDCDCEAEAEA
+EAEAEAEAEAEAEAEAEAE6E6E6E6E6E6E6E6E6D0D0D0D0D0D0D0D0D0B9B9B9B9B9B9B9B9B9B6B6B6
+B6B6B6B6B6B6B6B6B6BBBBBBBBBBBBBBBBBBC0C0C0C0C0C0C0C0C0BCBCBCBCBCBCBCBCBCC6C6C6
+C6C6C6C6C6C6C8C8C8C8C8C8C8C8C8C8C8C8BABABABABABABABABAABABABABABABABABABB0B1B0
+B0B1B0B0B1B0B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AFAFAFAFAFAFAFAFAFB1B1B1
+B1B1B1B1B1B1B5B5B5B5B5B5B5B5B5AAAAAAAAAAAAAAAAAAAAAAAAA6A6A6A6A6A6A6A6A6ADADAD
+ADADADADADADC2C2C2C2C2C2C2C2C2BDBDBDBDBDBDBDBDBDC1C1C1C1C1C1C1C1C1C1C1C1B8B8B8
+B8B8B8B8B8B8B2B2B2B2B2B2B2B2B2B0B1B0B0B1B0B0B1B0B8B8B8B8B8B8B8B8B8B4B4B4B4B4B4
+B4B4B4B4B4B4A8A8A8A8A8A8A8A8A8A9A9A9A9A9A9A9A9A9AEAEAEAEAEAEAEAEAEA9A9A9A9A9A9
+A9A9A9A9A9A9ABABABABABABABABABABABABABABABABABABA1A1A1A1A1A1A1A1A1A0A0A0A0A0A0
+A0A0A09F9F9F9F9F9F9F9F9F9F9F9FB0B1B0B0B1B0B0B1B0B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8
+B8B8B8B5B5B5B5B5B5B5B5B5B7B7B7B7B7B7B7B7B7B7B7B7B8B8B8B8B8B8B8B8B8B5B5B5B5B5B5
+B5B5B5BFBFBFBFBFBFBFBFBFCACACACACACACACACACACACAD6D6D5D6D6D5D6D6D5D9D9D9D9D9D9
+D9D9D9C4C4C4C4C4C4C4C4C4BDBDBDBDBDBDBDBDBDCACACACACACACACACACACACABCBCBCBCBCBC
+BCBCBCB0B1B0B0B1B0B0B1B0BBBBBBBBBBBBBBBBBBB2B2B2B2B2B2B2B2B27B7B7B7B7B7B7B7B7B
+7B7B7B818181818181818181BDBDBDBDBDBDBDBDBDCBCBCBCBCBCBCBCBCBC2C2C2C2C2C2C2C2C2
+C2C2C2A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4B0B1B0B0B1B0B0B1B0B7B7B7B7B7B7B7B7B7
+B3B3B3B3B3B3B3B3B3B3B3B39E9E9E9E9E9E9E9E9E8C8C8C8C8C8C8C8C8C959595959595959595
+B0B1B0B0B1B0B0B1B0BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB0B1B0B0B1B0B0B1B0
+9D9D9D9D9D9D9D9D9DA5A5A5A5A5A5A5A5A5A5A5A5B8B8B8B8B8B8B8B8B8BBBBBBBBBBBBBBBBBB
+B7B7B7B7B7B7B7B7B79E9E9E9E9E9E9E9E9E9292929292929292929292929E9E9E9E9E9E9E9E9E
+B4B4B4B4B4B4B4B4B4B8B8B8B8B8B8B8B8B8ABABABABABABABABAB969696969696969696969696
+8E8E8E8E8E8E8E8E8E929292929292929292A2A2A2A2A2A2A2A2A2ABABABABABABABABABABABAB
+A4A4A4A4A4A4A4A4A4979797979797979797A0A0A0A0A0A0A0A0A0BEBEBEBEBEBEBEBEBED4D4D4
+D4D4D4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4E8E9E8E8E9E8E8E9E8DFDFDFDFDFDFDFDFDFCFCFCF
+CFCFCFCFCFCFCBCBCBCBCBCBCBCBCBCBCBCBD4D4D4D4D4D4D4D4D4DCDCDCDCDCDCDCDCDCDDDDDD
+DDDDDDDDDDDDD9D9D9D9D9D9D9D9D9D9D9D9D2D2D2D2D2D2D2D2D2CDCDCDCDCDCDCDCDCDD0D0D0
+D0D0D0D0D0D0D3D3D3D3D3D3D3D3D3CFCFCFCFCFCFCFCFCFCFCFCFC8C8C8C8C8C8C8C8C8CACACA
+CACACACACACAC3C3C3C3C3C3C3C3C3C5C5C5C5C5C5C5C5C5CCCCCCCCCCCCCCCCCCCCCCCCC5C5C5
+C5C5C5C5C5C5B8B8B8B8B8B8B8B8B8ADADADADADADADADADAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF
+AFAFAFAFAFAFB7B7B7B7B7B7B7B7B7B8B8B8B8B8B8B8B8B8BCBCBCBCBCBCBCBCBCBFBFBFBFBFBF
+BFBFBFBFBFBFB9B9B9B9B9B9B9B9B9B8B8B8B8B8B8B8B8B8B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9
+B9B9B9B7B7B7B7B7B7B7B7B7B7B7B7AFAFAFAFAFAFAFAFAFB0B1B0B0B1B0B0B1B0ABABABABABAB
+ABABAB9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9E9E9E9E9E9E9E9E9EA8A8A8A8A8A8
+A8A8A8A3A3A3A3A3A3A3A3A39F9F9F9F9F9F9F9F9F9F9F9F9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C
+9C9C9C9B9B9B9B9B9B9B9B9B9999999999999999999999999999999999999999999C9C9C9C9C9C
+9C9C9C9A9A9A9A9A9A9A9A9A989898989898989898939393939393939393939393979797979797
+9797979595959595959595958E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E989898989898989898
+989898A8A8A8A8A8A8A8A8A8ABABABABABABABABABB0B1B0B0B1B0B0B1B0AFAFAFAFAFAFAFAFAF
+B0B1B0B0B1B0B0B1B0B0B1B0ADADADADADADADADADACACACACACACACACACB3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3BDBDBDBDBDBDBDBDBDBABABABABABABABABAA9A9A9A9A9A9A9A9A9
+A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6A6A6A6A6A6A6959595959595959595818181818181818181
+7777777777777777777676767676767676766A6A6A6A6A6A6A6A6A6A6A6A717171717171717171
+8A8A8A8A8A8A8A8A8A9090909090909090909090909090909090909090908C8C8C8C8C8C8C8C8C
+949494949494949494B0B1B0B0B1B0B0B1B0B7B7B7B7B7B7B7B7B7B3B3B3B3B3B3B3B3B3B3B3B3
+9E9E9E9E9E9E9E9E9E8C8C8C8C8C8C8C8C8C959595959595959595B0B1B0B0B1B0B0B1B0BFBFBF
+BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB0B1B0B0B1B0B0B1B09D9D9D9D9D9D9D9D9DA5A5A5
+A5A5A5A5A5A5A5A5A5B8B8B8B8B8B8B8B8B8BBBBBBBBBBBBBBBBBBB7B7B7B7B7B7B7B7B79E9E9E
+9E9E9E9E9E9E9292929292929292929292929E9E9E9E9E9E9E9E9EB4B4B4B4B4B4B4B4B4B8B8B8
+B8B8B8B8B8B8ABABABABABABABABAB9696969696969696969696968E8E8E8E8E8E8E8E8E929292
+929292929292A2A2A2A2A2A2A2A2A2ABABABABABABABABABABABABA4A4A4A4A4A4A4A4A4979797
+979797979797A0A0A0A0A0A0A0A0A0BEBEBEBEBEBEBEBEBED4D4D4D4D4D4D4D4D4D4D4D4E4E4E4
+E4E4E4E4E4E4E8E9E8E8E9E8E8E9E8DFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCBCBCBCBCBCB
+CBCBCBCBCBCBD4D4D4D4D4D4D4D4D4DCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDD9D9D9D9D9D9
+D9D9D9D9D9D9D2D2D2D2D2D2D2D2D2CDCDCDCDCDCDCDCDCDD0D0D0D0D0D0D0D0D0D3D3D3D3D3D3
+D3D3D3CFCFCFCFCFCFCFCFCFCFCFCFC8C8C8C8C8C8C8C8C8CACACACACACACACACAC3C3C3C3C3C3
+C3C3C3C5C5C5C5C5C5C5C5C5CCCCCCCCCCCCCCCCCCCCCCCCC5C5C5C5C5C5C5C5C5B8B8B8B8B8B8
+B8B8B8ADADADADADADADADADAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFB7B7B7B7B7B7
+B7B7B7B8B8B8B8B8B8B8B8B8BCBCBCBCBCBCBCBCBCBFBFBFBFBFBFBFBFBFBFBFBFB9B9B9B9B9B9
+B9B9B9B8B8B8B8B8B8B8B8B8B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B7B7B7B7B7B7B7
+B7B7B7AFAFAFAFAFAFAFAFAFB0B1B0B0B1B0B0B1B0ABABABABABABABABAB9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9E9E9E9E9E9E9E9E9EA8A8A8A8A8A8A8A8A8A3A3A3A3A3A3A3A3A3
+9F9F9F9F9F9F9F9F9F9F9F9F9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B
+9999999999999999999999999999999999999999999C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A
+989898989898989898939393939393939393939393979797979797979797959595959595959595
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E989898989898989898989898A8A8A8A8A8A8A8A8A8
+ABABABABABABABABABB0B1B0B0B1B0B0B1B0AFAFAFAFAFAFAFAFAFB0B1B0B0B1B0B0B1B0B0B1B0
+ADADADADADADADADADACACACACACACACACACB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+BDBDBDBDBDBDBDBDBDBABABABABABABABABAA9A9A9A9A9A9A9A9A9A7A7A7A7A7A7A7A7A7A6A6A6
+A6A6A6A6A6A6A6A6A6959595959595959595818181818181818181777777777777777777767676
+7676767676766A6A6A6A6A6A6A6A6A6A6A6A7171717171717171718A8A8A8A8A8A8A8A8A909090
+9090909090909090909090909090909090908C8C8C8C8C8C8C8C8C949494949494949494B0B1B0
+B0B1B0B0B1B0B7B7B7B7B7B7B7B7B7B3B3B3B3B3B3B3B3B3B3B3B39E9E9E9E9E9E9E9E9E8C8C8C
+8C8C8C8C8C8C959595959595959595B0B1B0B0B1B0B0B1B0BFBFBFBFBFBFBFBFBFBFBFBFBFBFBF
+BFBFBFBFBFBFB0B1B0B0B1B0B0B1B09D9D9D9D9D9D9D9D9DA5A5A5A5A5A5A5A5A5A5A5A5B8B8B8
+B8B8B8B8B8B8BBBBBBBBBBBBBBBBBBB7B7B7B7B7B7B7B7B79E9E9E9E9E9E9E9E9E929292929292
+9292929292929E9E9E9E9E9E9E9E9EB4B4B4B4B4B4B4B4B4B8B8B8B8B8B8B8B8B8ABABABABABAB
+ABABAB9696969696969696969696968E8E8E8E8E8E8E8E8E929292929292929292A2A2A2A2A2A2
+A2A2A2ABABABABABABABABABABABABA4A4A4A4A4A4A4A4A4979797979797979797A0A0A0A0A0A0
+A0A0A0BEBEBEBEBEBEBEBEBED4D4D4D4D4D4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4E8E9E8E8E9E8
+E8E9E8DFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCBCBCBCBCBCBCBCBCBCBCBCBD4D4D4D4D4D4
+D4D4D4DCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDD9D9D9D9D9D9D9D9D9D9D9D9D2D2D2D2D2D2
+D2D2D2CDCDCDCDCDCDCDCDCDD0D0D0D0D0D0D0D0D0D3D3D3D3D3D3D3D3D3CFCFCFCFCFCFCFCFCF
+CFCFCFC8C8C8C8C8C8C8C8C8CACACACACACACACACAC3C3C3C3C3C3C3C3C3C5C5C5C5C5C5C5C5C5
+CCCCCCCCCCCCCCCCCCCCCCCCC5C5C5C5C5C5C5C5C5B8B8B8B8B8B8B8B8B8ADADADADADADADADAD
+AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFB7B7B7B7B7B7B7B7B7B8B8B8B8B8B8B8B8B8
+BCBCBCBCBCBCBCBCBCBFBFBFBFBFBFBFBFBFBFBFBFB9B9B9B9B9B9B9B9B9B8B8B8B8B8B8B8B8B8
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B7B7B7B7B7B7B7B7B7B7AFAFAFAFAFAFAFAFAF
+B0B1B0B0B1B0B0B1B0ABABABABABABABABAB9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9E9E9E9E9E9E9E9E9EA8A8A8A8A8A8A8A8A8A3A3A3A3A3A3A3A3A39F9F9F9F9F9F9F9F9F9F9F9F
+9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B999999999999999999999999
+9999999999999999999C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A989898989898989898939393
+9393939393939393939797979797979797979595959595959595958E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E989898989898989898989898A8A8A8A8A8A8A8A8A8ABABABABABABABABABB0B1B0
+B0B1B0B0B1B0AFAFAFAFAFAFAFAFAFB0B1B0B0B1B0B0B1B0B0B1B0ADADADADADADADADADACACAC
+ACACACACACACB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BDBDBDBDBDBDBDBDBDBABABA
+BABABABABABAA9A9A9A9A9A9A9A9A9A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6A6A6A6A6A6A6959595
+9595959595958181818181818181817777777777777777777676767676767676766A6A6A6A6A6A
+6A6A6A6A6A6A7171717171717171718A8A8A8A8A8A8A8A8A909090909090909090909090909090
+9090909090908C8C8C8C8C8C8C8C8C949494949494949494
+
+end
+%%PageTrailer
+%%Trailer
+%%EOF
diff --git a/language/french/e-french/texmf/doc/test/mygglo.ist b/language/french/e-french/texmf/doc/test/mygglo.ist
new file mode 100644
index 0000000000..9748168e9e
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/mygglo.ist
@@ -0,0 +1,69 @@
+%% mods --bg 10/09/92
+%% This is file `gglo.ist' generated
+%% on <1990/2/24> with the docstrip utility (v1.1f).
+%%
+%% The original source file was `gglo.doc'.
+%%
+%%
+%% Copyright (C) 1989,1990 by Frank Mittelbach. All rights reserved.
+%%
+%% IMPORTANT NOTICE:
+%%
+%% You are not allowed to change this file.
+%% You may however copy this file to a different name and then
+%% change this copy.
+%%
+%% You are allowed to distribute this file under the condition that it is
+%% distributed together with all files mentioned in readme.mz1.
+%% If you receive only some of these files from someone, complain!
+%%
+%% Error Reports in case of UNCHANGED versions to
+%%
+%% F. Mittelbach
+%% Eichenweg 29
+%% D-6500 Mainz 1
+%% Federal Republic of Germany
+%% Bitnet: <PZF5HZ@DRUEDS2>
+%%
+
+%% This is a MAKEINDEX style file which should be used to generate the
+%% formatted change history for use with the doc style option. The TeX
+%% commands used below are defined in doc.sty. The commands for MAKEINDEX
+%% like `level' `item_x1' are described in `` Makeindex, A General Purpose,
+%% Formatter-Independent Index Processor'' by Poheng Chen.
+
+%% Since the standard MAKEINDEX implementation have very limited space for
+%% their items some of the change entries might fall through. This is
+%% unfortunate but I think I can live with it for the moment.
+
+level '>'
+actual '='
+quote '!'
+
+delim_0 "\\pfill "
+delim_1 "\\pfill "
+delim_2 "\\pfill "
+
+item_x1 "\\efill \n \\subitem "
+item_x2 "\\efill \n \\subsubitem "
+
+%% The following is commented (makeindex complains "unknown specifiers) --bg
+%%lethead_prefix "{\\bf\\hfil "
+%%lethead_suffix "\\hfil}\\nopagebreak\n"
+%%lethead_flag 1 % Generate Headings
+
+%% We disable scanning of macro names inside the index because there
+%% exists a style option to work with doc.sty which is capable of scanning
+%% every \verb command. This would otherwise produce recursion.
+
+preamble
+"\n \\begin{theglossary} \n \\makeatletter\\scan@allowedfalse\n"
+
+postamble
+"\n\n \\end{theglossary}\n"
+
+%% Note this difference to gind.ist. This is necessary if you have an
+%% up-to-date LaTeX. Otherwise comment it out.
+
+keyword "\\glossaryentry"
+
diff --git a/language/french/e-french/texmf/doc/test/mylist.sty b/language/french/e-french/texmf/doc/test/mylist.sty
new file mode 100644
index 0000000000..e6930bf2da
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/mylist.sty
@@ -0,0 +1,109 @@
+%-------mylist.sty
+%
+% Utilisation : \Mylisting{nom_de_fichier}
+%
+% last mods --bg 2000/03/07
+%%
+%% checksum = "30783 109 227 3815"
+%%
+\def\uncatcodespecials{\def\do##1{\catcode`##1=12 }\dospecials}
+% Listing is defined later
+%\ifx\Mylisting\undefined% if no listing style already loaded
+%\def\Mylisting#1{\par\begingroup%
+%\setupverbatim\input #1 \endgroup}
+%\fi
+
+\font\ttlisting=cmtt8 scaled 700
+
+\def\setupverbatim{\baselineskip=0pt\ttlisting %\lineo=0
+ \def\par{\leavevmode\endgraf}
+ \catcode`\`=\active
+ \obeylines\uncatcodespecials\obeyspaces
+ \parskip=0pt plus 1pt}
+
+{\obeyspaces\global\let =\ } % let active space = control space
+{\catcode`\`=\active
+ \ifx`\undefined\gdef\Gdef{\def`{\relax\lq}}
+ \else\gdef\Gdef{}\fi
+}\Gdef
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%SUPERVERBATIM.STY
+\def\uncatcodespecials{\def\do##1{\catcode`##1=12 }\dospecials}
+\ifx\Mylisting\undefined%
+\def\Mylisting#1{\par\begingroup\makeatletter% obscurely needed now for AmSLaTeX
+ \setupverbatim\IfFileExists{#1}{\input #1}%
+ {Fichier non trouv\'e.}\endgroup}
+\else\ifx\prelisting\undefined\else\prelisting{\tt\footnotesize}%
+ \labelstyle[1]{}\spreadlisting{2cm}\fi%
+ \def\Mylisting#1{% just for using listings package but will
+ \IfFileExists{#1}{%
+ \inputlisting{#1}}% remove its listing environnement
+ }{Fichier non trouv\'e.}%
+\fi%
+\def\copyfile#1{\par\begingroup\setupinclure\input #1 \endgroup}
+%
+\newcount\lineno % the number of the file lines listed
+\def\setupverbatim{\tt \lineno=0
+ \def\par{\leavevmode\endgraf} \catcode`\`=\active
+ \obeylines \uncatcodespecials \obeyspaces
+ \parskip=0pt plus 1pt
+ \everypar{\advance\lineno by1 \llap{\rm\the\lineno\ \ }}}
+{\obeyspaces\global\let =\ } % let active space = control space
+%{\catcode`\`=\active \gdef`{\relax\lq}}
+{\catcode`\`=\active
+ \ifx`\undefined\gdef\Gdef{\def`{\relax\lq}}
+ \else\gdef\Gdef{}\fi
+}\Gdef
+%
+\def\sautpar{\par\medskip}
+
+\def\setupinclure{\tt \lineno=0
+ \def\par{\leavevmode\endgraf} \catcode`\`=\active
+ \obeylines \uncatcodespecials \obeyspaces
+ \parskip=0pt plus 1pt}
+
+\def\lignett#1{\noindent\hskip 2truecm{\tt#1}\par}
+
+\def\ttligne{\begingroup\Setupverbatim\doverbatim}
+\def\doverbatim#1{\def\next##1#1{##1\endgroup}\next}
+\def\Setupverbatim{\tt
+ \def\par{\leavevmode\endgraf} \catcode`\`=\active
+ \obeylines \uncatcodespecials \obeyspaces
+ \parskip=0pt plus 1pt}
+%
+\def\debuttt{\medskip
+ \begingroup
+ \obeylines \tt
+ \obeyspaces
+ \parskip=0pt
+ \baselineskip=12pt plus .1pt
+ \parindent=0pt}
+\def\fintt{\endgroup\par}
+\def\termtype{\medskip
+ \trivlist \item[]
+ \def\par{\hbox{}\@@par}
+ \obeylines
+ \tt
+ \obeyspaces
+ \obeycr
+ \@vobeyspaces
+ \parskip=0pt
+ \baselineskip=12pt plus .1pt
+ \parindent=0pt}
+\let\endtermtype=\endtrivlist
+{\catcode`\ =\active\gdef\@vobeyspaces{\catcode`\ \active\let \@xobeysp}}
+\def\@xobeysp{\leavevmode\penalty10000\ }
+{\catcode`\^^M=13 \gdef\@gobblecr{\@ifnextchar
+{\@gobble}{\ignorespaces}}}
+\def\envprog{\trivlist \item[]\vskip\parskip
+\parindent0pt\parskip\z@
+\def\par{\hbox{}\@@par}\obeylines \tt
+\catcode``=13\catcode`\^^M=13
+\frenchspacing\@vobeyspaces}
+\let\endenvprog=\endtrivlist
+\ifx\ProvidesPackage\undefined\else%
+ \ProvidesPackage{mylist}[1998/06/10 Temporary ``list'' package %
+ from the french dist.]%
+\fi%
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/doc/test/mysmall.sty b/language/french/e-french/texmf/doc/test/mysmall.sty
new file mode 100644
index 0000000000..726b1d837a
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/mysmall.sty
@@ -0,0 +1,136 @@
+% smaller.sty %
+%
+% Original author: ??? (appeared in an old TeXhax)
+% Adrian Clark's dates.sty
+% Changes: -- Paul L. Allen, Feb 1990 (UKTeX 91, 6)
+% -- Bernd Raichle, Oct 1991 (added NFSS V1 support)
+% -- Bernard Gaulle, Jan 1992 (environment protected,@ restored)
+% -- Daniel Taupin & BG, 3/94 (simulation of \sm@ller for NFSS2)
+% -- Bernard Gaulle 03/28/94 (\l@rger simulated for NFSS2 too)
+% -- Removing superfluous spaces. --bg 05/10/94
+%
+% Usage: {\smaller TEXT}
+% - sets TEXT in a smaller size in the same typeface.
+% {\larger TEXT}
+% - sets TEXT in a larger size in the same typeface.
+\ifx\larger\undefined\else\expandafter\endinput\fi%
+{\gdef\makeatletter{\catcode`\@=11\relax}%
+ \gdef\makeatother{\catcode`\@=12\relax}%
+\ifcat/@ \makeatletter\let\resetat\makeatother%
+ \else\let\resetat\relax\fi%
+%\@ifundefined{selectfont}{...}{...}%
+\expandafter\ifx\csname selectfont\endcsname\relax%
+%
+% Old Font Selection:
+%
+\csname newcount\endcsname\f@m%
+\gdef\sm@ller{\relax\f@m\fam%
+ % \ifx\@currsize\tiny \tiny\fi%
+ \ifx\@currsize\scriptsize \tiny\fi%
+ \ifx\@currsize\footnotesize \scriptsize\fi%
+ \ifx\@currsize\small \footnotesize\fi%
+ \ifx\@currsize\normalsize \small\fi%
+ \ifx\@currsize\large \normalsize\fi%
+ \ifx\@currsize\Large \large\fi%
+ \ifx\@currsize\LARGE \Large\fi%
+ \ifx\@currsize\huge \LARGE\fi%
+ \ifx\@currsize\Huge \huge\fi%
+ \ifcase\f@m\rm\or\mit\or\cal\or\tenex % not sure about the tenex%
+ \or\it\or\sl\or\bf\or\tt\or\sf\or\sc\or\ly\fi}%
+\gdef\l@rger{\relax\f@m\fam%
+ % \ifx\@currsize\Huge \Huge\fi%
+ \ifx\@currsize\huge \Huge\fi%
+ \ifx\@currsize\LARGE \huge\fi%
+ \ifx\@currsize\Large \LARGE\fi%
+ \ifx\@currsize\large \Large\fi%
+ \ifx\@currsize\normalsize \large\fi%
+ \ifx\@currsize\small \normalsize\fi%
+ \ifx\@currsize\footnotesize \small\fi%
+ \ifx\@currsize\scriptsize \footnotesize\fi%
+ \ifx\@currsize\tiny \scriptsize\fi%
+ \ifcase\f@m\rm\or\mit\or\cal\or\tenex % not sure about the tenex%
+ \or\it\or\sl\or\bf\or\tt\or\sf\or\sc\or\ly\fi}%
+%%
+\else%
+%%
+% New Font Selection V1:
+%
+% Perhaps it would be better to use different macros for
+% the different \@ptsize 10pt, 11pt and 12pt.
+% (Now for 12pt: {\normalsize {\smaller a}} = {\footnotsize a})
+%
+\ifx\DeclareFontShape\undefined% the following for NFSS V1%
+\gdef\sm@ller{\relax\@nomath\smaller%
+ \ifx\f@size\@vpt \else%
+ \ifx\f@size\@vipt \size\@vpt{6pt}\fi%
+ \ifx\f@size\@viipt \size\@vpt{6pt}\fi%
+ \ifx\f@size\@viiipt \size\@viipt{8pt}\fi %\@vipt%
+ \ifx\f@size\@ixpt \size\@viiipt{9.5pt}\fi%
+ \ifx\f@size\@xpt \size\@ixpt{11pt}\fi%
+ \ifx\f@size\@xipt \size\@xpt{12pt}\fi%
+ \ifx\f@size\@xiipt \size\@xpt{12pt}\fi%
+ \ifx\f@size\@xivpt \size\@xiipt{14pt}\fi%
+ \ifx\f@size\@xviipt \size\@xivpt{18pt}\fi%
+ \ifx\f@size\@xxpt \size\@xviipt{22pt}\fi%
+ \ifx\f@size\@xxvpt \size\@xxpt{25pt}\fi%
+ \selectfont%
+ \fi}%
+\gdef\l@rger{\relax\@nomath\larger%
+ \ifx\f@size\@xxvpt \else%
+ \ifx\f@size\@xxpt \size\@xxvpt{30pt}\fi%
+ \ifx\f@size\@xviipt \size\@xxpt{25pt}\fi%
+ \ifx\f@size\@xivpt \size\@xviip{22pt}\fi%
+ \ifx\f@size\@xiipt \size\@xivpt{18pt}\fi%
+ \ifx\f@size\@xipt \size\@xiipt{14pt}\fi%
+ \ifx\f@size\@xpt \size\@xiipt{14pt}\fi%
+ \ifx\f@size\@ixpt \size\@xpt{12pt}\fi%
+ \ifx\f@size\@viiipt \size\@ixp{11pt}\fi%
+ \ifx\f@size\@viipt \size\@viiipt{9.5pt}\fi%
+ \ifx\f@size\@vipt \size\@viiipt{9.5pt}\fi%
+ \ifx\f@size\@vpt \size\@viipt{8pt}\fi%
+ \selectfont%
+ \fi}%
+\else% Now for NFSS V2 %%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\sm@ller{\small}% how to proceed?%
+\gdef\l@rger{\relax}%
+ % proposed by D. Taupin on Mar, 24, 1994:
+ \global\let\tiny@ORI\tiny\gdef\tiny{\tiny@ORI\def\sm@ller{\tiny}%
+ \def\l@rger{\scriptsize}}%
+ \global\let\scriptsize@ORI\scriptsize%
+ \gdef\scriptsize{\scriptsize@ORI\def\sm@ller{\tiny}%
+ \def\l@rger{\footnotesize}}%
+ \global\let\footnotesize@ORI\footnotesize%
+ \gdef\footnotesize{\footnotesize@ORI\def\sm@ller{\scriptsize}%
+ \def\l@rger{\small}}%
+ \global\let\small@ORI\small%
+ \gdef\small{\small@ORI\def\sm@ller{\footnotesize}%
+ \def\l@rger{\normalsize}}%
+ \global\let\normalsize@ORI\normalsize%
+ \gdef\normalsize{\normalsize@ORI\def\sm@ller{\small}%
+ \def\l@rger{\large}}%
+ \global\let\large@ORI\large%
+ \gdef\large{\large@ORI\def\sm@ller{\normalsize}%
+ \def\l@rger{\Large}}%
+ \global\let\Large@ORI\Large%
+ \gdef\Large{\Large@ORI\def\sm@ller{\large}%
+ \def\l@rger{\LARGE}}%
+ \global\let\LARGE@ORI\LARGE%
+ \gdef\LARGE{\LARGE@ORI\def\sm@ller{\Large}%
+ \def\l@rger{\huge}}%
+ \global\let\huge@ORI\huge%
+ \gdef\huge{\huge@ORI\def\sm@ller{\LARGE}%
+ \def\l@rger{\Huge}}%
+ \global\let\Huge@ORI\Huge%
+ \gdef\Huge{\Huge@ORI\def\sm@ller{\huge}%
+ \def\l@rger{\Huge}}%
+\fi%
+%%
+\fi%
+\gdef\smaller{\protect\sm@ller}%
+\gdef\larger{\protect\l@rger}%
+\resetat}%
+\ifx\ProvidesPackage\undefined\else%
+ \ProvidesPackage{mysmall}[1994/12/12 Temporary ``smaller'' package %
+ from the french dist.]%
+\fi%
+\endinput%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/doc/test/tests-formats/EC.def b/language/french/e-french/texmf/doc/test/tests-formats/EC.def
new file mode 100644
index 0000000000..9e719ea17b
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/tests-formats/EC.def
@@ -0,0 +1,64 @@
+% EC.def file going from latin1. All chars haven't been updated
+% according to the CORK standard. Input text is assumed to be typed in
+% that standard.
+\ProvideTextCommandDefault{\textregistered}{\textcircled{\textsc r}}
+\ProvideTextCommandDefault{\textonequarter}{$\frac14$}
+\ProvideTextCommandDefault{\textonehalf}{$\frac12$}
+\ProvideTextCommandDefault{\textthreequarters}{$\frac34$}
+\providecommand{\mathdegree}{{{}^\circ}}
+\providecommand{\mathonesuperior}{{{}^1}}
+\providecommand{\mathtwosuperior}{{{}^2}}
+\providecommand{\maththreesuperior}{{{}^3}}
+\providecommand{\mathordmasculine}{{{}^o}}
+\providecommand{\mathordfeminine}{{{}^a}}
+\DeclareInputText{"0A0}{~} \DeclareInputMath{"0B0}{\mathdegree}
+\DeclareInputText{"0A1}{\textexclamdown} \DeclareInputMath{"0B1}{\pm}
+\DeclareInputText{"0A2}{\textcent} \DeclareInputMath{"0B2}{\mathtwosuperior}
+\DeclareInputText{"0A3}{\textsterling} \DeclareInputMath{"0B3}{\maththreesuperior}
+\DeclareInputText{"0A4}{\textcurrency} \DeclareInputText{"0B4}{\'{}}
+\DeclareInputText{"0A5}{\textyen} \DeclareInputMath{"0B5}{\mu}
+\DeclareInputText{"0A6}{\textbrokenbar} \DeclareInputText{"0B6}{\P}
+\DeclareInputText{"0A7}{\S} \DeclareInputMath{"0B7}{\cdot}
+\DeclareInputText{"0A8}{\"{}} \DeclareInputText{"0B8}{\c{}}
+\DeclareInputText{"0A9}{\copyright} \DeclareInputMath{"0B9}{\mathonesuperior}
+\DeclareInputMath{"0AA}{\mathordmasculine} \DeclareInputMath{"0BA}{\mathordfeminine}
+\DeclareInputText{"0AB}{\guillemotleft} \DeclareInputText{"0BB}{\guillemotright}
+\DeclareInputMath{"0AC}{\lnot} \DeclareInputText{"0BC}{\textonequarter}
+\DeclareInputText{"0AD}{\textendash} \DeclareInputText{"0BD}{\textonehalf}
+\DeclareInputText{"0AE}{\textregistered} \DeclareInputText{"0BE}{\textthreequarters}
+\DeclareInputText{"0AF}{\={}} \DeclareInputText{"0BF}{\textquestiondown}
+\DeclareInputText{"0C0}{\`A} \DeclareInputText{"0D0}{\DH}
+\DeclareInputText{"0C1}{\'A} \DeclareInputText{"0D1}{\~N}
+\DeclareInputText{"0C2}{\^A} \DeclareInputText{"0D2}{\`O}
+\DeclareInputText{"0C3}{\~A} \DeclareInputText{"0D3}{\'O}
+\DeclareInputText{"0C4}{\"A} \DeclareInputText{"0D4}{\^O}
+\DeclareInputText{"0C5}{\AA} \DeclareInputText{"0D5}{\~O}
+\DeclareInputText{"0C6}{\AE} \DeclareInputText{"0D6}{\"O}
+\DeclareInputText{"0C7}{\c C} \DeclareInputMath{"0D7}{\OE}% --bg
+\DeclareInputText{"0C8}{\`E} \DeclareInputText{"0D8}{\O}
+\DeclareInputText{"0C9}{\'E} \DeclareInputText{"0D9}{\`U}
+\DeclareInputText{"0CA}{\^E} \DeclareInputText{"0DA}{\'U}
+\DeclareInputText{"0CB}{\"E} \DeclareInputText{"0DB}{\^U}
+\DeclareInputText{"0CC}{\`I} \DeclareInputText{"0DC}{\"U}
+\DeclareInputText{"0CD}{\'I} \DeclareInputText{"0DD}{\'Y}
+\DeclareInputText{"0CE}{\^I} \DeclareInputText{"0DE}{\TH}
+\DeclareInputText{"0CF}{\"I} \DeclareInputText{"0DF}{\ss}
+\DeclareInputText{"0E0}{\`a} \DeclareInputText{"0F0}{\dh}
+\DeclareInputText{"0E1}{\'a} \DeclareInputText{"0F1}{\~n}
+\DeclareInputText{"0E2}{\^a} \DeclareInputText{"0F2}{\`o}
+\DeclareInputText{"0E3}{\~a} \DeclareInputText{"0F3}{\'o}
+\DeclareInputText{"0E4}{\"a} \DeclareInputText{"0F4}{\^o}
+\DeclareInputText{"0E5}{\aa} \DeclareInputText{"0F5}{\~o}
+\DeclareInputText{"0E6}{\ae} \DeclareInputText{"0F6}{\"o}
+\DeclareInputText{"0E7}{\c c} \DeclareInputMath{"0F7}{\oe}% --bg
+\DeclareInputText{"0E8}{\`e} \DeclareInputText{"0F8}{\o}
+\DeclareInputText{"0E9}{\'e} \DeclareInputText{"0F9}{\`u}
+\DeclareInputText{"0EA}{\^e} \DeclareInputText{"0FA}{\'u}
+\DeclareInputText{"0EB}{\"e} \DeclareInputText{"0FB}{\^u}
+\DeclareInputText{"0EC}{\`\i} \DeclareInputText{"0FC}{\"u}
+\DeclareInputText{"0ED}{\'\i} \DeclareInputText{"0FD}{\'y}
+\DeclareInputText{"0EE}{\^\i} \DeclareInputText{"0FE}{\th}
+\DeclareInputText{"0EF}{\"\i} \DeclareInputText{"0FF}{\"y}
+\endinput
+%%
+%% End of file `DC.def'.
diff --git a/language/french/e-french/texmf/doc/test/tests-formats/README b/language/french/e-french/texmf/doc/test/tests-formats/README
new file mode 100644
index 0000000000..a6c4209b2e
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/tests-formats/README
@@ -0,0 +1,65 @@
+README_tests (in sub-directory initex) last mods: 2000/11/23
+============
+The following files are given in order:
+ A) to verify TeX hyphenation on 500 french words.
+ B) to provide a sample for testing your keyboard.
+These tests have to be used after installation i.e. creation of the format
+file.
+
+These files were fully tested using MlTeX/TeX V3 with EC or CM fonts.
+
+Here are the corresponding files for part A:
+===========================================
+EC.def an internal file, for input encoding just like EC.
+TSIv5n4.tex 500 words hyphenated (Desarmenien's reference)
+ This is a 7-bit file to transform to your 8-bit keyboard-screen.
+ gencoup.tex to hyphenate these words with TeX at your site (log file)
+lgencoup.tex " " " " " LaTeX " " "
+ tstcoup.tex to read the log file produced with TeX & compare with ideal list
+ltstcoup.tex " " " " " LaTeX " " " "
+ testhyp a shell script to do this with TeX
+ltesthyp " " " " " LaTeX
+
+Operation:
+ - convert TSIv5n4.tex to 8-bit accordingly to your own keyboard (use kb7to8 !)
+ - run the l/testhyp procedure to look if your installation is ok at
+ the hyphenation level. Any system with TeX-only i.e. without Multi-lingual
+ modifications or without 8-bit fonts can't be called a french system and
+ this test would be a non-sense.
+ This script gives normally 0 bad hyphenated words with MlTeX+CM
+ or TeX+EC fonts. No difference should occur.
+
+Here are the corresponding files for part B:
+===========================================
+kbtest.tex the test code (8-bit file) to be adapted to your keyboard.
+
+Operation:
+ - update this file accordingly to your own keyboard and run it with your
+ TeX engine. You will obtain a print sheet with a comparison of 7-bit and
+ 8-bit inputs.
+
+Hope it helps,
+ Bernard GAULLE first issue 2000/11/23
+
+Here is a directory listing at the time of distribution:
+ (The number of bytes of this README may differ)
+%%>============================================================================
+total 200
+-rw-r--r-- 1 bernard bernard 3888 Jun 28 15:09 EC.def
+-r--r--r-- 1 bernard bernard 3214 Jun 28 15:57 README
+-rw-r--r-- 1 bernard bernard 20860 Jun 28 15:22 README_tests.pdf
+-rw-r--r-- 1 bernard bernard 8155 Jun 28 15:22 TSIv5n4.tex
+-rw-r--r-- 1 bernard bernard 4320 Jun 28 15:22 gencoup.tex
+-rw-r--r-- 1 bernard bernard 22955 Jun 28 15:22 kbtest.tex
+-rw-r--r-- 1 bernard bernard 828 Jun 28 15:22 lgencoup.tex
+lrwxr-xr-x 1 root bernard 6 Jun 24 18:57 link_to_README -> README
+-rw-r--r-- 1 bernard bernard 836 Jun 28 15:22 ltesthyp
+-rw-r--r-- 1 bernard bernard 853 Jun 28 15:22 ltstcoup.tex
+-rw-r--r-- 1 bernard bernard 799 Jun 28 15:22 testhyp
+-rw-r--r-- 1 bernard bernard 5425 Jun 28 15:22 tstcoup.tex
+%%<============================================================================
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% checksum = "52817 65 435 3214"
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/doc/test/tests-formats/TSIv5n4.tex b/language/french/e-french/texmf/doc/test/tests-formats/TSIv5n4.tex
new file mode 100644
index 0000000000..8a55797233
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/tests-formats/TSIv5n4.tex
@@ -0,0 +1,154 @@
+% Extrait du vocabulaire divise TSI Vol. 5 No 4 1986, Jacques Desarmenien
+% saisie --bg 30/03/92
+% \`{A} passer en 8 bits conform\'{e}ment \`{a} votre syst\`{e}me
+% maj sug. DF 19/06/92
+% maj sug. DF 11/09/92
+% Changement : d\'{e}sami-don-ner en d\'{e}sa-mi-don-ner (f*hyph.tex V1.10 BG 27/12/93)
+% maj 8-bits bg 98/02/05
+% Ajouts : abhor-rer adh\'{e}-sion r\'{e}dhi-bi-toire for frhyph.tex V2.4 bg 98/02/06
+% d\'{e}s-{\oe}u-vre-ment,% have a long name with {\oe} V2.5 bg 98/12/22
+% added a 7-bits word test "maitrise" with \^ \i. V2.6 bg 99/02/01
+% Maj pour frhyph1.tex (dis-conve-nance) V2.7 2003/02/12
+% Maj pour ig-ni-vome (igni-vome n'est pas correct) V2.8 2003/02/13
+%
+%% checksum = "18445 154 305 8155"
+%%
+%
+abon-dam-ment,abs-ti-nence,ac-com-mo-da-tion,ac\'{e}-ti-fier,%
+acre,ad\'{e}-qua-tion,adu-la-teur,af-fai-rer,%
+af-front,ago-nie,ai-guayer,al-bi-nisme,%
+al-g\`{e}bre,al-li-ga-tor,al-ti-port,am-bu-la-toire,%
+amon-ce-ler,ana-chro-nique,an-dr\`{e}ne,an-h\'{e}-ler,%
+anor-ma-lit\'{e},an-ti-com-mu-nisme,an-ti-po-lio-my\'{e}-li-tique,ape-tis-ser,%
+ap-pa-reille-ment,ap-pro-fon-dir,ar-bi-tral,ar\'{e}ique,%
+ar-mon,ar-s\'{e}-niure,asexuel,as-si-mil\'{e},%
+as-tro-nef,at-te-lage,au-dio-fr\'{e}-quence,au-to-cen-sure,%
+au-to-strade,avia-tion,azur\'{e},ba-gue-naude,%
+bal-ka-nique,ban-nir,bar-gui-gner,bas-sine,%
+ba-va-roise,b\^{e}-le-ment,ber-line,bi-blio-bus,%
+bi-gleux,bio-d\'{e}-gra-dable,bi-sec-tion,blas-tula,%
+bo\"{e}sse,bo-nite,bou-ca-ner,boul-do-zeur,%
+bourse,brah-ma-nique,bre-telle,bro-can-tage,%
+bruine,Bulgare,ca-ban,caddy,%
+cairn,ca-life,ca-mer,cange,%
+cap,ca-puce,carde,ca-rot-ter,%
+ca-s\'{e}a-tion,ca-ta-pulte,ca-val-cade,ce-nelle,%
+c\'{e}-r\'{e}-mo-nial,chaintre,chan-latte,char-mille,%
+chauf-feur,che-va-le-ment,chi-m\'{e}-rique,choi-sir,%
+chro-mo-so-mique,cin\'{e},ci-ta-din,cla-ri-fier,%
+clin-foc,coas-se-ment,cof-fret,col-lec-tion,%
+com-bat,com-mun,com-plexe,concen-trique,%
+condi-ment,confron-ter,conno-ta-tion,constant,%
+conti-gu\"{\i}t\'{e},contre-marque,convoi-ter,co-que-rie,%
+cor-ni\`{e}re,cor-v\'{e}e,cou-d\'{e}e,cou-ronne,%
+cra-chi-ner,cr\'{e}-dence,cri-bl\'{e},cro-qui-gno-let,%
+cu-bi-lot,cu-mul,cy-clo-mo-to-riste,da-leau,%
+d\'{e}-am-bu-la-tion,d\'{e}-bou-cler,d\'{e}-can-ta-tion,d\'{e}-chaus-se-ment,%
+d\'{e}-clor,d\'{e}-cou-pler,d\'{e}-dire,d\'{e}-fi-lage,%
+d\'{e}-ga-zon-nage,d\'{e}-gri-ser,d\'{e}-l\'{e}-gu\'{e},d\'{e}-ma-go-gique,%
+d\'{e}-mis-sion,d\'{e}-na-zi-fier,den-tiste,d\'{e}-piau-ter,%
+d\'{e}-pouiller,der-ma-to-lo-gique,d\'{e}sa-mi-don-ner,d\'{e}sen-flure,%
+d\'{e}shy-dro-g\'{e}-ner,d\'{e}so-rien-ter,d\'{e}-sto-ckage,d\'{e}-to-na-tion,%
+d\'{e}-ver-dis-sage,dharma,di-amine,di-duc-tion,%
+di-gon,dio-ny-sien,dis-conve-nance,dis-pu-taille-rie,%
+dis-tri-buable,do-ci-mo-lo-gie,do-mes-ti-quer,do-ter,%
+dra-gon-net,dr\^{o}-le-ment,du-per,dys-en-do-cri-nie,%
+\'{e}bou-rif-fer,\'{e}charde,\'{e}clanche,\'{e}cra-bouille-ment,%
+\'{e}dit,ef-fri-te-ment,ei-der,\'{e}lec-tro-ma-gn\'{e}-tique,%
+\'{e}lu-ci-da-tion,em-bot-te-ler,\'{e}miet-te-ment,em-par-rer,%
+em-prunt,en-chaus-ser,en-dia-bler,en-flam-mer,%
+en-har-mo-nie,en-r\'{e}-gi-men-ter,en-t\'{e}-rique,en-tre-lacs,%
+en-voyeur,\'{e}piage,\'{e}pi-phy-tie,\'{e}pui-se-ment,%
+\'{e}reint\'{e},es-ca-drille,es-pion,es-th\'{e}-tisme,%
+\'{e}ta-tisme,\'{e}tole,eu-pep-tique,\'{e}ven-tua-lit\'{e},%
+ex-ci-ser,exi-gi-bi-lit\'{e},ex-pli-ca-tion,ex-tir-pa-tion,%
+fac-teur,fal-si-fi-ca-teur,fa-rouche,faux,%
+fen-deur,f\'{e}-rule,fi-ce-ler,fi-li-grane,%
+fixe,fl\'{e}-chis-seur,fluc-tuant,fon-ci\'{e}-re-ment,%
+for-lon-ger,fouilleur,frac-tion-niste,fre-don-ner,%
+frire,fruit,fu-rioso,ga\"{\i}a-col,%
+ga-lure,gare,gaur,ge-n\'{e}pi,%
+g\'{e}o-phage,gi-boyeux,glai-seux,glu-co-li-pide,%
+go\"{\i},gou-g\`{e}re,graillon,gra-ti-ner,%
+gre-nouille,gri-ser,gu\`{e}de,gui-per,%
+hadji,ha-pax,h\^{a}-te-reau,h\'{e}-lio-chro-mie,%
+hen-d\'{e}-ca-syl-labe,h\'{e}-ron,hi\'{e}-rar-chi-que-ment,ho,%
+ho-no-ra-bi-lit\'{e},hou-leux,hu-mus,hy-dro-pneu-ma-tique,%
+hyp-na-go-gique,icaque,ig-ni-vome,imit\'{e},%
+im-pala,im-plan-ter,im-pu-bliable,in-avouable,%
+in-com-mu-ni-ca-bi-lit\'{e},in-croyable,in-dexer,in-du-bi-ta-ble-ment,%
+in-ex-p\'{e}-ri-ment\'{e},in-flexi-bi-lit\'{e},in-hu-mer,in-quar-ta-tion,%
+ins-pec-teur,in-t\`{e}gre,in-ter-fo-liage,in-tu-ba-tion,%
+in-ter-stel-laire,in-vrai-sem-blance,ir-r\'{e}-pa-ra-ble-ment,iso-phase,%
+ja\"{\i}n,jau-n\^{a}tre,jo-liesse,ju-gu-ler,%
+ka-l\'{e}i-do-scope,ki-lo-m\'{e}-trer,la-bium,lai-neuse,%
+lan-ceur,lar-gage,la-ve-rie,l\'{e}-ni-tif,%
+leu-cose,li-brai-rie,li-mette,li-po-thy-mie,%
+lit-t\'{e}-ral,lo-go-ma-chique,lou-cheur,lu-mi-neu-se-ment,%
+lyn-cheur,ma-cro-phage,ma-gni-fique,ma-la-bar,%
+mal-ter,man-gous-tan,map-pe-monde,mar-gis,%
+mar-que-te-rie,mas-ti-ca-toire,ma-trone,m\'{e}-daille,%
+me\"{\i}ji,men-d\'{e}-l\'{e}-vium,mer-cure,me-sure,%
+m\'{e}-tis-sage,mi-cro-m\'{e}-trique,mil-lier,mi-nu-tieu-se-ment,%
+mi-traillade,moi-nillon,mon-der,mo-no-po-liste,%
+mor-dache,mo-tion-ner,mous-que-te-rie,mul-ti-carte,%
+mus-cat,myo-pie,na-po-l\'{e}o-nien,na-va-rin,%
+neige,neu-ro-psy-chiatre,ni\^{o}le,no-made,%
+noue,nu-m\'{e}-ra-tion,obli-t\'{e}-rer,oc\'{e}a-no-graphe,%
+{\oe}uvre,oli-go-pole,on-gl\'{e}e,opi-nion,%
+or-chi-da-c\'{e}es,ori-peau,os-cule,ouille,%
+ovo-g\'{e}-n\`{e}se,pa-geo-ter,pa-l\'{e}o-his-to-lo-gie,pa-lus,%
+pa-no-ra-mi-quer,para,pa-ra-si-ti-cide,pa-ri-sette,%
+par-ti-ci-pant,pas-teu-ri-ser,pa-toi-ser,paye-ment,%
+pei-gnage,pe-nalty,pen-tho-tal,p\'{e}-r\'{e}qua-tion,%
+per-lim-pin-pin,per-son-na-lit\'{e},p\'{e}-toire,phar-ma-ceu-tique,%
+pholx,pho-to-ma-ton,phy-toph-thora,pi\'{e}-ti-ner,%
+pin-ce-lier,pi-so-lithe,plaie,plas-ti-que-ment,%
+pliage,plu-t\^{o}t,poin-teur,po-li-ti-quer,%
+po-ly-style,pontet,po-s\'{e}-ment,po-ti-quet,%
+pour-voi,pr\'{e}-cis,pr\'{e}-ju-di-ciable,pr\'{e}-s\'{e}ance,%
+pr\'{e}-va-lence,pri-vi-l\'{e}-gier,pro-fi-leur,pro-na-teur,%
+pros-pec-tif,pro-vi-dence,psy-cho-lin-guis-tique,pu\'{e}-ri-lit\'{e},%
+pur-pura,py-tha-go-risme,quart-zite,quin-tes-sen-ci\'{e},%
+rac-cour-cir,ra-dio-co-balt,rage,ram\'{e},%
+ra-pi\'{e}-cage,r\^{a}-te-lier,rayon-nant,re-bours,%
+re-chi-gner,re-cor-dage,r\'{e}-cu-sable,r\'{e}-\'{e}va-lua-tion,%
+re-fu-ser,r\'{e}-gu-la-rit\'{e},re-laxe,re-met-tant,%
+re-nar-di\`{e}re,ren-ta-mer,r\'{e}-p\'{e}-ti-tion,repu,%
+r\'{e}-son-nance,re-sur-gir,r\'{e}-trac-tile,r\'{e}-veil,%
+re-vo-ter,rhu-me-rie,ri-mer,robre,%
+ron-chon,ro-tengle,rous-p\'{e}-ter,rui-ni-forme,%
+sa-brage,sa-gesse,sa-li-nit\'{e},sand-jak,%
+sar-clette,sau-cisse,Saxon,schi-zo-go-nie,%
+sco-las-ti-cat,s\'{e}-che-resse,sei-gneu-riage,se-mou-le-rie,%
+sep-tem-vir,ser-pent,sexto,si-gil-lo-gra-phie,%
+si-mu-lie,ski,s{\oe}ur,so-ma-to-trope,%
+sot,soulte,spal-ter,sph\'{e}-rique,%
+spo-ro-gone,star-let,st\'{e}-r\'{e}o-duc,sto-ma-chique,%
+stro-phan-tine,sub-jec-ti-ve-ment,suc-ci-nique,sul-fa-ter,%
+su-pin,sur-d\'{e}-ve-lopp\'{e},sur-mon-ter,sur-vol-ter,%
+sym-pho-nie,sy-phi-lis,tact,tam-pico,%
+ta-quon,t\^{a}-ter,tech-ni-que-ment,t\'{e}-l\'{e}os-t\'{e}ens,%
+ten-dan-ciel,ter-mi-nal,t\'{e}-te-relle,th\'{e}o-lo-gal,%
+thalspi,tilleul,to-co-ph\'{e}-rol,ton-nerre,%
+tor-tille,tour-men-ter,trac-ter,trans-cas-pien,%
+trans-plant,tr\'{e}-fi-lage,tr\'{e}-vi-rer,tri-fo-rium,%
+tri-plure,tron-ca-ture,truite,tu-mul-tueu-se-ment,%
+tuyau-ter,ul-tra-vi-rus,ura-no-gra-phie,uti-li-taire,%
+va-lable,va-quer,ve-dette,v\'{e}-n\'{e}-rer,%
+ver-get\'{e},ver-seuse,vian-der,vi-gnoble,%
+vi-reux,vi-treux,vo-lage,vo-ter,%
+we-ber,yt-trique,zo-nure,%
+%% liste compl\'{e}mentaire %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+cor-rec-te-ment,% 1ct retir\'{e}
+abhor-rer,adh\'{e}-sion,r\'{e}dhi-bi-toire,% modifs frhyp V2.4
+d\'{e}s-{\oe}u-vre-ment,% have a long name with {\oe}V2.5
+ma\^% add a 7 bits word with accent \^ on \i
+ \i-tris\'% which is a good idea
+ e,% of Michel Bovani.
+}% don't run this file alone! Go through gencoup.tex
+%
+\CheckSevenBits/\`{A}/% check it, will stop here if 7-bits.
+ {\STOP un retour charriot permet de continuer...}
+%
+\endinput
diff --git a/language/french/e-french/texmf/doc/test/tests-formats/TSIv5n48.tex b/language/french/e-french/texmf/doc/test/tests-formats/TSIv5n48.tex
new file mode 100644
index 0000000000..9516961597
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/tests-formats/TSIv5n48.tex
@@ -0,0 +1,154 @@
+% Extrait du vocabulaire divise TSI Vol. 5 No 4 1986, Jacques Desarmenien
+% saisie --bg 30/03/92
+% À passer en 8 bits conformément à votre système
+% maj sug. DF 19/06/92
+% maj sug. DF 11/09/92
+% Changement : désami-don-ner en désa-mi-don-ner (f*hyph.tex V1.10 BG 27/12/93)
+% maj 8-bits bg 98/02/05
+% Ajouts : abhor-rer adhé-sion rédhi-bi-toire for frhyph.tex V2.4 bg 98/02/06
+% dés-œu-vre-ment,% have a long name with œ V2.5 bg 98/12/22
+% added a 7-bits word test "maitrise" with \^ \i. V2.6 bg 99/02/01
+% Maj pour frhyph1.tex (dis-conve-nance) V2.7 2003/02/12
+% Maj pour ig-ni-vome (igni-vome n'est pas correct) V2.8 2003/02/13
+%
+%% checksum = "56856 154 302 7386"
+%%
+%
+abon-dam-ment,abs-ti-nence,ac-com-mo-da-tion,acé-ti-fier,%
+acre,adé-qua-tion,adu-la-teur,af-fai-rer,%
+af-front,ago-nie,ai-guayer,al-bi-nisme,%
+al-gèbre,al-li-ga-tor,al-ti-port,am-bu-la-toire,%
+amon-ce-ler,ana-chro-nique,an-drène,an-hé-ler,%
+anor-ma-lité,an-ti-com-mu-nisme,an-ti-po-lio-myé-li-tique,ape-tis-ser,%
+ap-pa-reille-ment,ap-pro-fon-dir,ar-bi-tral,aréique,%
+ar-mon,ar-sé-niure,asexuel,as-si-milé,%
+as-tro-nef,at-te-lage,au-dio-fré-quence,au-to-cen-sure,%
+au-to-strade,avia-tion,azuré,ba-gue-naude,%
+bal-ka-nique,ban-nir,bar-gui-gner,bas-sine,%
+ba-va-roise,bê-le-ment,ber-line,bi-blio-bus,%
+bi-gleux,bio-dé-gra-dable,bi-sec-tion,blas-tula,%
+boësse,bo-nite,bou-ca-ner,boul-do-zeur,%
+bourse,brah-ma-nique,bre-telle,bro-can-tage,%
+bruine,Bulgare,ca-ban,caddy,%
+cairn,ca-life,ca-mer,cange,%
+cap,ca-puce,carde,ca-rot-ter,%
+ca-séa-tion,ca-ta-pulte,ca-val-cade,ce-nelle,%
+cé-ré-mo-nial,chaintre,chan-latte,char-mille,%
+chauf-feur,che-va-le-ment,chi-mé-rique,choi-sir,%
+chro-mo-so-mique,ciné,ci-ta-din,cla-ri-fier,%
+clin-foc,coas-se-ment,cof-fret,col-lec-tion,%
+com-bat,com-mun,com-plexe,concen-trique,%
+condi-ment,confron-ter,conno-ta-tion,constant,%
+conti-guïté,contre-marque,convoi-ter,co-que-rie,%
+cor-nière,cor-vée,cou-dée,cou-ronne,%
+cra-chi-ner,cré-dence,cri-blé,cro-qui-gno-let,%
+cu-bi-lot,cu-mul,cy-clo-mo-to-riste,da-leau,%
+dé-am-bu-la-tion,dé-bou-cler,dé-can-ta-tion,dé-chaus-se-ment,%
+dé-clor,dé-cou-pler,dé-dire,dé-fi-lage,%
+dé-ga-zon-nage,dé-gri-ser,dé-lé-gué,dé-ma-go-gique,%
+dé-mis-sion,dé-na-zi-fier,den-tiste,dé-piau-ter,%
+dé-pouiller,der-ma-to-lo-gique,désa-mi-don-ner,désen-flure,%
+déshy-dro-gé-ner,déso-rien-ter,dé-sto-ckage,dé-to-na-tion,%
+dé-ver-dis-sage,dharma,di-amine,di-duc-tion,%
+di-gon,dio-ny-sien,dis-conve-nance,dis-pu-taille-rie,%
+dis-tri-buable,do-ci-mo-lo-gie,do-mes-ti-quer,do-ter,%
+dra-gon-net,drô-le-ment,du-per,dys-en-do-cri-nie,%
+ébou-rif-fer,écharde,éclanche,écra-bouille-ment,%
+édit,ef-fri-te-ment,ei-der,élec-tro-ma-gné-tique,%
+élu-ci-da-tion,em-bot-te-ler,émiet-te-ment,em-par-rer,%
+em-prunt,en-chaus-ser,en-dia-bler,en-flam-mer,%
+en-har-mo-nie,en-ré-gi-men-ter,en-té-rique,en-tre-lacs,%
+en-voyeur,épiage,épi-phy-tie,épui-se-ment,%
+éreinté,es-ca-drille,es-pion,es-thé-tisme,%
+éta-tisme,étole,eu-pep-tique,éven-tua-lité,%
+ex-ci-ser,exi-gi-bi-lité,ex-pli-ca-tion,ex-tir-pa-tion,%
+fac-teur,fal-si-fi-ca-teur,fa-rouche,faux,%
+fen-deur,fé-rule,fi-ce-ler,fi-li-grane,%
+fixe,flé-chis-seur,fluc-tuant,fon-cié-re-ment,%
+for-lon-ger,fouilleur,frac-tion-niste,fre-don-ner,%
+frire,fruit,fu-rioso,gaïa-col,%
+ga-lure,gare,gaur,ge-népi,%
+géo-phage,gi-boyeux,glai-seux,glu-co-li-pide,%
+goï,gou-gère,graillon,gra-ti-ner,%
+gre-nouille,gri-ser,guède,gui-per,%
+hadji,ha-pax,hâ-te-reau,hé-lio-chro-mie,%
+hen-dé-ca-syl-labe,hé-ron,hié-rar-chi-que-ment,ho,%
+ho-no-ra-bi-lité,hou-leux,hu-mus,hy-dro-pneu-ma-tique,%
+hyp-na-go-gique,icaque,ig-ni-vome,imité,%
+im-pala,im-plan-ter,im-pu-bliable,in-avouable,%
+in-com-mu-ni-ca-bi-lité,in-croyable,in-dexer,in-du-bi-ta-ble-ment,%
+in-ex-pé-ri-menté,in-flexi-bi-lité,in-hu-mer,in-quar-ta-tion,%
+ins-pec-teur,in-tègre,in-ter-fo-liage,in-tu-ba-tion,%
+in-ter-stel-laire,in-vrai-sem-blance,ir-ré-pa-ra-ble-ment,iso-phase,%
+jaïn,jau-nâtre,jo-liesse,ju-gu-ler,%
+ka-léi-do-scope,ki-lo-mé-trer,la-bium,lai-neuse,%
+lan-ceur,lar-gage,la-ve-rie,lé-ni-tif,%
+leu-cose,li-brai-rie,li-mette,li-po-thy-mie,%
+lit-té-ral,lo-go-ma-chique,lou-cheur,lu-mi-neu-se-ment,%
+lyn-cheur,ma-cro-phage,ma-gni-fique,ma-la-bar,%
+mal-ter,man-gous-tan,map-pe-monde,mar-gis,%
+mar-que-te-rie,mas-ti-ca-toire,ma-trone,mé-daille,%
+meïji,men-dé-lé-vium,mer-cure,me-sure,%
+mé-tis-sage,mi-cro-mé-trique,mil-lier,mi-nu-tieu-se-ment,%
+mi-traillade,moi-nillon,mon-der,mo-no-po-liste,%
+mor-dache,mo-tion-ner,mous-que-te-rie,mul-ti-carte,%
+mus-cat,myo-pie,na-po-léo-nien,na-va-rin,%
+neige,neu-ro-psy-chiatre,niôle,no-made,%
+noue,nu-mé-ra-tion,obli-té-rer,océa-no-graphe,%
+œuvre,oli-go-pole,on-glée,opi-nion,%
+or-chi-da-cées,ori-peau,os-cule,ouille,%
+ovo-gé-nèse,pa-geo-ter,pa-léo-his-to-lo-gie,pa-lus,%
+pa-no-ra-mi-quer,para,pa-ra-si-ti-cide,pa-ri-sette,%
+par-ti-ci-pant,pas-teu-ri-ser,pa-toi-ser,paye-ment,%
+pei-gnage,pe-nalty,pen-tho-tal,pé-réqua-tion,%
+per-lim-pin-pin,per-son-na-lité,pé-toire,phar-ma-ceu-tique,%
+pholx,pho-to-ma-ton,phy-toph-thora,pié-ti-ner,%
+pin-ce-lier,pi-so-lithe,plaie,plas-ti-que-ment,%
+pliage,plu-tôt,poin-teur,po-li-ti-quer,%
+po-ly-style,pontet,po-sé-ment,po-ti-quet,%
+pour-voi,pré-cis,pré-ju-di-ciable,pré-séance,%
+pré-va-lence,pri-vi-lé-gier,pro-fi-leur,pro-na-teur,%
+pros-pec-tif,pro-vi-dence,psy-cho-lin-guis-tique,pué-ri-lité,%
+pur-pura,py-tha-go-risme,quart-zite,quin-tes-sen-cié,%
+rac-cour-cir,ra-dio-co-balt,rage,ramé,%
+ra-pié-cage,râ-te-lier,rayon-nant,re-bours,%
+re-chi-gner,re-cor-dage,ré-cu-sable,ré-éva-lua-tion,%
+re-fu-ser,ré-gu-la-rité,re-laxe,re-met-tant,%
+re-nar-dière,ren-ta-mer,ré-pé-ti-tion,repu,%
+ré-son-nance,re-sur-gir,ré-trac-tile,ré-veil,%
+re-vo-ter,rhu-me-rie,ri-mer,robre,%
+ron-chon,ro-tengle,rous-pé-ter,rui-ni-forme,%
+sa-brage,sa-gesse,sa-li-nité,sand-jak,%
+sar-clette,sau-cisse,Saxon,schi-zo-go-nie,%
+sco-las-ti-cat,sé-che-resse,sei-gneu-riage,se-mou-le-rie,%
+sep-tem-vir,ser-pent,sexto,si-gil-lo-gra-phie,%
+si-mu-lie,ski,sœur,so-ma-to-trope,%
+sot,soulte,spal-ter,sphé-rique,%
+spo-ro-gone,star-let,sté-réo-duc,sto-ma-chique,%
+stro-phan-tine,sub-jec-ti-ve-ment,suc-ci-nique,sul-fa-ter,%
+su-pin,sur-dé-ve-loppé,sur-mon-ter,sur-vol-ter,%
+sym-pho-nie,sy-phi-lis,tact,tam-pico,%
+ta-quon,tâ-ter,tech-ni-que-ment,té-léos-téens,%
+ten-dan-ciel,ter-mi-nal,té-te-relle,théo-lo-gal,%
+thalspi,tilleul,to-co-phé-rol,ton-nerre,%
+tor-tille,tour-men-ter,trac-ter,trans-cas-pien,%
+trans-plant,tré-fi-lage,tré-vi-rer,tri-fo-rium,%
+tri-plure,tron-ca-ture,truite,tu-mul-tueu-se-ment,%
+tuyau-ter,ul-tra-vi-rus,ura-no-gra-phie,uti-li-taire,%
+va-lable,va-quer,ve-dette,vé-né-rer,%
+ver-geté,ver-seuse,vian-der,vi-gnoble,%
+vi-reux,vi-treux,vo-lage,vo-ter,%
+we-ber,yt-trique,zo-nure,%
+%% liste complémentaire %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+cor-rec-te-ment,% 1ct retiré
+abhor-rer,adhé-sion,rédhi-bi-toire,% modifs frhyp V2.4
+dés-œu-vre-ment,% have a long name with œV2.5
+ma\^% add a 7 bits word with accent \^ on \i
+ \i-tris\'% which is a good idea
+ e,% of Michel Bovani.
+}% don't run this file alone! Go through gencoup.tex
+%
+\CheckSevenBits/À/% check it, will stop here if 7-bits.
+ {\STOP un retour charriot permet de continuer...}
+%
+\endinput
diff --git a/language/french/e-french/texmf/doc/test/tests-formats/gencoup.tex b/language/french/e-french/texmf/doc/test/tests-formats/gencoup.tex
new file mode 100644
index 0000000000..3d1fd5bd00
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/tests-formats/gencoup.tex
@@ -0,0 +1,90 @@
+%OZT%&frtex / This is a TeX code to generate a log file
+% showing french hyphenated words.
+% gencoup.tex Copyright Bernard Gaulle as in french_doc.pdf
+%%
+% This code was developped for MlTeX and TeX V3 --bg 03/27/92
+% with CM or EC fonts (but don't use it with TeX V2)
+% last mods: --bg 2000/03/09
+%
+%%
+%% checksum = "41383 90 338 4320"
+%%
+%
+%For testing purposes ........................................ \CheckSevenBits
+\ifx\STOP\undefined\def\STOP{\csname bye\endcsname}\fi%
+\catcode`@=11
+\def\CheckSevenBits/#1{\def\@tempa##1##2/##3{\ifx##2\empty\else%
+ \message{gencoup.tex
+ -51- ERREUR : ce document n'a pas \'et\'e converti en 8-bits...}%
+ \expandafter ##3\fi}\expandafter\@tempa\noexpand#1}%
+\catcode`@=12
+%
+\ifx\french\undefined
+ \ifx\l@french\undefined
+ \message{Erreur : le langage french est inconnu !}
+ \ifx\fhyph\undefined\else\message{Heureusement fhyph est connu !}
+ \def\french{\fhyph}\fi
+ \else\def\french{\language=\l@french}\fi% for babel
+\fi
+\french% set the language
+%\message{Language=\the\language\space
+% Left=\the\lefthyphenmin\space Right=\the\righthyphenmin}
+\uchyph=-1% don't hyphenate upper case words
+%\ifx\stophyph\undefined\else% was just for a confirmation test
+%% \message{\message{\string\stophyph\space a\space
+%% ete\space mis\space a\space 4}}
+% \stophyph=4\fi%pb with end of accent.words (MlTeX2)
+
+%\hyphenchar\font='177 % for tests of DC v1.2, EC
+\edef\LeHC{\the\hyphenchar\font}\edef\DConePOINTtwo{127}%
+% Here are Included LaTeX compatible definitions.
+\catcode`@=11
+\ifx\DOinput\undefined\let\DOinput\input\fi%
+\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}% not an outer def
+\newwrite\@unused%..............................................\@unused
+\message{()}
+\long\gdef\@ifundefined#1#2#3{\expandafter\ifx\csname%......... \@ifundefined
+ #1\endcsname\relax#2\else#3\fi}%
+\ifx\protect\undefined\let\protect\relax\fi%....................\protect
+\def\IeC#1{\protect #1}% for plain .............................\IeC
+\@ifundefined{typeout}{%........................................\typeout
+ \global\newlinechar`\^^J%
+ \gdef\typeout#1{{\let\protect\string\immediate\write\@unused{#1}}}%
+ }{}%
+\typeout{Le caract\`ere de c\'esure (hyphen char) est \string'\LeHC}
+% let the original showhyphen work, otherwise there is a mess.
+\ifx\s@owhyphens\undefined\else\let\showhyphens\s@owhyphens\fi%
+{\catcode`\]=13\def]{}\catcode`,=\active\def,{\egroup\space%no need of ^^J
+ \showhyphens\bgroup%
+ }%
+\def\DmyDeF#1{\let\protect\relax% for 2e
+ \showhyphens\bgroup#1}%
+\def\Dmydef#1,#2]{\DmyDeF#1%
+ \def\temp{#2}\ifx\temp\empty\let\Dmydef\relax\fi%
+ \Dmydef#2]}%
+\def\dummydef[{\Dmydef}%
+\catcode`-=\active\def-{}%
+% for this font:
+\rm% use lgencoup.tex with LaTeX
+\let\protect\noexpand% specially for NFSS
+%
+% Here are all the 499 french dictionnary names used by J. Desarmenien
+% plus n other words that were inapropriately hyphenated in the past.
+\edef\mots{\DOinput TSIv5n4 %
+\def\writeEND{\message{\noexpand\endinput}}%
+\typeout{^^J ************************************************************}
+\typeout{^^J G\'en\'eration des cesures 8-bits (jeu test de 500 mots env.}
+\typeout{^^J ************************************************************}
+\dummydef[\mots\writeEND,]}}%
+\typeout{^^J ************************************************************}
+\typeout{^^J La generation de cesures sur un jeu test de plus de 500 mots}
+\typeout{^^J \space\space\space\space\space\space\space\space\space E S T
+ \space\space\space\space F A I T E}
+\typeout{^^J Renommer maintenant le fichier \jobname.log en myhyph.log}
+\typeout{^^J Valider l'accentuation dans ce fichier (circonflexes)}
+\typeout{^^J Puis faire le test de validite (cf README.initex)}
+\typeout{^^J ************************************************************}
+\typeout{^^J }
+\bye
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/doc/test/tests-formats/lgencoup.tex b/language/french/e-french/texmf/doc/test/tests-formats/lgencoup.tex
new file mode 100644
index 0000000000..1546f5a894
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/tests-formats/lgencoup.tex
@@ -0,0 +1,23 @@
+%OZT%&frlatex / This is a LaTeX code to generate a log file showing
+% french hyphenated words
+% Copyright Bernard Gaulle as in french_doc.pdf
+%
+% to be used only for testing/debugging purposes
+%
+% last mods: 2000/03/03
+\catcode`@=11
+\gdef\iORI{\@@input}
+\global\let\bye\enddocument
+\documentclass{article}
+%\usepackage[T1]{fontenc}%%%%% codage de sortie (pour fontes EC)
+\wlog{\noexpand\input{EC.def}}% my auxiliary input encoding for tstcoup
+%\usepackage{french}% no need to use it, \french should be enough
+\begin{document}
+\global\let\DOinput\iORI
+\let\STOP\stop% stop if error
+\DOinput gencoup.tex
+\endinput
+%%
+%% checksum = "31401 23 85 828"
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/doc/test/tests-formats/ltesthyp b/language/french/e-french/texmf/doc/test/tests-formats/ltesthyp
new file mode 100644
index 0000000000..8193a6dfe6
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/tests-formats/ltesthyp
@@ -0,0 +1,24 @@
+#! /bin/csh -xv
+# Test LaTeX des cesures appliquees sur le site sur plus de 500 mots
+# et comparaison avec avec la liste ideale des coupures. maj --bg 2000/02/18
+
+echo "latex lgencoup >/dev/null"
+ latex lgencoup >/dev/null
+if (`grep -e "-51- ERREUR" lgencoup.log`) then
+ echo "-51- ERREUR le document n'a pas ete converti en 8-bits"
+ exit
+endif
+
+# to avoid finding ^ instead of \^
+sed -e 's/\^\^\[/\\oe\{\}\{\}/g' <lgencoup.log | sed -e 's/\^a/\\\^a/g' -e 's/\^e/\\\^e/g' -e 's/\^i/\\\^\\i/g' -e 's/\^o/\\\^o/g' -e 's/\^u/\\\^u/g' -e 's/\^A/\\\^A/g' -e 's/\^E/\\\^E/g' -e 's/\^I/\\\^I/g' -e 's/\^O/\\\^O/g' -e 's/\^U/\\\^U/g' >myhyph.log
+
+latex ltstcoup
+rm ltstcoup.dvi
+rm lgencoup.aux
+mv ltstcoup.log ltesthyp.log
+rm lgencoup.log
+rm ltstcoup.idx myhyph.log
+###########
+#%%
+#%% checksum = "52841 25 117 836"
+#%%
diff --git a/language/french/e-french/texmf/doc/test/tests-formats/ltstcoup.tex b/language/french/e-french/texmf/doc/test/tests-formats/ltstcoup.tex
new file mode 100644
index 0000000000..a60acd4221
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/tests-formats/ltstcoup.tex
@@ -0,0 +1,22 @@
+%OZT%&frlatex / This is a TeX code to test if french words are well hyphenated
+% Copyright Bernard Gaulle as in french_doc.pdf
+%
+% last mods: 99/02/23
+\catcode`@=11
+\gdef\iORI{\@@input}
+\gdef\bye{\egroup% to avoid message \end inside level 1...
+ \end{document}}
+\documentclass{article}
+\usepackage{inputenc}%%%%%% to define \inputencoding
+%\usepackage[T1]{fontenc}%%% here is the font encoding
+\nofiles
+\begin{document}
+\global\let\DOinput\iORI
+\makeatletter\let\@inpenc@test\relax\makeatother% avoid a warning about EC
+\DOinput tstcoup.tex
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% checksum = "00515 22 72 853"
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/doc/test/tests-formats/testhyp b/language/french/e-french/texmf/doc/test/tests-formats/testhyp
new file mode 100644
index 0000000000..42b2a271ac
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/tests-formats/testhyp
@@ -0,0 +1,23 @@
+#! /bin/csh
+# Test TeX des cesures appliquees sur le site sur plus de 500 mots
+# et comparaison avec avec la liste ideale des coupures. maj --bg 2000/02/18
+
+echo "tex gencoup >/dev/null"
+ tex gencoup >/dev/null
+if (`grep -e "-51- ERREUR" gencoup.log`) then
+ echo "-51- ERREUR le document n'a pas ete converti en 8-bits"
+ exit
+endif
+
+# to avoid finding ^ instead of \^
+sed -e 's/\^\^\[/\\oe\{\}\{\}/g' <gencoup.log | sed -e 's/\^a/\\\^a/g' -e 's/\^e/\\\^e/g' -e 's/\^i/\\\^\\i/g' -e 's/\^o/\\\^o/g' -e 's/\^u/\\\^u/g' -e 's/\^A/\\\^A/g' -e 's/\^E/\\\^E/g' -e 's/\^I/\\\^I/g' -e 's/\^O/\\\^O/g' -e 's/\^U/\\\^U/g' >myhyph.log
+
+tex tstcoup
+rm tstcoup.dvi
+mv tstcoup.log testhyp.log
+rm gencoup.log
+rm tstcoup.idx myhyph.log
+###########
+#%%
+#%% checksum = "46975 24 113 799"
+#%%
diff --git a/language/french/e-french/texmf/doc/test/tests-formats/tstcoup.tex b/language/french/e-french/texmf/doc/test/tests-formats/tstcoup.tex
new file mode 100644
index 0000000000..23e2fae1cc
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/tests-formats/tstcoup.tex
@@ -0,0 +1,135 @@
+%OZT%&frtex / This is a TeX code to test if french words are well hyphenated
+% tstcoup.tex Copyright Bernard Gaulle as in french_doc.pdf
+%
+% This code was developped for MlTeX and TeX V3 --bg 03/27/92
+% with CMR or EC fonts.
+% last mods 2005/03/08
+%
+%%
+%% checksum = "32747 135 375 5425"
+%%
+% Here are included LaTeX compatible definitions.
+%\scrollmode
+\catcode`@=11
+\ifx\@gobble\undefined\let\@gobble#1{}\fi% .......................... \@gobble
+%
+%For testing purposes ........................................ \CheckSevenBits
+\def\STOP{}% non stop...
+\def\CheckSevenBits/#1{\def\@tempa##1##2/##3{}%
+ \expandafter\@tempa#1}%
+%
+\ifx\DOinput\undefined\let\DOinput\input\fi%
+\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}% not an outer def
+\gdef\newread{\alloc@6\read\chardef\sixt@@n}% not an outer def
+\newwrite\@unused%..............................................\@unused
+\long\gdef\@ifundefined#1#2#3{\expandafter\ifx\csname%......... \@ifundefined
+ #1\endcsname\relax#2\else#3\fi}
+\ifx\protect\undefined\let\protect\relax\fi%....................\protect
+\@ifundefined{typeout}{%........................................\typeout
+ \global\newlinechar`\^^J%
+ \gdef\typeout#1{{\let\protect\string\immediate\write\@unused{#1}}}%
+ }{}%
+\typeout{^^J Test de validite des cesures sur le jeu de plus de 500 mots}
+%
+%---------------
+\newif\ifnewhyph\newhyphfalse
+%\hyphenchar\font='177 % for tests of DC v1.2
+\edef\LeHC{\the\hyphenchar\font}\edef\DConePOINTtwo{127}
+\ifx\LeHC\DConePOINTtwo\newhyphtrue\fi
+\message{Le caract\`ere de c\'esure (hyphen char) est \string'\LeHC}
+%---------------
+%
+% creation fichier .idx
+%
+\def\cleanit#1#2/{\ifx #2\empty#1\else #1#2\fi}%
+\def\IeC#1{\cleanit #1/}% remove any superfluous {}
+\newwrite\@mainidx
+\immediate\openout\@mainidx\jobname.idx %
+\begingroup%[[
+\catcode`\]=13\def]{}
+\let\bidon\relax
+\catcode`,=\active
+\def,{^^J}%
+\def\DmyDeF#1{\immediate\write\@mainidx{#1}}%
+%[
+\def\Dmydef#1,#2]{\DmyDeF#1%[
+ \def\temp{#2}\ifx\temp\empty\let\Dmydef\relax\fi%
+ \Dmydef#2]}%
+\def\dummydef[{\Dmydef}%]
+\ifx\documentclass\undefined\def\tempa{T1}
+ \ifx\encodingdefault\tempa\def\oe{^^f7}
+ \else\def\oe{\string\oe\space\string{\string}}%
+ \fi%
+\else%
+\expandafter\def\csname OT\string 1\string\oe\endcsname% for 2e
+ {\string\oe\space\string{\string}}% for 2e
+\expandafter\def\csname T\string 1\string\oe\endcsname% No better follow. way?
+ {\string ^^f7\@gobble}% go back to original char.
+% (i've not found a correct way for reverse engeneering)
+\fi%
+\edef\mots{\@@input TSIv5n4 %}
+\dummydef[\mots,]
+\endgroup
+\closeout\@mainidx%
+Jeu reduit : (voir page suivante)\vfill\eject
+\@@input \jobname.idx\vfill\eject
+%
+% Relecture et comparaison
+%
+\newread\@lidx
+\immediate\openin\@lidx \jobname.idx %
+\newcount\NB\NB=0
+\catcode`[=\active\catcode`-=\active\def-{\string-}%]
+\catcode`\^^7f=\active\ifnewhyph\def^^7f{\string-}\fi%
+\def\@MSG#1#2{\typeout{^^J /\the\NB/ Le mot #1 (\site)
+ devrait etre coupe #2\space!}}
+\def\ATsite#1#2/{\edef\site{#2}%
+ \def-{}\ifnewhyph\def^^7f{}\fi%
+ \xdef\ENTIER{#2}%
+ \def-{\string-}\ifnewhyph\def^^7f{\string-}\fi%
+ \immediate\read\@lidx to\Mustbe%
+ \def\Tobe##1 /{\edef\mustbe{##1}}\expandafter\Tobe\Mustbe /%
+ \ifx \site \mustbe \else\def-{\string-}\ifnewhyph\def^^7f{\string-}\fi%
+ \global\advance\NB by 1
+ \bgroup\def\accent ##1 ##2{##2}\@MSG{.\ENTIER.}{.\mustbe.}\egroup%
+%\expandafter\show\site\show\Mustbe\expandafter\show\mustbe
+ \fi\let\hbox\hboxDUM}
+%
+% A adapter eventuellement a votre site :
+ \long\def[] []#1 \par{\ATsite#1/} % for TeX V3
+%OZT \long\def[] #1 \par{\ATsite#1/} %OZT for OzTeX 3.0
+%STD \long\def[] []#1 \par{\ATsite#1/} %STD for TeX V3
+%%%\ifx\undefined\new@fontshape\else%
+%%% \long\def\ATsitE#1 #2/{\ATsite{}#2/}
+%%% \long\def[]#1/10 #2 \par{\ATsitE#2/}\fi% for NFSS
+\ifx\documentclass\undefined\else% for LaTeX2e
+ \long\def\ATsitE#1/{\ATsite{}#1/%
+ \long\def\ATsitE##1 ##2/{\ATsite{}##2/}}%
+ \long\def[]#1/10 #2 \par{\ATsite{}#2/}%
+ \let\mathbf\relax\let\mathsf\relax%
+ \let\mathtt\relax\let\mathit\relax%
+ \let\lgroup\relax\let\rgroup\relax\let\bracevert\relax%
+\fi%
+%
+\catcode`&=\active\def&{}\catcode`(=1\catcode`)=2
+\let\hboxORI\hbox
+\def\hboxDUM#1[]{\let\hbox\hboxORI}
+%%%%%%%%%% 7bits defs %%%%%%%%%%%%%%%%%
+\ifnewhyph% `127 is the hyphenchar
+\else\catcode`\^^?=\active\global\def^^?{\"}
+\fi
+\catcode`\^^S=\active\global\def^^S{\'}
+\catcode`\^^R=\active\global\def^^R{\`}
+\catcode`\^^P=\active\global\def^^P{\i}
+\catcode`\^^[=\active\global\def^^[{\oe{}{}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\@@input myhyph.log }% log previously produced
+}% otherwise msg: end occured inside a group at level 1
+\typeout{^^J ******************}
+\typeout{^^J F I N\space\space du\space\space T E S T}
+\typeout{^^J (\the\NB\space mots en erreur)}
+\typeout{^^J ******************}
+\typeout{^^J }
+\bye
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/doc/test/texxetlb.tex b/language/french/e-french/texmf/doc/test/texxetlb.tex
new file mode 100644
index 0000000000..cabe8b62b5
--- /dev/null
+++ b/language/french/e-french/texmf/doc/test/texxetlb.tex
@@ -0,0 +1,27 @@
+% !TeX encoding = latin9
+% This is texxetlb.tex
+%
+% French Pro Torture Test of LaTeX with TeXXeT option (main style: book)
+%
+% Copyright GUTenberg-Bernard Gaulle as in french.doc
+%
+% last mods 2006/04/25
+%
+\ifx\beginL\undefined\def\beginL{}\def\endL{}
+\else\TeXXeTstate=1% Starts TeXXeT option of eTeX.
+\fi
+\let\ObeginL\beginL\let\ObeginR\beginR% Save original cmds.
+% Define new ones for tracing purpose.
+\def\beginL{\leavevmode\message{(\the\language-\the\inputlineno) \noexpand\beginL}\ObeginL}%
+\def\beginR{\leavevmode\message{(\the\language-\the\inputlineno) \noexpand\beginR}\ObeginR}%
+\long\def\TexteComplementaire%
+{\subsection{Test de \texttt{texxet}}%
+
+\beginL Ceci est une écriture de gauche à droite $===>\ avec\ mode\ math\acute{e}matique$
+
+\beginR Ceci est une écriture de droite à gauche $avec\ mode\ math\acute{e}matique\ <===$
+
+\beginL
+ }
+\input frenchlb
+\endinput%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/makeindex/fridx1.ist b/language/french/e-french/texmf/makeindex/fridx1.ist
new file mode 100644
index 0000000000..9e480bcb0e
--- /dev/null
+++ b/language/french/e-french/texmf/makeindex/fridx1.ist
@@ -0,0 +1,16 @@
+% FICHIER fridx1.ist
+% Personnalisation Numero 1 d'un index (faire makeindex -s fridx1.ist)
+% --------------------------------------------------------------------
+
+headings_flag 1
+heading_prefix "{\\large \\bf \\hfil--\\ "
+heading_suffix " --\\ \\hfil}\\nopagebreak\n"
+symhead_negative "symboles"
+symhead_positive "Symboles"
+
+delim_0 " \\dotfill \ "
+delim_1 " \\dotfill \ "
+delim_2 " \\dotfill \ "
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
diff --git a/language/french/e-french/texmf/makeindex/fridx2.ist b/language/french/e-french/texmf/makeindex/fridx2.ist
new file mode 100644
index 0000000000..28ce2e40f4
--- /dev/null
+++ b/language/french/e-french/texmf/makeindex/fridx2.ist
@@ -0,0 +1,16 @@
+% FICHIER fridx2.ist
+% Personnalisation Numero 2 d'un index (faire makeindex -s fridx2.ist)
+% --------------------------------------------------------------------
+
+headings_flag 1
+heading_prefix "\\textbf{\\large \\hfil--\\ "
+heading_suffix " --\\ \\hfil}\\nopagebreak\n"
+symhead_negative "symboles"
+symhead_positive "Symboles"
+
+delim_0 " \\dotfill \ "
+delim_1 " \\dotfill \ "
+delim_2 " \\dotfill \ "
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
diff --git a/language/french/e-french/texmf/makeindex/fridx3.ist b/language/french/e-french/texmf/makeindex/fridx3.ist
new file mode 100644
index 0000000000..83fb3a2c20
--- /dev/null
+++ b/language/french/e-french/texmf/makeindex/fridx3.ist
@@ -0,0 +1,16 @@
+% FICHIER fridx3.ist
+% Personnalisation Numero 3 d'un index (faire makeindex -s fridx3.ist)
+% --------------------------------------------------------------------
+
+headings_flag 1
+heading_prefix "{\\large \\hfil--\\ "
+heading_suffix " --\\ \\hfil}\\nopagebreak\n"
+symhead_negative "symboles"
+symhead_positive "Symboles"
+
+delim_0 " \\dotfill \ "
+delim_1 " \\dotfill \ "
+delim_2 " \\dotfill \ "
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
diff --git a/language/french/e-french/texmf/makeindex/fridx4.ist b/language/french/e-french/texmf/makeindex/fridx4.ist
new file mode 100644
index 0000000000..a27e15a661
--- /dev/null
+++ b/language/french/e-french/texmf/makeindex/fridx4.ist
@@ -0,0 +1,16 @@
+% FICHIER fridx4.ist
+% Personnalisation Numero 4 d'un index (faire makeindex -s fridx4.ist)
+% --------------------------------------------------------------------
+
+%headings_flag 1
+%heading_prefix "{\\large \\hfil--\\ "
+%heading_suffix " --\\ \\hfil}\\nopagebreak\n"
+symhead_negative "symboles"
+symhead_positive "Symboles"
+
+delim_0 " \\dotfill \ "
+delim_1 " \\dotfill \ "
+delim_2 " \\dotfill \ "
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
diff --git a/language/french/e-french/texmf/tex/deutschx.mlp b/language/french/e-french/texmf/tex/deutschx.mlp
new file mode 100644
index 0000000000..25d2cd9304
--- /dev/null
+++ b/language/french/e-french/texmf/tex/deutschx.mlp
@@ -0,0 +1,34 @@
+% deutschx.mlp Usual german configuration for the mlp package.
+% last mods: 2000/09/06
+%
+% mlp means The Multi-Lingual Package, an idea from --bg 97/11/03
+%
+% This file can be modified if the local or linguistic TeX users group
+% accepts the modifications.
+%
+% Group to get in touch for deutschx.mlp is: ...
+% Person to send a message is: ... (defaultly: gaulle@idris.fr)
+%
+%
+\ProvidesFile{deutschx.mlp}%
+ [2000/09/06 german configuration file for mlp package]
+\DeclareOption{deutsch}{\@requirepackage{mlp-49}%
+ \PassOptionsToPackage{german}{mlp-49}%
+ }%
+\DeclareOption{ndeutsch}{\@requirepackage{mlp-49n}%
+ \PassOptionsToPackage{ngerman}{mlp-49n}%
+ }%
+\DeclareOption{englisch}{\@requirepackage{mlp-01}% original US english
+ \PassOptionsToPackage{english}{mlp-01}%
+ }%
+\DeclareOption{franzosisch}{\@requirepackage{mlp-33}%
+ \PassOptionsToPackage{french}{mlp-33}%
+ }%
+\DeclareOption{franzoesisch}{\@requirepackage{mlp-33}%
+ \PassOptionsToPackage{french}{mlp-33}%
+ }%
+\DeclareOption{hollandisch}{\@requirepackage{mlp-31}%
+ \PassOptionsToPackage{dutch}{mlp-31}%
+ }%
+\AtBeginDocument{\beginlanguage}%
+%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/tex/efrench.sty b/language/french/e-french/texmf/tex/efrench.sty
new file mode 100644
index 0000000000..c3ae2d4c37
--- /dev/null
+++ b/language/french/e-french/texmf/tex/efrench.sty
@@ -0,0 +1,12 @@
+%% This is efrench.sty original as frenchpro --bg 2002/01/29
+%% frenchpro updated --bg 2003/11/17
+%% Remake as efrench --rj 2011-10-15
+%% to be used like this: \usepackage{efrench}
+%%
+% After Bernard Gaulle's decease this work is now maintained as
+% the e-French project by a group of enthusiast users
+% under LPPL copyright as declared in http://www.efrench.org/
+%
+%
+\RequirePackage{french}%
+\endinput%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/tex/efrenchu.tex b/language/french/e-french/texmf/tex/efrenchu.tex
new file mode 100644
index 0000000000..fadd26ffff
--- /dev/null
+++ b/language/french/e-french/texmf/tex/efrenchu.tex
@@ -0,0 +1,13 @@
+%% This is file `efrenchu.tex',
+%% File is part of the "efrench" package
+\ifdefined\XeTeXrevision% XeTeXinterchartoks
+\XeTeXinputencoding{utf8}
+% for french guillemets under utf8
+ \catcode`« \active
+ \catcode`» \active
+ \def«{\guillemotleft }
+ \def»{\guillemotright}
+% make hyphenation possible in presence of '
+ \lccode`\'=8217\lccode8217=8217
+\fi
+
diff --git a/language/french/e-french/texmf/tex/epreuve.sty b/language/french/e-french/texmf/tex/epreuve.sty
new file mode 100644
index 0000000000..72b6bd6e59
--- /dev/null
+++ b/language/french/e-french/texmf/tex/epreuve.sty
@@ -0,0 +1,63 @@
+% epreuve.sty coming from the News --Steve Anderson 2 mar 1993
+% mods Bernard GAULLE 97/06/31
+% when this file is input in a LaTeX document, it will print a large
+% DRAFT message in light grey at an angle across each page.
+%
+% assumes DVI file will be converted to PostScript by the dvips driver.
+%
+% taken from example posted to the net.
+%%
+%% checksum = "17686 63 274 2073"
+%%
+% Include the LaTeX draft option of style by default (--bg)
+\ifx\undefined\ds@draft\let\ds@draft\relax\fi
+\ds@draft
+
+% define the default language specific name (--bg)
+\ifx\draftname\undefined%
+ \def\draftname{- \noexpand\311preuve -}% imprimer Épreuve (PS)
+\fi
+%
+\let\docEpreuve=\document%
+\def\document{% attach the mods to \begin{document}
+ \csname docEpreuve\endcsname%
+% let \DRAFTNAME apply if defined
+\ifx\DRAFTNAME\undefined%
+\else\let\draftname=\DRAFTNAME%
+\fi
+% \message{DRAFT=\draftname}%
+\special{! userdict begin /bop-hook{
+gsave
+/encodefont { % coming from the red book (--bg)
+ findfont dup % get the old font dict
+ maxlength dict begin % make a new one just as big
+ { 1 index /FID ne % Copy everything but FID
+ { def }
+ { pop pop }
+ ifelse }
+ forall
+ /Encoding exch def % Install the new encoding
+ dup /FontName exch def % new font dict is still current
+ currentdict definefont % Create the new font
+ end
+} bind def
+/Helvetica-Bold-ISOLatin1 ISOLatin1Encoding
+ /Helvetica-Bold encodefont pop
+initmatrix 72 dup scale
+/Helvetica-Bold-ISOLatin1 findfont 2 scalefont setfont
+(\draftname) dup
+stringwidth pop
+4.5 5.5 translate
+60 rotate 2 div neg 0 moveto
+.95 setgray
+show
+grestore
+% here was the original coding:
+%200 30 translate
+%65 rotate /Times-Roman findfont 220 scalefont setfont
+%0 0 moveto 0.99 setgray (\draftname) show grestore
+}def end}%
+}%\document
+\ifx\docEpreuve\relax\document\fi% outside any high language
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/tex/fenglish.sty b/language/french/e-french/texmf/tex/fenglish.sty
new file mode 100644
index 0000000000..c13c256587
--- /dev/null
+++ b/language/french/e-french/texmf/tex/fenglish.sty
@@ -0,0 +1,126 @@
+% After Bernard Gaulle's decease this work is now maintained as
+% the e-French project by a group of enthusiast users
+% under LPPL copyright as declared in http://www.efrench.org/
+\ProvidesFile{fenglish.sty}%
+ [2004/06/23 english interface for the french(le/pro) package]
+\def\beginlanguage{%
+ \ifx\selectlanguage\undefined\english%
+ \else\selectlanguage{english}\fi}%
+\edef\beginFWdirection{L}%
+\ifx\undefined\babel@core@loaded%
+ \DeclareOption{english}{\def\beginlanguage{%
+ \ifx\selectlanguage\undefined\english%
+ \else\selectlanguage{english}\fi}%
+ }%
+ \ProcessOptions%
+\fi%
+\expandafter\ifx\csname englishTeXmods\endcsname\relax%
+\else \endinput \fi%
+\ifx\@ifundefined\undefined%
+\long\def\@ifundefined#1#2#3{\expandafter\ifx\csname%
+ #1\endcsname\relax#2\else#3\fi}%
+\fi%
+\let\ifCLAenglish\iffalse%
+\def\@tempa{\global\let\ifCLA\iffalse%
+ }%
+\ifx\ifCLA\undefined\expandafter\@tempa\fi%
+
+\global\let\ifnonenglishheadings\iffalse%
+\gdef\captionsenglish{%
+ \ifx\captionsnames\captionsenglish\else
+ \def\pagename{page}%
+ \def\refname{References}%
+ \def\abstractname{Abstract}%
+\ifx\bibname\undefined\else%
+ \def\bibname{Bibliography}%
+\fi%
+\ifx\btxselectlanguage\undefined%
+ \csname bibsenglish\endcsname%
+\fi%
+ \def\contentsname{Table of Contents}%
+ \def\listfigurename{List of Figures}%
+ \def\listtablename{List of Tables}%
+\ifx\listalgorithmname\undefined\else%
+ \def\ALG@name{algorithm}%
+ \def\listalgorithmname{List of \ALG@name s}%
+\fi%
+ \def\indexname{Index}%
+ \def\seename{\emph{see}}%
+ \def\seealsoname{\emph{see also}}%
+ \def\figurename{Figure}%
+ \def\tablename{Table}%
+ \def\partname{Part}%
+ \def\glossaryname{Glossary}%
+ \def\kwname{\textbf{Keywords}: }%
+ \def\draftname{DRAFT}%
+ \def\prefacename{Preface}%
+\ifx\proofname\undefined\else%
+ \def\proofname{Proof}%
+\fi%
+\ifx\opening\undefined\else%
+ \def\headtoname{To}%
+ \def\ccname{cc}%
+ \def\enclname{Encl}%
+ \def\PSname{PS:}%
+ \def\Objectname{Subject:}%
+ \def\YourRefname{Your Ref:}%
+ \def\OurRefname{Our Ref:}%
+ \def\emailname{email:}%
+\fi%
+\ifx\slidename\undefined\else%
+ \def\slidename{Slide}%
+\fi%
+\ifx\notesname\undefined\else%
+ \def\notesname{Notes}%
+\fi%
+\ifnonenglishheadings%
+\else%
+ \def\chaptername{Chapter}%
+\fi%
+ \def\appendixname{Appendix}%
+ \fi%
+\let\captionsnames\captionsenglish%
+}%
+\@ifundefined{englishTeXmods}{%
+ \gdef\englishTeXmods{%
+ \ifCLA
+ \ifCLAenglish%
+ \ifx\captionsnames\captionsenglish%
+ \else\captionsenglish\dateenglish%
+ \fi%
+ \fi%
+ \else%
+ \ifx\captionsnames\captionsenglish%
+ \else\captionsenglish\dateenglish%
+ \fi%
+ \fi%
+ \csname @xtrasenglish\endcsname%
+ \def\languagename{english}%
+ \let\switchtolanguage\endenglish%
+ }%
+ }{}%
+\ifx\dateenglish\undefined%
+\def\dateenglish{\def\today{\ifcase\day\or 1st\or 2nd\or 3rd\or 4th\or 5th\or
+ 6th\or 7th\or 8th\or 9th\or 10th\or 11th\or 12th\or 13th\or 14th\or 15th\or
+ 16th\or 17th\or 18th\or 19th\or 20th\or 21st\or 22nd\or 23rd\or 24th\or
+ 25th\or 26th\or 27th\or 28th\or 29th\or 30th\or 31st\fi~\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or July\or August\or
+ September\or October\or November\or December\fi\space \number\year}}%
+\fi%
+\ifx\undefined\babel@core@loaded%
+ \edef\extrasenglish{}\def\@xtrasenglish{\extrasenglish}%
+\else%
+ \let\extrasenglish\englishTeXmods%
+\fi%
+\@ifundefined{english}{\gdef\english{\relax}}{}%
+\@ifundefined{switchtolanguage}{%
+ \gdef\switchtolanguage#1{#1}}{}%
+\let\@enstORI\switchtolanguage%
+\let\englishORI\english%
+\def\endenglish{\let\switchtolanguage\@enstORI%
+ \ignorespaces}%
+\let\noextrasenglish\endenglish%
+\def\english{\switchtolanguage\englishTeXmods\englishORI%
+ \ignorespaces}%
+\english%
+\endinput%
diff --git a/language/french/e-french/texmf/tex/frabbrev-u8.tex b/language/french/e-french/texmf/tex/frabbrev-u8.tex
new file mode 100644
index 0000000000..0b12603545
--- /dev/null
+++ b/language/french/e-french/texmf/tex/frabbrev-u8.tex
@@ -0,0 +1,297 @@
+% frabbrev.tex file (French typographic abbreviations)
+% should always be used in 8bit format (generated from
+% fxabbrev.tex which is full ASCII 7bit)
+%
+% After Bernard Gaulle's decease this work is now maintained as
+% the e-French project by a group of enthusiast users
+% under LPPL copyright as declared in http://www.efrench.org/
+%
+% Don't change this to a 7bits coding except if you are using 7bits input
+%
+% History of mods:
+% ===============
+% - Change \^i into î_ --bg 01/16/92
+% - Added shorten "cad" (remark coming from Jacques Andre) --bg 02/07/92
+% - paragraph sign (\S) followed by a tilde --bg 05/15/92
+% - recoded to 8bits --bg 08/24/92
+% - add second, seconds, premiers, premières, troisièmes...
+% numéros, Numéros and pages.
+% --bg 01/12/93
+% - strings containing a space must be within a group. --bg 98/05/15
+% - THE FIRST LETTER IS NO MORE TESTED except if the string is
+% within braces. Thus, any string beginning whith an uppercase
+% letter should be enclosed within braces. --bg 1999/11/08
+% - f8abbrev.tex and frabbrev.850 definitely removed.
+% f7abbrev.tex rename fxabbrev.tex --bg 2000/06/14
+% - few adds coming from Yves Perrousseaux' book on typo. --bg 2001/08/03
+% - corrections for second(s) and seconde(s). --bg 2001/09/20
+% - * facility added for plurals ==> 6 changes.
+% - legal units added and few other names.
+% HAPPY 10 YEARS ANNIVERSARY! --bg 2001/01/21
+% - abbrev. from Louis Guéry from CFPJ. --bg 2002/02/21
+%%
+% - passage à utf8 par rj - je recommande d'utiliser
+% la commande \abbreviations[frabbrev-u8.tex] --rj 2017-08 10
+
+% Checked name Replacement
+% ============ ===========
+%
+% Notice that when the checked name is inside braces all that name
+% should be equal to "name" otherwise the first letter is not checked.
+% If checked name begins with "*" then "_name_" and "_name_s" will
+% be checked, the replacement name is the same in the two cases.
+%
+% NB: All macros have to be not expanded.
+
+premier 1\noexpand\ier%
+premiers 1\noexpand\iers%
+première 1\noexpand\iere%
+premières 1\noexpand\ieres%
+deuxième 2\noexpand\ieme%
+deuxièmes 2\noexpand\iemes%
+second 2\noexpand\fup{d}%
+seconds 2\noexpand\fup{ds}%
+seconde 2\noexpand\fup{de}%
+secondes 2\noexpand\fup{des}%
+troisième 3\noexpand\ieme%
+troisièmes 3\noexpand\iemes%
+quatrième 4\noexpand\ieme%
+quatrièmes 4\noexpand\iemes%
+
+primo \noexpand\quando{1}%
+secundo \noexpand\quando{2}%
+tertio \noexpand\quando{3}%
+quarto \noexpand\quando{4}%
+quinto \noexpand\quando{5}%
+sexto \noexpand\quando{6}%
+septuno \noexpand\quando{7}%
+octavo \noexpand\quando{8}%
+nono \noexpand\quando{9}%
+decimo \noexpand\quando{10}%
+
+{Numéro} \noexpand\Numero%
+{Numéros} \noexpand\Numeros%
+numéro \noexpand\numero%
+numéros \noexpand\numeros%
+
+monsieur M.%
+messieurs MM.%
+mademoiselle M\noexpand\fup{lle}%
+mesdemoiselles M\noexpand\fup{lles}%
+madame M\noexpand\fup{me}%
+mesdames M\noexpand\fup{mes}%
+maître M\noexpand\fup{e}%
+maîtres M\noexpand\fup{es}%
+
+{Compagnie} c\noexpand\fup{ie}%
+canton C\noexpand\fup{on}%
+docteur D\noexpand\fup{r}%
+folio f\noexpand\fup{o}%
+folios f\noexpand\fup{os}%
+monseigneur M\noexpand\fup{gr}%
+paragraphe \noexpand\S~% doit être suivi d'un numéro.
+recto r\noexpand\fup{o}%
+verso v\noexpand\fup{o}%
+
+{Académie} Acad.%
+adjectif adj.%
+{Administration} Admin.%
+ancien anc.%
+annexe ann.% from LG 2002/02/21
+{Antiquité} Antiq.%
+appendice append.%
+après apr.%
+archives arch.%
+archéologie archéol.%
+arithmétique arithm.%
+arrondissement arr.%
+article art.%
+astronomie astron.%
+avant av.%
+avenue av.% from LG 2002/02/21
+bibliographie bibliogr.%
+bibliothèque bibl.% from LG 2002/02/21
+biologie biol.%
+botanique bot.%
+boulevard bd%
+bulletin bull.%
+cad \noexpand\hbox{c.-à-d.}%
+chapitre chap.%
+chef-lieu ch.-l.%
+chronologie chronol.%
+circulaire circ.%
+circonscription circonscr.%
+{Code civil} C.civ.%
+{Code pénal} C.pén.%
+*collaborateur coll.%
+collection coll.%
+colonne col.% from LG 2002/02/21
+commandeur C.% from LG 2002/02/21
+département dép.%
+dictionnaire dict.%
+document doc.%
+{Est} E%
+*éditeur éd.% * from LG 2002/02/21
+*édition éd.% * from LG 2002/02/21
+environ env.%
+épitre ép.%
+épilogue épil.%
+établissements Éts%
+étymologie étym.%
+exemple ex.%
+expéditeur exp.% from LG 2002/02/21
+fascicule fasc.%
+faubourg fg%
+féminin fém.%
+feuillet f.%
+figure fig.%
+Frère F.% from LG 2002/02/21
+géographie géogr.%
+géologie géol.%
+géométrie géom.%
+graphique graph.%
+gravure grav.%
+habitants hab.%
+hauteur haut.%
+iconographie iconogr.%
+*illustration illustr.% 21/01/2002 2017-04-20 sans s final rj
+inférieur inf.%
+introduction introd.%
+invariable invar.%
+italique ital.%
+juridique jur.%
+jurisprudence jur.%
+*ligne l.% 21/01/2002
+largeur larg.%
+latitude lat.%
+librairie libr.%
+livre liv.%
+locution loc.%
+longitude long.%
+longueur long.%
+manuscrit ms.%
+manuscrits mss.%
+masculin masc.%
+mathématiques math.%
+maximum max.% from LG 2002/02/21
+mécanique mécan.%
+mémoire mém.%
+musique mus.%
+mythologie myth.%
+{Nord} N%
+nouveau nouv.%
+nouvelle nouv.%
+numismatique numism.%
+officier O.% from LG 2002/02/21
+{Ouest} O% from LG 2002/02/21
+ouvrage ouvr.%
+*page p.% 21/01/2002
+partie part.%
+Père P.% from LG 2002/02/21
+photographie phot.%
+physique phys.%
+*planche pl.% 21/01/2002
+relié rel.% from LG 2002/02/21
+reliure rel.%
+rédaction réd.
+route rte% from LG 2002/02/21
+{Sud} S.%
+science sc.%
+scène sc.%
+section sect.%
+{Saint} St%
+{Saints} Sts%
+{Sainte} Ste%
+{Saintes} Stes%
+section sect.% from LG 2002/02/21
+siècle s.% from LG 2002/02/21
+{société} sté% 21/01/2002
+{Société} Sté% Yves Perrousseaux 2001/08/03
+substantif subst.%
+*suivant suiv.% 21/01/2002
+*suivante suiv.% 21/01/2002
+supèrieur sup.% from LG 2002/02/21
+supplément suppl.%
+téléphone tél.% Yves Perrousseaux 2001/08/03
+tome t.% from LG 2002/02/21
+traducteur trad.%
+traduction trad.%
+variante var% from LG 2002/02/21
+vers v.% from LG 2002/02/21
+voir V% from LG 2002/02/21
+volume vol.%
+
+% Unités légales :
+
+*ampère A%
+*are a%
+*bel B% from LG 2002/02/21
+*candela cd% from LG 2002/02/21
+centi c% from LG 2002/02/21
+*centiare ca%
+*centigramme cg%
+*centilitre cl%
+*centimètre cm%
+déca da% from LG 2002/02/21
+*décalitre dal%
+dècamètre dam%
+déci d% from LG 2002/02/21
+décibel dB%
+décigramme dg% from LG 2002/02/21
+décilitre dl% from LG 2002/02/21
+*franc F%
+giga G% from LG 2002/02/21
+*grade gr%
+*gramme g%
+*hectare ha%
+hect h% from LG 2002/02/21
+*hectogramme hg%
+*hectolitre hl%
+*hectomètre hm%
+*hertz Hz% from LG 2002/02/21
+*heure h%
+*jour j%
+*kelvin K% from LG 2002/02/21
+kilo k% from LG 2002/02/21
+*kilogramme kg%
+*kilohertz kHz% from LG 2002/02/21
+*kilomètre km%
+*kilovoltampère kVA% from LG 2002/02/21
+*kilowatt kW%
+kilowatt-heure kWh%
+kilowatts-heure kWh%
+*litre l%
+lux lx% from LG 2002/02/21
+méga M% from LG 2002/02/21
+*mégahertz MHz% from LG 2002/02/21
+*mètre m%
+% micro est a introduire qd on aura \mu en romain droit.
+milli m% from LG 2002/02/21
+*millibar mbar%
+*milligramme mg% from LG 2002/02/21
+*millilitre ml%
+*millimètre mm%
+*milliseconde ms% from LG 2002/02/21
+*minute min%
+*mole mol% from LG 2002/02/21
+nano n% from LG 2002/02/21
+*nanoseconde nc% from LG 2002/02/21
+*newton N% from LG 2002/02/21
+*pascal Pa% from LG 2002/02/21
+pico p% from LG 2002/02/21
+*picoseconde ps% from LG 2002/02/21
+quintal q% from LG 2002/02/21
+quintaux q% from LG 2002/02/21
+*radian rad% from LG 2002/02/21
+*seconde s%
+*stère st%
+téra T% from LG 2002/02/21
+*thermie th% from LG 2002/02/21
+*tonne t%
+*volt V%
+*watt W%
+*wattheure Wh% from LG 2002/02/21
+
+% Excerpt from ``Lexique des règles typographiques en usage a l'Imprimerie
+% nationale'', Abréviations, p7-11 and few additions.
+% plus other usual (referenced) names.
diff --git a/language/french/e-french/texmf/tex/frabbrev.tex b/language/french/e-french/texmf/tex/frabbrev.tex
new file mode 100644
index 0000000000..c72ca8c6b6
--- /dev/null
+++ b/language/french/e-french/texmf/tex/frabbrev.tex
@@ -0,0 +1,297 @@
+% frabbrev.tex file (French typographic abbreviations)
+% should always be used in 8bit format (generated from
+% fxabbrev.tex which is full ASCII 7bit)
+%
+% After Bernard Gaulle's decease this work is now maintained as
+% the e-French project by a group of enthusiast users
+% under LPPL copyright as declared in http://www.efrench.org/
+%
+% Don't change this to a 7bits coding except if you are using 7bits input
+%
+% History of mods:
+% ===============
+% - Change \^i into î_ --bg 01/16/92
+% - Added shorten "cad" (remark coming from Jacques Andre) --bg 02/07/92
+% - paragraph sign (\S) followed by a tilde --bg 05/15/92
+% - recoded to 8bits --bg 08/24/92
+% - add second, seconds, premiers, premières, troisièmes...
+% numéros, Numéros and pages.
+% --bg 01/12/93
+% - strings containing a space must be within a group. --bg 98/05/15
+% - THE FIRST LETTER IS NO MORE TESTED except if the string is
+% within braces. Thus, any string beginning whith an uppercase
+% letter should be enclosed within braces. --bg 1999/11/08
+% - f8abbrev.tex and frabbrev.850 definitely removed.
+% f7abbrev.tex rename fxabbrev.tex --bg 2000/06/14
+% - few adds coming from Yves Perrousseaux' book on typo. --bg 2001/08/03
+% - corrections for second(s) and seconde(s). --bg 2001/09/20
+% - * facility added for plurals ==> 6 changes.
+% - legal units added and few other names.
+% HAPPY 10 YEARS ANNIVERSARY! --bg 2001/01/21
+% - abbrev. from Louis Guéry from CFPJ. --bg 2002/02/21
+%%
+%% checksum = "20285 297 1013 10463"
+%%
+
+% Checked name Replacement
+% ============ ===========
+%
+% Notice that when the checked name is inside braces all that name
+% should be equal to "name" otherwise the first letter is not checked.
+% If checked name begins with "*" then "_name_" and "_name_s" will
+% be checked, the replacement name is the same in the two cases.
+%
+% NB: All macros have to be not expanded.
+
+premier 1\noexpand\ier%
+premiers 1\noexpand\iers%
+première 1\noexpand\iere%
+premières 1\noexpand\ieres%
+deuxième 2\noexpand\ieme%
+deuxièmes 2\noexpand\iemes%
+second 2\noexpand\fup{d}%
+seconds 2\noexpand\fup{ds}%
+seconde 2\noexpand\fup{de}%
+secondes 2\noexpand\fup{des}%
+troisième 3\noexpand\ieme%
+troisièmes 3\noexpand\iemes%
+quatrième 4\noexpand\ieme%
+quatrièmes 4\noexpand\iemes%
+
+primo \noexpand\quando{1}%
+secundo \noexpand\quando{2}%
+tertio \noexpand\quando{3}%
+quarto \noexpand\quando{4}%
+quinto \noexpand\quando{5}%
+sexto \noexpand\quando{6}%
+septuno \noexpand\quando{7}%
+octavo \noexpand\quando{8}%
+nono \noexpand\quando{9}%
+decimo \noexpand\quando{10}%
+
+{Numéro} \noexpand\Numero%
+{Numéros} \noexpand\Numeros%
+numéro \noexpand\numero%
+numéros \noexpand\numeros%
+
+monsieur M.%
+messieurs MM.%
+mademoiselle M\noexpand\fup{lle}%
+mesdemoiselles M\noexpand\fup{lles}%
+madame M\noexpand\fup{me}%
+mesdames M\noexpand\fup{mes}%
+maître M\noexpand\fup{e}%
+maîtres M\noexpand\fup{es}%
+
+{Compagnie} c\noexpand\fup{ie}%
+canton C\noexpand\fup{on}%
+docteur D\noexpand\fup{r}%
+folio f\noexpand\fup{o}%
+folios f\noexpand\fup{os}%
+monseigneur M\noexpand\fup{gr}%
+paragraphe \noexpand\S~% doit être suivi d'un numéro.
+recto r\noexpand\fup{o}%
+verso v\noexpand\fup{o}%
+
+{Académie} Acad.%
+adjectif adj.%
+{Administration} Admin.%
+ancien anc.%
+annexe ann.% from LG 2002/02/21
+{Antiquité} Antiq.%
+appendice append.%
+après apr.%
+archives arch.%
+archéologie archéol.%
+arithmétique arithm.%
+arrondissement arr.%
+article art.%
+astronomie astron.%
+avant av.%
+avenue av.% from LG 2002/02/21
+bibliographie bibliogr.%
+bibliothèque bibl.% from LG 2002/02/21
+biologie biol.%
+botanique bot.%
+boulevard bd%
+bulletin bull.%
+cad \noexpand\hbox{c.-à-d.}%
+chapitre chap.%
+chef-lieu ch.-l.%
+chronologie chronol.%
+circulaire circ.%
+circonscription circonscr.%
+{Code civil} C.civ.%
+{Code pénal} C.pén.%
+*collaborateur coll.%
+collection coll.%
+colonne col.% from LG 2002/02/21
+commandeur C.% from LG 2002/02/21
+département dép.%
+dictionnaire dict.%
+document doc.%
+{Est} E%
+*éditeur éd.% * from LG 2002/02/21
+*édition éd.% * from LG 2002/02/21
+environ env.%
+épitre ép.%
+épilogue épil.%
+établissements Éts%
+étymologie étym.%
+exemple ex.%
+expéditeur exp.% from LG 2002/02/21
+fascicule fasc.%
+faubourg fg%
+féminin fém.%
+feuillet f.%
+figure fig.%
+Frère F.% from LG 2002/02/21
+géographie géogr.%
+géologie géol.%
+géométrie géom.%
+graphique graph.%
+gravure grav.%
+habitants hab.%
+hauteur haut.%
+iconographie iconogr.%
+*illustration illustr.% 21/01/2002 2017-04-20 sans s final rj
+inférieur inf.%
+introduction introd.%
+invariable invar.%
+italique ital.%
+juridique jur.%
+jurisprudence jur.%
+*ligne l.% 21/01/2002
+largeur larg.%
+latitude lat.%
+librairie libr.%
+livre liv.%
+locution loc.%
+longitude long.%
+longueur long.%
+manuscrit ms.%
+manuscrits mss.%
+masculin masc.%
+mathématiques math.%
+maximum max.% from LG 2002/02/21
+mécanique mécan.%
+mémoire mém.%
+musique mus.%
+mythologie myth.%
+{Nord} N%
+nouveau nouv.%
+nouvelle nouv.%
+numismatique numism.%
+officier O.% from LG 2002/02/21
+{Ouest} O% from LG 2002/02/21
+ouvrage ouvr.%
+*page p.% 21/01/2002
+partie part.%
+Père P.% from LG 2002/02/21
+photographie phot.%
+physique phys.%
+*planche pl.% 21/01/2002
+relié rel.% from LG 2002/02/21
+reliure rel.%
+rédaction réd.
+route rte% from LG 2002/02/21
+{Sud} S.%
+science sc.%
+scène sc.%
+section sect.%
+{Saint} St%
+{Saints} Sts%
+{Sainte} Ste%
+{Saintes} Stes%
+section sect.% from LG 2002/02/21
+siècle s.% from LG 2002/02/21
+{société} sté% 21/01/2002
+{Société} Sté% Yves Perrousseaux 2001/08/03
+substantif subst.%
+*suivant suiv.% 21/01/2002
+*suivante suiv.% 21/01/2002
+supèrieur sup.% from LG 2002/02/21
+supplément suppl.%
+téléphone tél.% Yves Perrousseaux 2001/08/03
+tome t.% from LG 2002/02/21
+traducteur trad.%
+traduction trad.%
+variante var% from LG 2002/02/21
+vers v.% from LG 2002/02/21
+voir V% from LG 2002/02/21
+volume vol.%
+
+% Unités légales :
+
+*ampère A%
+*are a%
+*bel B% from LG 2002/02/21
+*candela cd% from LG 2002/02/21
+centi c% from LG 2002/02/21
+*centiare ca%
+*centigramme cg%
+*centilitre cl%
+*centimètre cm%
+déca da% from LG 2002/02/21
+*décalitre dal%
+dècamètre dam%
+déci d% from LG 2002/02/21
+décibel dB%
+décigramme dg% from LG 2002/02/21
+décilitre dl% from LG 2002/02/21
+*franc F%
+giga G% from LG 2002/02/21
+*grade gr%
+*gramme g%
+*hectare ha%
+hect h% from LG 2002/02/21
+*hectogramme hg%
+*hectolitre hl%
+*hectomètre hm%
+*hertz Hz% from LG 2002/02/21
+*heure h%
+*jour j%
+*kelvin K% from LG 2002/02/21
+kilo k% from LG 2002/02/21
+*kilogramme kg%
+*kilohertz kHz% from LG 2002/02/21
+*kilomètre km%
+*kilovoltampère kVA% from LG 2002/02/21
+*kilowatt kW%
+kilowatt-heure kWh%
+kilowatts-heure kWh%
+*litre l%
+lux lx% from LG 2002/02/21
+méga M% from LG 2002/02/21
+*mégahertz MHz% from LG 2002/02/21
+*mètre m%
+% micro est a introduire qd on aura \mu en romain droit.
+milli m% from LG 2002/02/21
+*millibar mbar%
+*milligramme mg% from LG 2002/02/21
+*millilitre ml%
+*millimètre mm%
+*milliseconde ms% from LG 2002/02/21
+*minute min%
+*mole mol% from LG 2002/02/21
+nano n% from LG 2002/02/21
+*nanoseconde nc% from LG 2002/02/21
+*newton N% from LG 2002/02/21
+*pascal Pa% from LG 2002/02/21
+pico p% from LG 2002/02/21
+*picoseconde ps% from LG 2002/02/21
+quintal q% from LG 2002/02/21
+quintaux q% from LG 2002/02/21
+*radian rad% from LG 2002/02/21
+*seconde s%
+*stère st%
+téra T% from LG 2002/02/21
+*thermie th% from LG 2002/02/21
+*tonne t%
+*volt V%
+*watt W%
+*wattheure Wh% from LG 2002/02/21
+
+% Excerpt from ``Lexique des règles typographiques en usage a l'Imprimerie
+% nationale'', Abréviations, p7-11 and few additions.
+% plus other usual (referenced) names.
diff --git a/language/french/e-french/texmf/tex/francais.mlp b/language/french/e-french/texmf/tex/francais.mlp
new file mode 100644
index 0000000000..a401a41dc0
--- /dev/null
+++ b/language/french/e-french/texmf/tex/francais.mlp
@@ -0,0 +1,43 @@
+% francais.mlp Usual configuration for French using the mlp package.
+% last mods: 2002/01/14%
+% mlp means The Multi-Lingual Package, an idea from --bg 97/11/03
+%
+% This file can be modified if the local or linguistic TeX users group
+% accepts the modifications.
+%
+% Group to get in touch for francais.mlp is: GUTenberg
+%
+\ProvidesFile{francais.mlp}%
+ [2002/01/14 french configuration file for mlp package]
+ \DeclareOption{allemand}{\@requirepackage{mlp-49}%
+ \PassOptionsToPackage{german}{mlp-49}%
+ }%
+ \DeclareOption{allemandn}{\@requirepackage{mlp-49n}%
+ \PassOptionsToPackage{ngerman}{mlp-49n}%
+ }%
+%\DeclareOption{alsacien}...
+ \DeclareOption{anglais}{\@requirepackage{mlp-01}% for US english
+ \PassOptionsToPackage{english}{mlp-01}%
+ }%
+\DeclareOption{autrichien}{\@requirepackage{mlp-49}%
+ \PassOptionsToPackage{german}{mlp-49}%
+ }%
+\DeclareOption{autrichienn}{\@requirepackage{mlp-49n}%
+ \PassOptionsToPackage{ngerman}{mlp-49}%
+ }%
+%\DeclareOption{basque}...
+%\DeclareOption{breton}...
+ \DeclareOption{francais}{\@requirepackage{mlp-33}%
+ \PassOptionsToPackage{french}{mlp-33}%
+ }%
+ \DeclareOption{acadien}{\@requirepackage{mlp-33}%
+ \PassOptionsToPackage{french}{mlp-33}%
+ }%
+ \DeclareOption{canadien}{\@requirepackage{mlp-33}%
+ \PassOptionsToPackage{french}{mlp-33}%
+ }%
+\DeclareOption{hollandais}{\@requirepackage{mlp-31}%
+ \PassOptionsToPackage{dutch}{mlp-31}%
+ }%
+\AtBeginDocument{\beginlanguage}%
+%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/tex/french-msg.tex b/language/french/e-french/texmf/tex/french-msg.tex
new file mode 100644
index 0000000000..7db46b5431
--- /dev/null
+++ b/language/french/e-french/texmf/tex/french-msg.tex
@@ -0,0 +1,206 @@
+% File french-msg.tex (messages issued by the FrenchPro package)
+\msgheader{-\msgid-\space}
+\msg{1}{the #1 macro already exists}{}
+\msg{2}{#1 file not found.}{}
+\msg{3}{\frenchpack\space is not active here\string!}{}
+\msg{4}{entering now "Poor-Man-French-Style" way}{}
+\msg{5}{the lettrine definition is wrong}{}
+\msg{6}{check again the lettrine code}{}
+\msg{7}{the lettrine is reduced to a lonely letter}{}
+\msg{8}{\string\footnotetext{#1} lost %
+ \MessageBreak %
+ Code event. \string\protect\string\footnote}{}
+\msg{9}{Corrupted/absent language.dat file}{}
+\msg{10}{french package not loaded}{}
+\msg{11}{applying the \string<\string< frpatch \string>\string> #1}{}
+\msg{12}{frpatch.sty is out of date, delete the file}{}
+\msg{13}{the character "#1" is already activated}{}
+\msgheader{-13-\space}
+\msg{13b}{double punctuation is then disactivated}{}
+\msgheader{-\msgid-\space}
+\msg{14}{closing not opened guillemets}{}
+\msg{15}{the language \frenchname\space is numbered \the\language}{}
+\msg{16}{the English language\space is numbered \the\language}{}
+\msg{17}{\string\wrongtypedspaces\space not running %
+ in this context}{}
+\msg*{18}{\frenchname.sty is forcing the \string\nofrenchguillemets\space %
+ option in math with AmSLaTeX.}{}
+\msg{19}{using the internal language number \the\language}{}
+\msg*{20}{WARNING\string: the French language is undefined in your format.}{}
+\msg*{20b}{\frenchname.sty\string: the French language is undefined %
+ (ERROR\string!)}{}
+\msg{21}{#1 is not defined}{}
+\msg{22}{abbreviation of \string"#1\string" not found}{}
+\msg*{23}{Package\string: \frenchpack\space\frenchstyleid%
+ \space(B.Gaulle)}{}
+\msg{24}{\frenchname.sty is using, in this document, the font encoding %
+ \f@encoding.}{}%
+\msg{25}{\frenchname.sty is issuing his messages in %
+ \ifEightBitOutput8bits.\else7bits mode %
+ "a la TeX".\fi %
+ ^^J}{}
+\msg{26}{Error found in \frenchname.sty\string! %
+ \MessageBreak %
+ (look at e.g. the language.dat file)}{}
+\msg*{27}{\frenchname.sty\string: language \l@no\space (#1) was initially %
+ (at initex) numbered \csname l@#1\endcsname\space(ERROR\string!)}{}
+\msg{28}{WARNING\string: TeX Version 2 don't allow to use the %
+ 8bits chars with diacritics}{}
+\msg*{29}{***Warning***\string: TeX engine in use along with CM fonts %
+ \MessageBreak %
+ (as in current TeX format) isn't sufficient to hyphenate %
+ \MessageBreak %
+ words containing diacritics (like in French).}{}
+\msg{30}{ERROR\string! %
+ Something wrong\string! your TeX engine can't hyphenate correctly %
+ \MessageBreak %
+ french words with diacritics *in that current font* or %
+ encoding}{}
+\msg{31}{Wrong French Hyphenation\string! %
+ Are you sure to run with a format *********** %
+ \MessageBreak %
+ in which the french patterns were %
+ installed at initex time\string? ***********}{}
+\msg{32}{if yes try to switch to T1 font %
+ encoding (\string\usepackage[T1]{fontenc})***}{}
+\msg{33}{CHECK the list for hexadecimal TeX codes you can't display %
+ \MessageBreak %
+ and decide if they must be eliminated from \@kbencoding.kbc %
+ \MessageBreak %
+ assuming your ''locale'' settings are okay on your system.}{}
+\msg{34}{this file and other auxiliary files require to %
+ use the following %
+ \MessageBreak %
+ LaTeX packages\string: \frenchpack\string! %
+ \MessageBreak %
+ check \string\usepackage\space or remove these files. %
+ Typesetting is aborted\string!}{}
+\msg{35}{kbconfig\string: Redefining \string ^\string ^\string Y uccode. %
+ \MessageBreak %
+ kbconfig\string: Redefining \string ^\string ^\string Z uccode.}{}
+\msg{36}{ERROR\string: invalid name of LaTeX format %
+ (\string\fmtname). %
+ \MessageBreak %
+ CORRECT it to\string: \string\fmtname=LaTeX2e\space %
+ or ancient name.}{}
+\msg{36b}{ERROR\string: non standard LaTeX format %
+ (\string\fmtname)}{}
+\msg{37a}{ERROR\string: the french package is already active here.}{}
+\msg{37b}{ERROR\string: the french package is stll not active here.}{}
+\msg{38}{The language #1 is used as language number \the\workl@.}{}
+\msg{39}{Error\string: file language.dat not found, trying to load %
+ US-english hyphenation file}{}
+\msg*{40}{Writing kb8to7.lex and kb7to8.lex}{}
+\msg{41}{your format is out of date, please run initex again\string!}{}
+\msg{42}{The \frenchname\space patch file (frpatch.sty) is not suitable %
+ \MessageBreak %
+ for this version of the "\frenchpack" package dated \FSfd}{}
+\msg{43}{french.all is LOADED^^J}{}
+\msg{44}{ERROR the command \LaMacro\space is undefined\string!}{}
+\msg{45}{executing \LaMacro}{}
+\msg{46}{This commande is already defined in \frenchname.sty %
+ \MessageBreak %
+ Possible problem with \frenchpack\space (\Aboi #1 macro)}{}
+\msg*{47}{i must stop because your TeX engine is unable to %
+ generate 8bit output codes, sorry\string!}{}
+\msg{48}{Reading the configuration file of \frenchpack}{}
+\msg{49}{closing the guillemets too early}{}
+\msg{50}{Error\string: the french language is undefined in %
+ language.dat file.}{}
+\msg{51}{ERROR\string: this document was not converted to 8bit...}{}
+\msg*{52}{Error\string: the \frenchpack\space package doesn't run in %
+ such minimal document class, sorry\string!}{}
+\msg{53}{the guillemets environment is not usable with %
+ \MessageBreak %
+ the \string\noeveryparguillemets\space option}{}
+\msg{54}{ERROR\string: \string\unusedslot\space (\unusedslot) is invalid}{}
+\msg{55}{ERROR \string\unusedslot\space character %
+ (\@unusedslot) is not activated.}{}
+\msg*{56}{Processed 8bits characters are\string:}{}
+\msg{57}{keyboard package #1 loaded for the font encoding %
+ \f@encoding.^^J}{}
+\msg{58}{value of #1 ignored}{}
+\msg*{59}{FATAL ERROR\string: unusual strange text generated.}{}
+\msg{60}{dot missing after \string\etc}{}
+\msg{61}{hyph\hyphchar.tex file not found.}{}
+\msg{62}{additional hyphenation file loading %
+ for \hyphchar\space fonts with specific hyphen char}{}
+\msg{63}{french.sty or frenchle.sty files not found. %
+ \MessageBreak %
+ Check if files exist somewhere in your system.}{}
+\msg{64}{ERROR\string: invalid \string\fmtname\space in lplain.tex}{}
+\msg{65}{\frenchname.sty is loading the translations %
+ for bibliography \string:}{}
+\msg*{66}{ERROR\string! This file can't be typeset without any input %
+ \MessageBreak %
+ encoding declaration (look at keyboard or inputenc packages.)}{}
+\msg*{67}{WARNING it seeems your are using inputenc and keyboard, %
+ please chose\string!}{}
+\msg*{68}{ERROR\string: \frenchpack\space is no more running %
+ with 2.09 emulation, sorry\string!}{}
+\msg{69}{kbconfig\string: Intercepting the dump control sequence for %
+ eliminating few invalid chars.}{}
+\msg{70}{kbconfig\string: modifying \string\@tabacckludge\space for math.}{}
+\msg{71}{WARNING\string: if babel is used,%
+ \MessageBreak
+ specify option \frenchname(pro/le)}{}
+\msg{72}{kbconfig\string: utf8 encoding can't be completed with plain\string! %
+ \MessageBreak %
+ kbconfig\string: continuing with no Unicode characters.}{}
+\msg*{73}{\frenchname.sty was loaded too early\string!}{}
+\msg*{74}{ERROR, keyboard package loaded after %
+ \frenchpack!}{}
+\msg{75}{kbconfig\string: utf8 encoding not found via inputenc %
+ package\string! %
+ \MessageBreak %
+ kbconfig\string: continuing with no Unicode characters.}{}
+\msg{76}{kbconfig\string: no language dependencies available within %
+ Plain TeX\string!}{}
+\msg{77}{No #1\space characters defined for English.}{}
+\msg*{78}{ERROR\string: noutf8 option clash.}{}
+\msg*{79}{keyboard.sty\string: no local option given, %
+ no utf8 coding.}{}
+\msg{80}{Babel is willing to load the \CurrentOption\space option %
+ \MessageBreak but the mlp package is already loaded, %
+ please choose %
+ \MessageBreak either mlp with \CurrentOption\space option, %
+ \CurrentOption\space alone %
+ \MessageBreak or babel with \CurrentOption\space option}%
+ {\help{just remove the superfluous package or option.}}
+\msg*{81}{WARNING\string: "msg" package not found\string; %
+ \MessageBreak continuing without message texts}{}
+\msg{82}{command \LaMacro\space is not defined now}{}
+\msg{83}{Testing macros before \string\begin{document}^^J}{}
+\msg{84}{Now testing again but AFTER \string\begin{document}^^J}{}
+\msg{85}{Warning\string: the fixlanguage option %
+ was not provided at the babelbib call}{}
+\msg{86}{keyboard.sty\string: %
+ The mltex feature is nullified due to the #1\space option.}{}
+\msg{87}{ERROR\string: %
+ \MessageBreak %
+ babelbib should only be used with babel}{}
+\msg{88}{No characters defined %
+ \MessageBreak %
+ by keyboard encoding change to `utf8'\MessageBreak}{}
+\msg{89}{kbconfig\string: Keyboard character used is undefined\MessageBreak %
+ in keyboard encoding `utf8'}%
+ {You need to provide a definition with %
+ \noexpand\DeclareInputText\MessageBreak or %
+ \noexpand\DeclareInputMath before using this key.}
+\msg{90}{Invalid Unicode char value \string < 00A0}{\@eha}
+\msg{91}{Unicode char #1 not set up\space %
+ for use with LaTeX}{\@eha}
+\msg{92}{Yous should either\string:\MessageBreak %
+ - use an engine with the MlTeX option, or\MessageBreak %
+ - switch to font encoding T1 as default.}{}
+\msg*{93}{You are using two French options for Babel, %
+ \MessageBreak %
+ please choose only one.}{}
+\msgheader{-**-\space}
+\msg*{**a}{\frenchpack\space serial number is *\@FrVal*.}{}
+\msg*{**b}{\@FrVal\space of \frenchpack.}{}
+\msgheader{}
+\msg{*}{the message \msgid\space is unknown in the \frenchname\space %
+ package}{}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
diff --git a/language/french/e-french/texmf/tex/french.all b/language/french/e-french/texmf/tex/french.all
new file mode 100644
index 0000000000..c3e7aeb788
--- /dev/null
+++ b/language/french/e-french/texmf/tex/french.all
@@ -0,0 +1,39 @@
+% This is the french test to check if all french macros exist and are running.
+% After Bernard Gaulle's decease this work is now maintained as
+% the e-French project by a group of enthusiast users
+% under LPPL copyright as declared in http://www.efrench.org/
+%
+% rev. 2002/04/25
+{\catcode`\]=13\def]{}
+ \message{-43- french.all now LOADED^^J}
+\def\DmyDeF#1{\def\LaMacro{\expandafter\noexpand\csname#1\endcsname}
+ \message{^^J}
+ \expandafter\ifx\csname#1\endcsname\relax
+ \message{-44- ERRROR command \LaMacro is undefined!}
+ \else
+ \message{-45- executing \LaMacro}
+ \phantom{\expandafter\csname#1\endcsname\relax}
+ \fi
+ }%
+\def\Dmydef#1,#2]{\DmyDeF{#1}%
+ \def\temp{#2}\ifx\temp\empty\let\Dmydef\relax\fi%
+ \Dmydef#2]}%
+\def\dummydef[{\Dmydef}%
+% Here are all the french defs names
+\def\>{>}\def\<{<}\def\!{!}% simulation
+% following code can't be executed asis
+\ifx\frenchtest\undefined\else\let\frenchtest\empty\fi
+\ifx\frenchdoc\undefined\else\let\frenchdoc\empty\fi
+\ifx\figurette\undefined\else\let\figurette\empty\fi
+\ifx\endfigurette\undefined\else\let\endfigurette\empty\fi
+\ifx\GOfrench\undefined\else\let\GOfrench\empty\fi
+\ifx\vert\undefined\else\let\vert\empty\fi
+\ifx\tilde\undefined\else\let\tilde\empty\fi
+\ifx\originaloutput\undefined\else\let\originaloutput\empty\fi
+\ifx\unnumberedcaptions\undefined\else\let\unnumberedcaptions\empty\fi
+\ifx\kbIO\undefined\else\let\kbIO\empty\fi
+\ifx\nombre\undefined\else\let\nombre\empty\fi
+\def\@kbtypeout[#1]#2{}
+\input french.cmd % load all french cmd names
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/tex/french.cfg b/language/french/e-french/texmf/tex/french.cfg
new file mode 100644
index 0000000000..fe84835821
--- /dev/null
+++ b/language/french/e-french/texmf/tex/french.cfg
@@ -0,0 +1,12 @@
+% les options suivantes (conseillées) par défaut :
+\abbreviations
+\disallowuchyph
+\overfullhboxmark
+% on peut réactiver \tthyphenation si nécessaire
+%\tthyphenation % doit être désactivé pour XeLaTeX
+\tabbingaccents
+\automaticlettrine
+% désactivez les options de frenchle pour '«' et '»' !
+% test eFrench = {\befr} ce n'était qu'un essai
+%\newcommand{\fbefr}{{\footnotesize E}F{\footnotesize RENCH}}
+%\DeclareRobustCommand{\befr}{\fbefr}
diff --git a/language/french/e-french/texmf/tex/french.chk b/language/french/e-french/texmf/tex/french.chk
new file mode 100644
index 0000000000..279b0e7f09
--- /dev/null
+++ b/language/french/e-french/texmf/tex/french.chk
@@ -0,0 +1,55 @@
+% This is the french style check file (that check french cs & issue a warning)
+% After Bernard Gaulle's decease this work is now maintained as a part of
+% the e-French project by a group of enthusiast users
+% under LPPL copyright as declared in http://www.efrench.org/
+%
+% to be used only to see if a document is french-style compatible
+%
+% rev. 2005/05/17
+\catcode`\/=0{\catcode`/\=12/gdef/Aboi{/string\}}%}emacs+TeX
+/catcode`/\=0\catcode`\/=12\catcode`\@=11
+% THERE IS A LOOP when using the msg package thus
+\let\kbBissue\relax% i don't use it.
+% Localisation code for numbered \typeout: "\kbBissue% localise it."
+% For debugging one can remove "msg" access, just uncomment
+%\let\kbBissue\relax% this line.
+ \ifx\kbBissue\undefined%
+% Firstly we add the material to use the "msg" package for localization.
+ \def\kb@issue#1#2{\kb@issue@[#1]#2\void}% The local \issuemsg macro.
+ % which will call the real one;
+ % #1 is the macro message required.
+ % #2 is the message header + msg number
+ % such as "^^J -234-", just message
+ % number (234) is kept.
+ \let\kbBissue\kb@issue%
+ \def\kb@issue@[#1]#2-#3-#4\void{\issuemsg[#1]#3(french)}%
+ \ifx\issuemsg\undefined\let\kbBissue\relax\let\typeouA\typeout\fi%
+ \fi%
+%
+\catcode`\@=12
+{\catcode`\]=13\def]{}
+\gdef\ErrMsgF#1{%
+\ifx\kbBissue\relax%
+ \errhelp{-46- Cette commande est deja definie dans le style french}%
+% \errhelp{-46- Your command will be ignored, type <return> to proceed}%
+\fi%
+\kbBissue% localise it.
+ \errmessage{-46- Probleme eventuel avec FrenchPro (macro \Aboi #1)}}
+\def\DmyDeF#1{\expandafter\gdef\csname#1\endcsname{\ErrMsgF{#1}}}%
+\def\Dmydef#1,#2]{\DmyDeF{#1}%
+ \def\temp{#2}\ifx\temp\empty\let\Dmydef\relax\fi%
+ \Dmydef#2]}%
+\def\dummydef[{\Dmydef}%
+\input french.cmd %
+% the following for super-activated-characters
+\catcode`\"=\active
+\gdef"{{\def\Aboi{}\ErrMsgF{\string"}}}
+\catcode`<=\active\catcode`>=\active
+\gdef<{{\def\Aboi{}\ErrMsgF{\string<}}}
+\gdef>{{\def\Aboi{}\ErrMsgF{\string>}}}
+\catcode`<=12\catcode`>=12
+\gdef\EBCDICbrackets{\catcode`<=\active\catcode`>=\active}
+\gdef\noEBCDICbrackets{\catcode`<=12\catcode`>=12}
+\def\frenchTeXmods{\ErrMsgF{frenchTeXmods}}% normally unused by user
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/tex/french.cmd b/language/french/e-french/texmf/tex/french.cmd
new file mode 100644
index 0000000000..0bed3f9dfe
--- /dev/null
+++ b/language/french/e-french/texmf/tex/french.cmd
@@ -0,0 +1,89 @@
+% This is the list of all french macros introduced/modified by the french style
+%
+% After Bernard Gaulle's decease this work is now maintained as
+% the e-French project by a group of enthusiast users
+% under LPPL copyright as declared in http://www.efrench.org/
+%
+% to be used only for testing/debugging purposes.
+%
+% All pseudo standard titles cs (like \slidename) are omitted.
+% Just specific french macros are there.
+% rev. 2005/03/24
+\dummydef[french,english,frenchtest,frenchdoc,NouveauLangage,% % 5
+beginlanguage,inferieura,superieura,lqq,rqq,originalinput,% %10
+nonfrench,endnonfrench,frenchtypography,noTeXdots,TeXdots,% %15
+ancientguillemets,todayguillemets,guillemetsinallfonts,%18
+ guillemetsinroman,endguillemets,%20
+noenglishquote,englishquote,noenglishdoublequotes,englishdoublequotes,%24
+ untypedspaces,%25
+typedspaces,idotless,iwithdot,EBCDICbrackets,normalbrackets,% %30
+letpunctutionactivefor,wrongtypedspaces,nofrenchtypography,%33
+ frenchlayout,everyparguillemetsremoved,%35
+everyparguillemets,noeveryparguillemets,overfullhboxmark,%38
+ nooverfullhboxmark,labelsinmargin,%40
+nolabelsinmargin,Numeros,nopagenumbers,order,nofrenchlayout,% %45
+frenchtranslation,resume,sommaire,annexe,annexes,% %50
+glossaire,glossaires,printindex,see,seealso,% %55
+nofrenchtranslation,frenchmacros,dittomark,frenchname,ordinal,% %60
+keywords,endkeywords,motsclef,endmotsclef,pmfrench,% %65
+CheckSevenBits,frenchhyphenation,nofrenchhyphenation,hyphex,frhyphex,%%70
+letpunctuationactivefor,endfrench,prefacename,vert,tilde,% %75
+automaticlettrine,noautomaticlettrine,frenchguillemets,%78
+ nofrenchguillemets,wideletter,%80
+abbreviations,noabbreviations,nofrenchmacros,frenchstyleid,%84
+ originaloutput,%85
+abstract,endabstract,email,unnumberedcaptions,nowrongtypedspaces,% %90
+<,>,endorder,Ordinale,Ordinal,% %95
+allowuchyph,disallowuchyph,versatim,usualmessages,nohyphenation,% %100
+endversatim,tthyphenation,notthyphenation,!,tabbingaccents,% %105
+notabbingaccents,usersfrenchoptions,PS,yourref,ourref,% %110
+object,AllTeX,ordinale,guillemetsinarrays,noguillemetsinarrays,% %115
+pointvirgule,deuxpoints,pointexclamation,kbtypeout,%119
+ pointinterrogation,%120
+guillemets,regularmathcomma,frenchmathcomma,frenchwarnings,%124
+ nofrenchwarnings,%125
+frenchtrivsepwarnings,nofrenchtrivsepwarnings,emailname,fraddto,%129
+nombre,% %130
+frtrivseplengths,frlabelitems,checkitemguillemets,indentfirst,% %135
+nonindentfirst,kbIO,ConstantLayout,WindowsUnits,verbatimfile,% %140
+frenchpagestyle,nofrenchpagestyle,beginingfolio,nobeginingfolio,% %144
+ FileName,%145
+theFileName,frenchbguillemets,nofrenchbguillemets,%
+ FrenchGuillemetsFrom,CyrillicGuillemets,%150
+PolishGuillemets,LasyGuillemets,og,fg,% %154
+ %
+ % 154 commandes definies avant \begin{document}%
+ %----------------------------------------------%
+%
+%%%%%%%%%%%%%
+% Macros defined after \begin{document}
+%
+ier,iere,ieme,iers,ieres,% %005
+iemes,numeros,lettrinefont,degre,degres,% %010
+leftguillemets,rightguillemets,fup,primo,secundo,% %015
+tertio,quarto,quando,fsc,refmark,% %020
+moretolerance,Sauter,lsc,vers,formfoot,% %025
+formhead,figurette,endfigurette,printglossary,lettrine,% %030
+flettrine,at,chap,lettrinehang,lettrinefontname,% %035
+noresetatpart,etc,allowhyphens,captionfont,originalmathcomma,% %040
+frenchpack,halfnegthinspace,% 42
+ %
+ % 42 commandes definies apres \begin{document}%
+ %+ 154 commandes definies avant \begin{document}%
+ %= 196 commandes utilisables dans FrenchPro %
+% %-----------------------------------------------%
+%%%%%%%%%%%%
+%
+% Macros not entered in the list or removed
+%
+%GOfrench,% is not a user command
+%fguillemets,endfguillemets,%150 % removed 2000/03/08
+%languagename is defined by babel
+%slidename and listslidename will be in seminar too
+%notesname is already in endnotes
+%proofname is in AmS
+%No, % was it really defined in the past?
+%addto is defined by babel
+]}%
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/tex/french.dmy b/language/french/e-french/texmf/tex/french.dmy
new file mode 100644
index 0000000000..c3db0cf453
--- /dev/null
+++ b/language/french/e-french/texmf/tex/french.dmy
@@ -0,0 +1,70 @@
+% This is the french dummy style (that redefine all french cs as dummy)
+%
+% After Bernard Gaulle's decease this work is now maintained as
+% the e-French project by a group of enthusiast users
+% under LPPL copyright as declared in http://www.efrench.org/
+%
+% to be used only for testing/debugging purposes.
+%
+% rev. 2000/10/20
+%%
+%% checksum = "57290 67 195 2733"
+%%
+{\catcode`\]=13\def]{}
+\def\DmyDeF#1{\expandafter\gdef\csname#1\endcsname{\relax}}%
+\def\Dmydef#1,#2]{\DmyDeF{#1}%
+ \def\temp{#2}\ifx\temp\empty\let\Dmydef\relax\fi%
+ \Dmydef#2]}%
+\def\dummydef[{\Dmydef}%
+% Here are all the french defs names
+\ifx\french\undefined\let\french\relax\fi% %1
+\ifx\english\undefined\let\english\relax\fi% %2
+\input french.cmd %
+% The following is for commands used before \begin{document}
+% they must not produce any text.
+\def\email#1{}%
+%
+\global\let\dsORI\dospecials\gdef\dospecials{\do<\do>\dsORI}
+\catcode`<=\active\catcode`>=\active
+\gdef\EBCDICbrackets{% let << >> do a grouping
+ \catcode`<=\active\catcode`>=\active
+ \global\let\ifOG\iffalse
+ \gdef\NNouv<{\ifOG\else\bgroup\fi\global\let\ifOG\iftrue}
+ \gdef\NNfer>{\ifOG\egroup\fi\global\let\ifOG\iffalse}
+ \gdef<{\protect\myNo}\gdef>{\protect\myNf}
+ \gdef\myNo{\ifmmode\string<\else\NNouv<\fi}
+ \gdef\myNf{\ifmmode\string>\else\NNfer>\fi}
+}
+\gdef<{\string<}%
+\gdef>{\string>}% for use with 8bits << and >>
+\gdef\normalbrackets{\catcode`<=12\catcode`>=12
+ \global\let\dospecials\dsORI}
+\catcode`<=12\catcode`>=12
+\gdef\guillemets{<<}\gdef\endguillemets{>>}
+\gdef\guillemotleft{<<}\gdef\guillemotright{>>}
+\gdef\ref#1{??}% contents nullified (too much code to write)
+\gdef\special#1{}\def\cite#1{??}% ditto
+\gdef\Sauter#1Lignes{}%
+% the following to let LaTeX know about the order and versatim env.
+\global\let\order\itemize\global\let\endorder\enditemize
+{\catcode`\@=11\relax
+%\global\let\@sanORI\@sanitize\def\@sanitize{\@sanORI\@makeother<\@makeother>}
+\begingroup \catcode `| =0 \catcode `[ = 1 \catcode`] =2
+ \catcode `\{=12 \catcode `\}=12 \catcode`\\=12
+ |gdef|@xversatim#1\end{versatim}[#1|end[versatim]]
+ |endgroup% running macro for versatim
+\gdef\versatim{\let\@xverbatim\@xversatim\verbatim%
+ \def\endversatim{\endverbatim}}
+}
+%\global\let\vers\verb% c'est un pb pour 2e (invalid in argument)
+\global\let\vers\relax
+\let\BSori\backslash\def\backslash{\ifmmode\BSori\else$\BSori$\fi}
+\global\def\|{\backslash|}% used in french.tst as a backslash in a verb.
+\def\frenchTeXmods{}% normally unused by user
+\let\figurette\figure\let\endfigurette\endfigure
+\def\CheckSevenBits/#1/#2{}% no-op
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
diff --git a/language/french/e-french/texmf/tex/french.sty b/language/french/e-french/texmf/tex/french.sty
new file mode 100644
index 0000000000..ba3fea5a62
--- /dev/null
+++ b/language/french/e-french/texmf/tex/french.sty
@@ -0,0 +1,3282 @@
+% This file is a part of the e-French package.
+% For more details please read efrench.pdf and faq.pdf
+%\expandafter\ifx\csname frenchTeXmods\endcsname\relax% ---??
+%\else \endinput \fi% ---??
+\def\frenchname{french}%
+\def\frenchpack{e-french}% eFrench
+\def\ds@french{}%
+\def\ds@pmfrench{\pmfrench}%
+{\catcode`\@=11{%
+ \ifx\@unexpandable@protect\undefined\let\protect\empty%
+ \else\let\protect\@unexpandable@protect%
+ \fi%
+ \xdef\FSfd{31 mai 2019}% eFrench
+ \xdef\FSfv{V6,101}%
+ \xdef\frenchstyleid{\FSfv\space-- \FSfd\space --}%
+}}%
+ \edef\FSfd{2019/05/31}%
+\NeedsTeXFormat{LaTeX2e}[1996/12/01]%
+% > utf8 and NoEncode specialities
+\newif\ifeF@NoEnc %No encoding (XeTex, LuaLaTex)
+\expandafter\expandafter
+\expandafter\ifx\csname XeTeXrevision\endcsname\relax
+\else
+ \eF@NoEnctrue
+\fi
+%
+\newif\ifeF@LuaTeX
+\expandafter\ifx\csname lualatexversion\endcsname\relax
+\else
+ \eF@LuaTeXtrue \eF@NoEnctrue
+\fi
+\newif\ifeFr@Typo\eFr@Typotrue
+% In order having no encoding by messages declare this :
+ \let\kbencoding\@gobble
+% < utf8 and NoEncode specialities
+\let\auxWARNINGi=\@gobble%
+\def\@txt@msg#1{#1}%
+\def\@gobbleopt[#1]{}%
+\def\f@issue#1#2{#1{#2}\@ifnextchar[{\@gobbleopt}{}%
+ }%
+\def\@tempc{%
+\def\f@issue##1##2{\f@issue@[##1]##2\void}%
+ %
+ %
+ %
+ %
+\def\f@issue@[##1]##2-##3-##4\void{\issuemsg[##1]##3(french)}%
+\PassOptionsToPackage{french}{msg}%
+\ifx\LdfInit\@undefined%
+ \RequirePackage{msg}%
+\else%
+ \let\@GOfrench\@currname%
+ \xdef\@currname{msg}%
+ \def\intern@lc@llfrom{\frenchpack}%
+ \let\fp@languagename\languagename%
+ \ifx\documentclass\@twoclasseserror%
+ \def\languagename{french}%
+ \fi
+ \@@input msg.sty%
+ \let\languagename\fp@languagename%
+ \let\fp@languagename\undefined%
+ \let\intern@lc@llfrom\undefined%
+ \let\@currname\@GOfrench%
+\fi%
+ }%
+\def\@tempd{\def\f@issue##1##2{\@ifnextchar[{\@gobbleopt}{}%
+ }%
+ }%
+\edef\@tempa{\expandafter\noexpand\csname str-\jobname\endcsname}%
+\edef\@tempb{\expandafter\noexpand\csname str-frlicense\endcsname}%
+\ifx\@tempa\@tempb%
+\IfFileExists{msg.sty}{\@tempc}{\@tempd}\else%
+\IfFileExists{msg.sty}{\@tempc}{%
+ \typeout{^^J -81- WARNING: "msg" package not found;%
+^^J\space\space\space\space\space\space continuing without message texts.}%
+ }%
+\fi%
+\newif\ifECM%
+\def\ErrFrench{\f@issue\@fW{-26- %
+ %
+ %
+ }}%
+\def\ifFTY{\ErrFrench}\def\ifFTR{\ErrFrench}\def\ifFG{\ErrFrench}%
+\def\ifFLA{\ErrFrench}\def\ifFMA{\ErrFrench}\def\ifFH{\ErrFrench}%
+\def\ifArG{\ErrFrench}\def\ifFTSW{\ErrFrench}\def\ifFW{\ErrFrench}%
+\edef\GOfrench{`\string @}%
+\ifnum\catcode\GOfrench=11%
+ \let\resetat\relax%
+ \else\edef\resetat{\noexpand\catcode\GOfrench=\the\catcode\GOfrench}%
+ \makeatletter\fi%
+\let\@currnameORI\@currname%
+\xdef\@currname{\frenchname}%
+{\def\'{\string\'}%
+ \ProvidesPackage{\frenchname}%
+ [\FSfd\space The \frenchpack\space package /\FSfv/]%
+}%
+\def\GOfrench{babel}\ifx\@currnameORI\GOfrench%
+ \ifx\undefined\babel@core@loaded\input babel.def\relax\fi%
+ \ifx\undefined\babel@core@loaded%
+ \let\babel@core@loaded\main@language\fi%
+ \fi%
+\def\@tempa#1V#2,#3\@nil{\def\@FSfv{#2}}\expandafter\@tempa\FSfv\@nil%
+\let\FSfv=\undefined%
+\IfFileExists{frpatch.sty}{\def\FSfd@patch{unknown}}{\let\FSfd@patch\FSfd}%
+\if@compatibility%
+ \f@issue\typeout{^^J -68-
+ %
+ %
+ }\expandafter\stop%
+\fi%
+\ifeF@LuaTeX\relax\else
+\ifx\l@french\undefined\f@issue\typeout{^^J -20-
+ %
+ %
+ }%
+ \fi%
+\fi%
+\fontencoding{\encodingdefault}\selectfont%
+ \def\@temp@{OT1}\ifx\@temp@\f@encoding%
+ \def\@temp@{\global\ECMfalse}%
+ \else\def\@temp@{LO1}\ifx\@temp@\f@encoding%
+ \def\@temp@{\global\ECMfalse}%
+ \else%
+ \def\@temp@{\global\ECMtrue}%
+ \fi%
+ \fi%
+\@temp@%
+\def\@tempa{\let\ifEightBitOutput\iffalse}%
+\ifx\EightBitOutputfalse\undefined\expandafter\@tempa\fi%
+\ifECM\else\ifx\charsubdef\undefined%
+ \def\@tempa{\noexpand\dGs}%
+ \ifx\@tempa\dGs\else%
+ \ifx\@kb@msgXXIX\relax\else%
+ \f@issue\typeout{^^J -29- %
+ %
+ %
+ %
+ }%
+ \let\@kb@msgXXIX\relax%
+ \fi%
+ \fi%
+\fi\fi%
+\ifx\undefined\@dblarg%
+\long\def\@dblarg#1{\@ifnextchar[{#1}{\@xdblarg{#1}}}}%
+\long\def\@xdblarg#1#2{#1[{#2}]{#2}}%
+\fi%
+\newdimen\@FrDimen%
+\def\usualmessages{\let\ifEightBitOutput\iftrue}%
+ \ifnum\inputlineno=-1\def\@o@l{.}%
+ \else\def\@o@l{ (\`a la ligne \the\inputlineno).}\fi%
+ \expandafter\let\expandafter\@aiguORI\expandafter=%
+ \csname OT\string1\string\'\endcsname%
+ \expandafter\let\expandafter\@gravORI\expandafter=%
+ \csname OT\string1\string\`\endcsname%
+ \expandafter\let\expandafter\@acchORI\expandafter=%
+ \csname OT\string1\string\^\endcsname%
+ \expandafter\let\expandafter\@tremORI\expandafter=%
+ \csname OT\string1\string\"\endcsname%
+ \expandafter\let\expandafter\@cediORI\expandafter=%
+ \csname OT\string1\string\c\endcsname%
+\def\@PreserveBraces[#1#2]%
+ {\ifcat\noexpand#1$ #1#2\def\@temp@{}%
+ \else\def\@temp@{#2}%
+ \ifx\@temp@\empty\def\@temp@{#1}%
+ \else\def\@temp@{{#1#2}}\fi%
+ \fi\expandafter\@temp@}%
+\def\@temp@{lplain-bilingual}%
+\ifx\fmtname\@temp@\f@issue\typeout{-64- %
+ \@txt@msg{ERROR: invalid \string\fmtname\space in lplain.tex}%
+ }\stop\fi%
+%% code to test the shareware licence suppressed eFrench
+\let\@tempc\relax%
+\ifx\today\undefined\let\today\cejour\fi%
+\ifx\today\undefined\f@issue\typeout{^^J -52- %
+ %
+ %
+ }\expandafter\stop%
+\fi%
+{\def\GOfrench{\global\let\ifEightBitOutput\iffalse}%
+ \let\add@accent\@gobble\edef\@tempa{\`{}}%
+ \def\@tempb{{\setbox \@tempboxa \hbox {}\accent 18 }}%
+ \ifx\@tempa\@tempb%
+ \expandafter%
+ \GOfrench%
+ \fi%
+}%
+\def\@fW#1{{\let\@nobraces\@firstofone%
+ \ifEightBitOutput%
+ \setbox\@tempboxa\hbox{\`\space}%
+ \ifx\charsubdef\undefined\else%
+ \let\add@accent\@gobble%
+ \def\'##1{\expandafter\@nobraces\@aiguORI##1}%
+ \def\`##1{\expandafter\@nobraces\@gravORI##1}%
+ \def\^##1{\expandafter\@nobraces\@acchORI##1}%
+ \fi%
+ \else%
+ \let\protect\string\let\add@accent\@gobble%
+ \fi%
+ \edef\@tempa{#1}\typeout{\@tempa}}}%
+{\def\ier{er}%
+\f@issue%
+\@fW{^^J -23- %
+ %
+ }%
+}%
+\let\ifFW\iftrue%
+\def\@fw#1{{\let\@NoFr\relax%
+ \ifFW\kbtypeout%
+ {^^J \frenchname.sty \string : #1\@o@l}%
+ \fi%
+ }}%
+ %
+\ifx\kbtypeout\undefined%
+\def\@kbtypeout[#1]#2{\ifEightBitOutput\let\@typeset@protect\protect\fi%
+ \let\@inpenc@undefined@\@gobble%
+ \edef\f@tempa{#2\empty}%
+ #1{\f@tempa}\egroup}%
+\def\kbtypeout{\kbIO[\typeout]}%
+\def\kbIO{\bgroup%
+ \ifECM\fontencoding{OT1}\selectfont\fi%
+ %
+ \let\@nobraces\@firstofone%
+ \let\protect\string%
+ \ifEightBitOutput%
+ \def\'##1{\expandafter\@nobraces\@aiguORI##1}%
+ \def\`##1{\expandafter\@nobraces\@gravORI##1}%
+ \def\^##1{\expandafter\@nobraces\@acchORI##1}%
+ \def\"##1{\expandafter\@nobraces\@tremORI##1}%
+ \def\c##1{\expandafter\@nobraces\@cediORI##1}%
+ \csname @kbspecials\endcsname%
+ \else%
+ \let\add@accent\@gobble%
+ \def\set@display@protect{\let\protect\noexpand}%
+ \fi%
+ \@kbtypeout}%
+\fi%
+\ifx\@kbtypeout\undefined%
+ \def\@kbtypeout[#1]#2{#1{#2}\egroup}%
+\fi%
+\def\@tempb{\let\ifEightBitOutput\iffalse}%
+\ifx\kbtypeout\typeout%
+ \long\def\@tempa{\add@accent{19}}%
+ \ifx\@tempa\@aiguORI\expandafter\@tempb\fi%
+\def\@fw#1{\ifFW\bgroup\let\@nobraces\@firstofone%
+ \ifEightBitOutput%
+ \ifx\charsubdef\undefined\else%
+ \def\'##1{\expandafter\@nobraces\@aiguORI##1}%
+ \def\`##1{\expandafter\@nobraces\@gravORI##1}%
+ \fi%
+ \else%
+ \let\protect\string\let\add@accent\@gobble%
+ \fi%
+ \@kbtypeout[\typeout]{^^J \frenchname.sty \string : #1\@o@l}%
+ \fi%
+ }%
+\fi
+\def\@Ffnt#1{\f@issue\@fw{-2- %
+ }[#1]}%
+\def\@finput#1{\InputIfFileExists{#1}{}{\@Ffnt{#1}}}%
+\def\@NoFr{\f@issue\@fw{-3- %
+ %
+ }}%
+\let\ifFrench\iffalse%
+\ifx\addto\undefined%
+ \def\addto#1#2{\ifx#1\@undefined\def#1{#2}%
+ \else\ifx#1\relax\def #1{#2}%
+ \else{\toks@\expandafter{#1#2}%
+ \xdef#1{\the\toks@}}%
+ \fi%
+ \fi%
+ }%
+\fi%
+\def\fraddto#1#2{\addto{#1}{#2}%
+ \ifFrench\french\else\english\fi}%
+\ifx\MakeRobustCommand\undefined%
+\def\MakeRobustCommand#1{\expandafter\expandafter\expandafter%
+ \let\expandafter\expandafter\csname #1 fp\endcsname%
+ \csname #1\endcsname%
+ \expandafter%
+ \edef\csname #1\endcsname{\expandafter\protect%
+ \expandafter\noexpand\csname #1 fp\endcsname}
+ }%
+\fi%
+\ifx\DocInput\undefined\else%
+ \let\fr@di\DocInput\def\DocInput#1{%
+ \ifFrench\english\fr@di{#1}\french%
+ \else\fr@di{#1}%
+ \fi\relax}%
+\fi%
+\ifx\url\undefined\else%
+ \let\fr@ul\url\def\url#1{%
+ \ifFrench\english\fr@ul{#1}\french%
+ \else\fr@ul{#1}%
+ \fi\relax}%
+\fi%
+\ifx\xy\undefined\else%
+ \let\fr@xy\xy\def\xy{%
+ \ifFrench\nofrenchguillemets\DFPdp\fi\fr@xy}%
+\fi%
+\ifx\hyper@n@rmalise\undefined\else%
+ \let\fr@hne\hyper@n@rmalise\def\fr@hnr#1#2{\fr@hne{#1}{#2}}%
+ \def\hyper@n@rmalise{\ifFrench\english\expandafter\fr@hnr%
+ \else\expandafter\fr@hne\fi}%
+\fi%
+\ifx\PDFSCR@Info\undefined\else%
+ \def\@seccntformat#1{\protect\textcolor{section\thesection@level}%
+ {\expandafter\upshape\csname the#1\endcsname}\quad}%
+\fi%
+\ifx\listing\undefined\else%
+ \let\fr@li\listing%
+\edef\listing{\noexpand\@protected@testopt\noexpand\listing%
+ \expandafter\noexpand\csname\string\listing\endcsname {1}}%
+ \ifx\fr@li\listing%
+ \def\listing{%
+ \ifFrench\expandafter\english\expandafter\fr@li%
+ \else\expandafter\fr@li%
+ \fi}%
+ \else%
+ \long\def\listing{%
+ \ifFrench\expandafter\english\expandafter\fr@li%
+ \else\expandafter\fr@li%
+ \fi\relax}%
+ \fi%
+\fi%
+\ifx\inputlisting\undefined\else%
+ \let\fr@PL\lst@ProcessListing\def\lst@ProcessListing[#1]{%
+ \ifFrench\english\fr@PL[#1]\french%
+ \else\fr@PL[#1]%
+ \fi\relax}%
+\fi%
+\ifx\lstlisting\undefined\else%
+ \let\fr@lsi\lstlisting\long\def\lstlisting{%
+ \ifFrench\expandafter\english\expandafter\fr@lsi%
+ \else\expandafter\fr@lsi%
+ \fi}%
+\fi%
+\ifx\lstinputlisting\undefined\else%
+ \let\fr@PL\lst@ProcessListing\def\lst@ProcessListing[#1]{%
+ \ifFrench\english\fr@PL[#1]\french%
+ \else\fr@PL[#1]%
+ \fi}%
+\fi%
+\def\ifFrench#1\fi{\@NoFr}%
+ %
+\def\originalinput#1{\ifFrench\english\@finput{#1}\french%
+ \else\@finput{#1}\fi\relax}%
+\def\originaloutput[#1]{% <BG
+ \ifFrench\english\fi%
+ \def\@riginalout##1##2{\immediate\write##1{##2}}%
+ \@riginalout{#1}}% >BG
+% ou moins souple d'emploi : RJ
+%\def\originaloutput#1#2{\ifFrench\english\fi\immediate\write#1{#2}}% RJ
+\let\ifFLA\iffalse%
+\@ifundefined{printindex}{%
+ \def\see#1#2{\seename%
+ \/ {#1}}%
+ \def\printindex{\clearpage%
+ \ifx\hyper@refstepcounter\undefined\else%
+ \stepcounter{subparagraph}%
+ \hyper@refstepcounter{subparagraph}%
+ \fi%
+ \addcontentsline{toc}{chapter}%
+ {\protect\indexname}%
+ {\let\@ti\theindex%
+ \def\theindex{\@ti\ifFLA\thispagestyle{french}\fi}%
+ \@finput{\jobname.ind}}}}{}%
+\ifx\printnomenclature\undefined\else%
+\let\@pne\printnomenclature%
+\def\printnomenclature{\nofrenchwarnings\@pne}%
+\fi%
+\ifx\thebibliography\undefined\else%
+\let\@tbs\thebibliography%
+\let\fr@savebib\thebibliography%
+\long\def\thebibliography#1{%
+ \ifFLA%
+ \ifx\hyper@refstepcounter\undefined\else%
+ \stepcounter{subparagraph}%
+ \hyper@refstepcounter{subparagraph}%
+ \fi%
+\ifx\bibname\undefined%
+ \addcontentsline{toc}{chapter}{\refname}%
+\else%
+ \addcontentsline{toc}{chapter}{\bibname}%
+\fi%
+ \fi%
+ \@tbs{#1}%
+ }%
+\ifx\bt@stepcnt\undefined%
+\else%
+\let\thebibliography\@tbs%
+\let\bt@saveitem\bibitem%
+\AtBeginDocument{\let\bt@savebib\fr@savebib}%
+\def\@tempd#1#2#3#4\void{\def\@tempa{\noexpand#1}\def\@tempb{\noexpand#2}%
+ \def\@tempc{\noexpand#3}\def\@@tbs##1{#4}}%
+\expandafter\@tempd\thebibliography{\string#1}\void%
+\edef\thebibliography#1{\@tempa\@tempb\@tempc%
+ \noexpand\@@tbs{#1}\noexpand\@tbs}%
+\def\@tbs{\ifFLA%
+ \ifx\hyper@refstepcounter\undefined\else%
+ \stepcounter{subparagraph}%
+ \hyper@refstepcounter{subparagraph}%
+ \fi%
+ \ifx\bibname\undefined%
+ \addcontentsline{toc}{chapter}{\refname}%
+ \else%
+ \addcontentsline{toc}{chapter}{\bibname}%
+ \fi%
+ \fi%
+ }%
+\fi%
+\fi%
+\def\ifFLA{\ErrFrench}%
+\@ifundefined{disableindex}{}%
+ {%
+ \def\see#1#2{\seename\/ {#1}}%
+ }%
+\@ifundefined{seealso}{%
+ \def\subsee#1#2{\seealsoname%
+ \/ {#1}}%
+ \let\nosee\@gobble%
+ \def\seealso{\bgroup\edef\@temp@{}\@ifNextNB[{\see@@so}%
+ {\see@lso}}%
+ \def\see@lso#1#2{\expandafter%
+ \index\@temp@{#1!zzzzz@\protect\subsee{#2}|nosee}\egroup}%
+ \def\see@@so[#1]{\edef\@temp@{[#1]}\see@lso}}{}%
+ \def\@ifFTYfalse{\let\ifFTY\iffalse}%
+ \def\@ifFTYback{\let\ifFTY\if@Back}%
+ \let\if@PMF\iffalse%
+\newif\if@PMF\@PMFfalse%
+\def\pmfrench{\@PMFtrue\f@issue\@fw{-4- %
+ %
+ }%
+ \def\frenchname{pmfrench}}%
+\f@issue%
+\@fW{ -24- %
+ %
+ %
+ }%
+\f@issue%
+\@fW{ -25- %
+ }%
+\def\CheckSevenBits/#1{\def\@tempa##1##2/##3{\ifx##2\empty\else%
+ \f@issue%
+ \@fw{-51- %
+ %
+ }%
+ \expandafter ##3\fi}\expandafter\@tempa\noexpand#1}%
+\@ifundefined{tt}{\def\tt{\fontfamily{\ttdefault}\selectfont}}{}%
+\let\ifGIAF\iftrue%
+\@ifundefined{ly}%
+ {%
+ \ifx\symlasy\undefined%
+ \ifx\undefined\babel@core@loaded%
+ \RequirePackage{latexsym}%
+ \else%
+ \xdef\@currname{latexsym}%
+ \@@input latexsym.sty\@@input ulasy.fd%
+ \fi%
+ \fi%
+ \def\@ly{\fontencoding{U}\fontfamily{lasy}%
+ \ifGIAF\else\fontseries{m}\fontshape{n}\fi\selectfont}%
+ \def\ly{\ifFG\ifECM\rm\else\@ly\fi\fi}%
+ }{}%
+\ifx\guillemetsfont\undefined%
+\def\guillemetsfont{\fontfamily{\rmdefault}%
+ \fontseries{m}\fontshape{n}\selectfont}%
+\fi%
+\def\@gfnt{\guillemetsfont}%
+\edef\lq{\string`}\edef\rq{\string'}%
+\let\@cilq='%
+\edef\lqq{\string`\string`}\edef\rqq{\string'\string'}%
+\edef\pointvirgule{\string;}%
+\edef\deuxpoints{\string:}%
+\let\@cidp=:%
+\edef\pointexclamation{\string!}%
+\edef\pointinterrogation{\string?}%
+\edef\inferieura{\string<}%
+\edef\superieura{\string>}%
+\edef\dittomark{\string"}%
+\let\f@par\par%
+\let\@SLQ\lq%
+\def\@SRQ@{^\bgroup\prim@s}%
+\def\@SRQ{\ifmmode\expandafter\@SRQ@\else\rq\fi}%
+\let\@gotl\guillemotleft%
+\let\@gotr\guillemotright%
+\def\@temp@{LO1}\ifx\@temp@\f@encoding%
+ \else\edef\@temp@{OT1}\fi%
+\def\@tempa#1{\expandafter\relax%
+ \expandafter\global%
+ \expandafter\def%
+ \csname\@temp@\string#1\endcsname}%
+\@tempa{\guillemotleft}{\let\ifECM\iffalse%
+ \ifFG\ly(\kern-0.20em(\else<<\fi}%
+\@tempa{\guillemotright}{\let\ifECM\iffalse%
+ \ifFG\unskip%
+ \ly\kern+0.20em)\kern-0.20em)%
+ \else>>%
+ \fi}%
+\let\@LSG\inferieura\def\@DOG{\inferieura\inferieura}%
+\let\@RSG\superieura\def\@DFG{\superieura\superieura}%
+\def\@SOC{\string[%
+ }%
+\def\@SFC{%
+ \string]}%
+\edef\@LP{\ifECM023\else(\fi%
+ }%
+\edef\@RP{%
+ \ifECM024\else)\fi}%
+\newif\ifFH%
+\let\@noBDfr\@nodocument%
+\def\frenchhyphenation{\@noBDfr}%
+\def\nofrenchhyphenation{\@noBDfr}%
+\def\frenchtypography{\@noBDfr}%
+\def\regularmathcomma{\@noBDfr}%
+\def\frenchmathcomma{\@noBDfr}%
+\def\frenchwarnings{\@noBDfr}%
+\def\nofrenchwarnings{\@noBDfr}%
+\def\nofrenchtypography{\@noBDfr}%
+\def\nofrenchtranslation{\@noBDfr}%
+\def\frenchtranslation{\@noBDfr}%
+\ifx\RIfM@\undefined%
+\def\nofrenchguillemets{\@noBDfr}%
+\def\frenchguillemets{\@noBDfr}%
+\def\nofrenchbguillemets{\@noBDfr}%
+\def\frenchbguillemets{\@noBDfr}%
+\fi%
+\global\let\ifCLAfrench\iffalse%
+\def\ConstantLayout{\@noBDfr}%
+\def\originalmathcomma{\@noBDfr}%
+\def\everyparguillemetsremoved{\@noBDfr}%
+\def\Numeros{\@noBDfr}%
+\def\order{\@noBDfr}%
+\def\endorder{\@noBDfr}%
+\def\sommairename{\@noBDfr}%
+\def\versatim{\@noBDfr}%
+\def\endversatim{\@noBDfr}%
+\def\nofrenchmacros{\@noBDfr}%
+\def\frenchmacros{\@noBDfr}%
+\def\automaticlettrine{\@noBDfr}%
+\def\noautomaticlettrine{\@noBDfr}%
+\def\noeveryparguillemets{\@noBDfr}%
+\def\everyparguillemets{\@noBDfr}%
+\def\nofrenchlayout{\@noBDfr}%
+\def\frenchlayout{\@noBDfr}%
+\def\indentfirst{\@noBDfr}%
+\def\nonindentfirst{\@noBDfr}%
+\def\NouveauLangage{\@noBDfr}%
+\def\letpunctutionactivefor{\@noBDfr}%
+\def\@tempa{\let\ifarticle\iffalse}%
+\ifx\ifarticle\undefined\expandafter\@tempa\fi%
+\ifx\@seminarerr\undefined\else\ifarticle\else%
+\let\@soORI\shipout%
+\def\shipout#1#2{\def\@tempa{slide}\def\@tempb{slide*}%
+ {\ifx\@tempa\@currenvir\let\protect\noexpand%
+ \else\ifx\@tempb\@currenvir\let\protect\noexpand\fi%
+ \fi%
+ \@soORI#1#2}%
+ \global\let\shipout\@soORI%
+ }%
+\fi\fi%
+\let\h@yphenation\hyphenation%
+\long\def\f@hyphenation#1{\bgroup%
+ \let\par\space%
+ \def\-{ }%
+ \let\allowhyphens\undefined%
+ \csname accenthyphcodes\endcsname%
+ \lowercase{\edef\@tempa{#1}}%
+ \h@yphenation{\@tempa}\egroup}%
+\def\@tempa{\let\iffrenchbibliography\iftrue}%
+\ifx\iffrenchbibliography\undefined\expandafter\@tempa\fi%
+\ifx\nombre\undefined\else\let\@nomORI\nombre\fi%
+\begingroup\obeyspaces%
+\gdef\@@nombre{\ifFTY\@mathcomma\obeyspaces\let =\,\fi}%
+\endgroup%
+\def\@nombre#1{\bgroup\let\ifFTY\iftrue\def\@tempa{#1}%
+ \def\,{\ifmmode\mskip\thinmuskip\fi}%
+ \if@filesw{\immediate\openout\@inputcheck=\jobname.tmp%
+ \let\protect\noexpand%
+ \ifmmode%
+ \immediate\write\@inputcheck{\protect\makeatletter%
+ \protect\@@nombre%
+ \@tempa\ignorespaces}%
+ \else%
+ \immediate\write\@inputcheck{\protect\makeatletter%
+ \protect\@@nombre%
+ $\@tempa$\ignorespaces}%
+ \fi%
+ \immediate\closeout\@inputcheck%
+ }%
+ \immediate\openin\@inputcheck=\jobname.tmp%
+ \immediate\read\@inputcheck to\@tempa%
+ \immediate\closein\@inputcheck%
+ \def\@tempa{{\input{\jobname.tmp}}}%
+ \fi%
+ \@tempa\egroup%
+ }%
+\ifx\nombre\undefined\DeclareRobustCommand*{\nombre}{\@nombre}\fi%
+\ifx\WindowsUnits\undefined%
+ \def\WindowsUnits{\@wu}\fi%
+\def\FileName{\bgroup%
+ \def\@FNenc@loop##1##2{\@tempcnta`##1\relax%
+ \loop\catcode\@tempcnta=11%
+ \ifnum\@tempcnta<`##2\relax%
+ \advance\@tempcnta\@ne%
+ \repeat}%
+ \@FNenc@loop\^^A\^^H%
+ \@FNenc@loop\^^K\^^K%
+ \@FNenc@loop\^^N\^^_%
+ \@FNenc@loop\^^?\^^ff%
+ \@FileName}%
+\def\@FileName#1{\gdef\theFileName{#1}\egroup}%
+\let\og\empty\let\fg\empty%
+ \def\FrenchGuillemetsFrom#1#2#3#4{%
+ \DeclareFontEncoding{#1}{}{}%
+ \DeclareFontSubstitution{#1}{#2}{m}{n}%
+ \DeclareTextCommand{\guillemotleft}{OT1}{%
+ {\fontencoding{#1}\fontfamily{#2}\selectfont\char#3}}%
+ \DeclareTextCommand{\guillemotright}{OT1}{%
+ {\fontencoding{#1}\fontfamily{#2}\selectfont\char#4}}}
+ \def\CyrillicGuillemets{\FrenchGuillemetsFrom{OT2}{wncyr}{60}{62}}
+ \def\PolishGuillemets{\FrenchGuillemetsFrom{T1}{lmr}{19}{20}}
+ \def\LasyGuillemets{%
+ \DeclareTextCommand{\guillemotleft}{OT1}{\hbox{%
+ \fontencoding{U}\fontfamily{lasy}\selectfont(\kern-0.20em(}}%
+ \DeclareTextCommand{\guillemotright}{OT1}{\hbox{%
+ \fontencoding{U}\fontfamily{lasy}\selectfont)\kern-0.20em)}}}
+\ifeF@NoEnc\else
+ \IfFileExists{t1lmr.fd}{\PolishGuillemets}{\LasyGuillemets}
+\fi
+ \DeclareTextSymbolDefault{\guillemotleft}{OT1}
+ \DeclareTextSymbolDefault{\guillemotright}{OT1}
+ \def\guill@spacing{\penalty\@M\hskip.8\fontdimen2\font
+ plus.3\fontdimen3\font
+ minus.8\fontdimen4\font}
+ \DeclareRobustCommand*{\begin@guill}{\leavevmode
+ \guillemotleft\penalty\@M\guill@spacing}
+ \DeclareRobustCommand*{\end@guill}{\ifdim\lastskip>\z@\unskip\fi
+ \penalty\@M\guill@spacing\guillemotright\xspace}
+ \AtBeginDocument{\ifx\xspace\@undefined\let\xspace\relax\fi}
+ \def\bbl@frenchguillemets{\renewcommand{\og}{\begin@guill}%
+ \renewcommand{\fg}{\end@guill}}
+ \def\bbl@nonfrenchguillemets{\renewcommand{\og}{``}%
+ \renewcommand{\fg}{\ifdim\lastskip>\z@\unskip\fi ''}}
+\def\@ifo{%
+\def\kbIO{\bgroup%
+ \ifECM\fontencoding{OT1}\selectfont\fi%
+ \ifFTY\expandafter\nofrenchtypography\fi%
+ \let\@nobraces\@firstofone%
+ \let\protect\string%
+ \ifEightBitOutput%
+ \def\'####1{\expandafter\@nobraces\@aiguORI####1}%
+ \def\`####1{\expandafter\@nobraces\@gravORI####1}%
+ \def\^####1{\expandafter\@nobraces\@acchORI####1}%
+ \def\"####1{\expandafter\@nobraces\@tremORI####1}%
+ \def\c####1{\expandafter\@nobraces\@cediORI####1}%
+ \csname @kbspecials\endcsname%
+ \else%
+ \let\add@accent\@gobble%
+ \def\set@display@protect{\let\protect\noexpand}%
+ \fi%
+ \@kbtypeout}%
+\let\s@owhyphens\showhyphens%
+\let\@dsORI\dospecials%
+\@ifundefined{@sanitize}{\def\@sanitize{\relax}}{}%
+\let\@saORI\@sanitize%
+\def\frenchhyphenation{%
+ \ifFH\else\FHtrue%
+ \edef\@uchORI{\the\uchyph}%
+ \def\@Hif{\ifFH}\let\@Hfi\fi%
+ \lccode `\'=`\'%
+ \ifx\flowercase\undefined\else\def\lowercase{\flowercase}\fi%
+ \@ifundefined{allowhyphens}{%
+ \def\allowhyphens{\ifhmode\nobreak\hskip\z@skip\fi}}{}%
+ \@ifundefined{lefthyphenmin}{}%
+ {\lefthyphenmin=2\righthyphenmin=3}%
+ \@whatUCH%
+ \def\@tempa####1{{\accenthyphcodes\h@yphenation{####1}}}%
+ \ifx\@tempa\hyphenation\f@issue%
+ \@fw{-41- %
+ %
+ }\stop%
+ \fi%
+ \def\accenthyphcodes{%
+ \let\@typeset@protect\protect%
+ \ifx\protect\noexpand\else%
+ \ifECM\else\fontencoding{T1}%
+ \let\pickup@font\@gobble%
+ \let\size@update\relax\selectfont%
+ \fi\fi}%
+ \let\hyphenation\f@hyphenation%
+ \def\showhyphens####1{\bgroup%
+ \csname accenthyphcodes\endcsname%
+ \protected@edef\@tempa{####1}%
+ \s@owhyphens{\@tempa}\egroup}%
+ \fi}%
+\def\nofrenchhyphenation{%
+ \ifFH\FHfalse%
+ \lccode`\'=0%
+ \let\hyphenation\h@yphenation%
+ \let\showhyphens\s@owhyphens%
+ \ifx\lowercaseORI\undefined\else\let\lowercase\lowercaseORI\fi%
+ \@ifundefined{lefthyphenmin}{}%
+ {\lefthyphenmin=2\righthyphenmin=3}%
+ \uchyph=\@uchORI%
+ \fi}%
+\edef\originalmathcomma%
+ {\noexpand\mathcode`,=\the\mathcode`,}%
+\@tempcnta=\the\mathcode`,\@tempcntb=\the\mathcode`,%
+\divide\@tempcnta by 4096\relax%
+\multiply\@tempcnta by -4096\relax%
+\advance\@tempcntb by \@tempcnta%
+\edef\@tempb{\noexpand\mathcode`,=\the\@tempcntb}%
+\advance\@tempcntb by 24576\relax%
+\edef\@tempa{\noexpand\mathcode`,=\the\@tempcntb}%
+\edef\regularmathcomma{%
+ \noexpand\def\noexpand\@mathcomma{\@tempa}%
+ \noexpand\@mathcomma}%
+\def\@tempa{\if\space\next\else\mathord\fi\mathcomma}%
+\let\ifFTY\iftrue%
+\ifx\@tempa\sm@rtcomma%
+ \def\frenchmathcomma{%
+ \def\@mathcomma{\ifFTY\mathcode`\,="8000\fi}%
+ \@mathcomma}%
+\else%
+\edef\frenchmathcomma{%
+ \noexpand\def\noexpand\@mathcomma%
+ {\noexpand\ifFTY\@tempb\noexpand\fi}%
+ \noexpand\@mathcomma}%
+\fi%
+\frenchmathcomma%
+\def\ifFTY{\ErrFrench}%
+\def\nofrenchtypography{%
+ \let\ifFTY\iffalse\let\if@Back\ifFTY%
+\expandafter\let\csname OT1\string\textbackslash \endcsname\undefined%
+ \notabbingaccents%
+ \nofrenchguillemets%
+ \nofrenchbguillemets%
+ \sloppy%
+ \nonfrenchspacing%
+ \regularmathcomma%
+ \eFr@Typofalse
+ }%
+\def\frenchtypography{%
+ \let\ifFTY\iftrue\let\if@Back\ifFTY%
+\expandafter\let\csname OT1\string\textbackslash \endcsname\@boiORI%
+ \let\ifLPA\iffalse%
+ \typedspaces%
+ \nowrongtypedspaces%
+ \tabbingaccents%
+ \englishquote\englishdoublequotes%
+ \nolabelsinmargin%
+ \frenchguillemets%
+ \frenchbguillemets%
+ \normalbrackets\todayguillemets%
+ \guillemetsinroman\guillemetsinarrays%
+ \edef\@tempa{\the\vfuzz}%
+ \fussy%
+ \vfuzz=\@tempa%
+ \frenchspacing%
+ \frenchmathcomma%
+ \eFr@Typotrue
+ }%
+\def\nofrenchtranslation{%
+ \let\ifFTR\iffalse\@cORI}%
+\def\frenchtranslation{%
+ \let\ifFTR\iftrue\captionsfrench}%
+\let\frenchguillemets\relax\let\nofrenchguillemets\relax%
+\let\frenchbguillemets\bbl@frenchguillemets%
+\let\nofrenchbguillemets\bbl@nonfrenchguillemets%
+\def\frenchguillemets{%
+ \let\ifFG\iftrue%
+ \let\guillemets\@LG%
+ \let\endguillemets\RG@%
+ \let\guillemotleft\f@guillemets%
+ \let\guillemotright\endf@guillemets%
+ \AFPinfsup}%
+\def\nofrenchguillemets{%
+ \let\ifFG\iffalse%
+ \let\guillemotleft\@gotl%
+ \let\guillemotright\@gotr%
+ \let\guillemets\f@guillemets%
+ \let\endguillemets\endf@guillemets%
+ \DFPinfsup}%
+\def\noeveryparguillemets{\let\ifEPG\iffalse%
+ \@desarm\let\@desarm\relax%
+ \def\guillemets{%
+ \f@issue%
+ \@fw{-53- %
+ %
+ %
+ %
+ }%
+ \bgroup\bgroup%
+ \def\guillemets{\bgroup%
+ \let\endguillemets\egroup}}%
+ }%
+\def\everyparguillemets{\let\ifEPGR\iffalse%
+ \let\ifEPG\iftrue%
+ \let\guillemets\@LG%
+ \let\endguillemets\RG@%
+ }%
+\def\everyparguillemetsremoved{%
+ \let\ifEPGR\iftrue}%
+\def\@tempa{\global\let\ifCLA\iffalse}%
+\ifx\ifCLA\undefined\expandafter\@tempa\fi%
+\def\ConstantLayout{\global\let\ifCLA\iftrue%
+ \expandafter\let\csname ifCLA\languagename\endcsname\iftrue%
+ \def\@tempa{\let\ifbbbbfixlanguage\iftrue}%
+ \ifx\ifbbbbfixlanguage\undefined\@tempa\fi%
+ \def\@tempa{\ifbbbbfixlanguage\else%
+ \f@issue%
+ \@fw{-85- %
+ %
+ }\fi%
+ }%
+ \ifx\@nodocument\relax\@tempa%
+ \else\ifx\btxselectlanguage\undefined%
+ \PassOptionsToPackage{fixlanguage}{babelbib}%
+ \else\@tempa%
+ \fi%
+ \fi%
+ \let\ConstantLayout\relax}%
+\def\nofrenchlayout{\nofrenchtrivsep%
+ \let\ifFLA\iffalse\@EIM}%
+\def\frenchlayout{%
+ \let\ifFLA\iftrue\everyparguillemets%
+ \@FIM\@FL\let\@FL\empty\noautomaticlettrine%
+ \frenchtrivsep}%
+\def\frenchwarnings{\let\ifFW\iftrue%
+ \frenchtrivsepwarnings}%
+\def\nofrenchwarnings{\let\ifFW\iffalse%
+ }%
+\def\nofrenchmacros{\let\ifFMA\iffalse}%
+\def\frenchmacros{\let\ifFMA\iftrue\@ifm%
+ \let\@ifm\relax}%
+}%
+\long\def\usersfrenchoptions%
+ {\bgroup\makeatletter%
+ \expandafter\egroup%
+ \g@addto@macro\@ufo}%
+\ifx\@ufo\undefined%
+ \let\@ufo\empty%
+\fi%
+ \def\prim@s{\prime\futurelet\@let@token\pr@m@s}%
+ \def\pr@m@s{\ifx\@cilq\@let@token\expandafter\pr@@@s%
+ \else\ifx^\@let@token\expandafter\expandafter\expandafter\pr@@@t%
+ \else\egroup\fi%
+ \fi}%
+\let\@fsORI\frenchspacing%
+\def\frenchspacing{\@fsORI\ifECM\sfcode`\(=0\sfcode`\)=1000\fi}%
+\catcode`<=\active\catcode`>=\active\catcode`'=\active%
+\catcode`:=\active\catcode``=\active%
+\let<=\inferieura\let>=\superieura%
+\def\@Fstr{\def<{\@LSG}\def>{\@RSG}\def`{\@SLQ}\def'{\@SRQ}%
+ \def:{\deuxpoints}%
+ \let\dGs\empty}%
+\def\@LiN{\let\@sogORI<\let\@sfgORI>\let\@lqORI`\let\@rqORI'%
+ \let\@dpORI:\@Fstr\@ifFTYfalse}%
+\def\@LiB{\let<\@sogORI\let>\@sfgORI\let`\@lqORI\let'\@rqORI%
+ \let:\@dpORI\@ifFTYback}%
+\catcode\lq:=12%
+\let\@s@ORI\special%
+\ifx\eTeXversion\undefined%
+\def\newcount{\alloc@0\count\countdef\insc@unt}%
+\def\newdimen{\alloc@1\dimen\dimendef\insc@unt}%
+\def\newbox{\alloc@4\box\chardef\insc@unt}%
+\fi%
+\let\ifFTY\iffalse%
+\ifx\vref\undefined\else%
+\@ifpackageloaded{varioref}{\def\@vrfCode{%
+ \@gG{vr}{vref}{/}{1}%
+ \@gG{vpr}{vpageref}{1}{1}%
+ \@gG{vprr}{vpagerefrange}{1}{2}%
+ \def\reftextpagerange##1##2{%
+ pages~\pageref{##1}\ifFTY -\else --\fi\pageref{##2}}%
+ }%
+ }{}%
+\fi%
+\def\ifFTY{\ErrFrench}%
+\@ifclassloaded{beamer}{\let\l@chapter\empty%
+ \def\beamer@captiontemplate{\small\structure%
+ {\insertcaptionname\captionseparator\space}%
+ \insertcaption}
+ }{}%
+\def\GOfrench{%
+ \def\special##1{\@ifFTYfalse\bgroup\@Fstr\@s@ORI{##1}%
+ \egroup\@ifFTYback}%
+ \let\@noBDfr\relax%
+ {\catcode\lq\<=\active\ifx<\undefined\else\global%
+ \let\@mLSG<\global%
+ \def\@LSG{\ifmmode\@mLSG\else\inferieura\fi}\fi}%
+ {\catcode\lq\>=\active\ifx>\undefined\else\global%
+ \let\@mRSG>\global%
+ \def\@RSG{\ifmmode\@mRSG\else\superieura\fi}\fi}%
+\if@PMF\def\pmfrench{}\def\noeveryparguillemets{}\def\@stared{}%
+ \def\@desarm{}\def\@qquotes{}\def\@staring{}\def\@fniv2{}\fi%
+\def\sm@llerthree{\protect\sm@ller\protect\sm@ller\protect\sm@ller}
+\@ifundefined{smaller}{\def\sm@ller{\small}%
+ \let\sm@llerthree\scriptsize%
+ \def\l@rger{\large}}%
+ {\def\RSsmallest{4pt}%
+ \ifx\undefined\sm@ller%
+ \let\sm@ller\smaller\fi}%
+\@ifundefined{footnotesize}{%
+ \def\footnotesize{\sm@ller\sm@ller}}{}%
+\@ifundefined{Huge}{%
+ \def\Huge{\l@rger\l@rger\l@rger\l@rger\l@rger}}{}%
+\@ifundefined{lettrinefont}{\let\lettrinefont\Huge}{}%
+\let\sv@lf=\lettrinefont%
+\ifx\@pdfcreator\undefined%
+ \else\addto\@pdfcreator{, with \frenchpack\space package}\fi%
+\def\noresetatpart{\ifFLA\let\cl@part\empty\fi}%
+\def\noresetatchapter{\ifFLA\let\cl@chapter\empty\fi}%
+\@ifundefined{chapter}{}{}%
+\@ifundefined{c@chapter}{\newcounter{chapter}}{\@addtoreset{chapter}{part}}%
+\@ifundefined{quotation}{\def\quotation{}}{}%
+\ifx\tableofcontents\undefined%
+ \else\let\@tocORI\tableofcontents\fi%
+\ifx\pdfstringdef\undefined%
+ \else\let\contentslineORI\contentsline\fi%
+\@ifundefined{l@chapter}{%
+\def\@tempa{%
+ \def\l@chapter####1####2{\addpenalty{-\@highpenalty}%
+ \vskip 1.0em plus\p@\@tempdima 1.5em%
+ \begingroup%
+ \parindent \z@ \rightskip \@pnumwidth \parfillskip -\@pnumwidth%
+ \bfseries \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip%
+ ####1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss ####2}\par%
+ \penalty\@highpenalty%
+ \endgroup}}%
+\ifx\RIfM@\undefined\@tempa%
+ \else%
+ \ifx\fr@RIfM@cls\undefined\@tempa
+\fi%
+\fi}{}%
+\@ifundefined{theHchapter}{}%
+ {\renewcommand{\theHchapter}{\arabic{part}.\arabic{chapter}}}%
+ \def\@gG##1##2##3##4{%
+ \def\@temp@{\expandafter\let\csname @##1@ORI\endcsname=}%
+ \expandafter\@temp@\csname ##2\endcsname%
+ \if##3\empty%
+ \if2##4%
+ \expandafter\def\csname ##2\endcsname####1####2%
+ {\protect\atgG{##1}{{####1}{####2}}}%
+ \else%
+ \if3##4%
+ \expandafter\def\csname ##2\endcsname####1####2####3%
+ {\protect\atgG{##1}{{####1}{####2}{####3}}}%
+ \else%
+ \expandafter\def\csname ##2\endcsname####1%
+ {\protect\atgG{##1}{{####1}}}%
+ \fi%
+ \fi%
+ \else%
+ \if/##3\expandafter\def\csname ##2\endcsname{\protect\atgH{##1}}%
+ \else%
+ \if2##4\expandafter\def\csname ##2\endcsname{\protect\atgN{##1}}%
+ \else\expandafter\def\csname ##2\endcsname{\protect\atgM{##1}}%
+ \fi%
+ \fi%
+ \fi}%
+ \def\atgG##1##2{\bgroup\@ifFTYfalse\@Fstr%
+ \expandafter\csname @##1@ORI\endcsname##2\egroup}%
+ \def\atgH##1##2{\bgroup\@ifFTYfalse\@Fstr%
+ \expandafter\csname @##1@ORI\endcsname{##2}\egroup}%
+ \def\atgM##1{\@ifNextNB[{\@gM@@{##1}}{\@gM@@{##1}[\empty]}%
+ }%
+ \def\atgN##1{\@ifNextNB[{\@gM@@@{##1}}{\@gM@@@{##1}[\empty]}%
+ }%
+ \def\@gM@@##1[##2]##3{\@gM@@@{##1}[##2]{##3}{}}%
+ \def\@gM@@@##1[##2]##3##4{\bgroup\@ifFTYfalse\@Fstr%
+ \xdef\@temp@{\noexpand\@gG@{##3}{##4}}\egroup%
+ \ifx\empty##2\let\@gG@=\empty%
+ \else\protected@edef\@gG@{[##2]}\fi%
+ \let\@typeset@protect\protect%
+ \protected@edef\@temp@{\noexpand\expandafter%
+ \noexpand\expandafter%
+ \noexpand\csname @##1@ORI\noexpand\endcsname%
+ \@temp@}\@temp@}%
+\ifx\babel@sanitize@arg\undefined\else%
+\def\babel@sanitize@arg##1{##1}%
+\wlog{\frenchname.sty\string: use of the babel package force me to nullify %
+ \noexpand\babel@sanitize@arg.}%
+\fi%
+\ifx\ifthenelse\undefined\else\let\@iTeORI\ifthenelse%
+ \long\def\ifthenelse##1##2##3{\@ifFTYfalse\@iTeORI{##1}%
+ {\@ifFTYback##2}{\@ifFTYback##3}}%
+\fi%
+\ifx\texttt\undefined\else\@gG{xt}{texttt}{/}{1}%
+ \MakeRobustCommand{texttt}\fi%
+\ifx\hyperbaseurl\undefined\else\@gG{hl}{hyperbaseurl}{/}{1}\fi%
+\ifx\Ginclude@graphics\undefined\else\@gG{ig}%
+ {Ginclude@graphics}{/}{1}\fi%
+\ifx\NAT@citex\undefined%
+ \ifx\cite\undefined\else\@gG{c}{cite}{1}{1}\fi%
+ \ifx\citeyear\undefined\else\@gG{cy}{citeyear}{/}{1}\fi%
+\else%
+ \let\@cxORI\@citex%
+ \def\@citex[##1][##2]##3{\@ifFTYfalse%
+ \let\mbox\mboxORI%
+ \@cxORI[##1][##2]{##3}\aftergroup\@ifFTYback}%
+\@gG{cin}{citation}{/}{1}%
+ \ifx\ifjb@index@bib\undefined\let\ifjb@index@bib\iffalse\fi%
+ \ifx\jb@lbibitem\undefined\else%
+ %
+ %
+ \def\jb@lbibitem[##1]##2{%
+ \gdef\jb@tempb{##1}%
+ \protected@xdef\jb@key{##2}%
+ \ifjb@index@bib%
+ \jb@call@index{aut}{##2}%
+ \jb@call@index{ed}{##2}%
+ \jb@call@index{org}{##2}%
+ \fi%
+ \endgroup}%
+ \@gG{fc}{fullcite}{1}{1}%
+ \fi%
+\fi%
+\ifx\nocite\undefined\else\@gG{nc}{nocite}{/}{1}\fi%
+\ifx\backcite\undefined\else\@gG{bkc}{backcite}{//}{2}\fi%
+\ifx\bibitem\undefined\else\let\@biORI\bibitem%
+ \def\bibitem{\@LiN\@ifNextNB[{\@bi@cb}{\@bi@ca}%
+ }%
+ \def\@bi@ca##1{\@biORI{##1}\@LiB}%
+ \def\@bi@cb[##1]##2{\@biORI[##1]{##2}\@LiB}%
+\fi%
+\expandafter\ifx\string\bt@@item\undefined%
+ \else\@gG{bti}{\string\bt@@item}{1}{1}%
+ \fi%
+\ifx\vref\undefined\else%
+ \ifx\reftextvario\undefined\let\@vrfCode\undefined%
+\fi\fi%
+\ifx\ref\undefined\else\@gG{r}{ref}{/}{1}\fi%
+\ifx\tag\undefined\else\@gG{tG}{tag}{/}{1}\fi%
+\ifx\pageref\undefined\else\let\pageref@ORI\pageref%
+ \let\f@pageref\pageref\@gG{fpr}{f@pageref}{/}{1}%
+ \def\pageref{\ifFTY\expandafter\f@pageref\else%
+ \expandafter\pageref@ORI\fi}%
+\fi%
+\csname @vrfCode\endcsname%
+\xdef\@lim{}\let\ifMOVING\iffalse%
+\ifx\sf@@sub@label\undefined\else\@gG{ss}{sf@@sub@label}{/}{1}\fi%
+\def\@temp@{%
+ \def\label{\protect\@LabeL}%
+\def\r@LabeL{\ifx\@lim\empty%
+ \else\marginpar{\@lim@}\xdef\@lim{}%
+ \fi}%
+\def\m@LabeL{\def\@setMGtrue{\let\ifMOVING\iftrue}%
+ \ifmmode\@setMGtrue%
+ \aftergroup\r@LabeL%
+ \fi%
+ \expandafter\t@LabeL}%
+\def\@LabeL{\ifMOVING\expandafter\t@LabeL%
+ \else\m@LabeL%
+ \fi}%
+ \def\t@LabeL####1{\@ifFTYfalse\if@labelsinmargin\ifMOVING%
+ \xdef\@lim{\ifx\@lim\empty\else\@lim\@@par\relax\fi[####1]}%
+ \gdef\@lim@{\@ifFTYfalse\hbadness=\@M\tt\@lim\@ifFTYback}%
+ \else\marginpar{%
+ \@ifFTYfalse\hbadness=\@M\tt[####1]\@ifFTYback}\fi\fi%
+ %
+ \bgroup\@Fstr\@lORI{####1}\egroup\@ifFTYback}%
+ }%
+\ifx\fr@RIfM@cls\undefined\else%
+\let\@mtORI\maketitle%
+\def\maketitle{{\@mtORI}}%
+\fi%
+\ifx\label\undefined\else\let\@lORI\label%
+ \@temp@%
+ \let\ltx@label\label%
+\fi%
+\ifx\@newl@bel\undefined\else\@gG{nl}{@newl@bel}{//}{3}\fi%
+\def\@temp@{%
+ \let\@aclORI\addcontentsline%
+ \global\let\ifCG\iftrue%
+ \def\addcontentsline####1####2####3{\@ifFTYfalse\bgroup\@Fstr%
+ \@aclORI{####1}{####2}{####3}\egroup\@ifFTYback}%
+ }%
+\@ifundefined{addcontentsline}{\gdef\addcontentsline##1##2##3{}}%
+ {\@temp@}%
+\let\ifFrench\iffalse%
+\def\@temp@{%
+ \def\index{\bgroup\ifFrench\@DFP\fi%
+ \expandafter\egroup\@iORI}%
+ }%
+\ifx\index\undefined\else\let\@iORI\index%
+ \@temp@%
+\fi%
+\ifx\list\undefined\else%
+ \let\@liORI\list%
+\fi%
+ \let\@topsepORI\topsep%
+ \let\@partopsepORI\partopsep%
+ \let\@itemsepORI\itemsep%
+ \let\@parsepORI\parsep%
+\def\warn@seps{\def\topsep{\@w@s{\string\topsep}\@topsepORI}%
+ \def\partopsep{\@w@s{\string\partopsep}\@partopsepORI}%
+ \def\itemsep{\@w@s{\string\itemsep}\@itemsepORI}%
+ \def\parsep{\@w@s{\string\parsep}\@parsepORI}%
+ \def\@tempa{verse}\def\@tempb{quotation}%
+ \ifx\@tempa\@currenvir\let\@w@s\@gobble\else%
+ \ifx\@tempb\@currenvir\let\@w@s\@gobble\fi%
+ \fi%
+ }%
+\def\@w@s##1{\ifFTSW\f@issue%
+ \@fw{-58- %
+ }[##1]\fi}%
+\def\org@seps{\let\topsep\@topsepORI%
+ \let\partopsep\@partopsepORI%
+ \let\itemsep\@itemsepORI%
+ \let\parsep\@parsepORI%
+ }%
+\def\list##1##2{\def\@inAlist{}\@liORI{##1}{%
+ \ifx\@trivlist\@tlORI\else\warn@seps\fi%
+ ##2\org@seps}}%
+\ifx\@makecaption\undefined\else\let\@mcORI\@makecaption\fi%
+\ifx\captionseparator\undefined%
+ \def\captionseparator{~--}%
+\fi%
+\let\ifFTY\iffalse%
+\ifx\@contdelim\undefined\else%
+ \ifx\@memerror\undefined%
+ \let\@cdORI\@contdelim%
+ \def\@contdelim{\ifFTY\space\else\@cdORI\fi}%
+ \else%
+ \let\captionseparator\empty%
+ \let\captionfont\@conttfont%
+ \fi%
+\fi%
+\def\ifFTY{\ErrFrench}%
+\ifx\captionfont\undefined%
+ \let\captionfont\emph%
+ \else\let\@cfORI\captionfont%
+ \def\captionlabelfont{\upshape}%
+ \def\captionfont{\itshape\@cfORI}%
+ \ifx\captionlabeldelim\undefined\else%
+ \let\captionlabeldelim\captionseparator%
+ \let\captionseparator\empty%
+ \fi%
+\fi%
+\def\@makecaption##1##2{\ifFTY%
+ \def\@secondofmany####1####2\void{####2}%
+ \def\@tempa{\@secondofmany##2\void}%
+ \ifx\@tempa\empty%
+ \let\captionseparator\empty%
+ \fi%
+ \@mcORI{##1}{\relax%
+ \captionfont{##2}}%
+ \else\@mcORI{##1}{##2}\fi}%
+\def\@temp@{%
+ \def\thanks####1{\global\let\@makefntext\fr@makefntext%
+ \bgroup%
+ \ifFTY\ifhmode\ifdim\lastskip>\z@\unskip\fi\nobreak\fi%
+ \def\@footnotemark{\hbox{\@textsuperscript{\normalfont\,\@thefnmark}}}%
+ \fi\let\ifFTY\iffalse\@thORI{####1}%
+ \egroup}%
+ }%
+\ifx\thanks\undefined\else\let\@thORI\thanks\@temp@\fi%
+\let\ifFTY\iffalse%
+\ifx\@makefnmark\undefined\else\let\@mfnmORI\@makefnmark%
+\def\@makefnmark{\ifFTY\hbox{\@textsuperscript{\normalfont%
+ \ifx\thefootnote\relax\else\,\fi%
+ \@thefnmark}}%
+ \else\@mfnmORI\fi}%
+\fi%
+\def\@temp@{\long\def\fr@makefntext####1{%
+ \bgroup%
+ \ifFTY\def\@tempa{footnote}\let\@tfnORI\@thefnmark%
+ \ifx\@tempa\@mpfn%
+ \def\@thefnmark{%
+ %
+ \egroup\egroup%
+ \long\def\@tempa{\fnsymbol{footnote}}%
+ \ifx\@tempa\thefootnote%
+ \expandafter\raise+0.55ex%
+ \fi%
+ \hbox\bgroup\textnormal\bgroup%
+ \def\@temp@{%
+\ifx\fr@RIfM@cls\undefined%
+\ifx\thanks\relax\else\kern-1.1\parindent\fi%
+\else \kern-\parindent%
+\fi%
+ \@ifnextchar\relax{\def\@temp@{\hphantom{.}\kern+0.25em}}%
+ {\def\@temp@{.\kern+0.25em}}%
+ }%
+ \expandafter\@temp@\@tfnORI\@temp@%
+ }%
+ \leavevmode\kern+0.5em%
+ \else\def\@thefnmark{\@tfnORI\,}\fi%
+ \fi\@mfntORI{####1}\egroup}%
+ }%
+ \let\@mfntORI\@makefntext\@temp@%
+ \let\@makefntext\fr@makefntext%
+\def\ifFTY{\ErrFrench}%
+\let\@fntORI\@footnotetext%
+\long\def\@footnotetext##1{\bgroup\let\if@labelsinmargin\iffalse%
+ \@fntORI{##1}\egroup}%
+\let\@fnORI\footnote%
+\def\footnote{\bgroup%
+ \def\index{\@ifnextchar[{\f@index}%
+ {\f@index@}%
+ }%
+ \def\f@index[####1]####2{\@ifFTYfalse\@iORI[####1]{####2}%
+ \@ifFTYback}%
+ \def\f@index@####1{\@ifFTYfalse\@iORI{####1}\@ifFTYback}%
+ \ifFTY\ifhmode\ifdim\lastskip>\z@\unskip\fi%
+ \nobreak\fi\fi%
+ \ifmmode\let\@fnORI\fr@footnote\fi%
+ \@ifNextNB[%
+ \@Footnote\@Fntnorm}%
+\long\def\@Footnote[##1]##2{\@fnORI[##1]{##2}%
+ \egroup\@ifNextNBc\footnote\refmark\@Fntcoma{}}%
+\long\def\@Fntnorm##1{\@fnORI{##1}%
+ \egroup\@ifNextNBc\footnote\refmark\@Fntcoma{}}%
+\def\@Fntcoma{\ifFLA\@textsuperscript{,}\nobreak\fi}%
+\def\@Fxloat##1[##2]{\@xfORI{##1}[##2]\csname @Fend\@currenvir\endcsname}%
+\let\@fgeORI\figure\let\@efgeORI\endfigure%
+\def\@temp@{\let\@fgeORI\figure%
+ \def\figure{\let\ifMOVING\iftrue%
+ \let\if@minipage\iftrue%
+ \@set@fr@fn@%
+ \ifx\@xfORI\undefined%
+ \let\@xfORI\@xfloat\let\@xfloat\@Fxloat%
+ \fi%
+ \@fgeORI}}%
+\ifx\figure\undefined\let\@temp@\relax\fi\@temp@%
+\def\@Fendfigure{\let\@efgeORI\endfigure%
+ \def\endfigure{\@efgeORI%
+ \ifx\@lim\empty\else\marginpar{\@lim@}%
+ \xdef\@lim{}\fi\let\ifMOVING\iffalse}}%
+\ifx\endfigure\undefined\let\@Fendfigure\relax\fi%
+\let\@cnORI\caption%
+\def\@tablescaption{\@dblarg\@t@blescaption}%
+\let\mboxORI\mbox%
+\def\mbox##1{\leavevmode\hbox{\protect\@set@fr@fn@##1}}%
+\def\@set@fr@fn@{\ifFrench\let\footnote\fr@footnote\fi}%
+\def\fr@footnote{\@ifNextNB[\fr@fn@{\fr@fn@[]}%
+ }%
+\def\fr@fn@[##1]##2{\footnotemark%
+ \f@issue%
+ \@fw{-8- %
+ %
+ }[##2]%
+ }%
+\def\@t@blescaption[##1]##2{\let\cur@fn\footnote%
+ \let\footnote\fr@footnote%
+ \@cnORI[##1]{##2}\let\footnote\cur@fn}%
+\def\@temp@{%
+ \let\@tbeORI\table%
+ \def\table{\let\ifMOVING\iftrue%
+ \let\if@minipage\iftrue%
+ \ifFLA\begingroup%
+ \def\@mpfn{mpfootnote}%
+ \def\thempfn{\thempfootnote}\c@mpfootnote\z@%
+ \ifx\@captype\undefined\def\@captype{table}\fi%
+ \let\caption\@tablescaption%
+ \let\@footnotetext\@mpfootnotetext\fi%
+ \ifx\@xfORI\undefined%
+ \let\@xfORI\@xfloat\let\@xfloat\@Fxloat%
+ \fi%
+ \@tbeORI}%
+ \expandafter\let%
+ \expandafter\@dbtbeORI\csname table*\endcsname%
+ \expandafter\def\csname table*\endcsname{\let\ifMOVING\iftrue%
+ \let\if@minipage\iftrue%
+ \ifFLA\begingroup%
+ \def\@mpfn{mpfootnote}%
+ \def\thempfn{\thempfootnote}\c@mpfootnote\z@%
+ \ifx\@captype\undefined\def\@captype{table}\fi%
+ \let\caption\@tablescaption%
+ \let\@footnotetext\@mpfootnotetext\fi%
+ \ifx\@xfORI\undefined%
+ \let\@xfORI\@xfloat\let\@xfloat\@Fxloat%
+ \fi%
+ \@dbtbeORI}%
+ }%
+\ifx\table\undefined\let\@temp@\relax\fi\@temp@%
+\def\@Fendtable{%
+ \let\@etORI\endtable%
+ \def\endtable{\ifFLA\par%
+ \vskip-\lastskip%
+ \ifvoid\@mpfootins\else\vskip\skip\@mpfootins%
+ \footnoterule\unvbox\@mpfootins\fi%
+ \fi\@etORI\ifFLA\endgroup\fi%
+ \ifx\@lim\empty\else\marginpar{\@lim@}%
+ \xdef\@lim{}\fi\let\ifMOVING\iffalse}%
+ }%
+\ifx\endtable\undefined\let\@Fendtable\relax\fi%
+\def\@temp@{\def\endtable{\ifFLA\endgroup%
+ \expandafter\let\csname endtable*\endcsname\endtable%
+ \fi}%
+ }%
+\ifx\endtable\relax\@temp@%
+\fi%
+\expandafter\def\csname @Fendtable*\endcsname{%
+ \expandafter\let%
+ \expandafter\@dbetORI\csname endtable*\endcsname%
+ \expandafter\def%
+ \csname endtable*\endcsname{\ifFLA\par%
+ \vskip-\lastskip%
+ \ifvoid\@mpfootins\else\vskip\skip\@mpfootins%
+ \footnoterule\unvbox\@mpfootins\fi%
+ \fi\@dbetORI\ifFLA\endgroup\fi%
+ \ifx\@lim\empty\else\marginpar{\@lim@}%
+ \xdef\@lim{}\fi\let\ifMOVING\iffalse}%
+ }%
+\expandafter\ifx\csname endtable*\endcsname\relax%
+ \expandafter\let\csname endtable*\endcsname\endtable%
+\fi%
+\expandafter\ifx\csname\string\table\endcsname\undefined\else%
+ \expandafter\let\expandafter\BfigureORI\csname\string\figure\endcsname%
+ \expandafter\def\csname\string\figure\endcsname{\@Fendfigure\BfigureORI}%
+ \expandafter\let\expandafter\BtableORI\csname\string\table\endcsname%
+ \expandafter\def\csname\string\table\endcsname{\@Fendtable\BtableORI}%
+\fi%
+\def\drapeaufg{\ifFLA%
+ \raggedright\hbadness=6000%
+ \rightskip=0.3em plus 0.75em\hfuzz=0.4em\relax%
+ \let\enddrapeaufg\par\fi}%
+\def\drapeaufgIN{\ifFLA%
+ \raggedright\hbadness=6000%
+ \rightskip=0.3em plus 0.75em\hfuzz=6em%
+ \lefthyphenmin=12\righthyphenmin=10\relax%
+ \let\enddrapeaufgIN\par\fi}%
+\def\drapeaufd{\ifFLA\raggedleft%
+ \let\enddrapeaufd\par\fi}%
+\def\drapeaufdIN{\ifFLA%
+ \raggedleft\hfuzz=6em%
+ \lefthyphenmin=12\righthyphenmin=10\relax%
+ \let\enddrapeaufdIN\par\fi}%
+\ifx\undefined\Hy@PDFDef\let\Hy@PDFDef\pdfstringdef\fi%
+\ifx\undefined\Hy@PDFDef\else%
+ \let\@hpdORI\Hy@PDFDef%
+ \def\Hy@PDFDef##1##2{\@ifFTYfalse\afterassignment%
+ \@Fstr\@hpdORI{##1}{##2}\@ifFTYback}%
+\fi%
+\ifx\pdfstringdef\undefined\else%
+ \let\pdfstringdef\Hy@PDFDef%
+\fi%
+ \let\@lti\labelitemi\let\@ltii\labelitemii%
+ \let\@ltiii\labelitemiii\let\@ltiv\labelitemiv%
+ \@ifo%
+ \let\@ifo\undefined%
+ \@doFh%
+ \let\@doFh\undefined%
+ \let\hyphex\undefined\let\frhyphex\undefined%
+ \let\@temp@\undefined%
+ \let\ifFTY\iffalse\let\ifFTR\iffalse%
+ \let\ifFLA\iffalse\let\ifFMA\iffalse\let\ifFH\iffalse%
+\def\@tempa##1{\o@everypar{\rl@everypar##1}}%
+\ifx\@tempa\everypar\let\TeXeverypar\o@everypar%
+\else\let\TeXeverypar=\everypar%
+\fi%
+ \ifx \TeXXeTstate \undefined%
+ \edef \next {\ifx \beginL \undefined 00\else 01\fi}%
+ \else%
+ \edef \next {\ifnum \TeXXeTstate = 0 00\else 01\fi}%
+ \fi%
+ \if \next\let\beginL\relax\let\beginR\relax%
+ \else%
+ \edef\@fepORI{{\the\TeXeverypar}}%
+ \def\@SetBFWdirection{\csname begin%
+ \beginFWdirection\endcsname}%
+ \TeXeverypar={\@SetBFWdirection%
+ \let\@SetBFWdirection\relax%
+ {\let\@nodocument\relax%
+ \@fepORI}}%
+ \fi%
+ \let\ErrFrench\@Ffnt\def\@Ffnt##1{}%
+\ifx\undefined\babel@core@loaded%
+\protected@write\@auxout{}{\protect%
+\csname auxWARNINGi\protect\endcsname{\protect\typeout%
+ {-34- this file and other auxiliary files require to %
+ use the following}}}%
+\protected@write\@auxout{}{\protect%
+\csname auxWARNINGi\protect\endcsname{\protect\typeout%
+ {-34- LaTeX packages: \frenchpack!}}}%
+\protected@write\@auxout{}{\protect%
+\csname auxWARNINGi\protect\endcsname{\protect\typeout%
+ {-34- check \protect\protect\protect\usepackage%
+ \protect\space or remove these files. %
+ Typesetting is aborted!}%
+ \protect\stop}}%
+\fi%
+\@finput{frpatch.sty}%
+ \ifx\FSfd@patch\FSfd\else
+ \f@issue%
+ \@fw{-42- %
+ %
+ %
+ }%
+ \batchmode\@@end%
+ \fi%
+ \let\@Ffnt\ErrFrench\let\ErrFrench\undefined%
+ \IfFileExists{\frenchname.cfg}{%
+ \f@issue%
+ \@fw{-48- %
+ %
+ }%
+ \@finput{\frenchname.cfg}}{}%
+ \beginlanguage}%
+ \let\@dORI\document%
+ \def\document{%
+ \ifx\noxcomment\undefined\else%
+ \global\let\@x@hk\xcomment@hook\global\noxcomment\fi%
+ \ifx\btxselectlanguage\undefined%
+ \else\ifx\babel@savevariable\undefined%
+ \f@issue\@fw{-87- %
+ %
+ %
+ }%
+ \stop%
+ \fi%
+ \fi%
+ \ifx\@bglngpk\babel@savevariable%
+ \else%
+ \f@issue\@fw{-71- %
+ %
+ %
+ }%
+ \fi\let\@bglngpk\undefined%
+ \@dORI%
+ \GOfrench%
+ \let\GOfrench\undefined%
+ \ifx\noxcomment\undefined\else\let\xcomment@hook\@x@hk%
+ \expandafter\xcomment@hook\fi}%
+\@makeother`\@makeother<\@makeother>\@makeother'%
+\let\enddocumentasusual\enddocument%
+ \def\enddocument{\def\@tempa{\AtEndDocument{\french\f@clearpage%
+ \global\let\ifCLA\iffalse%
+ \let\ifCLAfrench\iffalse%
+ \endfrench}}%
+ \csname f@lastpage\endcsname%
+ \@CGroup%
+ \ifFLA%
+ \@tempa%
+ \def\@tempa{empty}\ifx\@specialstyle\@tempa%
+ \else\gdef\@specialstyle{french}\fi%
+ \fi%
+ \let\GOfrench\relax%
+ \switchtolanguage\englishTeXmods%
+ \let\f@clearpage\clearpage%
+\ifx\lastpage@putlabel\undefined%
+\else\let\clearpage\relax%
+ \let\lastpage@putlabelORI\lastpage@putlabel%
+ \def\lastpage@putlabel{\addtocounter{page}{+1}\lastpage@putlabelORI%
+ \addtocounter{page}{-1}}%
+\fi%
+ %
+ \ifx\undefined\babel@core@loaded\else%
+ \ifx\@testdef\undefined\else%
+ \@gG{@td}{@testdef}{//}{3}\fi%
+ \fi%
+ %
+\ifx\ConfigureToc\undefined\else%
+ \let\@ifFTYfalse\relax\let\@ifFTYback\relax%
+ \@Fstr\let\@Fstr\relax%
+\fi%
+ \enddocumentasusual%
+ }%
+\let\@whatUCH\relax%
+\def\allowfulluchyph{\@noBDfr%
+ \uchyph=1\let\@whatUCH\allowfulluchyph%
+ \let\@uchbox\empty}%
+\def\allowuchyph{\@noBDfr%
+ \uchyph=1\let\@whatUCH\allowuchyph%
+ \let\@uchbox\hbox}%
+\def\disallowuchyph{\@noBDfr%
+ \uchyph=-1%
+ \let\@whatUCH\disallowuchyph\let\@uchbox\hbox}%
+\def\notthyphenation{\@noBDfr%
+ {\tt\hyphenchar\font=-1}%
+ \let\ifTTH\iffalse}%
+\def\tthyphenation{\@noBDfr%
+ {\tt\hyphenchar\font=`\-}%
+ \let\ifTTH\iftrue}%
+\let\@whatUCH\allowuchyph%
+\let\ifTTH\iffalse%
+\let\ifFH\iffalse%
+\def\hyphex#1{%
+ \if#1\empty%
+ \else%
+ \edef\@excn{#1}\fi%
+ \let\if@FE\iftrue}%
+\def\frhyphex{%
+ \if@PMF\else\hyphex{\frenchname}\fi}%
+\def\@eatDP{\@ifNextNB:{\@gobble}{}}%
+\def\f@ffrench{\ifx\listoffigures\relax\else%
+ \figurename~\thefigure\ifFTY\captionseparator\fi\fi%
+ \ifFTY\expandafter\@eatDP\fi}%
+\def\f@tfrench{\ifx\listoftables\relax\else%
+ \tablename~\thetable\ifFTY\captionseparator\fi\fi%
+ \ifFTY\expandafter\@eatDP\fi}%
+\def\unnumberedcaptions#1{\@noBDfr%
+ %
+ \expandafter\let\csname listof#1s\endcsname\relax%
+ \ifx\listoffigures\relax\ifx\listoftables\relax%
+ \let\unnumberedcaptions\undefined%
+ \fi\fi%
+ }%
+\@ifundefined{captionsnames}{\def\captionsnames{\relax}\let\@tempa\@currname%
+\xdef\@currname{fenglish}\@finput{fenglish.sty}\let\@currname\@tempa}{}%
+\def\languagename{french}%
+\let\ifnonenglishheadings\iftrue%
+\def\tocreduite#1#2{}%
+\def\@sEAT#1#2{\@sORI*{\sommairename}}%
+\def\@cEAT#1#2{\@chORI*{\sommairename}}%
+\def\@smr[#1]{\let\@tempa\contentsname%
+ \let\contentsname\sommairename%
+ \ifx\tableofcontents\undefined\else%
+ \begingroup\ifcase #1 0%
+ \or \let\l@paragraph\tocreduite%
+ \let\l@subparagraph\tocreduite%
+ \or \let\l@subsubsection\tocreduite%
+ \let\l@paragraph\tocreduite%
+ \let\l@subparagraph\tocreduite%
+ \or \let\l@subsection\tocreduite%
+ \let\l@subsubsection\tocreduite%
+ \let\l@paragraph\tocreduite%
+ \let\l@subparagraph\tocreduite%
+ \else \let\l@section\tocreduite%
+ \let\l@subsection\tocreduite%
+ \let\l@subsubsection\tocreduite%
+ \let\l@paragraph\tocreduite%
+ \let\l@subparagraph\tocreduite%
+ \fi%
+ \let\@sORI\section\let\@chORI\chapter%
+ \let\section\@sEAT\let\chapter\@sEAT%
+ \let\@ToCisNOT\relax%
+ \def\@starttoc##1{%
+ \ifx\fr@RIfM@cls\undefined%
+ \else\chapter*{\sommairename}%
+ \fi%
+ \begingroup\makeatletter%
+ \immediate\openin\@inputcheck \jobname.##1 %
+ \if@filesw \expandafter\newwrite\csname tf@##1\endcsname\fi%
+ \ifeof\@inputcheck \@Ffnt{\jobname.##1}%
+ \if@filesw\immediate\openout \csname tf@##1\endcsname%
+ \jobname.##1\relax\fi%
+ \else\immediate\closein\@inputcheck \relax\@@input \jobname.##1 %
+ \@ifundefined{@ToCisNOT}{%
+ \if@filesw\immediate\openout \csname tf@##1\endcsname%
+ \jobname.##1\relax\fi}{}%
+ \fi\global\@nobreakfalse \endgroup}%
+ \ifx\fr@RIfM@cls\undefined%
+ \else\def\contentsname{}%
+ \fi%
+ \tableofcontents\endgroup%
+ \def\tableofcontents{%
+ \ifx\pdfstringdef\undefined%
+ \else\let\contentsline\contentslineORI\fi%
+ \addtocontents{toc}{\protect%
+ \let%
+ \protect\@ToCisNOT\protect\empty}%
+ \begingroup%
+ \def\@starttoc####1{\begingroup%
+ \makeatletter\@input{\jobname.####1}%
+ \if@filesw\immediate\openout \csname tf@####1\endcsname%
+ \jobname.####1\relax\fi%
+ \global\@nobreakfalse \endgroup}%
+ \@tocORI\endgroup}%
+ \fi%
+ \let\contentsname\@tempa%
+ }%
+\def\sommaire{\@ifNextNB[{\@smr}{\@smr[3]}%
+ }%
+\def\@temp@{\let\if@twocolumn\iffalse}%
+\@ifundefined{if@twocolumn}{\@temp@}{}%
+\@ifundefined{abstract}{%
+ \def\abstract{\let\@w@s\@gobble%
+ \if@twocolumn\section*{\abstractname}%
+ \else\sm@ller\begin{center}%
+ \textbf{\abstractname\vspace*{-.5em}\vspace*{\z@}}%
+ \end{center}\quotation\fi}%
+ \def\endabstract{\if@twocolumn\else\endquotation\fi}}{}%
+\@ifundefined{resume}{%
+\def\resume{%
+ \let\@w@s\@gobble%
+ \abstract}%
+\let\endresume\endabstract%
+ }{}%
+\def\@tempa{%
+\def\endkeywords{\@noBDfr}%
+\def\keywords{\@noBDfr%
+ \let\@w@s\@gobble%
+ \quotation\noindent\sm@ller{%
+ \ifx\fr@RIfM@cls\undefined%
+ \else\let\textbf\textsc\fi%
+ \kwname}%
+ \let\endkeywords=\endquotation}%
+ }%
+\@ifundefined{keywords}{\@tempa}%
+ {\ifx\fr@RIfM@cls\undefined%
+ \else\@tempa%
+ \fi%
+ }%
+\@ifundefined{endkeywords}{\let\endkeywords\relax}{}%
+\def\motsclef{\keywords\relax%
+ \def\endmotsclef{\endkeywords}}%
+\let\ifFTR\iftrue%
+\ifx\texteuro\undefined\else%
+ \let\textcurrencyORI\textcurrency%
+ \def\textcurrency{\ifFTR\expandafter\texteuro%
+ \else\expandafter\textcurrencyORI%
+ \fi}%
+\fi%
+\def\annexe {\@ann{\appendixname}}%
+\def\annexes{\@ann{\appendixname s}}%
+\def\@ann#1{\@noBDfr\leavevmode%
+ \ifx\fr@RIfM@cls\undefined\else%
+ \let\chaptername\appendixname%
+ \fi%
+ \ifx\chapter\undefined\else%
+ \par\setcounter{chapter}{0}\setcounter{section}{0}%
+ \def\@chapapp{\appendixname}\def\thechapter{\Alph{chapter}}%
+ \addcontentsline{toc}{chapter}{\protect#1}%
+ \fi}%
+\@ifundefined{@restonecolfalse}{\def\@restonecolfalse{}%
+ \def\@restonecoltrue{}}{}%
+\@ifundefined{@mkboth}{\def\@mkboth#1#2{}}{}%
+\def\glossaire{\@glo{%
+ \glossaryname}}%
+\def\glossaires{\@glo{%
+ \glossaryname s}}%
+\def\@glo#1{\ifx\chapter\undefined\else%
+ \setcounter{chapter}{0}\setcounter{section}{0}%
+ \@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn\fi%
+ \hbox{}%
+ \clearpage%
+ \ifx\fr@RIfM@cls\undefined%
+ \chapter*{#1%
+ \@mkboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}%
+ }%
+ \addcontentsline{toc}{chapter}{\protect#1}%
+ \else\chapter*{#1}%
+ \fi%
+ \ifx\undefined\@glossaryfile\else%
+ \immediate\closeout\@glossaryfile%
+ \ifx\undefined\glossaryentry%
+ \long\def\glossaryentry##1##2{\noindent-- ##1\par}%
+ \fi%
+ \ifx\undefined\theglossary%
+ \let\theglossary\description%
+ \let\endtheglossary\enddescription%
+ \let\scan@allowedfalse\makeatother%
+ \def\pfill##1 {}%
+ \def\@pgf[##1]{\@finput{##1}}%
+ \def\printglossary{\@ifNextNB[%
+ {\@pgf}{\@pgf[\jobname.gls]}}%
+ \fi%
+ \fi\fi}%
+\def\datefrench{%
+\def\todayfrench{\ifx\ier\undefined\def\ier{er}\fi%
+ \ifnum\day=1\relax 1\ier%
+ \else \number\day\fi%
+ \space\ifcase\month\or janvier\or f\'evrier\or mars\or %
+ avril\or mai\or juin\or juillet\or ao\^ut\or septembre\or %
+ octobre\or novembre\or d\'ecembre\fi \space\number\year}%
+}\datefrench%
+\if@filesw
+ \def\ordinalSecondNam{{s}econd}%
+ \def\ordinalSecondName{{s}econde}%
+\else%
+ \def\ordinalSecondNam{{d}euxi\`eme}%
+ \let\ordinalSecondName\ordinalSecondNam%
+\fi%
+ \def\@osn#1#2{\expandafter\ifx\csname#1osn\endcsname%
+ \relax#2\else\csname#1osn\endcsname\fi}%
+ \def\ordinal#1{\ifcase\value{#1}\or {p}remier%
+ \or\@osn{#1}{\ordinalSecondNam}\else\ordin@l{#1}\fi}%
+ \def\ordin@l#1{\ifcase\value{#1}\or\or\or %
+ {t}roisi\`eme\if@filesw{\protected@write\@auxout{}{%
+ \protect\expandafter%
+ \protect\gdef\protect\csname#1osn%
+ \protect\endcsname%
+ {{d}euxi\`eme}}}%
+ \fi%
+ \or {q}uatri\`eme\or {c}inqui\`eme\or {s}ixi\`eme\or %
+ {s}epti\`eme\or {h}uiti\`eme\or {n}euvi\`eme\or {d}ixi\`eme\or %
+ {o}nzi\`eme\or {d}ouzi\`eme\or {t}reizi\`eme\or {q}uatorzi\`eme\or %
+ {q}uinzi\`eme\or {s}eizi\`eme\or {d}ix-septi\`eme\or {d}ix-huiti\`eme\or %
+ {d}ix-neuvi\`eme\or {v}ingti\`eme\fi}%
+ \def\ordinale#1{\ifcase\value{#1}\or {p}remi\`ere%
+ \or\@osn{#1}{\ordinalSecondName}\else\ordin@l{#1}\fi}%
+ \def\Ordinal{\expandafter\uppercase\ordinal}%
+ \def\Ordinale{\expandafter\uppercase\ordinale}%
+\def\captionsfrench{%
+ \ifFTR%
+ \ifx\captionsnames\captionsfrench\else%
+ \let\@tdORI\today%
+ \let\f@fORI\fnum@figure%
+ \let\f@tORI\fnum@table%
+ \let\@cnsORI\captionsnames%
+ \def\pagename{page}%
+ \def\refname{R\'ef\'erences}%
+ \def\abstractname{R\'esum\'e}%
+\ifx\bibname\undefined\else%
+ \def\bibname{Bibliographie}%
+\fi%
+\ifx\btxselectlanguage\undefined%
+ \csname bibsfrench\endcsname%
+\fi%
+ \def\contentsname{Table des mati\`eres}%
+ \def\listfigurename{Table des figures}%
+ \def\listtablename{Liste des tableaux}%
+\ifx\listalgorithmname\undefined\else%
+ \def\ALG@name{algorithme}%
+ \def\listalgorithmname{Liste des \ALG@name s}%
+\fi%
+ \def\indexname{Index}%
+ \def\seename{\emph{voir}}%
+ \def\seealsoname{\emph{voir aussi}}%
+ \def\figurename{\textsc{Fig.}}%
+ \def\tablename{\textsc{Tab.}}%
+ \def\sommairename{Sommaire}%
+ \def\partname{%
+ \ignorespaces\Ordinale{part}\space partie%
+ \@RPtNoInDoc\noexpand\@RPtNoInToc}%
+ \def\glossaryname{Glossaire}%
+ \def\kwname{\textbf{Mots-cl\'e} : }%
+ \def\draftname{- \noexpand\351preuve -}%
+ \def\prefacename{Pr\'eface}%
+\ifx\proofname\undefined\else\def\proofname{D\'emonstration}\fi%
+\ifx\fr@RIfM@cls\undefined%
+ \let\fnum@figure\f@ffrench%
+ \let\fnum@table\f@tfrench%
+ \def\@RPtNoInToc{}%
+ \def\@RPtNoInDoc{\def\thepart{}}%
+ \else\def\@RPtNoInToc##1.{.}%
+ \def\@RPtNoInDoc##1\thepart{}%
+\fi%
+\ifx\opening\undefined\else%
+ \def\headtoname{}%
+ \def\ccname{c.c. }%
+ \def\enclname{P.j. }%
+ \def\PSname{P.-S. :}%
+ \def\Objectname{Objet :}%
+ \def\YourRefname{v/r\'ef. :}%
+ \def\OurRefname{n/r\'ef. :}%
+ \def\emailname{m.\'el. :}%
+\fi%
+\ifx\slidename\undefined\else%
+ \def\slidename{Transparent}%
+ \def\listslidename{Liste des transparents}%
+\fi%
+\ifx\notesname\undefined\else%
+ \def\notesname{Notes}%
+\fi%
+ \def\chaptername{Chapitre}%
+ \def\appendixname{Annexe}%
+ \let\captionsnames\captionsfrench%
+ \fi%
+ \let\today\todayfrench%
+\def\@cORI{\@cnsORI%
+ \let\today\@tdORI%
+ \let\fnum@figure\f@fORI%
+ \let\fnum@table\f@tORI}%
+\fi%
+}%
+\iffrenchbibliography%
+ \ifx\@rbibstyid\undefined%
+ \let\@rbibstyid\empty%
+ \ifx\jb@pkg@name\undefined\else%
+ \def\@rbibstyid{jb}%
+ \fi%
+ \fi%
+ \ifx\bibsfrench\undefined%
+ \edef\@tempa{fr\@rbibstyid bib.ldf}%
+ \IfFileExists{\@tempa}{%
+\f@issue%
+\@fW{ -65- %
+ %
+ %
+ }\@finput{\@tempa}}{}%
+ \fi%
+ \ifx\bibsenglish\relax%
+ \edef\@tempa{en\@rbibstyid bib.ldf}%
+ \InputIfFileExists{\@tempa}{}{}%
+ \fi%
+\fi%
+\let\@tlORI\@trivlist%
+\def\frenchtrivsepwarnings{\let\ifFTSW\iftrue}%
+\def\nofrenchtrivsepwarnings{\let\ifFTSW\iffalse}%
+\long\def\frtrivseplengths#1{%
+ \nofrenchtrivsepwarnings%
+ \long\def\fr@tsl{#1}%
+ }%
+\def\fr@tsl{\setlength{\parsep}{0.2ex plus 0.1ex minus 0.1ex}%
+ \setlength{\itemsep}{0.2ex plus 0.1ex minus 0.1ex}%
+ \setlength{\topsep}{0.4ex plus 0.2ex minus 0.2ex}%
+ \setlength{\partopsep}{1.6ex plus 0.8ex minus 0.8ex}%
+ }%
+\def\frenchtrivsep{\ifFLA\def\@trivlist{%
+ \fr@tsl\@tlORI}%
+ \fi}
+\def\nofrenchtrivsep{\let\@trivlist\@tlORI}%
+\@ifundefined{@afterindenttrue}{\let\@afterindenttrue\relax%
+ \let\@afterindentfalse\relax}{}%
+\let\@aifORI\@afterindentfalse%
+\edef\@piORI{\the\parindent}%
+\begingroup \catcode `| =0 \catcode `[ = 1 \catcode`] =2%
+ \catcode `\{=12 \catcode `\}=12 \catcode`\\=12%
+ |gdef|@xversatim#1\end{versatim}[#1|end[versatim]]%
+ |endgroup%
+\let\@FIM@\relax%
+\def\@FIM@{\ifCG\else\ifFLA\ifEPG\ifEPGR\else\leftguillemets\fi\fi\fi\fi}%
+\let\checkitemguillemets\@FIM@%
+\def\fr@idf{\let\@afterindentfalse\@afterindenttrue\@afterindenttrue}%
+\def\fr@nidf{\let\@afterindentfalse\@aifORI\@afterindentfalse}%
+\ifx\titlespacing\undefined%
+ \let\which@indent\fr@idf%
+\else\let\which@indent\fr@nidf%
+\fi%
+\def\fr@lbi{\def\labelitemi{\@FIM@--}\def\labelitemii{\@FIM@--}%
+ \def\labelitemiii{\@FIM@--}\def\labelitemiv{\@FIM@--}%
+ }%
+\long\def\frlabelitems#1{\ifFLA\long\def\fr@lbi{#1}%
+ \fr@lbi\fi}%
+\def\@FIM{%
+ \fr@lbi%
+ \def\indentfirst{\ifFLA\fr@idf\fi}%
+ \def\nonindentfirst{\ifFLA\fr@nidf\fi}%
+ \which@indent%
+ %
+ \def\labelfrenchenumi{\@FIM@\quando={\arabic{enumi}}}%
+ \def\labelfrenchenumii{\@FIM@\quando={\arabic{enumii}}}%
+ \def\labelfrenchenumiii{\@FIM@\quando={\arabic{enumiii}}}%
+ \def\labelfrenchenumiv{\@FIM@\quando={\arabic{enumiv}}}%
+ \def\order{\ifnum \@enumdepth >3 \@toodeep\else%
+ \advance\@enumdepth \@ne%
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}\list%
+ {\csname labelfrench\@enumctr\endcsname}%
+ {\usecounter{\@enumctr}%
+ \ifFLA%
+ \addtolength{\leftmargin}{0.9em}%
+ \fi%
+ \def\makelabel####1{\hss\llap{####1}}}\fi}%
+ \let\endorder =\endlist%
+ %
+ %
+ \def\versatim{\bgroup\let\@w@s\@gobble%
+ \ifFLA%
+ \let\dospecials\@dsversa%
+ \def\@xobeysp{\leavevmode{}\space}%
+ \ifx\verbatim@font\undefined\let\verbatim@font=\tt\fi%
+ \let\@ttORI\verbatim@font%
+ \def\verbatim@font{\@ttORI%
+ \verse%
+ \vskip-2\parskip%
+ \vskip-1\partopsep\vskip-\topsep%
+ \leavevmode%
+ \leftskip=-2\itemindent%
+ \parindent=2\itemindent%
+ \parskip\z@%
+ \pretolerance=\@M\tolerance=\@M\hbadness=\@M%
+ \hyphenchar\the\font=`\-}%
+ \let\tt=\verbatim@font%
+ \fi%
+ \let\@xverbatim\@xversatim%
+ \verbatim}%
+ \def\endversatim{\endverse%
+ \ifTTH\else\hyphenchar\the\font=-1\fi%
+ \endverbatim\ifFLA\vskip+1\partopsep\fi\egroup}%
+ \@ifundefined{vers}{%
+ \def\@vers##1{\def\@tempa ####1##1{\leavevmode\null####1%
+ \endgroup}\@tempa}%
+ \def\vers{%
+ \begingroup%
+ \def\@xobeysp{\ifFLA\else\penalty\@M\fi\space}%
+ \catcode``=13 \@noligs \tt%
+ %
+ \ifFLA\let\dospecials\@dsversa\fi%
+ \let\do\@makeother\dospecials\@vobeyspaces \frenchspacing%
+ \@vers}}{}%
+ \@ifundefined{verbatimfile}%
+ {\def\verbatimfile##1{\begingroup\@verbatim\frenchspacing
+ \@vobeyspaces\input ##1\endgroup}}{}%
+}%
+\def\@temp@{%
+\let\@ps@fp\ps@firstpage%
+\def\@opening{%
+\let\@wideletter\relax%
+\let\emailadd\@empty\let\@yourref\@empty\let\@ourref\@empty%
+\let\@object\@empty%
+ \@ifundefined{wideletter}{%
+ \def\@wideletter{}\def\wideletter{%
+ \def\@wideletter{\leftskip-0.25\indentedwidth}}}{}%
+ \@ifundefined{email}{%
+ \def\email####1{\def\emailadd{\texttt{####1}}}}{}%
+ \@ifundefined{emailadd}{\def\emailadd{}}{}%
+ \@ifundefined{yourref}{%
+ \def\yourref####1{\def\@yourref{####1}}}{}%
+ \@ifundefined{@yourref}{\def\@yourref{}}{}%
+ \@ifundefined{ourref}{%
+ \def\ourref####1{\def\@ourref{####1}}}{}%
+ \@ifundefined{@ourref}{\def\@ourref{}}{}%
+ \@ifundefined{object}{%
+ \def\object####1{\def\@object{####1}}}{}%
+ \@ifundefined{@object}{\def\@object{}}{}%
+ \@ifundefined{PS}{%
+ \def\PS####1{{\raggedright\PSname\space ####1}}}{}%
+ \def\ps@firstpage{\ifFLA%
+ \advance\topmargin by -20\p@%
+ %
+ \def\@oddhead{\ifx\undefined\formhead\else%
+ \bgroup\hss\formhead\hss\egroup\fi}%
+ \def\@oddfoot{\raisebox{-45\p@}[\z@]%
+ {\hbox to \textwidth{%
+ \ifcase \@ptsize\relax%
+ \normalsize%
+ \or \sm@ller%
+ \or \footnotesize%
+ \fi%
+ %
+ \ifx\undefined\formfoot\hfill\else%
+ \bgroup\hss\formfoot\hss\egroup\fi%
+ }}\hss}%
+ \def\@evenhead{}\def\@evenfoot{}%
+ \else\@ps@fp\fi}%
+ \long\def\opening####1{%
+ \ifFLA%
+ \advance\indentedwidth by -0.25\longindentation%
+ \advance\longindentation by 0.22\textwidth%
+ \advance\parindent by 1.5em%
+ %
+ \let\nopagenumbers\relax%
+ \thispagestyle{firstpage}%
+ %
+ \raggedbottom%
+ \ifx\@empty\fromlocation\location{Le}\fi%
+ \ifx\@empty\fromaddress\let\fromaddress\space\fi%
+ {\raggedright\hspace*{-0.25\indentedwidth}%
+ \parbox[t]{0.5\textwidth}{\ignorespaces%
+ \vbox to 0\p@{\fromaddress\vss}}%
+ \\*[1.75\baselineskip]%
+ \par}%
+ \ifx\@empty\toname%
+ %
+ {\raggedleft\bgroup\fromlocation\space\@date\egroup\par}%
+ \else%
+ {\raggedleft\begin{tabular}{l}\ignorespaces%
+ \toname\\ \toaddress\\*[6\parskip]%
+ \fromlocation\space\@date\end{tabular}\par}%
+ \fi%
+ \ifx\@empty\@ourref\else%
+ {\raggedright \hspace*{-0.25\indentedwidth}%
+ \OurRefname\space\@ourref \par}%
+ \fi%
+ \ifx\@empty\@yourref\else%
+ {\raggedright \hspace*{-0.25\indentedwidth}%
+ \YourRefname\space\@yourref \par}%
+ \fi%
+ \ifx\@empty\@object\else%
+ {\raggedright \hspace*{-0.25\indentedwidth}%
+ \textbf{\Objectname}\space\@object \par}%
+ \fi%
+ \par\vspace*{3\parskip}%
+ \noindent####1\hfill\vspace*{3\parskip}%
+ \@wideletter%
+ \else\@oORI{####1}%
+ \fi}}%
+\def\@closing{%
+ \def\closing{\fclosing@[9]}%
+ \def\fclosing{\@ifNextNB[{\fclosing@}{\fclosing@[9]}%
+ }%
+ \long\def\fclosing@[####1]####2{%
+ \ifFLA%
+ \par%
+ \vspace{\parskip}\stopbreaks%
+ \ignorespaces ####2\\[####1\medskipamount]%
+ \ifx\@empty\fromaddress\else%
+ \hspace*{-0.25\indentedwidth}%
+ \hspace*{\longindentation}\fi%
+ {\raggedright\begin{tabular}{l}\ignorespaces%
+ \ifx\@empty\fromsig%
+ \fromname%
+ \else \fromsig \fi%
+ \ifx\@empty\emailadd\else\\{\footnotesize%
+ \emph{\emailname} \emailadd}\fi%
+ \strut\end{tabular}}\par%
+ \vskip 0pt plus 1fil%
+ \else\@cloORI{####2}%
+ \fi}%
+ \def\endletter{\ifFLA\vskip 0pt plus 3fil\fi%
+ \@elORI}}%
+\@ifundefined{opening}{\def\@opening{}\def\@closing{}}%
+ {\let\@oORI\opening\let\@cloORI\closing%
+ \let\@elORI\endletter%
+ \@opening\@closing}%
+}%
+\ifx\opening\undefined\let\@temp@\relax\fi%
+\@temp@%
+\let\ifFLA\iffalse%
+\def\@temp@{%
+\def\figurette{\@noBDfr%
+ \ifx\@fgeORI\undefined\figure\fi%
+ \ifFLA\bgroup%
+ \def\@xfloat####1[h]{%
+ \expandafter\let\csname end####1\endcsname\endfigurette%
+ \vskip\intextsep\def\@captype{####1}\parindent\z@}%
+ \@fgeORI[h]\else\figure[h]\fi}%
+\def\endfigurette{\@noBDfr%
+ %
+ \ifFLA\vskip\intextsep\egroup\else\@efgeORI\fi%
+ \ifx\@lim\empty\else\marginpar{\@lim@}\xdef\@lim{}\fi%
+ \let\ifMOVING\iffalse}%
+ }%
+\ifx\figure\undefined\def\@temp@{}\fi%
+\@temp@%
+\def\@tempa{\let\fr@RIfM@cls\undefined}%
+\let\fr@RIfM@cls\RIfM@%
+ \ifx\RIfM@\undefined\else%
+ \expandafter\ifx\csname @classname\endcsname\relax\@tempa%
+ \else\def\@tempb#1#2#3#4\@nil{%
+ \if#1a\if#2m\if#3s\else\@tempa\fi%
+ \else\@tempa\fi\else\@tempa\fi}%
+ \expandafter\@tempb\@classname\@nil%
+ \fi%
+ \fi%
+\def\@temp@{\def\ps@french{\if@fancyplain\ps@plain@fancy\else\ps@plain\fi}}%
+\ifx\ps@fancyplain\undefined%
+ \ifx\fr@RIfM@cls\undefined\def\ps@french{}%
+ \else\def\ps@french{\global\topskip\normaltopskip}%
+ \fi%
+\else\@temp@%
+\fi%
+\let\ps@frenchORI\ps@french%
+\let\@sdORI\secdef%
+\def\nofrenchpagestyle{\let\secdef\@sdORI}%
+\def\frenchpagestyle{%
+ \def\secdef{\ifFLA\thispagestyle{french}\fi\@sdORI}%
+ }%
+\frenchpagestyle%
+\ifx\aliaspagestyle\undefined%
+\def\nobeginingfolio{\let\ps@french\ps@empty}%
+\else%
+\def\nobeginingfolio{\let\ps@french\ps@empty%
+ \aliaspagestyle{chapter}{empty}%
+ }%
+\fi%
+\def\beginingfolio{\let\ps@french\ps@frenchORI%
+ \frenchpagestyle}%
+\@ifundefined{nopagenumbers}{%
+ \def\nopagenumbers{\ifFLA\pagestyle{empty}%
+ \thispagestyle{empty}\fi}%
+ }{}%
+\def\ifFLA{\ErrFrench}%
+ \newif\ifnonvoid%
+\def\@desarm{%
+ \newbox\@FrBoxi\newbox\@FrBoxii\newbox\@FrBoxiii%
+ \newbox\@FrBoxiiii\newbox\@FrBoxvi\newbox\@FrBoxvii\newbox\@FrBoxQuotes%
+ \ifx\@FrDimenS\undefined\newdimen\@FrDimenS\fi%
+ \def\@setpartozero{\widowpenalty=\z@\clubpenalty=\z@%
+ \interlinepenalty=\z@\brokenpenalty=\z@\displaywidowpenalty=\z@}%
+ \def\nonvoidtrue{\let\ifnonvoid\iftrue}%
+ \def\nonvoidfalse{\let\ifnonvoid\iffalse}%
+ \def\@transfervbox##1##2{\nonvoidtrue%
+ \loop%
+ \setbox\@FrBoxi=\vbox{\unvbox##1\global\setbox\@FrBoxiii=\lastbox%
+ \unskip}%
+ \ifvoid\@FrBoxiii\nonvoidfalse\fi%
+ \ifnonvoid%
+ \setbox\@FrBoxii=\vbox{\unvbox##2\box\@FrBoxiii}%
+ \setbox##1=\box\@FrBoxi\setbox##2=\box\@FrBoxii%
+ \repeat}%
+ \def\@transferaddvbox##1##2{\nonvoidtrue%
+ \setbox\@FrBoxi=\vbox{\unvbox##1\global\setbox\@FrBoxiii=\lastbox%
+ \unskip}%
+ \setbox##2=\vbox{\box\@FrBoxiii}%
+ \setbox##1=\box\@FrBoxi%
+ \loop%
+ \setbox\@FrBoxi=\vbox{\unvbox##1\global\setbox\@FrBoxiii=\lastbox%
+ \unskip}%
+ \ifvoid\@FrBoxiii\nonvoidfalse\setbox##1=\box\@FrBoxi\fi%
+ \ifnonvoid%
+ \setbox\@FrBoxii=\vbox{\unvbox##2%
+ \hbox to \@FrDimen{\copy\@FrBoxQuotes\unhbox\@FrBoxiii}}%
+ \setbox##1=\box\@FrBoxi\setbox##2=\box\@FrBoxii%
+ \repeat}%
+ \def\@sendtopage##1{\nonvoidtrue%
+ \loop%
+ \setbox\@FrBoxi=\vbox{\unvbox##1\global\setbox\@FrBoxiii=\lastbox%
+ \unskip}%
+ \ifvoid\@FrBoxiii\nonvoidfalse\setbox##1=\box\@FrBoxi\fi%
+ \ifnonvoid%
+ \unhbox\@FrBoxiii\unskip\break%
+ \setbox##1=\box\@FrBoxi%
+ \repeat}%
+ \def\@stared{\egroup%
+ \@transfervbox\@FrBoxvi\@FrBoxvii%
+ \@transferaddvbox\@FrBoxvii\@FrBoxvi%
+ \setbox\@FrBoxvii=\vbox{\unvbox\@FrBoxvi%
+ \global\setbox\@FrBoxiiii=\lastbox\unskip}%
+ \@transfervbox\@FrBoxvii\@FrBoxvi%
+ \noindent \@sendtopage\@FrBoxvi%
+ \unhbox\@FrBoxiiii\unskip\unskip\unpenalty}%
+ \def\@fniv2{\egroup%
+ \@transfervbox\@FrBoxvi\@FrBoxvii%
+ \@transferaddvbox\@FrBoxvii\@FrBoxvi%
+ \setbox\@FrBoxvii=\vbox{\unvbox\@FrBoxvi%
+ \global\setbox\@FrBoxiiii=\lastbox\unskip}%
+ \@transfervbox\@FrBoxvii\@FrBoxvi%
+ \noindent \@sendtopage\@FrBoxvi%
+ \setbox\@FrBoxvii=\vbox\bgroup\@setpartozero%
+ \noindent \unhbox\@FrBoxiiii\unskip\unskip\unpenalty}%
+ \def\@qqguill{\relax}%
+ \def\@staring{\global\setbox\@FrBoxQuotes=\hbox to 0.81em{\@qqguill}\egroup%
+ \setbox\@FrBoxvi=\vbox{\unvbox\@FrBoxvii%
+ \global\setbox\@FrBoxiiii=\lastbox\unskip}%
+ \@transfervbox\@FrBoxvi\@FrBoxvii%
+ \noindent\@sendtopage\@FrBoxvii%
+ \setbox\@FrBoxvi=\vbox\bgroup\@setpartozero%
+ \hangindent=\wd\@FrBoxQuotes\hangafter=1%
+ \setbox\@FrBoxvii=\hbox{\unhcopy\@FrBoxiiii\unskip\unskip%
+ \unpenalty}%
+ \@FrDimenS=\@FrDimen \advance\@FrDimenS by -2em%
+ \ifvoid\@FrBoxiiii\indent\copy\@FrBoxQuotes%
+ \else%
+ \parindent=\z@%
+ \ifdim \wd\@FrBoxvii>\@FrDimenS \unhbox\@FrBoxvii\break%
+ \else \unhbox\@FrBoxvii%
+ \fi\fi}%
+ \def\@qquotes{\setbox\@FrBoxvii=\vbox\bgroup\@setpartozero}%
+}%
+\def\@EIM{\def\labelitemi{\@lti}\def\labelitemii{\@ltii}%
+ \def\labelitemiii{\@ltiii}\def\labelitemiv{\@ltiv}%
+ \let\@afterindentfalse\@aifORI\@afterindentfalse%
+ \parindent\@piORI}%
+\let\@FL\relax%
+{\catcode`.=12\catcode`p=12\catcode`t=12\gdef\auTo@gf#1.#2pt{#1}}%
+\def\@FL{%
+\def\automaticlettrine{%
+ \ifx\lettrinefontname\undefined%
+ \def\@tempa####1 ####2\@@{%
+ \def\lettrinefontname{####1}}%
+ \edef\@tempb{ }%
+ \expandafter\@tempa\fontname%
+ \expandafter\font\@tempb\@@\fi%
+ \let\sv@lf=\lettrinefont}%
+\def\noautomaticlettrine{%
+ \let\lettrinefontname=\undefined%
+ \let\lettrinefont=\sv@lf}%
+\ifx\lettrine\undefined%
+\def\lettrine{\par%
+ \let\@tempa\relax%
+ \def\@tempa{\def\@fbr{\fboxrule=\z@}%
+ \protect\@lettrineS%
+ }%
+ \@tempa}%
+\if@PMF\def\@Ettrine[##1]{##1}\let\@ettrine\relax\else%
+ \def\@ettrine##1##2\par{\bgroup\parskip=\z@%
+ {\ly\xdef\bef@ly{\the\font}}%
+ \let\newpage=\relax\let\clearpage=\relax%
+ \let\cleardoublepage=\relax%
+ \edef\bef@fnt{\the\font}%
+ \ifCG\def\bef@let{}%
+ \else\def\bef@let{\bef@fnt\def\ly{\bef@ly}%
+ \leftguillemets\space}%
+ \fi\@@ttrine{##1}{##2}\egroup}%
+ \def\@@ttrine##1##2{\ifFLA\def\@@ttrnxt{\@@@trine##1\@@{##2}}%
+ \else\def\@@ttrnxt{##1\space\ignorespaces##2}%
+ \fi%
+ \@@ttrnxt\unskip\par%
+ \f@par%
+ \@nobreakfalse}%
+ \def\@@@trine##1##2\@@##3{\@fbr\TeXeverypar{}%
+ \ifx\lettrinefontname\undefined\let\auTo@lh\undefined%
+ \else\let\auTo@lh\lettrinehang%
+ \ifx\auTo@lh\undefined\def\auTo@lh{2}\fi%
+ \bgroup%
+ \ifx\@htfreq\undefined\newdimen\@htfreq\newdimen\@htfbase\fi%
+ \setbox0=\hbox{M}\@htfreq=\ht0%
+ \def\dimentocount####1{\expandafter\auTo@gf\the####1}%
+ \font\@fontreq=\lettrinefontname%
+ \setbox0=\hbox{\@fontreq ##1}\@htfbase=\ht0%
+ \advance\@htfreq by \auTo@lh\baselineskip%
+ \advance\@htfreq by \lineskip%
+ \advance\@htfreq by -\baselineskip%
+ \multiply\@htfreq by 100 %
+ \multiply\@htfbase by 100 %
+ \divide\@htfreq by \dimentocount\@htfbase%
+ \multiply\@htfreq by \@m%
+\global\font\lettrinefont=\lettrinefontname\space scaled \dimentocount\@htfreq%
+ \egroup%
+ \fi%
+ \setbox0\hbox{%
+ {\shortstack{\bef@let{\lettrinefont##1}\relax%
+ \ifdim\fontdimen\@ne\font>\z@\/\space\fi}}}%
+ \@FrDimenH=\ht0\advance\@FrDimenH by\dp0%
+ \@FrDimenS=\@FrDimenH\advance\@FrDimenS by\fboxsep%
+ \ifdim\baselineskip\superieura0pt%
+ \divide\@FrDimenS by\baselineskip%
+ \fi\@FrCount=\@FrDimenS%
+ \@FrDimen=\baselineskip\multiply\@FrDimen by-\@FrCount%
+ \advance\@FrDimen by\@FrDimenH%
+ \ifdim\@FrDimen>0.025\baselineskip \advance\@FrCount by 1\fi%
+ \ifx\auTo@lh\undefined\else\@FrCount=\auTo@lh\fi%
+ \ifx\lettrinehang\undefined\else\@FrCount=\lettrinehang\fi%
+ \@FrDimenI=\wd0%
+ \ifdim\fboxrule=\z@\else\advance\@FrDimenI by2\fboxrule%
+ \advance\@FrDimenI by2\fboxsep\fi%
+ \@FrDimenS=\fontdimen2\font\advance\@FrDimenI by+3\@FrDimenS%
+ \ifdim\fboxrule=\z@\advance\@FrDimenI by-0.30\@FrDimenS\fi%
+ \advance\@FrCount by -1%
+ \@FrDimen=\@FrCount\baselineskip%
+ \advance\@FrCount by 1%
+ \ifdim\fboxrule=\z@\else\advance\@FrDimen by -\fboxrule\fi%
+ \@FrDimenH=-\dp0%
+ \setbox0\hbox{\ifdim\fboxrule=\z@\kern-\fboxsep\fi%
+ \fbox{\shortstack{{%
+ \def\@LSG{\f@issue\@fw{-5- %
+ %
+ }}%
+ \let\@RSG=\@LSG\bef@let%
+ \lettrinefont\raise-\@FrDimen\hbox{##1}\relax%
+ \ifdim\fontdimen\@ne\font>\z@\/\space\fi}}}}%
+ \box0\@FrDimen=\@FrDimenH%
+ \advance\@FrDimenH by-\@FrCount\baselineskip%
+ \advance\@FrDimenH by \lineskip%
+ \ifdim\fboxrule=\z@\else\advance\@FrDimenH by -\fboxrule\fi%
+ \vspace*{\@FrDimenH}%
+ \hangindent=\@FrDimenI%
+\ifx\lettrinehang\undefined%
+ \ifdim\@FrDimen<-0.025\baselineskip%
+ \advance\@FrCount by\@ne%
+ \divide\@FrDimen by-\baselineskip%
+ \advance\@FrCount by\@FrDimen%
+ \fi%
+\fi%
+ \ifnum\@FrCount=1\f@issue\@fw{-6- %
+ }\fi%
+ \hangafter=-\@FrCount%
+ \noindent\kern-2.5\@FrDimenS%
+ \def\@temp@{##2}%
+ \ifx\empty\@temp@\f@issue\@fw{-7- %
+ %
+ }%
+ \else{\scshape ##2}\fi\def\@temp@{##3}%
+ \ifx\@temp@\empty\else\space\ignorespaces##3\fi%
+ }%
+ \def\@Ettrine[##1 ##2 ##3]##4\par{\bgroup\parskip=0pt%
+ {\ly\xdef\bef@ly{\the\font}}%
+ \let\newpage=\relax%
+ \edef\bef@fnt{\the\font}\@gN%
+ \ifFLA\def\bef@let{\bef@fnt\def\ly{\bef@ly}##1\space}%
+ \else ##1\space\fi%
+ \@@ttrine{##2}{{\def\@aft@let{##3}\ifx\@aft@let\empty%
+ \else##3\space\fi%
+ \ignorespaces ##4}}\egroup}%
+\fi%
+\def\flettrine{\par%
+ \let\@tempa\relax%
+ \def\@tempa{\def\@fbr{}\protect\@lettrineS}%
+ \@tempa}%
+\def\@lettrineS{\ifx\@FrDimenH\undefined%
+ \newdimen\@FrDimenH\newdimen\@FrDimenI\fi%
+ \ifx\@FrDimenS\undefined\newdimen\@FrDimenS\fi%
+ \@ifNextNB[{\@Ettrine}{\@ettrine}%
+ }%
+\fi%
+ }%
+\def\nonfrench{\ifFrench\@DFP%
+ \def\@temp@{\@AFP}%
+ \else\@NoFr\def\@temp@{\relax}\fi%
+ \def\endnonfrench{\@temp@\ignorespaces}%
+ \ignorespaces}%
+\def\@dospecialsfrench{\do\`\do'\@dsversa}%
+\def\@dsversa{%
+ \do\ \do\\\do\{\do\}\do\$\do\&\do\#\do\|\do\^^K\do\_\do\^^A\do\%\do\~%$emacs
+ \do\!\do\?\do\;\do\:\do\<\do\>\do\^\do\"}%
+\def\@sanitizefrench{%
+ \@saORI%
+ \@makeother\!\@makeother\?\@makeother\;\@makeother\:%
+ \@makeother\`\@makeother'\@makeother\<\@makeother\>%
+ \@makeother\^\@makeother\"}%
+\def\@ifNextNB#1#2#3{\let\@tempe=#1\def\@tempa{#2}\def\@tempb{#3}\futurelet%
+ \@tempc\@Fifnch}%
+ \def\@Fifnch{\ifx \@tempc \@tempe\let\@tempd\@tempa%
+ \else\let\@tempd\@tempb\fi\@tempd}%
+\def\@ifNextNBc#1#2#3#4{\let\@tempe=#1\let\@tempf=#2%
+ \def\@tempa{#3}\def\@tempb{#4}\futurelet%
+ \@tempc\@Fifnchc}%
+ \def\@Fifnchc{\ifx\@tempc\@tempf\@tempa\else\@Fifnch\fi}%
+\def\@skiplastspace{\ifdim\lastskip>\z@\unskip\penalty\@M\fi}%
+\let\ifFrench\iftrue%
+\def\@AFP{%
+ \let\dospecials\@dospecialsfrench%
+ \let\@sanitize\@sanitizefrench%
+ \AFPdp\AFPinfsup}%
+\def\AFPdp{\ifFrench\catcode`\!=\active\catcode`\?=\active%
+ \catcode`\;=\active\catcode`\:=\active\fi}%
+\let\AFPinfsup\relax%
+\def\AFPinfsup{\ifFrench\ifFG\catcode`\<=\active\catcode`\>=\active\fi\fi}%
+\def\AFPq{\ifFrench\catcode`'=\active\catcode``=\active\fi}%
+\def\AFPdq{\catcode`"=\active}%
+\def\@DFP{%
+ \DFPq\DFPinfsup\ifLPA\else\DFPdp%
+ \let\dospecials\@dsORI%
+ \let\@sanitize\@saORI\fi}%
+\def\DFPq{\ifFrench\catcode``=12\catcode`'=12\fi}%
+\let\DFPinfsup\relax%
+\def\DFPinfsup{\ifFrench\catcode`<=12\catcode`>=12\fi}%
+\def\DFPdp{\ifFrench\catcode`;=12\catcode`:=12%
+ \catcode`!=12\catcode`?=12\fi}%
+\def\DFPdq{\catcode`"=12}%
+\let\@doORI\dots\let\@ldoORI\ldots%
+\def\TeXdots{\@noBDfr%
+ \ifFTY\let\dots\@doORI\let\ldots\@ldoORI\fi}%
+\def\noTeXdots{\@noBDfr%
+ \ifFTY\def\dots{...}\def\ldots{...}\fi}%
+\let\@hatORI\^\let\@treORI\"%
+\def\idotless{\@noBDfr%
+ \ifFTY%
+ \def\^##1{{\expandafter\@hatORI\ifx ##1i\i\else##1\fi}}%
+ \def\"##1{{\expandafter\@treORI\ifx ##1i\i\else##1\fi}}%
+ \fi}%
+\def\iwithdot{\@noBDfr%
+ \let\^\@hatORI\let\"\@treORI}%
+\let\ifLPA\iffalse%
+\let\ifFG\iffalse%
+\def\@tempa#1{\f@issue%
+ \@fw{-13- %
+ }[#1]%
+ \let\@tempb\next\let\@tempc\empty}%
+\let\@tempb\empty%
+\AFPdp%
+\let\ifWTS\iffalse%
+\def\@WTS{\relax\ifmmode\else\ifhmode%
+ \ifdim\lastskip>\z@\unskip\fi%
+ \fi\fi}%
+% > for XeLaTex ******
+% de gloss-french
+\def\intercharpunct{%
+% \lccode\lccode8217=8217
+ \XeTeXinterchartokenstate=1
+ \XeTeXcharclass `\! \french@punctthin
+ \XeTeXcharclass `\? \french@punctthin
+ \XeTeXcharclass `\; \french@punctthin
+ \XeTeXcharclass `\: \french@punctthick
+ \XeTeXinterchartoks \z@ \french@punctthin = {\nobreak\thinspace}%
+ \XeTeXinterchartoks \z@ \french@punctthick = {\nobreakspace}%
+ \XeTeXinterchartoks 4095 \french@punctthin = {\efr@unskip\nobreak\thinspace}%
+ \XeTeXinterchartoks 4095 \french@punctthick = {\efr@unskip\nobreakspace}%
+ }
+\def\nointercharpunct{%
+% \lccode8217=\z@
+ \XeTeXcharclass `\! \z@
+ \XeTeXcharclass `\? \z@
+ \XeTeXcharclass `\; \z@
+ \XeTeXcharclass `\: \z@
+ \XeTeXinterchartokenstate=0
+ }
+\newcount\eF@nonchar
+\newif\ifeF@active@punct
+\newif\ifeF@xetex@punct
+\ifdefined\XeTeXinterchartokenstate
+ \eF@xetex@puncttrue\eF@active@punctfalse
+ \ifdim\the\XeTeXversion\XeTeXrevision pt<0.99994pt
+ \eF@nonchar=255 \relax
+ \else
+ \eF@nonchar=4095 \relax
+ \fi
+\fi
+\ifeF@xetex@punct
+ \newXeTeXintercharclass\french@punctthin % ! ? ; et autres
+ \newXeTeXintercharclass\french@punctthick % :
+%
+ \def\efr@unskip{\ifhmode\ifdim\lastskip>\z@\unskip\fi\fi}
+ \def\xpg@nospace#1{#1}
+%
+ \ifeFr@Typo\protect\intercharpunct\else\nointercharpunct\fi
+\fi%
+% < for XeLaTex ******
+
+\ifeF@NoEnc
+ \@finput{efrenchu.tex} % pour guillemets utf8
+ \AtBeginDocument{\nointercharpunct}
+\fi
+
+\def\@tempc{%
+\def;{\ifFTY\protect\@PV%
+ \else\ifWTS\@WTS\fi\string;\fi}%
+ }%
+\def\@tempd{\@tempa{\string;}}%
+\ifx;\undefined\def\@tempd{}\fi\@tempd\@tempc%
+\def\@PV{\relax\ifmmode\string;\else%
+ \ifhmode\ifUSP\unskip\space\fi%
+ \ifdim\lastskip>\z@\unskip\penalty\@M\,\fi%
+ \fi\string;\fi}%
+\def\@tempc{%
+\def:{\ifFTY\protect\@DP%
+ \else\ifWTS\@WTS\fi\string:\fi}%
+ }%
+\def\@tempd{\@tempa{\string:}}%
+\ifx:\undefined\def\@tempd{}\fi\@tempd\@tempc%
+\@ifundefined{@beginparpenalty}{\def\@beginparpenalty=#1{\penalty#1}}{}%
+\def\@DP{\relax\ifmmode\string:\else%
+ \ifhmode\ifUSP\unskip\space\fi%
+ \ifdim\lastskip>\z@\unskip\penalty\@M\,\fi%
+ \fi%
+ \string:%
+ \@beginparpenalty=\@M\relax%
+ \fi}%
+\def\@wu#1{\@@wu#1,\void}%
+\def\@@wu#1,#2{\ifx#1\empty\else\@@@wu #1\fi%
+ \def\@tempa{\@@wu#2}%
+ \ifx#2\void\else\expandafter\@tempa\fi%
+ }%
+\def\@@@wu#1=#2{\expandafter\edef\csname #1\endcsname:{#2\string:}}%
+\ifx\hhline\undefined\else\let\@hhlORI\hhline%
+ \def\hhline{\omit\ifFrench\let:\@cidp\fi%
+ \expandafter\@gobble\@hhlORI}%
+\fi%
+\def\@tempc{%
+\def!{\ifFTY\protect\@PE%
+ \else\ifWTS\@WTS\fi\string!\fi}%
+ }%
+\def\@tempd{\@tempa{\string!}}%
+\ifx!\undefined\def\@tempd{}\fi\@tempd\@tempc%
+\def\@PE{\ifmmode\string!\else%
+ \ifhmode\ifUSP\unskip\space\fi%
+ \ifdim\lastskip>\z@\unskip\penalty\@M\,\fi%
+ \fi%
+ \string!\fi}%
+\def\@tempc{%
+\def?{\ifFTY\protect\@PI%
+ \else\ifWTS\@WTS\fi\string?\fi}%
+ }%
+\def\@tempd{\@tempa{\string?}}%
+\ifx?\undefined\def\@tempd{}\fi\@tempd\@tempc%
+\def\@PI{\relax\ifmmode\string?\else%
+ \ifhmode\ifUSP\unskip\space\fi%
+ \ifdim\lastskip>\z@\unskip\penalty\@M%
+ \hskip +0.09em plus 0.07667em%
+ \fi%
+ \fi%
+ \string?\fi}%
+\ifx\@tempb\next\let\AFPdp\empty\f@issue%
+ \@fw{-13b- %
+ \@txt@msg{la double ponctuation est alors d\'esactiv\'ee}}\fi%
+\let\ifLPA\ErrFrench%
+\let\ifFG\ErrFrench%
+\let\@aORI\@array%
+\def\@array{}%
+\DFPdp\AFPdp%
+\ifx\AFPdp\empty\else%
+\def\@array{\let\noexpand\@tempa=\noexpand!%
+ \def\noexpand!{\noexpand\string\noexpand!}%
+ \edef\noexpand\@tempb{##1}%
+ \let\noexpand!=\noexpand\@tempa}%
+\fi%
+\catcode`<=13\catcode`>=13%
+\let\ifArG\iftrue%
+\edef\@array[#1]{\edef\noexpand\@tempb{#1}%
+ \noexpand\ifArG\noexpand\else%
+ \noexpand\ifnum\catcode`\noexpand<=\active%
+ \noexpand\ifmmode\let\noexpand<\noexpand\inferieura%
+ \let\noexpand>\noexpand\superieura%
+ \noexpand\fi\noexpand\fi\@array%
+ \noexpand\fi%
+ \noexpand\@aORI[{\noexpand\@tempb}]}%
+\let\@eaORI\eqnarray%
+\def\eqnarray{\ifArG\else\ifnum\catcode`<=\active%
+ \let<\inferieura\let>\superieura%
+ \fi\fi\@eaORI}%
+\ifx\@@array\undefined\else%
+ \let\@@aORI\@@array%
+\def\@@array{\ifArG\else\ifnum\catcode`<=\active%
+ \let<\inferieura\let>\superieura%
+ \fi\fi\@@aORI}%
+\fi%
+\catcode`<=12\catcode`>=12%
+\DFPdp%
+\let\@CGroup\relax\let\@@FG\relax%
+\let\@LG\relax%
+\def\@og{\leavevmode\ifdim\lastskip>\z@\unskip%
+ \penalty-9\hskip0.35em minus 0.35em\fi%
+ \raise0.27ex\hbox{$\scriptscriptstyle\ll$}\,\nobreak\ignorespaces}%
+\def\@cg{\@skiplastspace\nobreak\,\leavevmode\raise0.27ex%
+ \hbox{$\scriptscriptstyle\gg$}}%
+\let\ifFG\iftrue%
+\AFPinfsup%
+\def\@gN{\def<##1{\ifx ##1<\leftguillemets\else\@LSG##1\fi}%
+ \def>##1{\ifx ##1>\rightguillemets\else\@RSG##1\fi}}%
+\let\@oldog\<\let\@oldcg\>%
+\def\@ogx<{\ifFTY\@og\else\@DOG\fi}%
+\def\@cgx>{\ifFTY\@cg\else\@DFG\fi}%
+\def\@@LFG{\ifFTY\ifmmode\protect\@LSG\else%
+ \ifIEB\@SOC\else\@LSG\fi%
+ \fi%
+ \else\@LSG\fi}%
+\global\let\ifCG\iftrue%
+\let\inside@an@expand\empty%
+\def\if@mid@expandable#1#2{\let\inside@an@expand\relax\relax%
+ \ifx\inside@an@expand\relax%
+ \let\inside@an@expand\empty%
+ \expandafter#2%
+ \else\expandafter#1%
+ \fi}%
+\def\stop@mid@expandable{\if@mid@expandable{%
+ \errmessage{This macro is not expandable, please %
+ \string\protect \space it.}\stop}{}%
+ }%
+\def\@LG{\relax\if@mid@expandable{\@@@LG}{\@@LG}}%
+\def\@@LG{\ifFTY\ifmmode\@DOG\else\@@@OG\fi\else\@DOG\fi}%
+\def\@@@LG{\relax\noexpand <<\relax}
+\def\@SifDOGon{\global\let\ifDOG\iftrue}%
+\def\@SifDOGoff{\global\let\ifDOG\iffalse}\@SifDOGoff%
+\def\@@@OG{\ifCG\ifFLA\ifEPG\else%
+ \hbadness=10000%
+ \ifhmode\newline\fi%
+ \bgroup\def\par{}%
+ \@FrDimen=\textwidth%
+ \if@twocolumn\tolerance=5000\pretolerance=5000%
+ \advance\@FrDimen by -\columnsep%
+ \divide\@FrDimen by 2\fi%
+ \@ifundefined{@inAlist}{}{%
+ \advance\@FrDimen by -\leftmargin\advance\@FrDimen by -\rightmargin%
+ \advance\@FrDimen by -\listparindent\hsize=\@FrDimen}%
+ \@qquotes\fi\fi\fi%
+ \@oguills%
+ \ifFLA\ifEPG\bgroup\def\@currenvir{guillemets}%
+ \let\@CGroup\egroup\fi\fi%
+ \ifCG\ifFLA\ifEPG%
+ \xdef\@epORI{{\the\TeXeverypar}}%
+ \TeXeverypar={\@epORI%
+ \ifEPGR\else%
+ \@oguills%
+ \@ifundefined{@OuvOpen}{%
+ \,%
+ }{}%
+ \fi}%
+ \fi\fi%
+ \else\@SifDOGon\@AG%
+ \ifFLA\ifEPG\else\def\@qqguill{\@oguills}\@staring\fi\fi\fi%
+ \global\let\ifCG\iffalse%
+ \ifUSP\kern+0.13em\penalty\@M\ignorespaces%
+ \else\kern-0.19em\relax\penalty\@M\fi}%
+\def\@AG{\ifAG\let\@LP\@RP\let\@gotl\@gotr%
+ \fi}%
+\def\f@guillemets{<<}%
+\def\@oguills{%
+ \bgroup\@ifundefined{@OuvOpen}{\def\@OuvOpen{}%
+ \@ifundefined{ly}{\@og}%
+ {\leavevmode\ifECM\hbox{{\ifGIAF\else\@gfnt\fi%
+ \ifx\@gotl\undefined\char\rq\@LP%
+ \else\@gotl\fi\kern+0.20em}}%
+ \else\hbox{{\ly\@LP\kern-0.20em\@LP\kern+0.20em}}\fi%
+ \nobreak}}{}\egroup}%
+\def\@@RFG{\ifFTY\ifmmode\protect\@RSG\else%
+ \ifIEB\@SFC\else\@RSG\fi%
+ \fi%
+ \else\@RSG\fi}%
+\def\@SifFTY{\let\ifFTY\iffalse}%
+\def\@RG{\relax\if@mid@expandable{\@@@RG}{\@@RG}}%
+\def\@@RG{\ifmmode\@SifFTY\fi\ifFTY\@@FG\else\@DFG\fi}%
+\def\@@@RG{\relax\noexpand >>\relax}
+\def\endf@guillemets{>>}%
+\ifx\RIfM@\undefined\else%
+ \edef\@emORI{\the\everymath\relax}%
+ \edef\@edORI{\the\everydisplay\relax}%
+ \f@issue\@fW{^^J -18- %
+ %
+ %
+ }%
+ %
+ \everymath={\csname nofrenchguillemets\endcsname\@emORI}%
+ \everydisplay={\csname nofrenchguillemets\endcsname\@edORI}%
+\fi%
+\DFPinfsup%
+\ifx\grammar\undefined%
+ \else\let\@grORI\grammar\def\grammar{\nofrenchguillemets\@grORI}%
+\fi%
+
+\def\@@FG{\ifCG\f@issue%
+ \@fw{-14- %
+ }\fi%
+ \ifUSP\unskip\kern+0.13em\else%
+ \ifdim\lastskip>\z@\unskip%
+ \penalty\@M%
+ \space%
+ \penalty\@M%
+ \fi%
+ \kern-0.19em%
+ \fi%
+ \xdef\@tempd{\@currenvir}\def\@tempe{guillemets}%
+ \ifx\@tempd\@tempe%
+ \@CGroup\@fguills%
+ \else\ifEPG%
+ \@fguills%
+ \def\@CGroup{\egroup\@gobble}%
+ \ifFLA%
+ \f@issue%
+ \@fw{-49- %
+ }%
+ \fi%
+ \else\@CGroup\@fguills%
+ \fi%
+ \fi%
+ \ifDOG\ifFLA\ifEPG\else\@fniv2\fi\fi%
+ \@SifDOGoff\else\@@@FG\fi%
+ }%
+\let\guillemets\@LG%
+\def\RG@{\ifFTY\ifCG%
+ \else\@RG%
+ \fi%
+ \@CGroup\@@@FG\relax\fi}%
+\let\endguillemets\RG@%
+\def\@@@FG{\ifFLA\ifEPG\ifx\@epORI\undefined\else%
+ \expandafter\TeXeverypar=\@epORI\fi%
+ \xdef\@epORI{{}}%
+ \else\@staring\@stared\egroup\fi\fi%
+ \global\let\ifCG\iftrue\let\@CGroup\relax}%
+\def\@fguills{\@ifundefined{ly}{\@cg}%
+ {\nobreak\leavevmode\ifECM\hbox{{\ifGIAF\else\@gfnt\fi\kern+0.20em%
+ \ifx\@gotr\undefined\char\rq\@RP%
+ \else\@gotr\fi}}%
+ \else\hbox{{\ly\kern+0.20em\@RP\kern-0.20em\@RP}}\fi}%
+\ifGIAF\else\ifdim\fontdimen\@ne\font>\z@\/\fi\fi%
+ }%
+\def\@normalrq{\relax\ifmmode^\prime\else\@frq\fi}%
+\def\@frq{{\catcode`'=12{\ifNEQ\ifECM\char\rq001%
+ \else\char\rq023\hbox{}\fi%
+ \else\string'\fi}}}%
+\AFPq%
+\def`{\protect\@PLQ}%
+ \let\@PLQ@\lq%
+ \def\@PLQ{\ifmmode\string`\let\@PLQ@\relax%
+ \else\ifNED\let\@PLQ@\@PLQn\fi%
+ \ifhmode\let\@PLQ@\@PLQn\fi%
+ \fi\@PLQ@}%
+ \def\@PLQn{\@ifNextNB`{\protect\@OQ}%
+ {\ifNEQ\ifECM\char\rq000\hbox{}%
+ \else\char\rq022\hbox{}\fi%
+ \else\string`\fi}%
+ }%
+ \def\@OQ`{\ifNED\protect\@LG\else\string``\fi}%
+\def'{\protect\@PRQ}%
+ \let\@PRQ@\rq%
+ \def\@PRQ{\ifmmode\let\@PRQ@\@SRQ@%
+ \else\ifhmode\let\@PRQ@\@PRQn\fi%
+ \fi\@PRQ@}%
+ \def\@@FGp'{\@@FG}%
+ \def\@PRQn{\let\@PRQ@\rq%
+ \@ifNextNB'{\ifNED\let\@PRQn@\@@FGp%
+ \else\let\@PRQn@\relax\string'\fi\@PRQn@}%
+ {\protect\@normalrq}}%
+\let\ifNED\iffalse%
+\let\ifNEQ\iffalse%
+\def\noenglishdoublequotes{\@noBDfr%
+ \AFPq\let\ifNED\iftrue%
+ \ifFrench\let\@cilq='\fi}%
+\def\noenglishquote{\@noBDfr%
+ \AFPq\let\ifNEQ\iftrue%
+ \ifFrench\let\@cilq='\fi}%
+\DFPq%
+\def\untypedspaces{\@noBDfr%
+ \let\ifUSP\iftrue}%
+\def\typedspaces{\@noBDfr%
+ \let\ifUSP\iffalse}%
+\let\if@labelsinmargin\iffalse%
+\def\englishdoublequotes{\@noBDfr%
+ \let\ifNED\iffalse%
+ \DFPq\ifFrench\let\@cilq='\fi}%
+\def\englishquote{\@noBDfr%
+ \let\ifNEQ\iffalse\DFPq%
+ \ifFrench\let\@cilq='\fi}%
+\def\labelsinmargin{\@noBDfr%
+ \let\if@labelsinmargin\iftrue}%
+\def\nolabelsinmargin{\@noBDfr%
+ \let\if@labelsinmargin\iffalse}%
+\def\letpunctuationactivefor{\@noBDfr%
+ %
+ \global\let\ifLPA\iftrue%
+ \def\wrongtypedspaces{\@noBDfr%
+ \global\let\ifWTS\iftrue}%
+ }%
+\def\wrongtypedspaces{\f@issue\@fw{-17- %
+ %
+ %
+ }}%
+\def\nowrongtypedspaces{\@noBDfr%
+ \global\let\ifWTS\iffalse%
+ \ifLPA\DFPdp%
+ \fi\global\let\ifLPA\iffalse}%
+\def\tabbingaccents{\@noBDfr%
+ \let\@ifTA\iffalse}%
+\def\notabbingaccents{\@noBDfr%
+ \let\@ifTA\iftrue}%
+\AFPq%
+\def\@temp@{%
+ \def\tabbing{\def\@tempa{\let`=\lq\let'=\@normalrq}%
+ \ifNED\@tempa\fi\ifNEQ\@tempa\fi%
+ \def\@tempa{\let\@ifTA\iftrue}%
+ \ifFTY\else\expandafter\@tempa\fi%
+ \ifFTY\@ifTA\else%
+ \let\@trjORI\@tabrj\let\@tlabORI\@tablab%
+ \let\@ORIrj=\`\let\@ORIlab=\'%
+ \def\@@tabrj{\ifcat\@tempc\space\let\@tempa=\@trjORI%
+ \else\let\@tempa=\@ORIrj\fi\@tempa}%
+ \def\@@tablab{\ifcat\@tempc\space\let\@tempa=\@tlabORI%
+ \else\let\@tempa=\@ORIlab\fi\@tempa}%
+ \def\@tabrj{\futurelet\@tempc\@@tabrj}%
+ \def\@tablab{\futurelet\@tempc\@@tablab}%
+ \fi\fi\@tgORI}%
+ }%
+\ifx\tabbing\undefined%
+ \else\let\@tgORI\tabbing%
+ \@temp@%
+\fi%
+\DFPq%
+\AFPinfsup%
+\def\EBCDICbrackets{\@noBDfr%
+ \let\ifIEB\iftrue%
+ \ifFG%
+ \def<{\protect\@LFG}%
+ \def\@LFG{\@ifNextNB<{\protect\@OG}{\@@LFG}}%
+ \def\@OG<{\ifnum\catcode`< =\active\expandafter\@LG%
+ \else\@@LFG\@@LFG\fi}%
+ \def>{\protect\@RFG}%
+ \def\@RFG{\@ifNextNB>{\protect\@FG}{\@@RFG}}%
+ \def\@FG>{\ifnum\catcode`> =\active\expandafter\@RG%
+ \else\@@RFG\@@RFG\fi}%
+ \fi}%
+\long\def\@BracesOrNot[#1]{\ifmmode\@PreserveBraces[#1]%
+ \else\expandafter#1\fi}%
+\let\@fobeyspaces\empty%
+\long\def\@genG#1#2#3{\@fobeyspaces%
+ \ifx#2#3\expandafter\protect\csname @#1G\endcsname%
+ \else\csname @@#1FG\endcsname\expandafter\@BracesOrNot%
+ \expandafter[\expandafter{%
+ \expandafter#3\expandafter}\expandafter]%
+ \fi}%
+\edef\@genGL{\noexpand\@genG{L}\noexpand<}%
+\edef\@genGR{\noexpand\@genG{R}\noexpand>}%
+\let\@bobeyspaces\empty
+\def\normalbrackets{\@noBDfr%
+ \let\ifIEB\iffalse%
+ \ifFG%
+ \def<{\ifnum\catcode`< =\active\@bobeyspaces\expandafter\expandafter%
+ \expandafter\@genGL\ifmmode\relax\fi%
+ \else\@LSG\fi}%
+ \def>{\ifnum\catcode`> =\active\@bobeyspaces\expandafter\expandafter%
+ \expandafter\@genGR\ifmmode\relax\fi%
+ \else\@RSG\fi}%
+ \fi}%
+\DFPinfsup%
+\let\ifFG\iffalse%
+\def\ancientguillemets{\@noBDfr%
+ \let\ifAG\iftrue}%
+\def\todayguillemets{\@noBDfr%
+ \let\ifAG\iffalse}%
+\def\guillemetsinarrays{\@noBDfr%
+ \let\ifArG\iftrue}%
+\def\noguillemetsinarrays{\@noBDfr%
+ \let\ifArG\iffalse}%
+\def\guillemetsinallfonts{\@noBDfr%
+ \let\ifGIAF\iftrue}%
+\def\guillemetsinroman{\@noBDfr%
+ \let\ifGIAF\iffalse}%
+\def\overfullhboxmark{\@noBDfr%
+ \ifFLA\overfullrule=5pt\fi}%
+\def\nooverfullhboxmark{\@noBDfr%
+ \ifFLA\overfullrule=0pt\fi}%
+\let\ifFrench\iffalse%
+{\def\@genMLhyph{\@ifundefined{french}{}{\gdef\fhyph{\french}}%
+ \@ifundefined{english}{}{\gdef\ehyph{\english}}}%
+\@ifundefined{fhyph}{\@genMLhyph}{}%
+}%
+\gdef\frenchTeXmods{%
+ \global\let\ifFrench\iftrue%
+\ifCLA%
+ \ifCLAfrench%
+ \@AFP%
+ \frenchtypography\frenchtranslation\frenchlayout%
+ \fi%
+\else%
+ \@AFP%
+ \frenchtypography\frenchtranslation\frenchlayout%
+\fi%
+ \frenchmacros\frenchwarnings%
+ \let\@HifORI\@Hif\let\@HfiORI\@Hfi%
+ \frenchhyphenation%
+ \csname @xtrasfrench\endcsname%
+ \ifx\GOfrench\undefined%
+ \csname beginL\endcsname%
+ \fi%
+ \def\languagename{french}%
+ \@ufo%
+ \let\switchtolanguage\endfrench%
+ \ignorespaces%
+ }%
+\ifx\undefined\babel@core@loaded%
+ \edef\extrasfrench{}\def\@xtrasfrench{\extrasfrench}%
+ \DeclareOption{french}{\def\beginlanguage{%
+ \ifx\babel@savevariable%
+ \undefined\french%
+ \else\endenglish\selectlanguage{french}\fi}%
+ }%
+ \DeclareOption{english}{\def\beginlanguage{%
+ \ifx\babel@savevariable%
+ \undefined\english%
+ \else\selectlanguage{english}\fi}%
+ }%
+\else\let\extrasfrench\frenchTeXmods%
+ \AtBeginDocument{%
+ \def\@tempa{\protect\@LabeL}%
+ \ifx\@tempa\label\else%
+ \let\@lORI\label\let\label\@tempa\fi%
+ \def\@tempa{\protect\atgH{r}}%
+ \ifx\@tempa\ref\else\@gG{r}{ref}{/}{1}\fi%
+ }%
+\fi%
+\@ifundefined{switchtolanguage}{%
+ \def\switchtolanguage#1{#1}}{}%
+\let\@stlORI\switchtolanguage
+\def\@DFPtestANDset{%
+ \ifx\ifFrench\iffalse%
+ \f@issue\@fw{-71- %
+ %
+ %
+ }%
+ \fi%
+ \let\@DFPtestANDset\@DFP%
+ \@DFP}%
+\def\endfrench{%
+\ifCLAfrench\else%
+ \@DFPtestANDset%
+ \nofrenchtypography\nofrenchtranslation\nofrenchlayout%
+\fi%
+ \nofrenchmacros%
+ \nofrenchhyphenation%
+ \let\@Hif\@HifORI\let\@Hfi\@HfiORI%
+ \let\switchtolanguage\@stlORI%
+ \let\ifFrench\iffalse\@stlORI%
+ \ignorespaces}%
+\let\noextrasfrench\endfrench%
+\def\frenchtest{\@finput{french.tst}}%
+\def\frenchdoc{\@finput{frdoc.tex}}%
+\@ifundefined{englishTeXmods}{\gdef\englishTeXmods{}}{}%
+\global\let\@Hif\empty\global\let\@Hfi\empty%
+\global\let\if@FE\iffalse%
+\newif\if@more\@moretrue%
+\def\@doFh{%
+\def\f@ERRdat{\f@issue%
+ \errmessage{-9- %
+ }\global\let\french\@@end%
+ }%
+ \bgroup%
+ \let\ORIGfrench\french%
+ \newcount\@FrCount%
+\def\tl@ng##1{}%
+\def\@rhef##1/##2 /{\def\@tempa{##2}%
+ \def\@tempb{##1}%
+ \def\@tempc{\ifx\space\@tempa\else%
+ \expandafter\gdef\csname ##1@hefn\endcsname{##2\relax}%
+ \if@FE\expandafter\@@input##2\relax\fi\fi}%
+ \ifx\undefined\@excn\@tempc%
+ \else\ifx\@tempb\@excn\@tempc\fi\fi}%
+\gdef\NouveauLangage[##1]##2{%
+ \expandafter\@ifundefined{l@##2}{}%
+ {%
+ \chardef\l@no##1\expandafter\if\csname l@##2\endcsname\l@no\else%
+ \edef\l@no{##1}\expandafter%
+ %
+ \ifx\csname l@##2\endcsname\l@no%
+ \else\f@issue\typeout{^^J \frenchname.sty \string: -27- %
+ %
+ %
+ }[##2]\f@ERRdat%
+ \fi\fi}%
+ \expandafter\tl@ng\csname##2TeXmods\endcsname%
+ \expandafter\gdef\csname##2 \endcsname%
+ {\expandafter\switchtolanguage\csname ##2TeXmods\endcsname%
+ \@Hif\language=##1\@Hfi\relax}%
+ \expandafter\gdef\csname##2\endcsname%
+ {\protect\csname##2 \endcsname}%
+ }%
+\def\Nouveau@Langage[##1]##2{% > def nouveau langage 1
+%arabic as a language should not change the definition of \arabic
+% the same is valid for future similar cases > -- arabic prepare
+ \expandafter\@ifundefined{##2}{\lang@defifalse}%
+ {\lang@defitrue}%
+ \expandafter\@ifundefined{mlp##2}{\langmlp@defifalse}%
+ {\langmlp@defitrue}%
+ \def\l@n@test{##2}
+% here only the choises french or english, excluding arabic as language
+ \ifx \l@n@fre\l@n@test\langok@defitrue\fi % \def\l@n@fre{french}%
+ \ifx \l@n@eng\l@n@test\langok@defitrue\fi % \def\l@n@eng{english}%
+% \iflangok@defi \typeout{ ##1 : ##2}\fi%
+% < -- arabic prepare
+ \expandafter\@ifundefined{l@##2}{}%
+ \iflangok@defi
+ {%
+ \expandafter\tl@ng\csname##2TeXmods\endcsname%
+ \iflang@defi% ++ test langue existe ?
+ \expandafter\gdef\csname##2Lang \endcsname%
+ {\expandafter\switchtolanguage\csname ##2TeXmods\endcsname%
+ \@Hif\language=##1\@Hfi\relax}%
+ \expandafter\gdef\csname##2Lang\endcsname%
+ {\protect\csname##2Lang \endcsname}%
+ \typeout{eFrench Info : %
+ \\##2Lang commute sur langue ##2 }%
+ \typeout{eFrench Info : %
+ et \\##2TeXmods pour ses extensions }%
+ \typeout{eFrench Info : %
+ avec \\ = une seule barre oblique inverse ===}%
+ \else% ** langue n'existe pas encore
+ \expandafter\gdef\csname##2 \endcsname%
+ {\expandafter\switchtolanguage\csname ##2TeXmods\endcsname%
+ \@Hif\language=##1\@Hfi\relax}%
+ \expandafter\gdef\csname##2\endcsname%
+ {\protect\csname##2 \endcsname}%
+ \fi%
+ }% % -- test langue existe
+ \fi% % -- test langok@defi
+ }% < def nouveau langage 1
+\edef\@temp@{=}%
+\def\@langue##1##2 ##3 ##4/##5{\def\@tempa{=}\def\@tempb{##1}%
+ \ifx\@tempa\@tempb%
+ \ifnum\@FrCount > 0 \advance\@FrCount by -1\fi%
+ \relax%
+ \expandafter\Nouveau@Langage\expandafter[\the\@FrCount]{##2}%
+ \ifnum\@FrCount \@temp@ 0 \@FrCount= -1\fi%
+ \else\langok@defifalse\edef\@temp@{<}\@l@ngue##1##2 ##3 ##4/{##5}%
+ \fi}%
+\def\@l@ngue##1 ##2 ##3/##4{\Nouveau@Langage[##4]{##1}%
+ %
+ \@rhef##1/##3/%
+ }%
+\let\hyphenation\f@hyphenation%
+\openin\@inputcheck = language.dat \def\@tempb{}% > language.dat
+\ifeof\@inputcheck\@Ffnt{language.dat}%
+ \ifx\undefined\french %
+ \else\xdef\@PrevF{\french}%
+ \gdef\french{\switchtolanguage\frenchTeXmods\@PrevF}%
+ {\@PrevF\f@issue\@fw{-15- %
+ %
+ %
+ }}%
+ \fi%
+ \ifx\undefined\l@english %
+ \def\l@english{0}%
+ \fi%
+ \ifx\undefined\english %
+ \else\xdef\@PrevE{\language=\l@english}%
+ \gdef\english{\switchtolanguage\englishTeXmods\@PrevE}%
+ {\@PrevE\f@issue\@fw{-16 %
+ %
+ %
+ }}%
+ \fi
+\else\@FrCount=-1%
+\newif\iflang@defi%
+\newif\iflangmlp@defi%
+\newif\iflangok@defi%
+\def\l@n@fre{french}%
+\def\l@n@eng{english}%
+\let\englishORI\english%
+\let\english\undefined%
+\loop \endlinechar=-1 \read\@inputcheck to \@lineD \endlinechar`\^^M%
+ \ifx\@lineD\empty \else \advance\@FrCount by 1%
+ \edef\@lineD{\@lineD\space\space/{\the\@FrCount}}%
+ \expandafter\@langue\@lineD% aller voir \@langue
+ \fi%
+ \ifeof\@inputcheck \@morefalse \fi%
+ \if@more\repeat%
+\fi\closein\@inputcheck% < language.dat
+\ifx\undefined\english\let\english\englishORI\fi% !
+\let\hyphenation\@hyphenation%
+\def\@MLtst{\@ifundefined{fhyph}%
+ {\if@PMF\gdef\french{\switchtolanguage\frenchTeXmods}%
+ \f@issue%
+ \@fw{-19- %
+ %
+ }%
+ \else\f@issue%
+ \typeout{^^J \frenchname.sty: -20b-
+ %
+ }\f@ERRdat\fi}%
+ {\gdef\french{\switchtolanguage\frenchTeXmods\fhyph}%
+ \gdef\english{\switchtolanguage\englishTeXmods\ehyph}%
+ }%
+ }%
+\@ifundefined{french}{\@MLtst}{}%
+\@ifundefined{endenglish}{\global\let\endenglish\french}{}%
+\gdef\tl@ng##1{\ifx ##1\relax\f@issue%
+ \@fw{-21- %
+ }[##1]\fi}%
+\ifx\ORIGfrench\french\f@ERRdat\fi%
+ \egroup%
+ }%
+\ifx\vert\undefined\else\let\@bvORI\vert\fi%
+\def\@fwVIIIII{\f@issue%
+ \kbtypeout{^^J -73- %
+ %
+ }\stop}%
+\ifx\RIfM@\undefined%
+\def\vert{\ifx\RIfM@\undefined\expandafter\@bvORI\else\expandafter%
+ \@fwVIIIII\fi}%
+\else%
+\def\vert{\@bvORI}%
+\fi%
+\def\@abbf[#1]{\def\abbrevfilename{#1}}%
+\AFPdq%
+\def\abbreviations{\if@PMF\else\AFPdq\fi%
+ \@abbdefs\let\@abbdefs\relax%
+ \@ifNextNB[%
+ {\@abbf}{\@abbf[frabbrev.tex]}}%
+\def\f@protect{\ifx\protect\@typeset@protect%
+ \else\f@x@protect\fi}%
+\def\f@x@protect\fi#1{\fi\protect"}%
+\def\@eatprotect#1\protect#2\@nil{#1}%
+\if@PMF\let\f@protect\undefined\let\f@x@protect\undefined%
+ \let\@eatprotect\undefined%
+\fi%
+\def\@abbdefs{%
+ \def\ABBfound{\global\let\ifABBfound\iftrue}%
+ \let\ifABBfound\iffalse%
+ \def\@abbrev##1##2 ##3##4 ##5/{%
+ \let\ifFMA\iftrue%
+ \edef\@tempa{##1##2}%
+ \ifx##3*\edef\@tempb{##4}\edef\@tempc{##4s}%
+ \else\edef\@tempb{##3##4}\edef\@tempc{}%
+ \fi%
+ \ifx\@tempa\@tempb##5\ABBfound%
+ \else\ifx\@tempc\empty%
+ \else\ifx\@tempa\@tempc##5\ABBfound\fi%
+ \fi%
+ \fi%
+ \ifABBfound%
+ \else\edef\@tempa{##2}\edef\@tempb{##4}%
+ \ifx\@tempa\@tempb##5\ABBfound%
+ \else\ifx\@tempc\empty%
+ \else\ifx\@tempa\@tempc##5\ABBfound\fi%
+ \fi%
+ \fi%
+ \fi}%
+ \def\@openabbrev##1{\openin\@inputcheck=##1 %
+ \ifeof\@inputcheck\@Ffnt{##1}\fi}%
+ \def"{\f@protect\AbbrevName}%
+ \def\AbbrevName##1"{\def\@tempa{##1}\ifx\@tempa\space``\space''%
+ \else\@@bbrev##1"\fi}%
+ \def\@@bbrev##1{\expandafter\@@@bbrev\@eatprotect##1\protect\@nil}%
+ \def\@@@bbrev##1"{\begingroup%
+ \def\ABBMfalse{\global\let\ifABBM\iffalse}%
+ \let\ifABBM\iftrue\global\let\ifABBfound\iffalse%
+ \@openabbrev{\abbrevfilename}%
+ \ifeof\@inputcheck\else%
+ \loop\endlinechar=-1\read\@inputcheck to \@lineD\endlinechar`\^^M%
+ \ifx\@lineD\empty%
+ \else\edef\@lineD{##1 \@lineD/}\expandafter\@abbrev\@lineD\fi%
+ \ifABBfound\ABBMfalse\fi%
+ \ifeof\@inputcheck \ABBMfalse\ifABBfound\else%
+ \f@issue%
+ \@fw{-22- %
+ %
+ }[##1]%
+ \fi\fi%
+ \ifABBM\repeat%
+ \fi\closein\@inputcheck%
+ \ifABBfound\else``##1''\fi\endgroup}%
+ }%
+\if@PMF\let\@abbdefs\relax\fi%
+\DFPdq%
+\def\noabbreviations{\if@PMF\else\DFPdq\fi}%
+ \let\@atORI\at%
+ \let\@bsORI\backslash%
+\catcode`\/=0{\catcode`/\=12%
+/gdef/@boiORI{{/protect/string\}}}%
+/catcode`/\=0\catcode`\/=12%
+ \let\@boi\textbackslash%
+ \let\@chapORI\chap%
+ \let\@tildeORI\tilde%
+ \let\@etcORI\etc%
+ \let\@numORI\numero%
+ \let\@numsORI\numeros%
+ \let\@NumORI\Numero%
+ \let\@NumsORI\Numeros%
+ \let\@degreORI\degre%
+ \let\@degresORI\degres%
+ \let\@iemeORI\ieme%
+ \let\@iemesORI\iemes%
+ \let\@ierORI\ier%
+ \let\@iersORI\iers%
+ \let\@iereORI\iere%
+ \let\@ieresORI\ieres%
+ \let\@fscORI\fsc%
+ \let\@lscORI\lsc%
+ \let\@ntsORI\!%
+ \let\@hntscORI\halfnegthinspace%
+\def\@ifm{%
+ \def\at{\ifFMA\string @\else\@atORI\fi}%
+\ifx\RIfM@\undefined%
+ \def\vert{\ifx\RIfM@\undefined%
+ \ifmmode\expandafter\@bvORI%
+ \else\ifFMA\string |\else\@bvORI\fi\fi%
+ \else\expandafter\@fwVIIIII%
+ \fi}%
+\else%
+ \def\vert{\ifmmode\expandafter\@bvORI%
+ \else\ifFMA\string |\else\@bvORI\fi\fi}%
+\fi%
+ \def\backslash{\ifmmode\@bsORI%
+ \else\ifFMA%
+ \protect\@boi%
+ \else\@bsORI%
+ \fi%
+ \fi}%
+ \def\chap{\ifFMA\string ^\else\@chapORI\fi}%
+ \def\tilde{\relax\ifFMA\ifmmode\expandafter%
+ \expandafter\expandafter\@tildeORI%
+ \else\string~\fi\else\expandafter\@tildeORI\fi}%
+ \def\@Fsp##1{\ifFMA\ifmmode^{\mathrm{##1}}%
+ \else$^{\mathrm{##1}}$\fi%
+ \else##1\fi}%
+ \def\@umer##1{\protect\@Fsp{##1}\kern.2em\ignorespaces}%
+ \long\def\etc{\def\@tempa{}%
+ \ifFMA%
+ \ifhmode\ifUSP\unskip\space\fi%
+ \ifdim\lastskip>\z@\unskip\penalty\@M~\fi%
+ \fi%
+ etc\def\@tempa{\@ifNextNB.{}{%
+ \@fw{-60- %
+ %
+ }}}%
+ \else\@etcORI%
+ \fi\@tempa}%
+\let\nombre\undefined%
+\DeclareRobustCommand*{\nombre}%
+ {\ifFMA\expandafter\@nombre%
+ \else\expandafter\@nomORI%
+ \fi}%
+ \def\numero{\ifFMA n\@umer{o}\else\@numORI\fi}%
+ \def\Numero{\ifFMA N\@umer{o}\else\@NumORI\fi}%
+ \def\numeros{\ifFMA n\@umer{os}\else\@numsORI\fi}%
+ \def\Numeros{\ifFMA N\@umer{os}\else\@NumsORI\fi}%
+ \def\degre{\ifFMA\r{}\space%
+ \else\expandafter\@degreORI\fi}%
+ \def\degres{\ifFMA\@Fsp{o}\else\@degresORI\fi}%
+ \def\leftguillemets{\@noBDfr%
+ \ifFMA\@oguills%
+ \else<<\fi}%
+ \def\rightguillemets{\@noBDfr%
+ \ifFMA\@fguills%
+ \else>>\fi}%
+ \def\fup{\@noBDfr\ifFTY%
+ \expandafter\@fup\fi}\MakeRobustCommand{fup}%
+ \def\@fup{\@ifstar{\csname\string\!\endcsname\@@fup}{\@@fup}}%
+ \def\@@fup##1{\def\@tempa{\leavevmode\raise+0.80ex%
+ \hbox{\protect\sm@llerthree%
+ \MakeLowercase{##1}}%
+ \@ifNextNB\bgroup{\@@@fup}{\kern+.17em}}%
+ \ifFMA\expandafter\@tempa\else##1\fi%
+ }%
+ \def\@@@fup##1{\ifx\empty##1\else\kern+.17em{##1}\fi}%
+ \def\@tgifFMA##1##2{\ifFMA\expandafter\protect\expandafter##1%
+ \else\expandafter\protect\expandafter##2\fi%
+ }%
+ \def\ieme{\@tgifFMA\@Ieme\@iemeORI}%
+ \def\@Ieme{\@ifstar{\@ieme}{\@@eme}}%
+ \def\@ieme{\fup*{e}}%
+ \def\@@eme{\fup{e}}\MakeRobustCommand{ieme}%
+ \def\iemes{\@tgifFMA\@Iemes\@iemesORI}%
+ \def\@Iemes{\@ifstar{\@iemes}{\@@emes}}%
+ \def\@iemes{\fup*{es}}\MakeRobustCommand{iemes}%
+ \def\@@emes{\fup{es}}%
+ \def\ier{\@tgifFMA\@ier\@ierORI}%
+ \def\@ier{\fup*{er}}\MakeRobustCommand{ier}%
+ \def\iers{\@tgifFMA\@iers\@iersORI}%
+ \def\iers{\fup*{ers}}\MakeRobustCommand{iers}%
+ \def\iere{\@tgifFMA\@iere\@iereORI}%
+ \def\iere{\fup*{re}}\MakeRobustCommand{iere}%
+ \def\ieres{\@tgifFMA\@ieres\@ieresORI}%
+ \def\@ieres{\fup*{res}}\MakeRobustCommand{ieres}%
+ \def\fsc{\@noBDfr\Fsc@@}%
+ \MakeRobustCommand{fsc}%
+ \def\Fsc@@{\@ifNextNB*{\let\Fsc@F\@sc@F\FSC@}{\let\Fsc@F\relax\FSC@*}}%
+ \def\@sc@F{\rmfamily\mdseries}%
+ \def\FSC@*##1{\fsc@##1\@@}%
+ \def\fsc@##1##2\@@{\ifFMA\leavevmode{\ifECM\Fsc@F\else\@sc@F\fi%
+ \textsc{%
+ \@uchbox{\let\protect\@empty%
+ \let\@typeset@protect\@empty%
+ \let\@changed@x\@changed@x@mouth%
+ \if\relax\noexpand##1\fsc@@@##1##2\@@%
+ \else\edef\@tempa{##1}%
+ \expandafter\fsc@@\@tempa##2\@@%
+ \fi}}}%
+ \else\@fscORI##1\fi}%
+ \def\fsc@@##1##2\@@{\MakeUppercase{##1}\lsc@*{##2}}%
+ \def\fsc@@@##1##2##3\@@{\MakeUppercase{##1{##2}}\lsc@*{##3}}%
+ \def\lsc{\@noBDfr\Lsc@@}%
+ \MakeRobustCommand{lsc}%
+ \def\Lsc@@{\@ifNextNB*{\let\Fsc@F\@sc@F\lsc@}{\let\Fsc@F\relax\lsc@*}}%
+ \def\lsc@*##1{\ifFMA\leavevmode{\ifECM\Fsc@F\else\@sc@F\fi%
+ \textsc{\@uchbox{\MakeLowercase{##1}}}}%
+ \else\@lscORI##1\fi}%
+ \def\@FE{\@noBDfr%
+ \@ifNextNB){\@@FPE}{\@@FE}}%
+ \def\@@FE{\the\@FrCount$^{\mathrm o}$\kern+.29em}%
+ \def%
+ \@@FPE){\setbox0=\hbox{\degre}\@FrDimen=\wd0\multiply\@FrDimen by 10%
+ \divide\@FrDimen by 45\leavevmode%
+ \the\@FrCount\kern-\@FrDimen%
+ \setbox0=\hbox{\the\@FrCount}\@tempdima=\ht0%
+ \setbox0=\hbox{\degre}\@tempdimb=\ht0%
+ \advance\@tempdimb by -\@tempdima%
+ \lower\@tempdimb\hbox{\degre}%
+ \multiply\@FrDimen by 45%
+ \divide\@FrDimen by 20%
+ \kern-\@FrDimen%
+ )\kern+.3em}%
+ \def\quando=##1{\@FrCount=##1\@FE}%
+ \MakeRobustCommand{quando}%
+ \def\primo{\@FrCount=1\@FE}%
+ \def\secundo{\@FrCount=2\@FE}%
+ \def\tertio{\@FrCount=3\@FE}%
+ \def\quarto{\@FrCount=4\@FE}%
+\def\frenchalias##1##2{%
+ \ifx##1\undefined\let##1 ##2\relax%
+ \else\f@issue%
+ \@fw{-1- %
+ }[\string##1]%
+ \expandafter\stop%
+ \fi}%
+\@ifundefined{refmark}%
+ {\def\refmark##1{\@noBDfr%
+ \ifFTY\ifhmode%
+ \ifdim\lastskip>\z@\unskip\fi\fi\fi%
+ \hbox{%
+ $^{\,%
+ \let\itshape\relax%
+\textrm{\scriptsize%
+ \ref{##1}%
+ }%
+ }$}}}{}%
+\def\!{\relax\ifFMA\ifmmode%
+ \mskip-\thinmuskip\else\negthinspace\fi%
+ \else\@ntsORI\fi}%
+\expandafter\def\csname\string\!\endcsname{\kern-.083335em}%
+\def\halfnegthinspace{\ifFMA\expandafter%
+ \csname\string\!\endcsname%
+ \else\expandafter\@hntsORI\fi}%
+\@ifundefined{moretolerance}{\def\moretolerance{%
+ \@noBDfr%
+ \advance\tolerance by \the\tolerance%
+ \advance\pretolerance by \the\pretolerance}}{}%
+\@ifundefined{I}{\def\I{I}}{}%
+ \def\Sauter##1Lignes{\@noBDfr%
+ \vspace*{##1\baselineskip}}%
+ }%
+\@ifundefined{AllTeX}{%
+\def\AllTeX{(\kern-.075em L\kern-.36em{\sbox\z@ T\vbox to\ht\z@{\hbox{%
+ \check@mathfonts\fontsize\sf@size\z@\math@fontsfalse%
+ \selectfont A}\vss}}\kern-.15em)\kern-.075em\TeX}%
+\MakeRobustCommand{AllTeX}%
+ }{}%
+\let\@currname\@currnameORI%
+\def\languagename{english}%
+\def\beginlanguage{%
+ \ifx\babel@savevariable%
+ \undefined\french%
+ \else\endenglish\selectlanguage{french}\fi%
+ }%
+\let\@bglngpk\babel@savevariable%
+\ifx\pg@add@to\undefined\else%
+\def\pg@begin{\begingroup}%
+\def\pg@end{\endgroup}%
+\fi%
+\edef\beginFWdirection{L}%
+\ifx\undefined\babel@core@loaded\ProcessOptions*%
+ \else%
+ \PackageInfo{\frenchname}%
+ {Initialisation de l'option \frenchname\space pour Babel}%
+ \GOfrench\let\GOfrench\relax%
+\fi%
+\let\@FW\undefined%
+\resetat%
+\PassOptionsToPackage{french}{varioref}%
+\PassOptionsToPackage{french}{pdfscreen}%
+\endinput%
diff --git a/language/french/e-french/texmf/tex/french_french-msg.tex b/language/french/e-french/texmf/tex/french_french-msg.tex
new file mode 100644
index 0000000000..ea3359faab
--- /dev/null
+++ b/language/french/e-french/texmf/tex/french_french-msg.tex
@@ -0,0 +1,213 @@
+% Fichier french_french-msg.tex (messages de l'extension FrenchPro)
+\msgencoding{TeX}\msgheader{-\msgid-\space}
+\msg{1}{la macro #1 existe d\'ej\`a}{}
+\msg{2}{fichier #1 non trouv\'e.}{}
+\msg{3}{\frenchpack\space n'est pas actif ici \string!}{}
+\msg{4}{passage au mode "Poor-Man-French-Style"}{}
+\msg{5}{d\'efinition de lettrine incorrecte}{}
+\msg{6}{lettrine \`a revoir}{}
+\msg{7}{lettrine r\'eduite \`a 1 seule lettre}{}
+\msg{8}{\string\footnotetext{#1} perdu. %
+ \MessageBreak %
+ Coder \'event. \string\protect\string\footnote}{}
+\msg{9}{fichier language.dat file absent ou corrompu}{}
+\msg{10}{l'extension frenchle/FrenchPro n'a pas \'et\'e charg\'ee}{}
+\msg{11}{application du \string<\string< frpatch \string>\string> #1}{}
+\msg{12}{frpatch.sty est p\'erim\'e, fichier \`a d\'etruire}{}
+\msg{13}{le caract\`ere "#1" est d\'ej\`a actif}{}
+\msgheader{-13-\space}
+\msg{13b}{la double ponctuation est alors d\'esactiv\'ee}{}
+\msgheader{-\msgid-\space}
+\msg{14}{fermeture de guillemets non ouverts}{}
+\msg{15}{le langage \frenchname\space porte le num\'ero \the\language}{}
+\msg{16}{le langage english language\space porte le num\'ero \the\language}{}
+\msg{17}{\string\wrongtypedspaces\space est inop\'erant dans ce contexte}{}
+\msg*{18}{\frenchname.sty force l'option %
+ \string\nofrenchguillemets\space en maths avec AmSLaTeX.}{}
+\msg{19}{utilisation du langage interne num\'ero \the\language}{}
+\msg*{20}{ATTENTION \string: le langage french n'est pas %
+ d\'efini dans votre format.}{}
+\msg*{20b}{\frenchname.sty \string: le langage french n'est pas d\'efini %
+ (ERREUR \string!)}{}
+\msg{21}{#1 n'est pas d\'efini}{}
+\msg{22}{abr\'eviation de \string"#1\string" non trouv\'ee}{}
+\msg*{23}{Extension \string: \frenchpack\space\frenchstyleid%
+ \space(B.Gaulle)}{}
+\msg{24}{\frenchname.sty utilise dans ce document le codage de fonte %
+ \f@encoding.}{}%
+\msg{25}{\frenchname.sty affiche ici ses messages en %
+ \ifEightBitOutput8-bits.\else7-bits %
+ \string<\string< \string \`a la TeX \string>\string>.\fi %
+ ^^J}{}
+\msg{26}{Erreur d\'etect\'ee dans \frenchname.sty \string! %
+ \MessageBreak %
+ (voir p.ex. le fichier language.dat)}{}
+\msg*{27}{\frenchname.sty \string: le language \l@no\space (#1) \'etait %
+ initialement (\`a initex) num\'erot\'e %
+ \csname l@#1\endcsname\space(ERREUR \string!)}{}
+\msg{28}{ATTENTION \string: TeX Version 2 ne permet pas d'utiliser des %
+ caract\`eres accentu\'es 8-bits}{}
+\msg*{29}{***Attention*** \string: le moteur TeX en utilisation avec %
+ des fontes CM %
+ \MessageBreak %
+ (comme dans ce format TeX) est insuffisant pour la c\'esure %
+ \MessageBreak %
+ des mots accentu\'es (comme en fran\c cais).}{}
+\msg{30}{ERREUR\string! Quelque chose est anormal \string! %
+ votre moteur TeX ne peut pas couper correctement les mots %
+ \MessageBreak %
+ fran\c cais accentu\'es *dans la fonte courante* ou %
+ avec ce codage}{}
+\msg{31}{Mauvaise c\'esure fran\c caise \string! %
+ \^Etes-vous s\^ur de tourner avec le format *********** %
+ \MessageBreak %
+ ayant les motifs de c\'esure fran\c caiss %
+ install\'es au moment d'initex \string? ***********}{}
+\msg{32}{si oui, essayez de passer au codage de fonte T1 %
+ (\string\usepackage[T1]{fontenc})***}{}
+\msg{33}{VERIFIEZ si les codes TeX hexad\'ecimaux list\'es ne peuvent s'afficher %
+ \MessageBreak %
+ \`a l'\'ecran et d\'ecidez s'ils doivent \^etre \'elimin\'es de \@kbencoding.kbc %
+ \MessageBreak %
+ en supposant que votre ''locale'' est bien initialis\'ee %
+ sur votre syst\`eme.}{}
+\msg{34}{ce fichier et les autres fichiers auxiliaires exigent d'utiliser %
+ \MessageBreak %
+ les extension LaTeX packages suivantes \string: \frenchpack\string! %
+ \MessageBreak %
+ v\'erifiez vos \string\usepackage\space ou effacer ces fichiers. %
+ Arr\^et de la composition \string!}{}
+\msg{35}{kbconfig \string: Red\'efinition de %
+ \string ^\string ^\string Y uccode. %
+ \MessageBreak %
+ kbconfig \string: Red\'efinition de %
+ \string ^\string ^\string Z uccode.}{}
+\msg{36}{ANOMALIE \string: nom de format LaTeX %
+ (\string\fmtname) invalide. %
+ \MessageBreak %
+ CORRIGER pour avoir \string\fmtname=LaTeX2e\space %
+ ou ancien nom.}{}
+\msg{36b}{ANOMALIE \string: LaTeX format %
+ (\string\fmtname) non standard}{}
+\msg{37a}{ANOMALIE \string: extension FrenchPro active ici.}{}
+\msg{37b}{ANOMALIE \string: extension FrenchPro inactive ici.}{}
+\msg{38}{La langage #1 est utilis\'e sous le num\'ero \the\workl@.}{}
+\msg{39}{Erreur \string: fichier language.dat non trouv\'e, essai de %
+ chargement du fichier de c\'esure US-english}{}
+\msg*{40}{\'Ecriture de kb8to7.lex et kb7to8.lex}{}
+\msg{41}{votre format est p\'erim\'e, merci de refaire initex \string!}{}
+\msg{42}{Le patch \frenchname\space (frpatch.sty) n'est pas valable %
+ \MessageBreak %
+ pour cette version de l'extension "\frenchpack" dat\'ee \FSfd}{}
+\msg{43}{french.all est CHARG\'E^^J}{}
+\msg{44}{ERREUR la commande \LaMacro\space n'est pas d\'efinie \string!}{}
+\msg{45}{ex\'ecution de \LaMacro}{}
+\msg{46}{Cette commande est deja d\'efinie dans \frenchname.sty %
+ \MessageBreak %
+ Probl\`eme \'eventuel avec \frenchpack\space (macro \Aboi #1)}{}
+\msg*{47}{je dois m'arr\^eter car votre moteur TeX engine n'est pas capable %
+ de g\'en\'erer des codes 8-bits en sortie, d\'esol\'e \string!}{}
+\msg{48}{Lecture du fichier de configuration de \frenchpack}{}
+\msg{49}{fermeture pr\'ematur\'ee de guillemets}{}
+\msg{50}{Erreur \string: le langage french n'est pas d\'efini dans %
+ le fichier language.dat.}{}
+\msg{51}{ERREUR \string: ce document n'a pas \'et\'e converti en 8-bits...}{}
+\msg*{52}{Erreur \string: \frenchpack\space package ne fonctionne pas %
+ avec une classe de document si minimaliste, d\'esol\'e \string!}{}
+\msg{53}{environnement guillemets inutilisable %
+ \MessageBreak %
+ avec l'option \string\noeveryparguillemets}{}
+\msg{54}{ERREUR \string: \string\unusedslot\space (\unusedslot) est invalide}{}
+\msg{55}{ERREUR le caract\`ere \string\unusedslot\space %
+ (\@unusedslot) n'est pas actif.}{}
+\msg*{56}{Les caract\`eres 8-bits trait\'es sont \string:}{}
+\msg{57}{extension keyboard #1 charg\'ee pour le codage de fonte %
+ \f@encoding.^^J}{}
+\msg{58}{valeur de #1 ignor\'ee}{}
+\msg*{59}{ERREUR FATALE \string: texte g\'en\'er\'e \'etrange et inhabituel.}{}
+\msg{60}{point manquant apr\`es \string\etc}{}
+\msg{61}{fichier hyph\hyphchar.tex file non trouv\'e.}{}
+\msg{62}{chargement d'un fichier de c\'esures additionnel %
+ pour les fontes \hyphchar\space avec caract\`ere de %
+ c\'esure sp\'ecifique}{}
+\msg{63}{fichier french.sty ou frenchle.sty non trouv\'e. %
+ \MessageBreak %
+ V\'erifiez s'ils existent quelque part dans votre syst\`eme.}{}
+\msg{64}{ERREUR \string: \string\fmtname\space est invalide dans lplain.tex}{}
+\msg{65}{\frenchname.sty charge %
+ les traductions pour la bibliographie \string:}{}
+\msg*{66}{ERREUR \string! Ce fichier ne peut \^etre compos\'e sans une %
+ \MessageBreak %
+ d\'eclaration de codage (voir les extensions keyboard ou inputenc).}{}
+\msg*{67}{ATTENTION il semble que vous utilisez \`a la fois inputenc et %
+ keyboard, merci de choisir \string!}{}
+\msg*{68}{ERREUR \string: \frenchpack\space ne tourne pas avec %
+ l'\'emulation 2.09, d\'esol\'e \string!}{}
+\msg{69}{kbconfig \string: interception de la commande dump pour %
+ \'eliminer quelques caract\`eres invalides.}{}
+\msg{70}{kbconfig \string: modification de \string\@tabacckludge\space pour %
+ les maths.}{}
+\msg{71}{ATTENTION \string: si babel est utilis\'e, %
+ \MessageBreak %
+ mettre \frenchname(pro/le) en option}{}
+\msg{72}{kbconfig \string: le codage utf8 ne peut \^etre r\'ealis\'e avec %
+ plain \string! %
+ \MessageBreak %
+ kbconfig \string: on continue sans caract\`eres Unicode.}{}
+\msg*{73}{\frenchname.sty a \'et\'e charg\'e trop t\^ot \string!}{}
+\msg*{74}{ERREUR, extension keyboard charg\'ee apr\`es %
+ \frenchpack!}{}
+\msg{75}{kbconfig \string: codage utf8 non trouv\'e via l'extension %
+ inputenc \string! %
+ \MessageBreak %
+ kbconfig \string: on continue sans caract\`eres Unicode.}{}
+\msg{76}{kbconfig \string: pas de contraintes de langage possibles %
+ avec Plain TeX \string!}{}
+\msg{77}{Aucun caract\`ere #1\space de d\'efini en english}{}
+\msg*{78}{ERREUR \string: l'otion noutf8 fournie est en conflit.}{}
+\msg*{79}{keyboard.sty \string: pas d'option locale fournie, %
+ codage utf8 impossible.}{}
+\msg{80}{Babel souhaite charger l'option \CurrentOption\space %
+ \MessageBreak mais l'extension mlp est d\'ej\`a charg\'ee, %
+ merci de choisir %
+ \MessageBreak soit mlp avec l'option \CurrentOption\space, %
+ soit \CurrentOption\space seul %
+ \MessageBreak ou babel avec l'option \CurrentOption\space}%
+ {\help{juste retirer l'extension ou l'option superflue.}}
+\msg*{81}{ATTENTION \string: extension "msg" non trouv\'ee\string; %
+ \MessageBreak on continue sans le texte des messages}{}
+\msg{82}{la commande \LaMacro\space n'est pas encore d\'efinie}{}
+\msg{83}{Test des macros avant le \string\begin{document}^^J}{}
+\msg{84}{Maintenant, nouveau test mais apr\`es le \string\begin{document}^^J}{}
+\msg{85}{Attention \string: l'option fixlanguage %
+ n'a pas \'et\'e fournie \`a l'appel de babelbib}{}
+\msg{86}{keyboard.sty\string: %
+ le dispositif mltex a \'et\'e annul\'e par l'option #1.}{}
+\msg{87}{ERREUR \string: %
+ \MessageBreak %
+ babelbib s'utilise uniquement avec babel}{}
+\msg{88}{Aucun caract\`ere n'a \'et\'e d\'efini\MessageBreak %
+ pour le codage clavier `utf8'\MessageBreak}{}
+\msg{89}{kbconfig \string: Le caract\`ere utilis\'e n'est pas d\'efini %
+ \MessageBreak %
+ avec le codage clavier `utf8'}%
+ {Vous pouvez en fournir une d\'efinition avec %
+ \noexpand\DeclareInputText\MessageBreak ou %
+ \noexpand\DeclareInputMath avant de l'utiliser.}%
+\msg{90}{Caract\`ere Unicode invalide, valeur \string < 00A0}{\@eha}
+\msg{91}{La cha\^\i{}ne de caract\`eres Unicode #1 n'a pas \'et\'e %
+ d\'efinie pour \^etre utilis\'ee avec LaTeX}{\@eha}
+\msg{92}{Vous devez \string:\MessageBreak %
+ - soit utiliser un moteur avec option MlTeX,\MessageBreak %
+ - soit passer en codage T1 par d\'efaut.}{}
+\msg*{93}{Vous utilisez deux options de francisation avec Babel, %
+ \MessageBreak %
+ merci d'en choisir une seule.}{}
+\msgheader{-**-\space}
+\msg*{**a}{Le num\'ero de s\'erie de \frenchpack\space est *\@FrVal*.}{}
+\msg*{**b}{\@FrVal\space of \frenchpack.}{}
+\msgheader{}
+\msg{*}{le message \msgid\space de l'extension \frenchname\space n'est pas %
+ r\'epertori\'e}{}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
diff --git a/language/french/e-french/texmf/tex/frenchle.cfg b/language/french/e-french/texmf/tex/frenchle.cfg
new file mode 100644
index 0000000000..c17b977891
--- /dev/null
+++ b/language/french/e-french/texmf/tex/frenchle.cfg
@@ -0,0 +1,12 @@
+% Fichier de configuration pour frenchle (avec ou sans babel)% 2005/03/23
+%
+% After Bernard Gaulle's decease this work is now maintained as a part of
+% the e-French project by a group of enthusiast users
+% under LPPL copyright as declared in http://www.efrench.org/
+%
+% Vous pouvez decommenter les lignes suivantes si vous souhaitez
+% utiliser les guillemets 8-bits iso-latin1 ou iso-latin9 :
+%
+%\catcode`\«=\active\catcode`\»=\active
+%\def«{\og\ignorespaces}\def»{\fg}
+\endinput%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/tex/frenchle.sty b/language/french/e-french/texmf/tex/frenchle.sty
new file mode 100644
index 0000000000..8988615f62
--- /dev/null
+++ b/language/french/e-french/texmf/tex/frenchle.sty
@@ -0,0 +1,2090 @@
+%
+% This is frenchle.sty (informations en francais ci-dessous.tex)
+% This is the light version of THE multilingual "e-French" package for LaTeX.
+% After Bernard Gaulle's decease this work is now maintained as a part of
+% the e-French project by a group of enthusiast users
+% under LPPL copyright as declared in http://www.efrench.org/
+% If you want to have informations about the professional version
+% see under www.efrench.org
+%
+% Cette extension << french allegee >> a pour objectif de resoudre un maximum
+% de problemes de francisation de LaTeX sans avoir a connaitre la moindre
+% commande complementaire ; la seule chose a faire est de saisir :
+% \usepackage{frenchle} si vous travaillez sans babel ;
+% \usepackage[frenchle]{babel} sinon ; dans ce cas il faut
+% avoir installe frenchle.ldf en plus de frenchle.sty
+% OU \usepackage[efrench]{babel} et dans ce dernier cas il faut avoir
+% installe french.ldf en plus de frenchle.sty.
+% mais le mieux avec babel est de coder : \documentclass[french]{classe}
+% puis : \usepackage[frenchle]{babel}
+% car ainsi l'option french est passée a toutes les extensions.
+% L'extension frenchle fait plein de choses pour vous au niveau typographique
+% (espacement de la ponctuation, composition des notes, etc.) ainsi que
+% pour la mise en page (figures, tableaux, listes, etc.), la traduction des
+% libelles usuels de LaTeX ou enfin la francisation des classes de documents
+% dont la classe << letter >>. Vous pouvez utiliser des guillemets a la
+% francaise tout comme avec l'option frenchb de Babel. Voir d'ailleurs a ce
+% sujet le fichier de configuration frenchle.cfg.
+% La documentation a propos de frenchle est disponible sur le serveur
+% a l'url http://www.efrench.org/bases/doc/frenchle.pdf ou sur ctan.
+%
+% Concernant la cesure des mots il est necessaire que votre format LaTeX
+% contienne les motifs de cesure du francais. Consultez a ce sujet la
+% FAQ de francisation a http://www.efrench.org/bases/FAQ.pdf
+% ou sur ctan.
+%
+% La version d'e-French peut vous apporter encore plein d'autres
+% facilites. Si vous ne trouvez pas la documentation a ce sujet, consultez
+% http://www.efrench.org/distributions/frguide.pdf.
+%
+\expandafter\ifx\csname frenchTeXmods\endcsname\relax%
+\else \endinput \fi%
+\def\frenchname{frenchle}%
+\def\frenchpack{frenchle}%
+\def\ds@french{}%
+\def\ds@pmfrench{\pmfrench}%
+{\catcode`\@=11{%
+ \ifx\@unexpandable@protect\undefined\let\protect\empty%
+ \else\let\protect\@unexpandable@protect%
+ \fi%
+ \xdef\FSfd{10 ao\^ut 2017}% = eFrench
+ \xdef\FSfv{V6,01}%
+ \xdef\frenchstyleid{\FSfv\space-- \FSfd\space --}%
+}}%
+ \edef\FSfd{2017/08/10}%
+\NeedsTeXFormat{LaTeX2e}[1996/12/01]%
+\let\auxWARNINGi=\@gobble%
+\def\@txt@msg#1{#1}%
+\def\@gobbleopt[#1]{}%
+\def\f@issue#1#2{#1{#2}\@ifnextchar[{\@gobbleopt}{}%
+ }%
+\newif\ifECM%
+\def\ErrFrench{\f@issue\@fW{-26- %
+ \@txt@msg{Erreur d\'etect\'ee dans \frenchname.sty !}%
+ \@txt@msg{(voir p.ex. le fichier language.dat)}%
+ }}%
+\def\ifFTY{\ErrFrench}\def\ifFTR{\ErrFrench}\def\ifFG{\ErrFrench}%
+\def\ifFLA{\ErrFrench}\def\ifFMA{\ErrFrench}\def\ifFH{\ErrFrench}%
+\def\ifArG{\ErrFrench}\def\ifFTSW{\ErrFrench}\def\ifFW{\ErrFrench}%
+\edef\GOfrench{`\string @}%
+\ifnum\catcode\GOfrench=11%
+ \let\resetat\relax%
+ \else\edef\resetat{\noexpand\catcode\GOfrench=\the\catcode\GOfrench}%
+ \makeatletter\fi%
+\let\@currnameORI\@currname%
+\xdef\@currname{\frenchname}%
+{\def\'{\string\'}%
+ \ProvidesPackage{\frenchname}%
+ [\FSfd\space The \frenchpack\space package /\FSfv/]%
+}%
+\def\GOfrench{babel}\ifx\@currnameORI\GOfrench%
+ \ifx\undefined\babel@core@loaded\input babel.def\relax\fi%
+ \ifx\undefined\babel@core@loaded%
+ \let\babel@core@loaded\main@language\fi%
+ \fi%
+\let\FSfv=\undefined%
+\IfFileExists{frlpatch.sty}{\def\FSfd@patch{unknown}}{\let\FSfd@patch\FSfd}%
+\if@compatibility%
+ \f@issue\typeout{^^J -68-
+ \@txt@msg{ERROR: \frenchpack\space is no more running }%
+ \@txt@msg{with 2.09 emulation, sorry!}%
+ }\expandafter\stop%
+\fi%
+\ifx\l@french\undefined\f@issue\typeout{^^J -20-
+ \@txt@msg{WARNING:}%
+ \@txt@msg{the French language is undefined in your format.}%
+ }%
+\fi%
+\fontencoding{\encodingdefault}\selectfont%
+ \def\@temp@{OT1}\ifx\@temp@\f@encoding%
+ \def\@temp@{\global\ECMfalse}%
+ \else\def\@temp@{LO1}\ifx\@temp@\f@encoding%
+ \def\@temp@{\global\ECMfalse}%
+ \else%
+ \def\@temp@{\global\ECMtrue}%
+ \fi%
+ \fi%
+\@temp@%
+\def\@tempa{\let\ifEightBitOutput\iffalse}%
+\ifx\EightBitOutputfalse\undefined\expandafter\@tempa\fi%
+\ifECM\else\ifx\charsubdef\undefined%
+ \def\@tempa{\noexpand\dGs}%
+ \ifx\@tempa\dGs\else%
+ \ifx\@kb@msgXXIX\relax\else%
+ \f@issue\typeout{^^J -29- %
+ \@txt@msg{***Warning***\string: TeX engine in use along with CM fonts }%
+ \@txt@msg{(as in current TeX format) isn't sufficient to hyphenate }%
+ \@txt@msg{words containing diacritics (like in French).}%
+ }%
+ \let\@kb@msgXXIX\relax%
+ \fi%
+ \fi%
+\fi\fi%
+\ifx\undefined\@dblarg%
+\long\def\@dblarg#1{\@ifnextchar[{#1}{\@xdblarg{#1}}}}%
+\long\def\@xdblarg#1#2{#1[{#2}]{#2}}%
+\fi%
+\newdimen\@FrDimen%
+\def\usualmessages{\let\ifEightBitOutput\iftrue}%
+ \ifnum\inputlineno=-1\def\@o@l{.}%
+ \else\def\@o@l{ (\`a la ligne \the\inputlineno).}\fi%
+ \expandafter\let\expandafter\@aiguORI\expandafter=%
+ \csname OT\string1\string\'\endcsname%
+ \expandafter\let\expandafter\@gravORI\expandafter=%
+ \csname OT\string1\string\`\endcsname%
+ \expandafter\let\expandafter\@acchORI\expandafter=%
+ \csname OT\string1\string\^\endcsname%
+ \expandafter\let\expandafter\@tremORI\expandafter=%
+ \csname OT\string1\string\"\endcsname%
+ \expandafter\let\expandafter\@cediORI\expandafter=%
+ \csname OT\string1\string\c\endcsname%
+\let\@tempc\relax%
+\ifx\today\undefined\let\today\cejour\fi%
+\ifx\today\undefined\f@issue\typeout{^^J -52- %
+ \@txt@msg{Error: the \frenchpack\space package doesn't run in }%
+ \@txt@msg{such minimal document class, sorry!}%
+ }\expandafter\stop%
+\fi%
+{\def\GOfrench{\global\let\ifEightBitOutput\iffalse}%
+ \let\add@accent\@gobble\edef\@tempa{\`{}}%
+ \def\@tempb{{\setbox \@tempboxa \hbox {}\accent 18 }}%
+ \ifx\@tempa\@tempb%
+ \expandafter%
+ \GOfrench%
+ \fi%
+}%
+\def\@fW#1{{\let\@nobraces\@firstofone%
+ \ifEightBitOutput%
+ \setbox\@tempboxa\hbox{\`\space}%
+ \ifx\charsubdef\undefined\else%
+ \let\add@accent\@gobble%
+ \def\'##1{\expandafter\@nobraces\@aiguORI##1}%
+ \def\`##1{\expandafter\@nobraces\@gravORI##1}%
+ \def\^##1{\expandafter\@nobraces\@acchORI##1}%
+ \fi%
+ \else%
+ \let\protect\string\let\add@accent\@gobble%
+ \fi%
+ \edef\@tempa{#1}\typeout{\@tempa}}}%
+{\def\ier{er}%
+\f@issue%
+\@fW{^^J -23- \@txt@msg{Extension \string : \frenchpack\space}%
+ \@txt@msg{\frenchstyleid\space(eFrench)}%
+ }%
+}%
+\let\ifFW\iftrue%
+\def\@fw#1{{\let\@NoFr\relax%
+ \ifFW\kbtypeout%
+ {^^J \frenchname.sty \string : #1\@o@l}%
+ \fi%
+ }}%
+ %
+\ifx\kbtypeout\undefined%
+\def\@kbtypeout[#1]#2{\ifEightBitOutput\let\@typeset@protect\protect\fi%
+ \let\@inpenc@undefined@\@gobble%
+ \edef\f@tempa{#2\empty}%
+ #1{\f@tempa}\egroup}%
+\def\kbtypeout{\kbIO[\typeout]}%
+\def\kbIO{\bgroup%
+ \ifECM\fontencoding{OT1}\selectfont\fi%
+ %
+ \let\@nobraces\@firstofone%
+ \let\protect\string%
+ \ifEightBitOutput%
+ \def\'##1{\expandafter\@nobraces\@aiguORI##1}%
+ \def\`##1{\expandafter\@nobraces\@gravORI##1}%
+ \def\^##1{\expandafter\@nobraces\@acchORI##1}%
+ \def\"##1{\expandafter\@nobraces\@tremORI##1}%
+ \def\c##1{\expandafter\@nobraces\@cediORI##1}%
+ \csname @kbspecials\endcsname%
+ \else%
+ \let\add@accent\@gobble%
+ \def\set@display@protect{\let\protect\noexpand}%
+ \fi%
+ \@kbtypeout}%
+\fi%
+\ifx\@kbtypeout\undefined%
+ \def\@kbtypeout[#1]#2{#1{#2}\egroup}%
+\fi%
+\def\@tempb{\let\ifEightBitOutput\iffalse}%
+\ifx\kbtypeout\typeout%
+ \long\def\@tempa{\add@accent{19}}%
+ \ifx\@tempa\@aiguORI\expandafter\@tempb\fi%
+\def\@fw#1{\ifFW\bgroup\let\@nobraces\@firstofone%
+ \ifEightBitOutput%
+ \ifx\charsubdef\undefined\else%
+ \def\'##1{\expandafter\@nobraces\@aiguORI##1}%
+ \def\`##1{\expandafter\@nobraces\@gravORI##1}%
+ \fi%
+ \else%
+ \let\protect\string\let\add@accent\@gobble%
+ \fi%
+ \@kbtypeout[\typeout]{^^J \frenchname.sty \string : #1\@o@l}%
+ \fi%
+ }%
+\fi
+\def\@Ffnt#1{\f@issue\@fw{-2- \@txt@msg{fichier #1 non trouv\'e}%
+ }[#1]}%
+\def\@finput#1{\InputIfFileExists{#1}{}{\@Ffnt{#1}}}%
+\def\@NoFr{\f@issue\@fw{-3- %
+ \@txt@msg{\frenchpack\space n'est pas actif ici !}%
+ }}%
+\let\ifFrench\iffalse%
+\ifx\addto\undefined%
+ \def\addto#1#2{\ifx#1\@undefined\def#1{#2}%
+ \else\ifx#1\relax\def #1{#2}%
+ \else{\toks@\expandafter{#1#2}%
+ \xdef#1{\the\toks@}}%
+ \fi%
+ \fi%
+ }%
+\fi%
+\def\fraddto#1#2{\addto{#1}{#2}%
+ \ifFrench\french\else\english\fi}%
+\ifx\MakeRobustCommand\undefined%
+\def\MakeRobustCommand#1{\expandafter\expandafter\expandafter%
+ \let\expandafter\expandafter\csname #1 fp\endcsname%
+ \csname #1\endcsname%
+ \expandafter%
+ \edef\csname #1\endcsname{\expandafter\protect%
+ \expandafter\noexpand\csname #1 fp\endcsname}
+ }%
+\fi%
+\ifx\DocInput\undefined\else%
+ \let\fr@di\DocInput\def\DocInput#1{%
+ \ifFrench\english\fr@di{#1}\french%
+ \else\fr@di{#1}%
+ \fi\relax}%
+\fi%
+\ifx\url\undefined\else%
+ \let\fr@ul\url\def\url#1{%
+ \ifFrench\english\fr@ul{#1}\french%
+ \else\fr@ul{#1}%
+ \fi\relax}%
+\fi%
+\ifx\xy\undefined\else%
+ \let\fr@xy\xy\def\xy{%
+ \ifFrench\nofrenchguillemets\DFPdp\fi\fr@xy}%
+\fi%
+\ifx\hyper@n@rmalise\undefined\else%
+ \let\fr@hne\hyper@n@rmalise\def\fr@hnr#1#2{\fr@hne{#1}{#2}}%
+ \def\hyper@n@rmalise{\ifFrench\english\expandafter\fr@hnr%
+ \else\expandafter\fr@hne\fi}%
+\fi%
+\ifx\PDFSCR@Info\undefined\else%
+ \def\@seccntformat#1{\protect\textcolor{section\thesection@level}%
+ {\expandafter\upshape\csname the#1\endcsname}\quad}%
+\fi%
+\ifx\listing\undefined\else%
+ \let\fr@li\listing%
+\edef\listing{\noexpand\@protected@testopt\noexpand\listing%
+ \expandafter\noexpand\csname\string\listing\endcsname {1}}%
+ \ifx\fr@li\listing%
+ \def\listing{%
+ \ifFrench\expandafter\english\expandafter\fr@li%
+ \else\expandafter\fr@li%
+ \fi}%
+ \else%
+ \long\def\listing{%
+ \ifFrench\expandafter\english\expandafter\fr@li%
+ \else\expandafter\fr@li%
+ \fi\relax}%
+ \fi%
+\fi%
+\ifx\inputlisting\undefined\else%
+ \let\fr@PL\lst@ProcessListing\def\lst@ProcessListing[#1]{%
+ \ifFrench\english\fr@PL[#1]\french%
+ \else\fr@PL[#1]%
+ \fi\relax}%
+\fi%
+\ifx\lstlisting\undefined\else%
+ \let\fr@lsi\lstlisting\long\def\lstlisting{%
+ \ifFrench\expandafter\english\expandafter\fr@lsi%
+ \else\expandafter\fr@lsi%
+ \fi}%
+\fi%
+\ifx\lstinputlisting\undefined\else%
+ \let\fr@PL\lst@ProcessListing\def\lst@ProcessListing[#1]{%
+ \ifFrench\english\fr@PL[#1]\french%
+ \else\fr@PL[#1]%
+ \fi}%
+\fi%
+ \def\@ifFTYfalse{\let\ifFTY\iffalse}%
+ \def\@ifFTYback{\let\ifFTY\if@Back}%
+ \let\if@PMF\iffalse%
+\f@issue%
+\@fW{ -24- %
+ \@txt@msg{\frenchname.sty utilise dans ce document le codage de fonte }%
+ \@txt@msg{\f@encoding.^^J}%
+ }%
+\f@issue%
+\@fW{ -25- \@txt@msg{\frenchname.sty affiche ici ses messages en }%
+\@txt@msg{\ifEightBitOutput8-bits.\else7-bits << \string\`a la TeX >>.\fi}%
+\@txt@msg{^^J^^J}%
+ }%
+\def\CheckSevenBits/#1{\def\@tempa##1##2/##3{\ifx##2\empty\else%
+ \f@issue%
+ \@fw{-51- %
+ \@txt@msg{ERREUR : ce document n'a pas \'et\'e converti en 8-bits...}%
+ }%
+ \expandafter ##3\fi}\expandafter\@tempa\noexpand#1}%
+\@ifundefined{tt}{\def\tt{\fontfamily{\ttdefault}\selectfont}}{}%
+\edef\lq{\string`}\edef\rq{\string'}%
+\let\@cilq='%
+\edef\lqq{\string`\string`}\edef\rqq{\string'\string'}%
+\edef\pointvirgule{\string;}%
+\edef\deuxpoints{\string:}%
+\let\@cidp=:%
+\edef\pointexclamation{\string!}%
+\edef\pointinterrogation{\string?}%
+\edef\inferieura{\string<}%
+\edef\superieura{\string>}%
+\edef\dittomark{\string"}%
+\let\f@par\par%
+\let\@SLQ\lq%
+\def\@SRQ@{^\bgroup\prim@s}%
+\def\@SRQ{\ifmmode\expandafter\@SRQ@\else\rq\fi}%
+\newif\ifFH%
+\let\@noBDfr\@nodocument%
+\def\frenchhyphenation{\@noBDfr}%
+\def\nofrenchhyphenation{\@noBDfr}%
+\def\frenchtypography{\@noBDfr}%
+\def\regularmathcomma{\@noBDfr}%
+\def\frenchmathcomma{\@noBDfr}%
+\def\frenchwarnings{\@noBDfr}%
+\def\nofrenchwarnings{\@noBDfr}%
+\def\nofrenchtypography{\@noBDfr}%
+\def\nofrenchtranslation{\@noBDfr}%
+\def\frenchtranslation{\@noBDfr}%
+\ifx\RIfM@\undefined%
+\def\nofrenchguillemets{\@noBDfr}%
+\def\frenchguillemets{\@noBDfr}%
+\def\nofrenchbguillemets{\@noBDfr}%
+\def\frenchbguillemets{\@noBDfr}%
+\fi%
+\global\let\ifCLAfrench\iffalse%
+\def\ConstantLayout{\@noBDfr}%
+\def\nofrenchmacros{\@noBDfr}%
+\def\frenchmacros{\@noBDfr}%
+\def\automaticlettrine{\@noBDfr}%
+\def\noautomaticlettrine{\@noBDfr}%
+\def\noeveryparguillemets{\@noBDfr}%
+\def\everyparguillemets{\@noBDfr}%
+\def\nofrenchlayout{\@noBDfr}%
+\def\frenchlayout{\@noBDfr}%
+\def\indentfirst{\@noBDfr}%
+\def\nonindentfirst{\@noBDfr}%
+\def\NouveauLangage{\@noBDfr}%
+\def\letpunctutionactivefor{\@noBDfr}%
+\def\@tempa{\let\ifarticle\iffalse}%
+\ifx\ifarticle\undefined\expandafter\@tempa\fi%
+\ifx\@seminarerr\undefined\else\ifarticle\else%
+\let\@soORI\shipout%
+\def\shipout#1#2{\def\@tempa{slide}\def\@tempb{slide*}%
+ {\ifx\@tempa\@currenvir\let\protect\noexpand%
+ \else\ifx\@tempb\@currenvir\let\protect\noexpand\fi%
+ \fi%
+ \@soORI#1#2}%
+ \global\let\shipout\@soORI%
+ }%
+\fi\fi%
+\let\h@yphenation\hyphenation%
+\long\def\f@hyphenation#1{\bgroup%
+ \let\par\space%
+ \def\-{ }%
+ \let\allowhyphens\undefined%
+ \csname accenthyphcodes\endcsname%
+ \lowercase{\edef\@tempa{#1}}%
+ \h@yphenation{\@tempa}\egroup}%
+\def\@tempa{\let\iffrenchbibliography\iftrue}%
+\ifx\iffrenchbibliography\undefined\expandafter\@tempa\fi%
+\ifx\nombre\undefined\else\let\@nomORI\nombre\fi%
+\begingroup\obeyspaces%
+\gdef\@@nombre{\ifFTY\@mathcomma\obeyspaces\let =\,\fi}%
+\endgroup%
+\def\@nombre#1{\bgroup\let\ifFTY\iftrue\def\@tempa{#1}%
+ \def\,{\ifmmode\mskip\thinmuskip\fi}%
+ \if@filesw{\immediate\openout\@inputcheck=\jobname.tmp%
+ \let\protect\noexpand%
+ \ifmmode%
+ \immediate\write\@inputcheck{\protect\makeatletter%
+ \protect\@@nombre%
+ \@tempa\ignorespaces}%
+ \else%
+ \immediate\write\@inputcheck{\protect\makeatletter%
+ \protect\@@nombre%
+ $\@tempa$\ignorespaces}%
+ \fi%
+ \immediate\closeout\@inputcheck%
+ }%
+ \immediate\openin\@inputcheck=\jobname.tmp%
+ \immediate\read\@inputcheck to\@tempa%
+ \immediate\closein\@inputcheck%
+ \def\@tempa{{\input{\jobname.tmp}}}%
+ \fi%
+ \@tempa\egroup%
+ }%
+\ifx\nombre\undefined\DeclareRobustCommand*{\nombre}{\@nombre}\fi%
+\ifx\WindowsUnits\undefined%
+ \def\WindowsUnits{\@wu}\fi%
+\def\FileName{\bgroup%
+ \def\@FNenc@loop##1##2{\@tempcnta`##1\relax%
+ \loop\catcode\@tempcnta=11%
+ \ifnum\@tempcnta<`##2\relax%
+ \advance\@tempcnta\@ne%
+ \repeat}%
+ \@FNenc@loop\^^A\^^H%
+ \@FNenc@loop\^^K\^^K%
+ \@FNenc@loop\^^N\^^_%
+ \@FNenc@loop\^^?\^^ff%
+ \@FileName}%
+\def\@FileName#1{\gdef\theFileName{#1}\egroup}%
+\let\og\empty\let\fg\empty%
+ \def\FrenchGuillemetsFrom#1#2#3#4{%
+ \DeclareFontEncoding{#1}{}{}%
+ \DeclareFontSubstitution{#1}{#2}{m}{n}%
+ \DeclareTextCommand{\guillemotleft}{OT1}{%
+ {\fontencoding{#1}\fontfamily{#2}\selectfont\char#3}}%
+ \DeclareTextCommand{\guillemotright}{OT1}{%
+ {\fontencoding{#1}\fontfamily{#2}\selectfont\char#4}}}
+ \def\CyrillicGuillemets{\FrenchGuillemetsFrom{OT2}{wncyr}{60}{62}}
+ \def\PolishGuillemets{\FrenchGuillemetsFrom{T1}{lmr}{19}{20}}
+ \def\LasyGuillemets{%
+ \DeclareTextCommand{\guillemotleft}{OT1}{\hbox{%
+ \fontencoding{U}\fontfamily{lasy}\selectfont(\kern-0.20em(}}%
+ \DeclareTextCommand{\guillemotright}{OT1}{\hbox{%
+ \fontencoding{U}\fontfamily{lasy}\selectfont)\kern-0.20em)}}}
+ \IfFileExists{t1lmr.fd}{\PolishGuillemets}{\LasyGuillemets}
+ \DeclareTextSymbolDefault{\guillemotleft}{OT1}
+ \DeclareTextSymbolDefault{\guillemotright}{OT1}
+ \def\guill@spacing{\penalty\@M\hskip.8\fontdimen2\font
+ plus.3\fontdimen3\font
+ minus.8\fontdimen4\font}
+ \DeclareRobustCommand*{\begin@guill}{\leavevmode
+ \guillemotleft\penalty\@M\guill@spacing}
+ \DeclareRobustCommand*{\end@guill}{\ifdim\lastskip>\z@\unskip\fi
+ \penalty\@M\guill@spacing\guillemotright\xspace}
+ \AtBeginDocument{\ifx\xspace\@undefined\let\xspace\relax\fi}
+ \def\bbl@frenchguillemets{\renewcommand{\og}{\begin@guill}%
+ \renewcommand{\fg}{\end@guill}}
+ \def\bbl@nonfrenchguillemets{\renewcommand{\og}{``}%
+ \renewcommand{\fg}{\ifdim\lastskip>\z@\unskip\fi ''}}
+\def\@ifo{%
+\def\kbIO{\bgroup%
+ \ifECM\fontencoding{OT1}\selectfont\fi%
+ \ifFTY\expandafter\nofrenchtypography\fi%
+ \let\@nobraces\@firstofone%
+ \let\protect\string%
+ \ifEightBitOutput%
+ \def\'####1{\expandafter\@nobraces\@aiguORI####1}%
+ \def\`####1{\expandafter\@nobraces\@gravORI####1}%
+ \def\^####1{\expandafter\@nobraces\@acchORI####1}%
+ \def\"####1{\expandafter\@nobraces\@tremORI####1}%
+ \def\c####1{\expandafter\@nobraces\@cediORI####1}%
+ \csname @kbspecials\endcsname%
+ \else%
+ \let\add@accent\@gobble%
+ \def\set@display@protect{\let\protect\noexpand}%
+ \fi%
+ \@kbtypeout}%
+\let\s@owhyphens\showhyphens%
+\let\@dsORI\dospecials%
+\@ifundefined{@sanitize}{\def\@sanitize{\relax}}{}%
+\let\@saORI\@sanitize%
+\def\frenchhyphenation{%
+ \ifFH\else\FHtrue%
+ \edef\@uchORI{\the\uchyph}%
+ \def\@Hif{\ifFH}\let\@Hfi\fi%
+ \lccode `\'=`\'%
+ \ifx\flowercase\undefined\else\def\lowercase{\flowercase}\fi%
+ \@ifundefined{allowhyphens}{%
+ \def\allowhyphens{\ifhmode\nobreak\hskip\z@skip\fi}}{}%
+ \@ifundefined{lefthyphenmin}{}%
+ {\lefthyphenmin=2\righthyphenmin=3}%
+ \@whatUCH%
+ \def\@tempa####1{{\accenthyphcodes\h@yphenation{####1}}}%
+ \ifx\@tempa\hyphenation\f@issue%
+ \@fw{-41- \@txt@msg{your format is out of date, }%
+ \@txt@msg{please run initex again!}%
+ }\stop%
+ \fi%
+ \def\accenthyphcodes{%
+ \let\@typeset@protect\protect%
+ \ifx\protect\noexpand\else%
+ \ifECM\else\fontencoding{T1}%
+ \let\pickup@font\@gobble%
+ \let\size@update\relax\selectfont%
+ \fi\fi}%
+ \let\hyphenation\f@hyphenation%
+ \def\showhyphens####1{\bgroup%
+ \csname accenthyphcodes\endcsname%
+ \protected@edef\@tempa{####1}%
+ \s@owhyphens{\@tempa}\egroup}%
+ \fi}%
+\def\nofrenchhyphenation{%
+ \ifFH\FHfalse%
+ \lccode`\'=0%
+ \let\hyphenation\h@yphenation%
+ \let\showhyphens\s@owhyphens%
+ \ifx\lowercaseORI\undefined\else\let\lowercase\lowercaseORI\fi%
+ \@ifundefined{lefthyphenmin}{}%
+ {\lefthyphenmin=2\righthyphenmin=3}%
+ \uchyph=\@uchORI%
+ \fi}%
+\@tempcnta=\the\mathcode`,\@tempcntb=\the\mathcode`,%
+\divide\@tempcnta by 4096\relax%
+\multiply\@tempcnta by -4096\relax%
+\advance\@tempcntb by \@tempcnta%
+\edef\@tempb{\noexpand\mathcode`,=\the\@tempcntb}%
+\advance\@tempcntb by 24576\relax%
+\edef\@tempa{\noexpand\mathcode`,=\the\@tempcntb}%
+\edef\regularmathcomma{%
+ \noexpand\def\noexpand\@mathcomma{\@tempa}%
+ \noexpand\@mathcomma}%
+\def\@tempa{\if\space\next\else\mathord\fi\mathcomma}%
+\let\ifFTY\iftrue%
+\ifx\@tempa\sm@rtcomma%
+ \def\frenchmathcomma{%
+ \def\@mathcomma{\ifFTY\mathcode`\,="8000\fi}%
+ \@mathcomma}%
+\else%
+\edef\frenchmathcomma{%
+ \noexpand\def\noexpand\@mathcomma%
+ {\noexpand\ifFTY\@tempb\noexpand\fi}%
+ \noexpand\@mathcomma}%
+\fi%
+\frenchmathcomma%
+\def\ifFTY{\ErrFrench}%
+\def\nofrenchtypography{%
+ \let\ifFTY\iffalse\let\if@Back\ifFTY%
+\expandafter\let\csname OT1\string\textbackslash \endcsname\undefined%
+ \nofrenchguillemets%
+ \nofrenchbguillemets%
+ \sloppy%
+ \nonfrenchspacing%
+ \regularmathcomma%
+ }%
+\def\frenchtypography{%
+ \let\ifFTY\iftrue\let\if@Back\ifFTY%
+\expandafter\let\csname OT1\string\textbackslash \endcsname\@boiORI%
+ \let\ifLPA\iffalse%
+ \typedspaces%
+ \frenchbguillemets%
+ \edef\@tempa{\the\vfuzz}%
+ \fussy%
+ \vfuzz=\@tempa%
+ \frenchspacing%
+ \frenchmathcomma%
+ }%
+\def\nofrenchtranslation{%
+ \let\ifFTR\iffalse\@cORI}%
+\def\frenchtranslation{%
+ \let\ifFTR\iftrue\captionsfrench}%
+\let\frenchguillemets\relax\let\nofrenchguillemets\relax%
+\let\frenchbguillemets\bbl@frenchguillemets%
+\let\nofrenchbguillemets\bbl@nonfrenchguillemets%
+\def\@tempa{\global\let\ifCLA\iffalse}%
+\ifx\ifCLA\undefined\expandafter\@tempa\fi%
+\def\ConstantLayout{\global\let\ifCLA\iftrue%
+ \expandafter\let\csname ifCLA\languagename\endcsname\iftrue%
+ \def\@tempa{\let\ifbbbbfixlanguage\iftrue}%
+ \ifx\ifbbbbfixlanguage\undefined\@tempa\fi%
+ \def\@tempa{\ifbbbbfixlanguage\else%
+ \f@issue%
+ \@fw{-85- \@txt@msg{Attention \string: l'option fixlanguage }%
+ \@txt@msg{n'a pas ete fournie a l'appel de babelbib}%
+ }\fi%
+ }%
+ \ifx\@nodocument\relax\@tempa%
+ \else\ifx\btxselectlanguage\undefined%
+ \PassOptionsToPackage{fixlanguage}{babelbib}%
+ \else\@tempa%
+ \fi%
+ \fi%
+ \let\ConstantLayout\relax}%
+\def\nofrenchlayout{\nofrenchtrivsep%
+ \let\ifFLA\iffalse\@EIM}%
+\def\frenchlayout{%
+ \let\ifFLA\iftrue\everyparguillemets%
+ \@FIM\@FL\let\@FL\empty\noautomaticlettrine%
+ \frenchtrivsep}%
+\def\frenchwarnings{\let\ifFW\iftrue%
+ \frenchtrivsepwarnings}%
+\def\nofrenchwarnings{\let\ifFW\iffalse%
+ }%
+}%
+\ifx\@ufo\undefined%
+ \let\@ufo\empty%
+\fi%
+ \def\prim@s{\prime\futurelet\@let@token\pr@m@s}%
+ \def\pr@m@s{\ifx\@cilq\@let@token\expandafter\pr@@@s%
+ \else\ifx^\@let@token\expandafter\expandafter\expandafter\pr@@@t%
+ \else\egroup\fi%
+ \fi}%
+\let\@fsORI\frenchspacing%
+\def\frenchspacing{\@fsORI\ifECM\sfcode`\(=0\sfcode`\)=1000\fi}%
+\catcode`<=\active\catcode`>=\active\catcode`'=\active%
+\catcode`:=\active\catcode``=\active%
+\let<=\inferieura\let>=\superieura%
+\def\@Fstr{\def<{\@LSG}\def>{\@RSG}\def`{\@SLQ}\def'{\@SRQ}%
+ \def:{\deuxpoints}%
+ \let\dGs\empty}%
+\def\@LiN{\let\@sogORI<\let\@sfgORI>\let\@lqORI`\let\@rqORI'%
+ \let\@dpORI:\@Fstr\@ifFTYfalse}%
+\def\@LiB{\let<\@sogORI\let>\@sfgORI\let`\@lqORI\let'\@rqORI%
+ \let:\@dpORI\@ifFTYback}%
+\catcode\lq:=12%
+\let\@s@ORI\special%
+\ifx\eTeXversion\undefined%
+\def\newcount{\alloc@0\count\countdef\insc@unt}%
+\def\newdimen{\alloc@1\dimen\dimendef\insc@unt}%
+\def\newbox{\alloc@4\box\chardef\insc@unt}%
+\fi%
+\let\ifFTY\iffalse%
+\ifx\vref\undefined\else%
+\@ifpackageloaded{varioref}{\def\@vrfCode{%
+ \@gG{vr}{vref}{/}{1}%
+ \@gG{vpr}{vpageref}{1}{1}%
+ \@gG{vprr}{vpagerefrange}{1}{2}%
+ \def\reftextpagerange##1##2{%
+ pages~\pageref{##1}\ifFTY -\else --\fi\pageref{##2}}%
+ }%
+ }{}%
+\fi%
+\def\ifFTY{\ErrFrench}%
+\@ifclassloaded{beamer}{\let\l@chapter\empty%
+ \def\beamer@captiontemplate{\small\structure%
+ {\insertcaptionname\captionseparator\space}%
+ \insertcaption}
+ }{}%
+\def\GOfrench{%
+ \def\special##1{\@ifFTYfalse\bgroup\@Fstr\@s@ORI{##1}%
+ \egroup\@ifFTYback}%
+ \let\@noBDfr\relax%
+ {\catcode\lq\<=\active\ifx<\undefined\else\global%
+ \let\@mLSG<\global%
+ \def\@LSG{\ifmmode\@mLSG\else\inferieura\fi}\fi}%
+ {\catcode\lq\>=\active\ifx>\undefined\else\global%
+ \let\@mRSG>\global%
+ \def\@RSG{\ifmmode\@mRSG\else\superieura\fi}\fi}%
+\if@PMF\def\pmfrench{}\def\noeveryparguillemets{}\def\@stared{}%
+ \def\@desarm{}\def\@qquotes{}\def\@staring{}\def\@fniv2{}\fi%
+\def\sm@llerthree{\protect\sm@ller\protect\sm@ller\protect\sm@ller}
+\@ifundefined{smaller}{\def\sm@ller{\small}%
+ \let\sm@llerthree\scriptsize%
+ \def\l@rger{\large}}%
+ {\def\RSsmallest{4pt}%
+ \ifx\undefined\sm@ller%
+ \let\sm@ller\smaller\fi}%
+\@ifundefined{footnotesize}{%
+ \def\footnotesize{\sm@ller\sm@ller}}{}%
+\@ifundefined{Huge}{%
+ \def\Huge{\l@rger\l@rger\l@rger\l@rger\l@rger}}{}%
+\def\noresetatpart{\ifFLA\let\cl@part\empty\fi}%
+\def\noresetatchapter{\ifFLA\let\cl@chapter\empty\fi}%
+\@ifundefined{chapter}{}{}%
+\@ifundefined{c@chapter}{\newcounter{chapter}}{\@addtoreset{chapter}{part}}%
+\@ifundefined{quotation}{\def\quotation{}}{}%
+\ifx\tableofcontents\undefined%
+ \else\let\@tocORI\tableofcontents\fi%
+\ifx\pdfstringdef\undefined%
+ \else\let\contentslineORI\contentsline\fi%
+\@ifundefined{l@chapter}{%
+\def\@tempa{%
+ \def\l@chapter####1####2{\addpenalty{-\@highpenalty}%
+ \vskip 1.0em plus\p@\@tempdima 1.5em%
+ \begingroup%
+ \parindent \z@ \rightskip \@pnumwidth \parfillskip -\@pnumwidth%
+ \bfseries \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip%
+ ####1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss ####2}\par%
+ \penalty\@highpenalty%
+ \endgroup}}%
+\ifx\RIfM@\undefined\@tempa%
+ \else%
+ \ifx\fr@RIfM@cls\undefined\@tempa
+\fi%
+\fi}{}%
+\@ifundefined{theHchapter}{}%
+ {\renewcommand{\theHchapter}{\arabic{part}.\arabic{chapter}}}%
+ \def\@gG##1##2##3##4{%
+ \def\@temp@{\expandafter\let\csname @##1@ORI\endcsname=}%
+ \expandafter\@temp@\csname ##2\endcsname%
+ \if##3\empty%
+ \if2##4%
+ \expandafter\def\csname ##2\endcsname####1####2%
+ {\protect\atgG{##1}{{####1}{####2}}}%
+ \else%
+ \if3##4%
+ \expandafter\def\csname ##2\endcsname####1####2####3%
+ {\protect\atgG{##1}{{####1}{####2}{####3}}}%
+ \else%
+ \expandafter\def\csname ##2\endcsname####1%
+ {\protect\atgG{##1}{{####1}}}%
+ \fi%
+ \fi%
+ \else%
+ \if/##3\expandafter\def\csname ##2\endcsname{\protect\atgH{##1}}%
+ \else%
+ \if2##4\expandafter\def\csname ##2\endcsname{\protect\atgN{##1}}%
+ \else\expandafter\def\csname ##2\endcsname{\protect\atgM{##1}}%
+ \fi%
+ \fi%
+ \fi}%
+ \def\atgG##1##2{\bgroup\@ifFTYfalse\@Fstr%
+ \expandafter\csname @##1@ORI\endcsname##2\egroup}%
+ \def\atgH##1##2{\bgroup\@ifFTYfalse\@Fstr%
+ \expandafter\csname @##1@ORI\endcsname{##2}\egroup}%
+ \def\atgM##1{\@ifNextNB[{\@gM@@{##1}}{\@gM@@{##1}[\empty]}%
+ }%
+ \def\atgN##1{\@ifNextNB[{\@gM@@@{##1}}{\@gM@@@{##1}[\empty]}%
+ }%
+ \def\@gM@@##1[##2]##3{\@gM@@@{##1}[##2]{##3}{}}%
+ \def\@gM@@@##1[##2]##3##4{\bgroup\@ifFTYfalse\@Fstr%
+ \xdef\@temp@{\noexpand\@gG@{##3}{##4}}\egroup%
+ \ifx\empty##2\let\@gG@=\empty%
+ \else\protected@edef\@gG@{[##2]}\fi%
+ \let\@typeset@protect\protect%
+ \protected@edef\@temp@{\noexpand\expandafter%
+ \noexpand\expandafter%
+ \noexpand\csname @##1@ORI\noexpand\endcsname%
+ \@temp@}\@temp@}%
+\ifx\babel@sanitize@arg\undefined\else%
+\def\babel@sanitize@arg##1{##1}%
+\wlog{\frenchname.sty\string: use of the babel package force me to nullify %
+ \noexpand\babel@sanitize@arg.}%
+\fi%
+\ifx\ifthenelse\undefined\else\let\@iTeORI\ifthenelse%
+ \long\def\ifthenelse##1##2##3{\@ifFTYfalse\@iTeORI{##1}%
+ {\@ifFTYback##2}{\@ifFTYback##3}}%
+\fi%
+\ifx\texttt\undefined\else\@gG{xt}{texttt}{/}{1}%
+ \MakeRobustCommand{texttt}\fi%
+\ifx\hyperbaseurl\undefined\else\@gG{hl}{hyperbaseurl}{/}{1}\fi%
+\ifx\Ginclude@graphics\undefined\else\@gG{ig}%
+ {Ginclude@graphics}{/}{1}\fi%
+\ifx\NAT@citex\undefined%
+ \ifx\cite\undefined\else\@gG{c}{cite}{1}{1}\fi%
+ \ifx\citeyear\undefined\else\@gG{cy}{citeyear}{/}{1}\fi%
+\else%
+ \let\@cxORI\@citex%
+ \def\@citex[##1][##2]##3{\@ifFTYfalse%
+ \let\mbox\mboxORI%
+ \@cxORI[##1][##2]{##3}\aftergroup\@ifFTYback}%
+\@gG{cin}{citation}{/}{1}%
+ \ifx\ifjb@index@bib\undefined\let\ifjb@index@bib\iffalse\fi%
+ \ifx\jb@lbibitem\undefined\else%
+ %
+ %
+ \def\jb@lbibitem[##1]##2{%
+ \gdef\jb@tempb{##1}%
+ \protected@xdef\jb@key{##2}%
+ \ifjb@index@bib%
+ \jb@call@index{aut}{##2}%
+ \jb@call@index{ed}{##2}%
+ \jb@call@index{org}{##2}%
+ \fi%
+ \endgroup}%
+ \@gG{fc}{fullcite}{1}{1}%
+ \fi%
+\fi%
+\ifx\nocite\undefined\else\@gG{nc}{nocite}{/}{1}\fi%
+\ifx\backcite\undefined\else\@gG{bkc}{backcite}{//}{2}\fi%
+\ifx\bibitem\undefined\else\let\@biORI\bibitem%
+ \def\bibitem{\@LiN\@ifNextNB[{\@bi@cb}{\@bi@ca}%
+ }%
+ \def\@bi@ca##1{\@biORI{##1}\@LiB}%
+ \def\@bi@cb[##1]##2{\@biORI[##1]{##2}\@LiB}%
+\fi%
+\expandafter\ifx\string\bt@@item\undefined%
+ \else\@gG{bti}{\string\bt@@item}{1}{1}%
+ \fi%
+\ifx\vref\undefined\else%
+ \ifx\reftextvario\undefined\let\@vrfCode\undefined%
+\fi\fi%
+\ifx\ref\undefined\else\@gG{r}{ref}{/}{1}\fi%
+\ifx\tag\undefined\else\@gG{tG}{tag}{/}{1}\fi%
+\ifx\pageref\undefined\else\let\pageref@ORI\pageref%
+ \let\f@pageref\pageref\@gG{fpr}{f@pageref}{/}{1}%
+ \def\pageref{\ifFTY\expandafter\f@pageref\else%
+ \expandafter\pageref@ORI\fi}%
+\fi%
+\csname @vrfCode\endcsname%
+\xdef\@lim{}\let\ifMOVING\iffalse%
+\ifx\sf@@sub@label\undefined\else\@gG{ss}{sf@@sub@label}{/}{1}\fi%
+\def\@temp@{%
+ \def\label{\protect\@LabeL}%
+\def\r@LabeL{\ifx\@lim\empty%
+ \else\marginpar{\@lim@}\xdef\@lim{}%
+ \fi}%
+\def\m@LabeL{\def\@setMGtrue{\let\ifMOVING\iftrue}%
+ \ifmmode\@setMGtrue%
+ \aftergroup\r@LabeL%
+ \fi%
+ \expandafter\t@LabeL}%
+\def\@LabeL{\ifMOVING\expandafter\t@LabeL%
+ \else\m@LabeL%
+ \fi}%
+ \def\t@LabeL####1{\@ifFTYfalse\if@labelsinmargin\ifMOVING%
+ \xdef\@lim{\ifx\@lim\empty\else\@lim\@@par\relax\fi[####1]}%
+ \gdef\@lim@{\@ifFTYfalse\hbadness=\@M\tt\@lim\@ifFTYback}%
+ \else\marginpar{%
+ \@ifFTYfalse\hbadness=\@M\tt[####1]\@ifFTYback}\fi\fi%
+ %
+ \bgroup\@Fstr\@lORI{####1}\egroup\@ifFTYback}%
+ }%
+\ifx\fr@RIfM@cls\undefined\else%
+\let\@mtORI\maketitle%
+\def\maketitle{{\@mtORI}}%
+\fi%
+\ifx\label\undefined\else\let\@lORI\label%
+ \@temp@%
+ \let\ltx@label\label%
+\fi%
+\ifx\@newl@bel\undefined\else\@gG{nl}{@newl@bel}{//}{3}\fi%
+\def\@temp@{%
+ \let\@aclORI\addcontentsline%
+ \global\let\ifCG\iftrue%
+ \def\addcontentsline####1####2####3{\@ifFTYfalse\bgroup\@Fstr%
+ \@aclORI{####1}{####2}{####3}\egroup\@ifFTYback}%
+ }%
+\@ifundefined{addcontentsline}{\gdef\addcontentsline##1##2##3{}}%
+ {\@temp@}%
+\let\ifFrench\iffalse%
+\def\@temp@{%
+ \def\index{\bgroup\ifFrench\@DFP\fi%
+ \expandafter\egroup\@iORI}%
+ }%
+\ifx\index\undefined\else\let\@iORI\index%
+ \@temp@%
+\fi%
+\ifx\list\undefined\else%
+ \let\@liORI\list%
+\fi%
+ \let\@topsepORI\topsep%
+ \let\@partopsepORI\partopsep%
+ \let\@itemsepORI\itemsep%
+ \let\@parsepORI\parsep%
+\def\warn@seps{\def\topsep{\@w@s{\string\topsep}\@topsepORI}%
+ \def\partopsep{\@w@s{\string\partopsep}\@partopsepORI}%
+ \def\itemsep{\@w@s{\string\itemsep}\@itemsepORI}%
+ \def\parsep{\@w@s{\string\parsep}\@parsepORI}%
+ \def\@tempa{verse}\def\@tempb{quotation}%
+ \ifx\@tempa\@currenvir\let\@w@s\@gobble\else%
+ \ifx\@tempb\@currenvir\let\@w@s\@gobble\fi%
+ \fi%
+ }%
+\def\@w@s##1{\ifFTSW\f@issue%
+ \@fw{-58- \@txt@msg{valeur de ##1 ignor\'ee}%
+ }[##1]\fi}%
+\def\org@seps{\let\topsep\@topsepORI%
+ \let\partopsep\@partopsepORI%
+ \let\itemsep\@itemsepORI%
+ \let\parsep\@parsepORI%
+ }%
+\def\list##1##2{\def\@inAlist{}\@liORI{##1}{%
+ \ifx\@trivlist\@tlORI\else\warn@seps\fi%
+ ##2\org@seps}}%
+\ifx\@makecaption\undefined\else\let\@mcORI\@makecaption\fi%
+\ifx\captionseparator\undefined%
+ \def\captionseparator{~--}%
+\fi%
+\let\ifFTY\iffalse%
+\ifx\@contdelim\undefined\else%
+ \ifx\@memerror\undefined%
+ \let\@cdORI\@contdelim%
+ \def\@contdelim{\ifFTY\space\else\@cdORI\fi}%
+ \else%
+ \let\captionseparator\empty%
+ \let\captionfont\@conttfont%
+ \fi%
+\fi%
+\def\ifFTY{\ErrFrench}%
+\ifx\captionfont\undefined%
+ \let\captionfont\emph%
+ \else\let\@cfORI\captionfont%
+ \def\captionlabelfont{\upshape}%
+ \def\captionfont{\itshape\@cfORI}%
+ \ifx\captionlabeldelim\undefined\else%
+ \let\captionlabeldelim\captionseparator%
+ \let\captionseparator\empty%
+ \fi%
+\fi%
+\def\@makecaption##1##2{\ifFTY%
+ \def\@secondofmany####1####2\void{####2}%
+ \def\@tempa{\@secondofmany##2\void}%
+ \ifx\@tempa\empty%
+ \let\captionseparator\empty%
+ \fi%
+ \@mcORI{##1}{\relax%
+ \captionfont{##2}}%
+ \else\@mcORI{##1}{##2}\fi}%
+\def\@temp@{%
+ \def\thanks####1{\global\let\@makefntext\fr@makefntext%
+ \bgroup%
+ \ifFTY\ifhmode\ifdim\lastskip>\z@\unskip\fi\nobreak\fi%
+ \def\@footnotemark{\hbox{\@textsuperscript{\normalfont\,\@thefnmark}}}%
+ \fi\let\ifFTY\iffalse\@thORI{####1}%
+ \egroup}%
+ }%
+\ifx\thanks\undefined\else\let\@thORI\thanks\@temp@\fi%
+\let\ifFTY\iffalse%
+\ifx\@makefnmark\undefined\else\let\@mfnmORI\@makefnmark%
+\def\@makefnmark{\ifFTY\hbox{\@textsuperscript{\normalfont%
+ \ifx\thefootnote\relax\else\,\fi%
+ \@thefnmark}}%
+ \else\@mfnmORI\fi}%
+\fi%
+\def\@temp@{\long\def\fr@makefntext####1{%
+ \bgroup%
+ \ifFTY\def\@tempa{footnote}\let\@tfnORI\@thefnmark%
+ \ifx\@tempa\@mpfn%
+ \def\@thefnmark{%
+ %
+ \egroup\egroup%
+ \long\def\@tempa{\fnsymbol{footnote}}%
+ \ifx\@tempa\thefootnote%
+ \expandafter\raise+0.55ex%
+ \fi%
+ \hbox\bgroup\textnormal\bgroup%
+ \def\@temp@{%
+\ifx\fr@RIfM@cls\undefined%
+\ifx\thanks\relax\else\kern-1.1\parindent\fi%
+\else \kern-\parindent%
+\fi%
+ \@ifnextchar\relax{\def\@temp@{\hphantom{.}\kern+0.25em}}%
+ {\def\@temp@{.\kern+0.25em}}%
+ }%
+ \expandafter\@temp@\@tfnORI\@temp@%
+ }%
+ \leavevmode\kern+0.5em%
+ \else\def\@thefnmark{\@tfnORI\,}\fi%
+ \fi\@mfntORI{####1}\egroup}%
+ }%
+ \let\@mfntORI\@makefntext\@temp@%
+ \let\@makefntext\fr@makefntext%
+\def\ifFTY{\ErrFrench}%
+\let\@fntORI\@footnotetext%
+\long\def\@footnotetext##1{\bgroup\let\if@labelsinmargin\iffalse%
+ \@fntORI{##1}\egroup}%
+\let\@fnORI\footnote%
+\def\footnote{\bgroup%
+ \def\index{\@ifnextchar[{\f@index}%
+ {\f@index@}%
+ }%
+ \def\f@index[####1]####2{\@ifFTYfalse\@iORI[####1]{####2}%
+ \@ifFTYback}%
+ \def\f@index@####1{\@ifFTYfalse\@iORI{####1}\@ifFTYback}%
+ \ifFTY\ifhmode\ifdim\lastskip>\z@\unskip\fi%
+ \nobreak\fi\fi%
+ \ifmmode\let\@fnORI\fr@footnote\fi%
+ \@ifNextNB[%
+ \@Footnote\@Fntnorm}%
+\long\def\@Footnote[##1]##2{\@fnORI[##1]{##2}%
+ \egroup\@ifNextNBc\footnote\refmark\@Fntcoma{}}%
+\long\def\@Fntnorm##1{\@fnORI{##1}%
+ \egroup\@ifNextNBc\footnote\refmark\@Fntcoma{}}%
+\def\@Fntcoma{\ifFLA\@textsuperscript{,}\nobreak\fi}%
+\def\@Fxloat##1[##2]{\@xfORI{##1}[##2]\csname @Fend\@currenvir\endcsname}%
+\let\@fgeORI\figure\let\@efgeORI\endfigure%
+\def\@temp@{\let\@fgeORI\figure%
+ \def\figure{\let\ifMOVING\iftrue%
+ \let\if@minipage\iftrue%
+ \@set@fr@fn@%
+ \ifx\@xfORI\undefined%
+ \let\@xfORI\@xfloat\let\@xfloat\@Fxloat%
+ \fi%
+ \@fgeORI}}%
+\ifx\figure\undefined\let\@temp@\relax\fi\@temp@%
+\def\@Fendfigure{\let\@efgeORI\endfigure%
+ \def\endfigure{\@efgeORI%
+ \ifx\@lim\empty\else\marginpar{\@lim@}%
+ \xdef\@lim{}\fi\let\ifMOVING\iffalse}}%
+\ifx\endfigure\undefined\let\@Fendfigure\relax\fi%
+\let\@cnORI\caption%
+\def\@tablescaption{\@dblarg\@t@blescaption}%
+\let\mboxORI\mbox%
+\def\mbox##1{\leavevmode\hbox{\protect\@set@fr@fn@##1}}%
+\def\@set@fr@fn@{\ifFrench\let\footnote\fr@footnote\fi}%
+\def\fr@footnote{\@ifNextNB[\fr@fn@{\fr@fn@[]}%
+ }%
+\def\fr@fn@[##1]##2{\footnotemark%
+ \f@issue%
+ \@fw{-8- \@txt@msg{\string\footnotetext{##2} perdu.}
+ \@txt@msg{Coder \'event. \string\protect\string\footnote}%
+ }[##2]%
+ }%
+\def\@t@blescaption[##1]##2{\let\cur@fn\footnote%
+ \let\footnote\fr@footnote%
+ \@cnORI[##1]{##2}\let\footnote\cur@fn}%
+\def\@temp@{%
+ \let\@tbeORI\table%
+ \def\table{\let\ifMOVING\iftrue%
+ \let\if@minipage\iftrue%
+ \ifFLA\begingroup%
+ \def\@mpfn{mpfootnote}%
+ \def\thempfn{\thempfootnote}\c@mpfootnote\z@%
+ \ifx\@captype\undefined\def\@captype{table}\fi%
+ \let\caption\@tablescaption%
+ \let\@footnotetext\@mpfootnotetext\fi%
+ \ifx\@xfORI\undefined%
+ \let\@xfORI\@xfloat\let\@xfloat\@Fxloat%
+ \fi%
+ \@tbeORI}%
+ \expandafter\let%
+ \expandafter\@dbtbeORI\csname table*\endcsname%
+ \expandafter\def\csname table*\endcsname{\let\ifMOVING\iftrue%
+ \let\if@minipage\iftrue%
+ \ifFLA\begingroup%
+ \def\@mpfn{mpfootnote}%
+ \def\thempfn{\thempfootnote}\c@mpfootnote\z@%
+ \ifx\@captype\undefined\def\@captype{table}\fi%
+ \let\caption\@tablescaption%
+ \let\@footnotetext\@mpfootnotetext\fi%
+ \ifx\@xfORI\undefined%
+ \let\@xfORI\@xfloat\let\@xfloat\@Fxloat%
+ \fi%
+ \@dbtbeORI}%
+ }%
+\ifx\table\undefined\let\@temp@\relax\fi\@temp@%
+\def\@Fendtable{%
+ \let\@etORI\endtable%
+ \def\endtable{\ifFLA\par%
+ \vskip-\lastskip%
+ \ifvoid\@mpfootins\else\vskip\skip\@mpfootins%
+ \footnoterule\unvbox\@mpfootins\fi%
+ \fi\@etORI\ifFLA\endgroup\fi%
+ \ifx\@lim\empty\else\marginpar{\@lim@}%
+ \xdef\@lim{}\fi\let\ifMOVING\iffalse}%
+ }%
+\ifx\endtable\undefined\let\@Fendtable\relax\fi%
+\def\@temp@{\def\endtable{\ifFLA\endgroup%
+ \expandafter\let\csname endtable*\endcsname\endtable%
+ \fi}%
+ }%
+\ifx\endtable\relax\@temp@%
+\fi%
+\expandafter\def\csname @Fendtable*\endcsname{%
+ \expandafter\let%
+ \expandafter\@dbetORI\csname endtable*\endcsname%
+ \expandafter\def%
+ \csname endtable*\endcsname{\ifFLA\par%
+ \vskip-\lastskip%
+ \ifvoid\@mpfootins\else\vskip\skip\@mpfootins%
+ \footnoterule\unvbox\@mpfootins\fi%
+ \fi\@dbetORI\ifFLA\endgroup\fi%
+ \ifx\@lim\empty\else\marginpar{\@lim@}%
+ \xdef\@lim{}\fi\let\ifMOVING\iffalse}%
+ }%
+\expandafter\ifx\csname endtable*\endcsname\relax%
+ \expandafter\let\csname endtable*\endcsname\endtable%
+\fi%
+\expandafter\ifx\csname\string\table\endcsname\undefined\else%
+ \expandafter\let\expandafter\BfigureORI\csname\string\figure\endcsname%
+ \expandafter\def\csname\string\figure\endcsname{\@Fendfigure\BfigureORI}%
+ \expandafter\let\expandafter\BtableORI\csname\string\table\endcsname%
+ \expandafter\def\csname\string\table\endcsname{\@Fendtable\BtableORI}%
+\fi%
+\ifx\undefined\Hy@PDFDef\let\Hy@PDFDef\pdfstringdef\fi%
+\ifx\undefined\Hy@PDFDef\else%
+ \let\@hpdORI\Hy@PDFDef%
+ \def\Hy@PDFDef##1##2{\@ifFTYfalse\afterassignment%
+ \@Fstr\@hpdORI{##1}{##2}\@ifFTYback}%
+\fi%
+\ifx\pdfstringdef\undefined\else%
+ \let\pdfstringdef\Hy@PDFDef%
+\fi%
+ \let\@lti\labelitemi\let\@ltii\labelitemii%
+ \let\@ltiii\labelitemiii\let\@ltiv\labelitemiv%
+ \@ifo%
+ \let\@ifo\undefined%
+ \@doFh%
+ \let\@doFh\undefined%
+ \let\hyphex\undefined\let\frhyphex\undefined%
+ \let\@temp@\undefined%
+ \let\ifFTY\iffalse\let\ifFTR\iffalse%
+ \let\ifFLA\iffalse\let\ifFMA\iffalse\let\ifFH\iffalse%
+\def\@tempa##1{\o@everypar{\rl@everypar##1}}%
+\ifx\@tempa\everypar\let\TeXeverypar\o@everypar%
+\else\let\TeXeverypar=\everypar%
+\fi%
+ \ifx \TeXXeTstate \undefined%
+ \edef \next {\ifx \beginL \undefined 00\else 01\fi}%
+ \else%
+ \edef \next {\ifnum \TeXXeTstate = 0 00\else 01\fi}%
+ \fi%
+ \if \next\let\beginL\relax\let\beginR\relax%
+ \else%
+ \edef\@fepORI{{\the\TeXeverypar}}%
+ \def\@SetBFWdirection{\csname begin%
+ \beginFWdirection\endcsname}%
+ \TeXeverypar={\@SetBFWdirection%
+ \let\@SetBFWdirection\relax%
+ {\let\@nodocument\relax%
+ \@fepORI}}%
+ \fi%
+ \let\ErrFrench\@Ffnt\def\@Ffnt##1{}%
+\ifx\undefined\babel@core@loaded%
+\protected@write\@auxout{}{\protect%
+\csname auxWARNINGi\protect\endcsname{\protect\typeout%
+ {-34- this file and other auxiliary files require to %
+ use the following}}}%
+\protected@write\@auxout{}{\protect%
+\csname auxWARNINGi\protect\endcsname{\protect\typeout%
+ {-34- LaTeX packages: \frenchpack!}}}%
+\protected@write\@auxout{}{\protect%
+\csname auxWARNINGi\protect\endcsname{\protect\typeout%
+ {-34- check \protect\protect\protect\usepackage%
+ \protect\space or remove these files. %
+ Typesetting is aborted!}%
+ \protect\stop}}%
+\fi%
+\@finput{frlpatch.sty}%
+ \ifx\FSfd@patch\FSfd\else
+ \f@issue%
+ \@fw{-42- %
+ \@txt@msg{The French patch file (frlpatch.sty) is not suitable^^J}%
+ \@txt@msg{for this version of the "\frenchpack" package dated \FSfd}%
+ }%
+ \batchmode\@@end%
+ \fi%
+ \let\@Ffnt\ErrFrench\let\ErrFrench\undefined%
+ \IfFileExists{\frenchname.cfg}{%
+ \f@issue%
+ \@fw{-48- \@txt@msg{Lecture du fichier de }%
+ \@txt@msg{configuration de \frenchpack}%
+ }%
+ \@finput{\frenchname.cfg}}{}%
+ \beginlanguage}%
+ \let\@dORI\document%
+ \def\document{%
+ \ifx\noxcomment\undefined\else%
+ \global\let\@x@hk\xcomment@hook\global\noxcomment\fi%
+ \ifx\btxselectlanguage\undefined%
+ \else\ifx\babel@savevariable\undefined%
+ \f@issue\@fw{-87- %
+ \@txt@msg{ERREUR \string: }%
+ \@txt@msg{babelbib s'utilise uniquement avec babel}%
+ }%
+ \stop%
+ \fi%
+ \fi%
+ \ifx\@bglngpk\babel@savevariable%
+ \else%
+ \f@issue\@fw{-71- %
+ \@txt@msg{ATTENTION : }%
+ \@txt@msg{si babel est utilis\'e, mettre \frenchname\space en option}%
+ }%
+ \fi\let\@bglngpk\undefined%
+ \@dORI%
+ \GOfrench%
+ \let\GOfrench\undefined%
+ \ifx\noxcomment\undefined\else\let\xcomment@hook\@x@hk%
+ \expandafter\xcomment@hook\fi}%
+\@makeother`\@makeother<\@makeother>\@makeother'%
+\let\enddocumentasusual\enddocument%
+ \def\enddocument{\def\@tempa{\AtEndDocument{\french\f@clearpage%
+ \global\let\ifCLA\iffalse%
+ \let\ifCLAfrench\iffalse%
+ \endfrench}}%
+ \csname f@lastpage\endcsname%
+ \@CGroup%
+ \ifFLA%
+ \@tempa%
+ \def\@tempa{empty}\ifx\@specialstyle\@tempa%
+ \else\gdef\@specialstyle{french}\fi%
+ \fi%
+ \let\GOfrench\relax%
+ \switchtolanguage\englishTeXmods%
+ \let\f@clearpage\clearpage%
+\ifx\lastpage@putlabel\undefined%
+\else\let\clearpage\relax%
+ \let\lastpage@putlabelORI\lastpage@putlabel%
+ \def\lastpage@putlabel{\addtocounter{page}{+1}\lastpage@putlabelORI%
+ \addtocounter{page}{-1}}%
+\fi%
+ %
+ \ifx\undefined\babel@core@loaded\else%
+ \ifx\@testdef\undefined\else%
+ \@gG{@td}{@testdef}{//}{3}\fi%
+ \fi%
+ %
+\ifx\ConfigureToc\undefined\else%
+ \let\@ifFTYfalse\relax\let\@ifFTYback\relax%
+ \@Fstr\let\@Fstr\relax%
+\fi%
+ \enddocumentasusual%
+ }%
+\let\@whatUCH\relax%
+\def\@eatDP{\@ifNextNB:{\@gobble}{}}%
+\def\f@ffrench{\ifx\listoffigures\relax\else%
+ \figurename~\thefigure\ifFTY\captionseparator\fi\fi%
+ \ifFTY\expandafter\@eatDP\fi}%
+\def\f@tfrench{\ifx\listoftables\relax\else%
+ \tablename~\thetable\ifFTY\captionseparator\fi\fi%
+ \ifFTY\expandafter\@eatDP\fi}%
+\def\unnumberedcaptions#1{\@noBDfr%
+ %
+ \expandafter\let\csname listof#1s\endcsname\relax%
+ \ifx\listoffigures\relax\ifx\listoftables\relax%
+ \let\unnumberedcaptions\undefined%
+ \fi\fi%
+ }%
+%===== traitement de l'anglais =====%
+\def\beginlanguage{% might be used at \begin{document} time
+ \ifx\selectlanguage\undefined\english%
+ \else\selectlanguage{english}\fi}%
+\edef\beginFWdirection{L}% write Left to right
+\ifx\undefined\babel@core@loaded%
+ \DeclareOption{english}{\def\beginlanguage{% language to start
+ \ifx\selectlanguage\undefined\english%
+ \else\selectlanguage{english}\fi}%
+ }%
+ \ProcessOptions% English option need, at least, to be processed.
+\fi%
+\expandafter\ifx\csname englishTeXmods\endcsname\relax%.\ifundefined
+\else \endinput \fi%........ \then go ahead \else do nothing \fi
+\ifx\@ifundefined\undefined%
+\long\def\@ifundefined#1#2#3{\expandafter\ifx\csname%.......... \@ifundefined
+ #1\endcsname\relax#2\else#3\fi}%
+\fi%
+\let\ifCLAenglish\iffalse%
+\def\@tempa{\global\let\ifCLA\iffalse%
+ }%
+\ifx\ifCLA\undefined\expandafter\@tempa\fi%
+
+\global\let\ifnonenglishheadings\iffalse%english style allows english headings!
+\gdef\captionsenglish{%...................................... \captionsenglish
+ \ifx\captionsnames\captionsenglish\else
+ \def\pagename{page}%
+ \def\refname{References}%
+ \def\abstractname{Abstract}%
+\ifx\bibname\undefined\else%
+ \def\bibname{Bibliography}%
+\fi%
+\ifx\btxselectlanguage\undefined% Don't call \bibsenglish if babelbib loaded.
+ \csname bibsenglish\endcsname%
+\fi%
+ \def\contentsname{Table of Contents}%
+ \def\listfigurename{List of Figures}%
+ \def\listtablename{List of Tables}%
+\ifx\listalgorithmname\undefined\else%
+ \def\ALG@name{algorithm}%
+ \def\listalgorithmname{List of \ALG@name s}%
+\fi%
+ \def\indexname{Index}%
+ \def\seename{\emph{see}}% used normally in makeidx.sty
+ \def\seealsoname{\emph{see also}}% added macro \seealso
+ \def\figurename{Figure}%
+ \def\tablename{Table}%
+ \def\partname{Part}%
+ \def\glossaryname{Glossary}%
+ \def\kwname{\textbf{Keywords}: }%
+ \def\draftname{DRAFT}%
+ \def\prefacename{Preface}%
+\ifx\proofname\undefined\else%
+ \def\proofname{Proof}%
+\fi%
+\ifx\opening\undefined\else%
+ \def\headtoname{To}%
+ \def\ccname{cc}%
+ \def\enclname{Encl}%
+ \def\PSname{PS:}% Post-Scriptum
+ \def\Objectname{Subject:}% Subject of the letter
+ \def\YourRefname{Your Ref:}% Your reference number
+ \def\OurRefname{Our Ref:}% Our reference number
+ \def\emailname{email:}% Email address
+\fi%
+\ifx\slidename\undefined\else%
+ \def\slidename{Slide}%
+\fi%
+\ifx\notesname\undefined\else%
+ \def\notesname{Notes}%
+\fi%
+\ifnonenglishheadings% Bypass to a LaTeX slight bug...
+\else%
+ \def\chaptername{Chapter}%
+\fi%
+ \def\appendixname{Appendix}%
+ \fi%
+\let\captionsnames\captionsenglish%
+}%
+\@ifundefined{englishTeXmods}{%................................ \englishTeXmods
+ \gdef\englishTeXmods{%\captionsnames are normally restored by prev. langua.
+ \ifCLA
+ \ifCLAenglish%
+ \ifx\captionsnames\captionsenglish%
+ \else\captionsenglish\dateenglish%
+ \fi%
+ \fi%
+ \else%
+ \ifx\captionsnames\captionsenglish%
+ \else\captionsenglish\dateenglish%
+ \fi%
+ \fi%
+ \csname @xtrasenglish\endcsname%
+ \def\languagename{english}% set it for mlp.
+ \let\switchtolanguage\endenglish%
+ }%
+ }{}%
+\ifx\dateenglish\undefined%...................................... \dateenglish
+\def\dateenglish{\def\today{\ifcase\day\or 1st\or 2nd\or 3rd\or 4th\or 5th\or
+ 6th\or 7th\or 8th\or 9th\or 10th\or 11th\or 12th\or 13th\or 14th\or 15th\or
+ 16th\or 17th\or 18th\or 19th\or 20th\or 21st\or 22nd\or 23rd\or 24th\or
+ 25th\or 26th\or 27th\or 28th\or 29th\or 30th\or 31st\fi~\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or July\or August\or
+ September\or October\or November\or December\fi\space \number\year}}%
+\fi%
+\ifx\undefined\babel@core@loaded%
+ \edef\extrasenglish{}\def\@xtrasenglish{\extrasenglish}% for other packages.
+\else% the date mechanism
+ \let\extrasenglish\englishTeXmods%
+\fi%
+\@ifundefined{english}{\gdef\english{\relax}}{}% Default............ \english
+\@ifundefined{switchtolanguage}{%............................ \switchtolanguage
+ \gdef\switchtolanguage#1{#1}}{}%
+\let\@enstORI\switchtolanguage% save original switchtolanguage if any.
+\let\englishORI\english% assuming \language=x was set here
+\def\endenglish{\let\switchtolanguage\@enstORI%
+ \ignorespaces}% but they are not after \end{english} !
+\let\noextrasenglish\endenglish%
+\def\english{\switchtolanguage\englishTeXmods\englishORI%...... Final \english
+ \ignorespaces}% but they are not after \begin{english} !
+\english% Ready now to activate the mechanism [english is the default language]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%===================================%
+\def\languagename{french}%
+\let\ifnonenglishheadings\iftrue%
+\def\datefrench{%
+\def\todayfrench{\ifx\ier\undefined\def\ier{er}\fi%
+ \ifnum\day=1\relax 1\ier%
+ \else \number\day\fi%
+ \space\ifcase\month\or janvier\or f\'evrier\or mars\or %
+ avril\or mai\or juin\or juillet\or ao\^ut\or septembre\or %
+ octobre\or novembre\or d\'ecembre\fi \space\number\year}%
+}\datefrench%
+\if@filesw
+ \def\ordinalSecondNam{{s}econd}%
+ \def\ordinalSecondName{{s}econde}%
+\else%
+ \def\ordinalSecondNam{{d}euxi\`eme}%
+ \let\ordinalSecondName\ordinalSecondNam%
+\fi%
+ \def\@osn#1#2{\expandafter\ifx\csname#1osn\endcsname%
+ \relax#2\else\csname#1osn\endcsname\fi}%
+ \def\ordinal#1{\ifcase\value{#1}\or {p}remier%
+ \or\@osn{#1}{\ordinalSecondNam}\else\ordin@l{#1}\fi}%
+ \def\ordin@l#1{\ifcase\value{#1}\or\or\or %
+ {t}roisi\`eme\if@filesw{\protected@write\@auxout{}{%
+ \protect\expandafter%
+ \protect\gdef\protect\csname#1osn%
+ \protect\endcsname%
+ {{d}euxi\`eme}}}%
+ \fi%
+ \or {q}uatri\`eme\or {c}inqui\`eme\or {s}ixi\`eme\or %
+ {s}epti\`eme\or {h}uiti\`eme\or {n}euvi\`eme\or {d}ixi\`eme\or %
+ {o}nzi\`eme\or {d}ouzi\`eme\or {t}reizi\`eme\or {q}uatorzi\`eme\or %
+ {q}uinzi\`eme\or {s}eizi\`eme\or {d}ix-septi\`eme\or {d}ix-huiti\`eme\or %
+ {d}ix-neuvi\`eme\or {v}ingti\`eme\fi}%
+ \def\ordinale#1{\ifcase\value{#1}\or {p}remi\`ere%
+ \or\@osn{#1}{\ordinalSecondName}\else\ordin@l{#1}\fi}%
+ \def\Ordinal{\expandafter\uppercase\ordinal}%
+ \def\Ordinale{\expandafter\uppercase\ordinale}%
+\def\captionsfrench{%
+ \ifFTR%
+ \ifx\captionsnames\captionsfrench\else%
+ \let\@tdORI\today%
+ \let\f@fORI\fnum@figure%
+ \let\f@tORI\fnum@table%
+ \let\@cnsORI\captionsnames%
+ \def\pagename{page}%
+ \def\refname{R\'ef\'erences}%
+ \def\abstractname{R\'esum\'e}%
+\ifx\bibname\undefined\else%
+ \def\bibname{Bibliographie}%
+\fi%
+\ifx\btxselectlanguage\undefined%
+ \csname bibsfrench\endcsname%
+\fi%
+ \def\contentsname{Table des mati\`eres}%
+ \def\listfigurename{Table des figures}%
+ \def\listtablename{Liste des tableaux}%
+\ifx\listalgorithmname\undefined\else%
+ \def\ALG@name{algorithme}%
+ \def\listalgorithmname{Liste des \ALG@name s}%
+\fi%
+ \def\indexname{Index}%
+ \def\seename{\emph{voir}}%
+ \def\seealsoname{\emph{voir aussi}}%
+ \def\figurename{\textsc{Fig.}}%
+ \def\tablename{\textsc{Tab.}}%
+ \def\sommairename{Sommaire}%
+ \def\partname{%
+ \ignorespaces\Ordinale{part}\space partie%
+ \@RPtNoInDoc\noexpand\@RPtNoInToc}%
+ \def\glossaryname{Glossaire}%
+ \def\kwname{\textbf{Mots-cl\'e} : }%
+ \def\draftname{- \noexpand\351preuve -}%
+ \def\prefacename{Pr\'eface}%
+\ifx\proofname\undefined\else\def\proofname{D\'emonstration}\fi%
+\ifx\fr@RIfM@cls\undefined%
+ \let\fnum@figure\f@ffrench%
+ \let\fnum@table\f@tfrench%
+ \def\@RPtNoInToc{}%
+ \def\@RPtNoInDoc{\def\thepart{}}%
+ \else\def\@RPtNoInToc##1.{.}%
+ \def\@RPtNoInDoc##1\thepart{}%
+\fi%
+\ifx\opening\undefined\else%
+ \def\headtoname{}%
+ \def\ccname{c.c. }%
+ \def\enclname{P.j. }%
+ \def\PSname{P.-S. :}%
+ \def\Objectname{Objet :}%
+ \def\YourRefname{v/r\'ef. :}%
+ \def\OurRefname{n/r\'ef. :}%
+ \def\emailname{m.\'el. :}%
+\fi%
+\ifx\slidename\undefined\else%
+ \def\slidename{Transparent}%
+ \def\listslidename{Liste des transparents}%
+\fi%
+\ifx\notesname\undefined\else%
+ \def\notesname{Notes}%
+\fi%
+ \def\chaptername{Chapitre}%
+ \def\appendixname{Annexe}%
+ \let\captionsnames\captionsfrench%
+ \fi%
+ \let\today\todayfrench%
+\def\@cORI{\@cnsORI%
+ \let\today\@tdORI%
+ \let\fnum@figure\f@fORI%
+ \let\fnum@table\f@tORI}%
+\fi%
+}%
+\let\@tlORI\@trivlist%
+\def\frenchtrivsepwarnings{\let\ifFTSW\iftrue}%
+\def\nofrenchtrivsepwarnings{\let\ifFTSW\iffalse}%
+\long\def\frtrivseplengths#1{%
+ \nofrenchtrivsepwarnings%
+ \long\def\fr@tsl{#1}%
+ }%
+\def\fr@tsl{\setlength{\parsep}{0.2ex plus 0.1ex minus 0.1ex}%
+ \setlength{\itemsep}{0.2ex plus 0.1ex minus 0.1ex}%
+ \setlength{\topsep}{0.4ex plus 0.2ex minus 0.2ex}%
+ \setlength{\partopsep}{1.6ex plus 0.8ex minus 0.8ex}%
+ }%
+\def\frenchtrivsep{\ifFLA\def\@trivlist{%
+ \fr@tsl\@tlORI}%
+ \fi}
+\def\nofrenchtrivsep{\let\@trivlist\@tlORI}%
+\@ifundefined{@afterindenttrue}{\let\@afterindenttrue\relax%
+ \let\@afterindentfalse\relax}{}%
+\let\@aifORI\@afterindentfalse%
+\edef\@piORI{\the\parindent}%
+\begingroup \catcode `| =0 \catcode `[ = 1 \catcode`] =2%
+ \catcode `\{=12 \catcode `\}=12 \catcode`\\=12%
+ |gdef|@xversatim#1\end{versatim}[#1|end[versatim]]%
+ |endgroup%
+\let\@FIM@\relax%
+\def\fr@idf{\let\@afterindentfalse\@afterindenttrue\@afterindenttrue}%
+\def\fr@nidf{\let\@afterindentfalse\@aifORI\@afterindentfalse}%
+\ifx\titlespacing\undefined%
+ \let\which@indent\fr@idf%
+\else\let\which@indent\fr@nidf%
+\fi%
+\def\fr@lbi{\def\labelitemi{\@FIM@--}\def\labelitemii{\@FIM@--}%
+ \def\labelitemiii{\@FIM@--}\def\labelitemiv{\@FIM@--}%
+ }%
+\long\def\frlabelitems#1{\ifFLA\long\def\fr@lbi{#1}%
+ \fr@lbi\fi}%
+\def\@FIM{%
+ \fr@lbi%
+ \def\indentfirst{\ifFLA\fr@idf\fi}%
+ \def\nonindentfirst{\ifFLA\fr@nidf\fi}%
+ \which@indent%
+}%
+\def\@temp@{%
+\let\@ps@fp\ps@firstpage%
+\def\@opening{%
+\let\@wideletter\relax%
+\let\emailadd\@empty\let\@yourref\@empty\let\@ourref\@empty%
+\let\@object\@empty%
+ \def\ps@firstpage{\ifFLA%
+ \advance\topmargin by -20\p@%
+ %
+ \def\@oddhead{\ifx\undefined\formhead\else%
+ \bgroup\hss\formhead\hss\egroup\fi}%
+ \def\@oddfoot{\raisebox{-45\p@}[\z@]%
+ {\hbox to \textwidth{%
+ \ifcase \@ptsize\relax%
+ \normalsize%
+ \or \sm@ller%
+ \or \footnotesize%
+ \fi%
+ %
+ \ifx\undefined\formfoot\hfill\else%
+ \bgroup\hss\formfoot\hss\egroup\fi%
+ }}\hss}%
+ \def\@evenhead{}\def\@evenfoot{}%
+ \else\@ps@fp\fi}%
+ \long\def\opening####1{%
+ \ifFLA%
+ \advance\indentedwidth by -0.25\longindentation%
+ \advance\longindentation by 0.22\textwidth%
+ \advance\parindent by 1.5em%
+ %
+ \let\nopagenumbers\relax%
+ \thispagestyle{firstpage}%
+ %
+ \raggedbottom%
+ \ifx\@empty\fromlocation\location{Le}\fi%
+ \ifx\@empty\fromaddress\let\fromaddress\space\fi%
+ {\raggedright\hspace*{-0.25\indentedwidth}%
+ \parbox[t]{0.5\textwidth}{\ignorespaces%
+ \vbox to 0\p@{\fromaddress\vss}}%
+ \\*[1.75\baselineskip]%
+ \par}%
+ \ifx\@empty\toname%
+ %
+ {\raggedleft\bgroup\fromlocation\space\@date\egroup\par}%
+ \else%
+ {\raggedleft\begin{tabular}{l}\ignorespaces%
+ \toname\\ \toaddress\\*[6\parskip]%
+ \fromlocation\space\@date\end{tabular}\par}%
+ \fi%
+ \ifx\@empty\@ourref\else%
+ {\raggedright \hspace*{-0.25\indentedwidth}%
+ \OurRefname\space\@ourref \par}%
+ \fi%
+ \ifx\@empty\@yourref\else%
+ {\raggedright \hspace*{-0.25\indentedwidth}%
+ \YourRefname\space\@yourref \par}%
+ \fi%
+ \ifx\@empty\@object\else%
+ {\raggedright \hspace*{-0.25\indentedwidth}%
+ \textbf{\Objectname}\space\@object \par}%
+ \fi%
+ \par\vspace*{3\parskip}%
+ \noindent####1\hfill\vspace*{3\parskip}%
+ \@wideletter%
+ \else\@oORI{####1}%
+ \fi}}%
+\def\@closing{%
+ \def\closing{\fclosing@[9]}%
+ \def\fclosing{\@ifNextNB[{\fclosing@}{\fclosing@[9]}%
+ }%
+ \long\def\fclosing@[####1]####2{%
+ \ifFLA%
+ \par%
+ \vspace{\parskip}\stopbreaks%
+ \ignorespaces ####2\\[####1\medskipamount]%
+ \ifx\@empty\fromaddress\else%
+ \hspace*{-0.25\indentedwidth}%
+ \hspace*{\longindentation}\fi%
+ {\raggedright\begin{tabular}{l}\ignorespaces%
+ \ifx\@empty\fromsig%
+ \fromname%
+ \else \fromsig \fi%
+ \ifx\@empty\emailadd\else\\{\footnotesize%
+ \emph{\emailname} \emailadd}\fi%
+ \strut\end{tabular}}\par%
+ \vskip 0pt plus 1fil%
+ \else\@cloORI{####2}%
+ \fi}%
+ \def\endletter{\ifFLA\vskip 0pt plus 3fil\fi%
+ \@elORI}}%
+\@ifundefined{opening}{\def\@opening{}\def\@closing{}}%
+ {\let\@oORI\opening\let\@cloORI\closing%
+ \let\@elORI\endletter%
+ \@opening\@closing}%
+}%
+\ifx\opening\undefined\let\@temp@\relax\fi%
+\@temp@%
+\def\@tempa{\let\fr@RIfM@cls\undefined}%
+\let\fr@RIfM@cls\RIfM@%
+ \ifx\RIfM@\undefined\else%
+ \expandafter\ifx\csname @classname\endcsname\relax\@tempa%
+ \else\def\@tempb#1#2#3#4\@nil{%
+ \if#1a\if#2m\if#3s\else\@tempa\fi%
+ \else\@tempa\fi\else\@tempa\fi}%
+ \expandafter\@tempb\@classname\@nil%
+ \fi%
+ \fi%
+\def\@temp@{\def\ps@french{\if@fancyplain\ps@plain@fancy\else\ps@plain\fi}}%
+\ifx\ps@fancyplain\undefined%
+ \ifx\fr@RIfM@cls\undefined\def\ps@french{}%
+ \else\def\ps@french{\global\topskip\normaltopskip}%
+ \fi%
+\else\@temp@%
+\fi%
+\let\ps@frenchORI\ps@french%
+\let\@sdORI\secdef%
+\def\nofrenchpagestyle{\let\secdef\@sdORI}%
+\def\frenchpagestyle{%
+ \def\secdef{\ifFLA\thispagestyle{french}\fi\@sdORI}%
+ }%
+\frenchpagestyle%
+\ifx\aliaspagestyle\undefined%
+\def\nobeginingfolio{\let\ps@french\ps@empty}%
+\else%
+\def\nobeginingfolio{\let\ps@french\ps@empty%
+ \aliaspagestyle{chapter}{empty}%
+ }%
+\fi%
+\def\beginingfolio{\let\ps@french\ps@frenchORI%
+ \frenchpagestyle}%
+\def\@EIM{\def\labelitemi{\@lti}\def\labelitemii{\@ltii}%
+ \def\labelitemiii{\@ltiii}\def\labelitemiv{\@ltiv}%
+ \let\@afterindentfalse\@aifORI\@afterindentfalse%
+ \parindent\@piORI}%
+\let\@FL\relax%
+\def\nonfrench{\ifFrench\@DFP%
+ \def\@temp@{\@AFP}%
+ \else\@NoFr\def\@temp@{\relax}\fi%
+ \def\endnonfrench{\@temp@\ignorespaces}%
+ \ignorespaces}%
+\def\@dospecialsfrench{\do\`\do'\@dsversa}%
+\def\@dsversa{%
+ \do\ \do\\\do\{\do\}\do\$\do\&\do\#\do\|\do\^^K\do\_\do\^^A\do\%\do\~%$emacs
+ \do\!\do\?\do\;\do\:\do\<\do\>\do\^\do\"}%
+\def\@sanitizefrench{%
+ \@saORI%
+ \@makeother\!\@makeother\?\@makeother\;\@makeother\:%
+ \@makeother\`\@makeother'\@makeother\<\@makeother\>%
+ \@makeother\^\@makeother\"}%
+\def\@ifNextNB#1#2#3{\let\@tempe=#1\def\@tempa{#2}\def\@tempb{#3}\futurelet%
+ \@tempc\@Fifnch}%
+ \def\@Fifnch{\ifx \@tempc \@tempe\let\@tempd\@tempa%
+ \else\let\@tempd\@tempb\fi\@tempd}%
+\def\@ifNextNBc#1#2#3#4{\let\@tempe=#1\let\@tempf=#2%
+ \def\@tempa{#3}\def\@tempb{#4}\futurelet%
+ \@tempc\@Fifnchc}%
+ \def\@Fifnchc{\ifx\@tempc\@tempf\@tempa\else\@Fifnch\fi}%
+\def\@skiplastspace{\ifdim\lastskip>\z@\unskip\penalty\@M\fi}%
+\let\ifFrench\iftrue%
+\def\@AFP{%
+ \let\dospecials\@dospecialsfrench%
+ \let\@sanitize\@sanitizefrench%
+ \AFPdp\AFPinfsup}%
+\def\AFPdp{\ifFrench\catcode`\!=\active\catcode`\?=\active%
+ \catcode`\;=\active\catcode`\:=\active\fi}%
+\let\AFPinfsup\relax%
+\def\AFPq{\ifFrench\catcode`'=\active\catcode``=\active\fi}%
+\def\AFPdq{\catcode`"=\active}%
+\def\@DFP{%
+ \DFPq\DFPinfsup\ifLPA\else\DFPdp%
+ \let\dospecials\@dsORI%
+ \let\@sanitize\@saORI\fi}%
+\def\DFPq{\ifFrench\catcode``=12\catcode`'=12\fi}%
+\let\DFPinfsup\relax%
+\def\DFPdp{\ifFrench\catcode`;=12\catcode`:=12%
+ \catcode`!=12\catcode`?=12\fi}%
+\def\DFPdq{\catcode`"=12}%
+\let\ifLPA\iffalse%
+\let\ifFG\iffalse%
+\def\@tempa#1{\f@issue%
+ \@fw{-13- \@txt@msg{le caract\`ere "#1" est d\'ej\`a actif}%
+ }[#1]%
+ \let\@tempb\next\let\@tempc\empty}%
+\let\@tempb\empty%
+\AFPdp%
+\let\ifWTS\iffalse%
+\def\@WTS{\relax\ifmmode\else\ifhmode%
+ \ifdim\lastskip>\z@\unskip\fi%
+ \fi\fi}%
+\def\@tempc{%
+\def;{\ifFTY\protect\@PV%
+ \else\ifWTS\@WTS\fi\string;\fi}%
+ }%
+\def\@tempd{\@tempa{\string;}}%
+\ifx;\undefined\def\@tempd{}\fi\@tempd\@tempc%
+\def\@PV{\relax\ifmmode\string;\else%
+ \ifhmode\ifUSP\unskip\space\fi%
+ \ifdim\lastskip>\z@\unskip\penalty\@M\,\fi%
+ \fi\string;\fi}%
+\def\@tempc{%
+\def:{\ifFTY\protect\@DP%
+ \else\ifWTS\@WTS\fi\string:\fi}%
+ }%
+\def\@tempd{\@tempa{\string:}}%
+\ifx:\undefined\def\@tempd{}\fi\@tempd\@tempc%
+\@ifundefined{@beginparpenalty}{\def\@beginparpenalty=#1{\penalty#1}}{}%
+\def\@DP{\relax\ifmmode\string:\else%
+ \ifhmode\ifUSP\unskip\space\fi%
+ \ifdim\lastskip>\z@\unskip\penalty\@M\,\fi%
+ \fi%
+ \string:%
+ \@beginparpenalty=\@M\relax%
+ \fi}%
+\def\@wu#1{\@@wu#1,\void}%
+\def\@@wu#1,#2{\ifx#1\empty\else\@@@wu #1\fi%
+ \def\@tempa{\@@wu#2}%
+ \ifx#2\void\else\expandafter\@tempa\fi%
+ }%
+\def\@@@wu#1=#2{\expandafter\edef\csname #1\endcsname:{#2\string:}}%
+\ifx\hhline\undefined\else\let\@hhlORI\hhline%
+ \def\hhline{\omit\ifFrench\let:\@cidp\fi%
+ \expandafter\@gobble\@hhlORI}%
+\fi%
+\def\@tempc{%
+\def!{\ifFTY\protect\@PE%
+ \else\ifWTS\@WTS\fi\string!\fi}%
+ }%
+\def\@tempd{\@tempa{\string!}}%
+\ifx!\undefined\def\@tempd{}\fi\@tempd\@tempc%
+\def\@PE{\ifmmode\string!\else%
+ \ifhmode\ifUSP\unskip\space\fi%
+ \ifdim\lastskip>\z@\unskip\penalty\@M\,\fi%
+ \fi%
+ \string!\fi}%
+\def\@tempc{%
+\def?{\ifFTY\protect\@PI%
+ \else\ifWTS\@WTS\fi\string?\fi}%
+ }%
+\def\@tempd{\@tempa{\string?}}%
+\ifx?\undefined\def\@tempd{}\fi\@tempd\@tempc%
+\def\@PI{\relax\ifmmode\string?\else%
+ \ifhmode\ifUSP\unskip\space\fi%
+ \ifdim\lastskip>\z@\unskip\penalty\@M%
+ \hskip +0.09em plus 0.07667em%
+ \fi%
+ \fi%
+ \string?\fi}%
+\ifx\@tempb\next\let\AFPdp\empty\f@issue%
+ \@fw{-13b- %
+ \@txt@msg{la double ponctuation est alors d\'esactiv\'ee}}\fi%
+\let\ifLPA\ErrFrench%
+\let\ifFG\ErrFrench%
+\let\@aORI\@array%
+\def\@array{}%
+\DFPdp\AFPdp%
+\ifx\AFPdp\empty\else%
+\def\@array{\let\noexpand\@tempa=\noexpand!%
+ \def\noexpand!{\noexpand\string\noexpand!}%
+ \edef\noexpand\@tempb{##1}%
+ \let\noexpand!=\noexpand\@tempa}%
+\fi%
+\catcode`<=13\catcode`>=13%
+\let\ifArG\iftrue%
+\edef\@array[#1]{\edef\noexpand\@tempb{#1}%
+ \noexpand\ifArG\noexpand\else%
+ \noexpand\ifnum\catcode`\noexpand<=\active%
+ \noexpand\ifmmode\let\noexpand<\noexpand\inferieura%
+ \let\noexpand>\noexpand\superieura%
+ \noexpand\fi\noexpand\fi\@array%
+ \noexpand\fi%
+ \noexpand\@aORI[{\noexpand\@tempb}]}%
+\let\@eaORI\eqnarray%
+\def\eqnarray{\ifArG\else\ifnum\catcode`<=\active%
+ \let<\inferieura\let>\superieura%
+ \fi\fi\@eaORI}%
+\ifx\@@array\undefined\else%
+ \let\@@aORI\@@array%
+\def\@@array{\ifArG\else\ifnum\catcode`<=\active%
+ \let<\inferieura\let>\superieura%
+ \fi\fi\@@aORI}%
+\fi%
+\catcode`<=12\catcode`>=12%
+\DFPdp%
+\let\@CGroup\relax\let\@@FG\relax%
+\let\@LG\relax%
+\def\@normalrq{\relax\ifmmode^\prime\else\@frq\fi}%
+\def\@frq{{\catcode`'=12{\ifNEQ\ifECM\char\rq001%
+ \else\char\rq023\hbox{}\fi%
+ \else\string'\fi}}}%
+\AFPq%
+\def`{\protect\@PLQ}%
+ \let\@PLQ@\lq%
+ \def\@PLQ{\ifmmode\string`\let\@PLQ@\relax%
+ \else\ifNED\let\@PLQ@\@PLQn\fi%
+ \ifhmode\let\@PLQ@\@PLQn\fi%
+ \fi\@PLQ@}%
+ \def\@PLQn{\@ifNextNB`{\protect\@OQ}%
+ {\ifNEQ\ifECM\char\rq000\hbox{}%
+ \else\char\rq022\hbox{}\fi%
+ \else\string`\fi}%
+ }%
+ \def\@OQ`{\ifNED\protect\@LG\else\string``\fi}%
+\def'{\protect\@PRQ}%
+ \let\@PRQ@\rq%
+ \def\@PRQ{\ifmmode\let\@PRQ@\@SRQ@%
+ \else\ifhmode\let\@PRQ@\@PRQn\fi%
+ \fi\@PRQ@}%
+ \def\@@FGp'{\@@FG}%
+ \def\@PRQn{\let\@PRQ@\rq%
+ \@ifNextNB'{\ifNED\let\@PRQn@\@@FGp%
+ \else\let\@PRQn@\relax\string'\fi\@PRQn@}%
+ {\protect\@normalrq}}%
+\let\ifNED\iffalse%
+\let\ifNEQ\iffalse%
+\DFPq%
+\def\untypedspaces{\@noBDfr%
+ \let\ifUSP\iftrue}%
+\def\typedspaces{\@noBDfr%
+ \let\ifUSP\iffalse}%
+\let\if@labelsinmargin\iffalse%
+\let\ifFG\iffalse%
+\let\ifFrench\iffalse%
+{\def\@genMLhyph{\@ifundefined{french}{}{\gdef\fhyph{\french}}%
+ \@ifundefined{english}{}{\gdef\ehyph{\english}}}%
+\@ifundefined{fhyph}{\@genMLhyph}{}%
+}%
+\gdef\frenchTeXmods{%
+ \global\let\ifFrench\iftrue%
+\ifCLA%
+ \ifCLAfrench%
+ \@AFP%
+ \frenchtypography\frenchtranslation\frenchlayout%
+ \fi%
+\else%
+ \@AFP%
+ \frenchtypography\frenchtranslation\frenchlayout%
+\fi%
+ \frenchmacros\frenchwarnings%
+ \let\@HifORI\@Hif\let\@HfiORI\@Hfi%
+ \frenchhyphenation%
+ \csname @xtrasfrench\endcsname%
+ \ifx\GOfrench\undefined%
+ \csname beginL\endcsname%
+ \fi%
+ \def\languagename{french}%
+ \@ufo%
+ \let\switchtolanguage\endfrench%
+ \ignorespaces%
+ }%
+\ifx\undefined\babel@core@loaded%
+ \edef\extrasfrench{}\def\@xtrasfrench{\extrasfrench}%
+ \DeclareOption{french}{\def\beginlanguage{%
+ \ifx\babel@savevariable%
+ \undefined\french%
+ \else\endenglish\selectlanguage{french}\fi}%
+ }%
+ \DeclareOption{english}{\def\beginlanguage{%
+ \ifx\babel@savevariable%
+ \undefined\english%
+ \else\selectlanguage{english}\fi}%
+ }%
+\else\let\extrasfrench\frenchTeXmods%
+ \AtBeginDocument{%
+ \def\@tempa{\protect\@LabeL}%
+ \ifx\@tempa\label\else%
+ \let\@lORI\label\let\label\@tempa\fi%
+ \def\@tempa{\protect\atgH{r}}%
+ \ifx\@tempa\ref\else\@gG{r}{ref}{/}{1}\fi%
+ }%
+\fi%
+\@ifundefined{switchtolanguage}{%
+ \def\switchtolanguage#1{#1}}{}%
+\let\@stlORI\switchtolanguage
+\def\@DFPtestANDset{%
+ \ifx\ifFrench\iffalse%
+ \f@issue\@fw{-71- %
+ \@txt@msg{ATTENTION : }%
+ \@txt@msg{si babel est utilis\'e, mettre \frenchname\space en option}%
+ }%
+ \fi%
+ \let\@DFPtestANDset\@DFP%
+ \@DFP}%
+\def\endfrench{%
+\ifCLAfrench\else%
+ \@DFPtestANDset%
+ \nofrenchtypography\nofrenchtranslation\nofrenchlayout%
+\fi%
+ \nofrenchmacros%
+ \nofrenchhyphenation%
+ \let\@Hif\@HifORI\let\@Hfi\@HfiORI%
+ \let\switchtolanguage\@stlORI%
+ \let\ifFrench\iffalse\@stlORI%
+ \ignorespaces}%
+\let\noextrasfrench\endfrench%
+\@ifundefined{englishTeXmods}{\gdef\englishTeXmods{}}{}%
+\global\let\@Hif\empty\global\let\@Hfi\empty%
+\global\let\if@FE\iffalse%
+\newif\if@more\@moretrue%
+\def\@doFh{%
+\def\f@ERRdat{\f@issue%
+ \errmessage{-9- \@txt@msg{Corrupted/absent language.dat file.}%
+ }\global\let\french\@@end%
+ }%
+ \bgroup%
+ \let\ORIGfrench\french%
+ \newcount\@FrCount%
+\def\tl@ng##1{}%
+\def\@rhef##1/##2 /{\def\@tempa{##2}%
+ \def\@tempb{##1}%
+ \def\@tempc{\ifx\space\@tempa\else%
+ \expandafter\gdef\csname ##1@hefn\endcsname{##2\relax}%
+ \if@FE\expandafter\@@input##2\relax\fi\fi}%
+ \ifx\undefined\@excn\@tempc%
+ \else\ifx\@tempb\@excn\@tempc\fi\fi}%
+\gdef\NouveauLangage[##1]##2{%
+ \expandafter\@ifundefined{l@##2}{}%
+ {%
+ \chardef\l@no##1\expandafter\if\csname l@##2\endcsname\l@no\else%
+ \edef\l@no{##1}\expandafter%
+ %
+ \ifx\csname l@##2\endcsname\l@no%
+ \else\f@issue\typeout{^^J \frenchname.sty \string: -27- %
+ \@txt@msg{language \l@no\space (##2) was initially }%
+ \@txt@msg{(at initex) numbered \csname l@##2\endcsname\space(ERROR!)}%
+ }[##2]\f@ERRdat%
+ \fi\fi}%
+ \expandafter\tl@ng\csname##2TeXmods\endcsname%
+ \expandafter\gdef\csname##2 \endcsname%
+ {\expandafter\switchtolanguage\csname ##2TeXmods\endcsname%
+ \@Hif\language=##1\@Hfi\relax}%
+ \expandafter\gdef\csname##2\endcsname%
+ {\protect\csname##2 \endcsname}%
+ }%
+\def\Nouveau@Langage[##1]##2{% > def nouveau langage 1
+%arabic as a language should not change the definition of \arabic
+% the same is valid for future similar cases > -- arabic prepare
+ \expandafter\@ifundefined{##2}{\lang@defifalse}%
+ {\lang@defitrue}%
+ \expandafter\@ifundefined{mlp##2}{\langmlp@defifalse}%
+ {\langmlp@defitrue}%
+% < -- arabic prepare
+ \expandafter\@ifundefined{l@##2}{}%
+ {%
+ \chardef\l@no##1\expandafter\if\csname l@##2\endcsname\l@no\else%
+ \edef\l@no{##1}\expandafter%
+ %
+ \ifx\csname l@##2\endcsname\l@no%
+ \else\f@issue\typeout{^^J \frenchname.sty \string: -27- %
+ \@txt@msg{language \l@no\space (##2) was initially }%
+ \@txt@msg{(at initex) numbered \csname l@##2\endcsname\space(ERROR!)}%
+ }[##2]\f@ERRdat%
+ \fi\fi}%
+ \iflangmlp@defi \typeout {eFrench Info : langue ##2 choisie par mlp}\else%
+ {%
+ \expandafter\tl@ng\csname##2TeXmods\endcsname%
+ \iflang@defi% ++ test langue existe ?
+ \expandafter\gdef\csname##2Lang \endcsname%
+ {\expandafter\switchtolanguage\csname ##2TeXmods\endcsname%
+ \@Hif\language=##1\@Hfi\relax}%
+ \expandafter\gdef\csname##2Lang\endcsname%
+ {\protect\csname##2Lang \endcsname}%
+ \typeout{eFrench Info : %
+ \\##2Lang commute sur langue ##2 }%
+ \typeout{eFrench Info : %
+ et \\##2TeXmods pour ses extensions }%
+ \typeout{eFrench Info : %
+ avec \\ = une seule barre oblique inverse ===}%
+ \else% ** langue n'existe pas
+ \expandafter\gdef\csname##2 \endcsname%
+ {\expandafter\switchtolanguage\csname ##2TeXmods\endcsname%
+ \@Hif\language=##1\@Hfi\relax}%
+ \expandafter\gdef\csname##2\endcsname%
+ {\protect\csname##2 \endcsname}%
+ \fi%
+ } % -- test langue existe
+ \fi% % -- test mlp<lang> existe
+ }% < def nouveau langage 1
+\edef\@temp@{=}%
+\def\@langue##1##2 ##3 ##4/##5{\def\@tempa{=}\def\@tempb{##1}%
+ \ifx\@tempa\@tempb%
+ \ifnum\@FrCount > 0 \advance\@FrCount by -1\fi%
+ \relax%
+ \expandafter\Nouveau@Langage\expandafter[\the\@FrCount]{##2}%
+ \ifnum\@FrCount \@temp@ 0 \@FrCount= -1\fi%
+ \else\edef\@temp@{<}\@l@ngue##1##2 ##3 ##4/{##5}%
+ \fi}%
+\def\@l@ngue##1 ##2 ##3/##4{\Nouveau@Langage[##4]{##1}%
+ %
+ \@rhef##1/##3/%
+ }%
+\let\hyphenation\f@hyphenation%
+\openin\@inputcheck = language.dat \def\@tempb{}% > language.dat
+\ifeof\@inputcheck\@Ffnt{language.dat}%
+ \ifx\undefined\french %
+ \else\xdef\@PrevF{\french}%
+ \gdef\french{\switchtolanguage\frenchTeXmods\@PrevF}%
+ {\@PrevF\f@issue\@fw{-15- %
+ \@txt@msg{le langage \frenchname\space porte le }%
+ \@txt@msg{num\'ero \the\language}%
+ }}%
+ \fi%
+ \ifx\undefined\l@english %
+ \def\l@english{0}%
+ \fi%
+ \ifx\undefined\english %
+ \else\xdef\@PrevE{\language=\l@english}%
+ \gdef\english{\switchtolanguage\englishTeXmods\@PrevE}%
+ {\@PrevE\f@issue\@fw{-16 %
+ \@txt@msg{the English language\space is numbered }%
+ \@txt@msg{\the\language}%
+ }}%
+ \fi
+\else\@FrCount=-1%
+\newif\iflang@defi%
+\newif\iflangmlp@defi%
+\let\englishORI\english%
+\let\english\undefined%
+\loop \endlinechar=-1 \read\@inputcheck to \@lineD \endlinechar`\^^M%
+ \ifx\@lineD\empty \else \advance\@FrCount by 1%
+ \edef\@lineD{\@lineD\space\space/{\the\@FrCount}}%
+ \expandafter\@langue\@lineD%
+ \fi%
+ \ifeof\@inputcheck \@morefalse \fi%
+ \if@more\repeat%
+\fi\closein\@inputcheck% < language.dat
+\ifx\undefined\english\let\english\englishORI\fi% !
+\let\hyphenation\@hyphenation%
+\def\@MLtst{\@ifundefined{fhyph}%
+ {\if@PMF\gdef\french{\switchtolanguage\frenchTeXmods}%
+ \f@issue%
+ \@fw{-19- %
+ \@txt@msg{utilisation du langage interne num\'ero \the\language}%
+ }%
+ \else\f@issue%
+ \typeout{^^J \frenchname.sty: -20b-
+ \@txt@msg{the French language is undefined (ERROR!)}%
+ }\f@ERRdat\fi}%
+ {\gdef\french{\switchtolanguage\frenchTeXmods\fhyph}%
+ \gdef\english{\switchtolanguage\englishTeXmods\ehyph}%
+ }%
+ }%
+\@ifundefined{french}{\@MLtst}{}%
+\@ifundefined{endenglish}{\global\let\endenglish\french}{}%
+\gdef\tl@ng##1{\ifx ##1\relax\f@issue%
+ \@fw{-21- \@txt@msg{##1 n'est pas d\'efini}%
+ }[##1]\fi}%
+\ifx\ORIGfrench\french\f@ERRdat\fi%
+ \egroup%
+ }%
+\ifx\vert\undefined\else\let\@bvORI\vert\fi%
+\def\@fwVIIIII{\f@issue%
+ \kbtypeout{^^J -73- \@txt@msg{ERREUR avec AmSTeX : }%
+ \@txt@msg{\frenchname.sty a \'et\'e charg\'e trop t\^ot !}%
+ }\stop}%
+\ifx\RIfM@\undefined%
+\def\vert{\ifx\RIfM@\undefined\expandafter\@bvORI\else\expandafter%
+ \@fwVIIIII\fi}%
+\else%
+\def\vert{\@bvORI}%
+\fi%
+\let\@currname\@currnameORI%
+\def\languagename{english}%
+\def\beginlanguage{%
+ \ifx\babel@savevariable%
+ \undefined\french%
+ \else\endenglish\selectlanguage{french}\fi%
+ }%
+\let\@bglngpk\babel@savevariable%
+\ifx\pg@add@to\undefined\else%
+\def\pg@begin{\begingroup}%
+\def\pg@end{\endgroup}%
+\fi%
+\edef\beginFWdirection{L}%
+\ifx\undefined\babel@core@loaded\ProcessOptions*%
+ \else%
+ \PackageInfo{\frenchname}%
+ {Initialisation de l'option \frenchname\space pour Babel}%
+ \GOfrench\let\GOfrench\relax%
+\fi%
+\let\@FW\undefined%
+\resetat%
+\PassOptionsToPackage{french}{varioref}%
+\PassOptionsToPackage{french}{pdfscreen}%
+\endinput%
diff --git a/language/french/e-french/texmf/tex/frenchpro.sty b/language/french/e-french/texmf/tex/frenchpro.sty
new file mode 100644
index 0000000000..45b16553e9
--- /dev/null
+++ b/language/french/e-french/texmf/tex/frenchpro.sty
@@ -0,0 +1,11 @@
+%% This is frenchpro.sty --bg 2002/01/29
+%% updated --bg 2003/11/17
+%% to be used like this: \usepackage{frenchpro}
+%%
+% After Bernard Gaulle's decease this work is now maintained as
+% the e-French project by a group of enthusiast users
+% under LPPL copyright as declared in http://www.efrench.org/
+%
+%
+\RequirePackage{french}%
+\endinput%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/tex/frhyphex.tex b/language/french/e-french/texmf/tex/frhyphex.tex
new file mode 100644
index 0000000000..2fda16522a
--- /dev/null
+++ b/language/french/e-french/texmf/tex/frhyphex.tex
@@ -0,0 +1,75 @@
+% frhyphex.tex % French hyphenation exceptions provided with accent macros.
+% last mods: 2005/03/21
+% After Bernard Gaulle's decease this work is now maintained as
+% the e-French project by a group of enthusiast users
+% under LPPL copyright as declared in http://www.efrench.org/
+%
+% Usually \hyphenation doesn't allow accent macros in its argument, just
+% only characters, but french.sty and hyconfig.tex allows this. Thus this
+% file can be reloaded each time you change your input encoding. The keyboard
+% package do it via kbconfig.tex (and \kbencoding macro).
+%
+\ifx\undefined\@uclclist% is it initex? yes probably
+\expandafter\message\else\expandafter\wlog\fi{frhyphex.tex french exceptions (%
+% Do NOT make any alterations to this french hyphenation exceptions list! --bg
+% This is my official one.
+ V3.3) % <========= VERSION
+ }%
+% But you can have your private one via language.dat and \frhyphex
+% look at the documentation...
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Comme Babel n'accepte pas les lignes blanches et que Braams n'a pas repondu
+% a mon message (1999/12) j'elimine le chargement des exceptions si babel
+\ifx\adddialect\undefined% a ete charge dans le format.
+
+\hyphenation{% La liste est volontairement reduite. Les exceptions qui ont
+ % ete reconnues sont mises sous forme de motif dans frhyph.tex
+
+% noms propres de renomee mondiale (!) :
+% ============
+%
+
+GUTenberg % Groupe francophone des Utilisateurs de TeX, association loi 1901.
+
+%
+% noms communs dont la division par TeX est << actuellement >> impropre :
+% ============ (les noms suivants on fait l'objet d'une etude GUTenberg et
+% n'ont pas ete retenus dans les fichier des motifs de cesure)
+%
+
+extra-conju-gal % proposition de Etienne Riga 1999/12/23
+extra-conju-gale extra-conju-gales % Riga 1999/12/23
+extra-conju-gaux % Riga 1999/12/23
+extra-cor-po-rel extra-cor-po-rels % Riga 1999/12/23
+extra-cor-po-relle extra-cor-po-relles % Riga 1999/12/23
+fichier fichiers %proposition de Michel Bovani 1999/08/09
+manu-scrit manu-scrits % Denis Roegel 2002/12/06
+% Je n'ai pas reussi a ajouter "Grand' " pour Grand'place par exemple,
+% alors que \hyphenation{Grand'} fonctionne bien dans le corps d'un
+% document avec FrenchPro. B.G. 2005/03/21
+
+%
+%%%
+% (Les noms suivants feront l'objet - ulterieurement - d'une etude GUTenberg et
+% - eventuellement - d'une modification du fichier des motifs de cesure)
+%
+% noms techniques d'usage assez courant
+% ===============
+%
+
+ } % end of exceptions
+
+% Second list of exceptions:
+\ifx\undefined\@uclclist\else% The following not used at initex:
+\hyphenation{%
+
+ } % end of exceptions
+\fi
+
+\else%
+\ifx\undefined\@uclclist% is it initex? yes probably
+\expandafter\message\else\expandafter\wlog\fi%
+{NOT LOADED when BABEL is active.}%
+\fi%
+%\endinput%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/tex/fxabbrev.tex b/language/french/e-french/texmf/tex/fxabbrev.tex
new file mode 100644
index 0000000000..42504de350
--- /dev/null
+++ b/language/french/e-french/texmf/tex/fxabbrev.tex
@@ -0,0 +1,297 @@
+% frabbrev.tex file (French typographic abbreviations)
+% should always be used in 8bit format (generated from
+% fxabbrev.tex which is full ASCII 7bit)
+%
+% After Bernard Gaulle's decease this work is now maintained as
+% the e-French project by a group of enthusiast users
+% under LPPL copyright as declared in http://www.efrench.org/
+%
+% Don't change this to a 7bits coding except if you are using 7bits input
+%
+% History of mods:
+% ===============
+% - Change \^i into \^{\i}_ --bg 01/16/92
+% - Added shorten "cad" (remark coming from Jacques Andre) --bg 02/07/92
+% - paragraph sign (\S) followed by a tilde --bg 05/15/92
+% - recoded to 8bits --bg 08/24/92
+% - add second, seconds, premiers, premi\`{e}res, troisi\`{e}mes...
+% num\'{e}ros, Num\'{e}ros and pages.
+% --bg 01/12/93
+% - strings containing a space must be within a group. --bg 98/05/15
+% - THE FIRST LETTER IS NO MORE TESTED except if the string is
+% within braces. Thus, any string beginning whith an uppercase
+% letter should be enclosed within braces. --bg 1999/11/08
+% - f8abbrev.tex and frabbrev.850 definitely removed.
+% f7abbrev.tex rename fxabbrev.tex --bg 2000/06/14
+% - few adds coming from Yves Perrousseaux' book on typo. --bg 2001/08/03
+% - corrections for second(s) and seconde(s). --bg 2001/09/20
+% - * facility added for plurals ==> 6 changes.
+% - legal units added and few other names.
+% HAPPY 10 YEARS ANNIVERSARY! --bg 2001/01/21
+% - abbrev. from Louis Gu\'{e}ry from CFPJ. --bg 2002/02/21
+%%
+%% checksum = "10121 297 1013 10878"
+%%
+
+% Checked name Replacement
+% ============ ===========
+%
+% Notice that when the checked name is inside braces all that name
+% should be equal to "name" otherwise the first letter is not checked.
+% If checked name begins with "*" then "_name_" and "_name_s" will
+% be checked, the replacement name is the same in the two cases.
+%
+% NB: All macros have to be not expanded.
+
+premier 1\noexpand\ier%
+premiers 1\noexpand\iers%
+premi\`{e}re 1\noexpand\iere%
+premi\`{e}res 1\noexpand\ieres%
+deuxi\`{e}me 2\noexpand\ieme%
+deuxi\`{e}mes 2\noexpand\iemes%
+second 2\noexpand\fup{d}%
+seconds 2\noexpand\fup{ds}%
+seconde 2\noexpand\fup{de}%
+secondes 2\noexpand\fup{des}%
+troisi\`{e}me 3\noexpand\ieme%
+troisi\`{e}mes 3\noexpand\iemes%
+quatri\`{e}me 4\noexpand\ieme%
+quatri\`{e}mes 4\noexpand\iemes%
+
+primo \noexpand\quando{1}%
+secundo \noexpand\quando{2}%
+tertio \noexpand\quando{3}%
+quarto \noexpand\quando{4}%
+quinto \noexpand\quando{5}%
+sexto \noexpand\quando{6}%
+septuno \noexpand\quando{7}%
+octavo \noexpand\quando{8}%
+nono \noexpand\quando{9}%
+decimo \noexpand\quando{10}%
+
+{Num\'{e}ro} \noexpand\Numero%
+{Num\'{e}ros} \noexpand\Numeros%
+num\'{e}ro \noexpand\numero%
+num\'{e}ros \noexpand\numeros%
+
+monsieur M.%
+messieurs MM.%
+mademoiselle M\noexpand\fup{lle}%
+mesdemoiselles M\noexpand\fup{lles}%
+madame M\noexpand\fup{me}%
+mesdames M\noexpand\fup{mes}%
+ma\^{\i}tre M\noexpand\fup{e}%
+ma\^{\i}tres M\noexpand\fup{es}%
+
+{Compagnie} c\noexpand\fup{ie}%
+canton C\noexpand\fup{on}%
+docteur D\noexpand\fup{r}%
+folio f\noexpand\fup{o}%
+folios f\noexpand\fup{os}%
+monseigneur M\noexpand\fup{gr}%
+paragraphe \noexpand\S~% doit \^{e}tre suivi d'un num\'{e}ro.
+recto r\noexpand\fup{o}%
+verso v\noexpand\fup{o}%
+
+{Acad\'{e}mie} Acad.%
+adjectif adj.%
+{Administration} Admin.%
+ancien anc.%
+annexe ann.% from LG 2002/02/21
+{Antiquit\'{e}} Antiq.%
+appendice append.%
+apr\`{e}s apr.%
+archives arch.%
+arch\'{e}ologie arch\'{e}ol.%
+arithm\'{e}tique arithm.%
+arrondissement arr.%
+article art.%
+astronomie astron.%
+avant av.%
+avenue av.% from LG 2002/02/21
+bibliographie bibliogr.%
+biblioth\`{e}que bibl.% from LG 2002/02/21
+biologie biol.%
+botanique bot.%
+boulevard bd%
+bulletin bull.%
+cad \noexpand\hbox{c.-\`{a}-d.}%
+chapitre chap.%
+chef-lieu ch.-l.%
+chronologie chronol.%
+circulaire circ.%
+circonscription circonscr.%
+{Code civil} C.civ.%
+{Code p\'{e}nal} C.p\'{e}n.%
+*collaborateur coll.%
+collection coll.%
+colonne col.% from LG 2002/02/21
+commandeur C.% from LG 2002/02/21
+d\'{e}partement d\'{e}p.%
+dictionnaire dict.%
+document doc.%
+{Est} E%
+*\'{e}diteur \'{e}d.% * from LG 2002/02/21
+*\'{e}dition \'{e}d.% * from LG 2002/02/21
+environ env.%
+\'{e}pitre \'{e}p.%
+\'{e}pilogue \'{e}pil.%
+\'{e}tablissements \'{E}ts%
+\'{e}tymologie \'{e}tym.%
+exemple ex.%
+exp\'{e}diteur exp.% from LG 2002/02/21
+fascicule fasc.%
+faubourg fg%
+f\'{e}minin f\'{e}m.%
+feuillet f.%
+figure fig.%
+Fr\`{e}re F.% from LG 2002/02/21
+g\'{e}ographie g\'{e}ogr.%
+g\'{e}ologie g\'{e}ol.%
+g\'{e}om\'{e}trie g\'{e}om.%
+graphique graph.%
+gravure grav.%
+habitants hab.%
+hauteur haut.%
+iconographie iconogr.%
+*illustrations illustr.% 21/01/2002
+inf\'{e}rieur inf.%
+introduction introd.%
+invariable invar.%
+italique ital.%
+juridique jur.%
+jurisprudence jur.%
+*ligne l.% 21/01/2002
+largeur larg.%
+latitude lat.%
+librairie libr.%
+livre liv.%
+locution loc.%
+longitude long.%
+longueur long.%
+manuscrit ms.%
+manuscrits mss.%
+masculin masc.%
+math\'{e}matiques math.%
+maximum max.% from LG 2002/02/21
+m\'{e}canique m\'{e}can.%
+m\'{e}moire m\'{e}m.%
+musique mus.%
+mythologie myth.%
+{Nord} N%
+nouveau nouv.%
+nouvelle nouv.%
+numismatique numism.%
+officier O.% from LG 2002/02/21
+{Ouest} O% from LG 2002/02/21
+ouvrage ouvr.%
+*page p.% 21/01/2002
+partie part.%
+P\`{e}re P.% from LG 2002/02/21
+photographie phot.%
+physique phys.%
+*planche pl.% 21/01/2002
+reli\'{e} rel.% from LG 2002/02/21
+reliure rel.%
+r\'{e}daction r\'{e}d.
+route rte% from LG 2002/02/21
+{Sud} S.%
+science sc.%
+sc\`{e}ne sc.%
+section sect.%
+{Saint} St%
+{Saints} Sts%
+{Sainte} Ste%
+{Saintes} Stes%
+section sect.% from LG 2002/02/21
+si\`{e}cle s.% from LG 2002/02/21
+{soci\'{e}t\'{e}} st\'{e}% 21/01/2002
+{Soci\'{e}t\'{e}} St\'{e}% Yves Perrousseaux 2001/08/03
+substantif subst.%
+*suivant suiv.% 21/01/2002
+*suivante suiv.% 21/01/2002
+sup\`{e}rieur sup.% from LG 2002/02/21
+suppl\'{e}ment suppl.%
+t\'{e}l\'{e}phone t\'{e}l.% Yves Perrousseaux 2001/08/03
+tome t.% from LG 2002/02/21
+traducteur trad.%
+traduction trad.%
+variante var% from LG 2002/02/21
+vers v.% from LG 2002/02/21
+voir V% from LG 2002/02/21
+volume vol.%
+
+% Unit\'{e}s l\'{e}gales :
+
+*amp\`{e}re A%
+*are a%
+*bel B% from LG 2002/02/21
+*candela cd% from LG 2002/02/21
+centi c% from LG 2002/02/21
+*centiare ca%
+*centigramme cg%
+*centilitre cl%
+*centim\`{e}tre cm%
+d\'{e}ca da% from LG 2002/02/21
+*d\'{e}calitre dal%
+d\`{e}cam\`{e}tre dam%
+d\'{e}ci d% from LG 2002/02/21
+d\'{e}cibel dB%
+d\'{e}cigramme dg% from LG 2002/02/21
+d\'{e}cilitre dl% from LG 2002/02/21
+*franc F%
+giga G% from LG 2002/02/21
+*grade gr%
+*gramme g%
+*hectare ha%
+hect h% from LG 2002/02/21
+*hectogramme hg%
+*hectolitre hl%
+*hectom\`{e}tre hm%
+*hertz Hz% from LG 2002/02/21
+*heure h%
+*jour j%
+*kelvin K% from LG 2002/02/21
+kilo k% from LG 2002/02/21
+*kilogramme kg%
+*kilohertz kHz% from LG 2002/02/21
+*kilom\`{e}tre km%
+*kilovoltamp\`{e}re kVA% from LG 2002/02/21
+*kilowatt kW%
+kilowatt-heure kWh%
+kilowatts-heure kWh%
+*litre l%
+lux lx% from LG 2002/02/21
+m\'{e}ga M% from LG 2002/02/21
+*m\'{e}gahertz MHz% from LG 2002/02/21
+*m\`{e}tre m%
+% micro est a introduire qd on aura \mu en romain droit.
+milli m% from LG 2002/02/21
+*millibar mbar%
+*milligramme mg% from LG 2002/02/21
+*millilitre ml%
+*millim\`{e}tre mm%
+*milliseconde ms% from LG 2002/02/21
+*minute min%
+*mole mol% from LG 2002/02/21
+nano n% from LG 2002/02/21
+*nanoseconde nc% from LG 2002/02/21
+*newton N% from LG 2002/02/21
+*pascal Pa% from LG 2002/02/21
+pico p% from LG 2002/02/21
+*picoseconde ps% from LG 2002/02/21
+quintal q% from LG 2002/02/21
+quintaux q% from LG 2002/02/21
+*radian rad% from LG 2002/02/21
+*seconde s%
+*st\`{e}re st%
+t\'{e}ra T% from LG 2002/02/21
+*thermie th% from LG 2002/02/21
+*tonne t%
+*volt V%
+*watt W%
+*wattheure Wh% from LG 2002/02/21
+
+% Excerpt from ``Lexique des r\`{e}gles typographiques en usage a l'Imprimerie
+% nationale'', Abr\'{e}viations, p7-11 and few additions.
+% plus other usual (referenced) names.
diff --git a/language/french/e-french/texmf/tex/german_french-msg.tex b/language/french/e-french/texmf/tex/german_french-msg.tex
new file mode 100644
index 0000000000..247ca39f95
--- /dev/null
+++ b/language/french/e-french/texmf/tex/german_french-msg.tex
@@ -0,0 +1,205 @@
+% File french-msg.tex (messages issued by the FrenchPro package)
+\msgencoding{ansinew}\msgheader{-\msgid-\space}
+%%%%%%% translated by Werner Struckmann, THANKS! %%%%%%%%%%%%%%%
+\msg{1}{Der Befehl #1 existiert schon.}{}
+\msg{2}{Die Datei #1 wurde nicht gefunden.}{}
+\msg{3}{\frenchpack\space ist hier nicht aktiviert\string!}{}
+\msg{4}{Der "Poor-Man-French-Style" wurde aktiviert.}{}
+\msg{5}{Fehler in der Lettrine-Definition}{}
+\msg{6}{Bitte überprüfen Sie den Lettrine-Code.}{}
+\msg{7}{Die Lettrine besteht nur aus einem Buchstaben.}{}
+\msg{8}{\string\footnotetext{#1} ging verloren. %
+ \MessageBreak %
+ Code-Ereignis. \string\protect\string\footnote}{}
+\msg{9}{Die Datei language.dat fehlt bzw. ist defekt.}{}
+\msg{10}{french package wurde nicht geladen.}{}
+\msg{11}{Der \string<\string< frpatch \string>\string> #1 wird angewendet.}{}
+\msg{12}{frpatch.sty ist veraltet, bite löschen Sie die Datei.}{}
+\msg{13}{Das Zeichen "#1" wurde bereits aktiviert.}{}
+\msgheader{-13-\space}
+\msg{13b}{Hier können nicht zwei Satzzeichen aufeinanderfolgen.}{}
+\msgheader{-\msgid-\space}
+\msg{14}{schließende, keine öffnende Guillemets}{}
+\msg{15}{Die Sprache \frenchname\space hat die Nummer \the\language}{}
+\msg{16}{Die englische Sprache \frenchname\space hat die Nummer \the\language}{}
+\msg{17}{\string\wrongtypedspaces\space ist an %
+ dieser Stelle nicht aktiviert.}{}
+\msg*{18}{\frenchname.sty verlangt die Option \string\nofrenchguillemets\space %
+ für AmSLaTeX.}{}
+\msg{19}{Die interne Sprache mit der Nummer \the\language~wird verwendet.}{}
+\msg*{20}{WARNUNG\string: Französisch ist in dieser Format-Datei nicht definiert worden.}{}
+\msg*{20b}{\frenchname.sty\string: Die Sprache Französisch ist undefiniert. %
+ (FEHLER\string!)}{}
+\msg{21}{#1 ist nicht definiert.}{}
+\msg{22}{Die Abkürzung \string"#1\string" wurde nicht gefunden.}{}
+\msg*{23}{Package\string: \frenchpack\space\frenchstyleid%
+ \space(B.Gaulle)}{}
+\msg{24}{\frenchname.sty verwendet in diesem Dokument die Font-Encoding %
+ \f@encoding.}{}%
+\msg{25}{\frenchname.sty gibt Meldungen im%
+ \ifEightBitOutput8-Bit-Mode\else7-Bit-Mode %
+ "a la TeX"\fi aus.%
+ ^^J}{}
+\msg{26}{In \frenchname.sty\string! %
+ wurde ein Fehler gefunden %
+ \MessageBreak %
+ (s. zum Beispiel die Datei language.dat).}{}
+\msg*{27}{\frenchname.sty\string: Die Sprache \l@no\space (#1) hatte ursprünglich %
+ (beim initex-Lauf) die Nummer \csname l@#1\endcsname\space(FEHLER\string!)}{}
+\msg{28}{WARNUNG\string: TeX Version 2 gestattet nicht die Verwendung %
+ von 8-Bit-Zeichen mit Umlauten.}{}
+\msg*{29}{***Warning***\string: TeX mit CM-Fonts %
+ \MessageBreak %
+ (wie im aktuellen TeX-Format) kann keine Wörter trennen,%
+ \MessageBreak %
+ die Umlaute enthalten.}{}
+\msg{30}{FEHLER\string! %
+ TeX kann im aktuellen Font bzw. in der
+ \MessageBreak %
+ aktuellen Codierung, keine Wörter trennen, %
+ die Umlaute enthalten.}{}
+\msg{31}{Fehlerhafte Trennung:\string! %
+ Bitte überprüfen Sie, ob französische *********** %
+ \MessageBreak %
+ Trenntabellen (initex) installiert wurden.\string ***********}{}
+\msg{32}{Falls ja, versuchen Sie bitte, T1-kodierte Fonts zu verwenden.%
+ (\string\usepackage[T1]{fontenc})***}{}
+\msg{33}{Überprüfen Sie bitte die Liste auf hexadezimale Codes,%
+ \MessageBreak %
+ die nicht dargestellt werden können und entfernen Sie diese ggf.
+ \MessageBreak %
+ aus \@kbencoding.kbc.}{}
+\msg{34}{Diese und andere Dateien benötigen das %
+ \MessageBreak %
+ LaTeX package\string: \frenchpack\string! %
+ \MessageBreak %
+ Die weitere Verarbeitung wird abgebrochen.\string!}{}
+\msg{35}{kbconfig\string: Neudefinition \string ^\string ^\string Y uccode. %
+ \MessageBreak %
+ kbconfig\string: Neudefinition \string ^\string ^\string Z uccode.}{}
+\msg{36}{FEHLER\string: Ungültiger Name des LaTeX-Formats %
+ (\string\fmtname). %
+ \MessageBreak %
+ Bitte korrigieren\string: \string\fmtname=LaTeX2e\space.}{}
+\msg{36b}{FEHLER\string: non standard LaTeX format %
+ (\string\fmtname)}{}
+\msg{37a}{FEHLER\string: Das French-Package ist schon aktiviert.}{}
+\msg{37b}{FEHLER\string: Das French-Package ist noch nicht aktiviert.}{}
+\msg{38}{Die Sprache #1 ird als Sprache Nummer \the\workl@ verwendet.}{}
+\msg{39}{Error\string: Die Datei language.dat wurde nicht gefunden, versuchen Sie %
+ die US-englischen Trenntabellen.}{}
+\msg*{40}{Die Dateien kb8to7.lex und kb7to8.lex werden erzeugt.}{}
+\msg{41}{Die Formatdatei ist veraltet, bitte starten Sie initex zur Erzeugung einer neuen Formatdatei\string!}{}
+\msg{42}{Die \frenchname\space Patch-Datei (frpatch.sty) ist für %
+ \MessageBreak %
+ diese Version von "\frenchpack" ungeeignet \FSfd}{}
+\msg{43}{french.all wird geladen^^J}{}
+\msg{44}{FEHLER: der Befehl \LaMacro\space wurde nicht definiert\string!}{}
+\msg{45}{\LaMacro wird ausgeführt}{}
+\msg{46}{Dieser Befehl wurde bereits in \frenchname.sty definiert.%
+ \MessageBreak %
+ Möglicherweise handelt es sich um ein Problem mit \frenchpack\space (\Aboi #1 Befehl)}{}
+\msg*{47}{Die Verarbeitung muss leider abgebrochen werden, da diese TeX-Version nicht %
+ in der Lage ist, 8-Bit-Ausgaben zu erzeugen.\string!}{}
+\msg{48}{Die Konfigurationsdatei von \frenchpack wird gelesen.}{}
+\msg{49}{Die Guillemets werden zu früh geschlossen.}{}
+\msg{50}{FEHLER\string: Die Sprache Französisch wurde in der Datei %
+ language.dat nicht definiert.}{}
+\msg{51}{FEHLER\string: Dieses Dokument wurde nicht in 8-Bit-Code umgewandelt.}{}
+\msg*{52}{FEHLER\string: \frenchpack\space arbeitet leider nicht in %
+ in dieser Minimalumgebung.\string!}{}
+\msg{53}{Die Guillemets-Umgebung kann nicht zusammen mit der %
+ \MessageBreak %
+ \string\noeveryparguillemets\space Option genutzt werden.}{}
+\msg{54}{FEHLER\string: \string\unusedslot\space (\unusedslot) ist ungültig.}{}
+\msg{55}{FEHLER \string\unusedslot\space character %
+ (\@unusedslot) wurde nicht aktiviert.}{}
+\msg*{56}{Folgende 8-Bit-Zeichen wurden verarbeitet\string:}{}
+\msg{57}{Das Keyboard-Paket #1 wurde für die Font-Kodierung %
+ \f@encoding geladen.^^J}{}
+\msg{58}{Der Wert von #1 wurde ignoriert.}{}
+\msg*{59}{Fataler FEHLER\string: Ungewöhnlicher Text wurde erzeugt.}{}
+\msg{60}{Hinter \string\etc fehlt ein Punkt.}{}
+\msg{61}{Die Datei hyph\hyphchar.tex konnte nicht gefunden werden.}{}
+\msg{62}{Es wird eine zusätzliche Trennmusterdatei für Fonts %
+ mit speziellen Trennzeichen geladen.}{}
+\msg{63}{Eine der Dateien french.sty oder frenchle.sty konnte nicht %
+ gefunden werden. %
+ \MessageBreak %
+ Überprüfen Sie, ob die Dateien vorhanden sind.}{}
+\msg{64}{FEHLER\string: Ungültige Zeichenkette %
+ \string\fmtname\space in lplain.tex.}{}
+\msg{65}{\frenchname.sty lädt die Übersetzungen für das %
+ Literaturverzeichnis \string:}{}
+\msg*{66}{FEHLER\string! Diese Datei verlangt für die Bearbeitung die %
+ Deklaration einer Eingabekodierung.}{}
+\msg*{67}{WARNUNG: Sie verwenden vermutlich inputenc und keyboard, %
+ bitte wählen Sie \string!}{}
+\msg*{68}{FEHLER\string: \frenchpack\space läuft leider nicht mehr unter %
+ der LaTeX 2.09 Emulation!}{}
+\msg{69}{kbconfig\string: Die Kontrollsequenz zum Löschen einiger Zeichen %
+ wird unterbrochen.}{}
+\msg{70}{kbconfig\string: \string\@tabacckludge\space wird für die %
+ Mathematikbearbeitung verändert.}{}
+\msg{71}{WARNUNG\string: Falls Sie babel verwenden, spezifizieren Sie bitte %
+ eine der Optionen \frenchname(pro/le).}{}
+\msg{72}{kbconfig\string: Die utf8-Kodierung kann nicht mit plain\string %
+ vervollständigt werden. %
+ \MessageBreak %
+ kbconfig\string: Es wird mit Unicode-Zeichen fortgefahren.}{}
+\msg*{73}{\frenchname.sty wurde zu früh geladen.}{}
+\msg*{74}{FEHLER, die keyboard-Datei wurde nach \frenchpack geladen!}{}
+\msg{75}{kbconfig\string: Die utf8-Kodierung konnte durch %
+ die inputenc-Datei\string nicht gefunden werden.
+ \MessageBreak %
+ kbconfig\string: Es wird mit Unicode-Zeichen fortgefahren.}{}
+\msg{76}{kbconfig\string: Leider sind keine Sprachabhängigkeiten in %
+ Plain TeX\string verfügbar.}{}
+\msg{77}{Die No #1\space Zeichen sind für Englisch definiert.}{}
+\msg*{78}{FEHLER\string: Die Option noutf8 wurde mit unterschiedlichen %
+ Argumenten gewählt.}{}
+\msg*{79}{keyboard.sty\string: Es wurden weder eine lokale Option noch %
+ die utf8-Kodierung angegeben.}{}
+\msg{80}{Babel versucht, die \CurrentOption\space Option zu laden, %
+ \MessageBreak aber das mlp-Pakest wurde bereits geladen. %
+ \MessageBreak Bitte wählen Sie entweder mlp mit der %
+ \MessageBreak \CurrentOption\space Option alleine oder %
+ \MessageBreak babel mit der \CurrentOption\space option.}%
+ {\help{LÖschen Sie das überflüssige Paket oder die %
+ überflüssige Option.}}
+\msg*{81}{WARNUNG\string: "Das "msg"-Paket konnte nicht gefunden %
+ werden.\string; %
+ \MessageBreak Es wird ohne Fehlermeldungen fortgefahren.}{}
+\msg{82}{Der Befehl \LaMacro\space ist nicht definiert.}{}
+\msg{83}{Es stehen Test-Makros vor \string\begin{document}^^J}{}
+\msg{84}{Diesmal wird NACH \string\begin{document} getestet^^J}{}
+\msg{85}{WARNUNG\string: Die Option fixlanguage wurde beim Aufruf von %
+ babelbib nicht benutzt.}{}
+\msg{86}{keyboard.sty\string: Aufgrund der #1\space Option wurde mltex %
+ nicht verwendet.}{}
+\msg{87}{WARNUNG\string: babelbib sollte nur zusammen mit babel %
+ verwendet werden.}{}
+\msg{88}{Durch einen Wechsel der Keyboard Codierung zu `utf8' %
+ \MessageBreak %
+ sind keine Zeichen definiert.\MessageBreak}{}
+\msg{89}{Das verwendete Zeichen ist\MessageBreak %
+ in der Keyboard Codierung `utf8' undefiniert.}%
+ {Sie müssen eine Definition durch %
+ \noexpand\DeclareInputText\MessageBreak oder %
+ \noexpand\DeclareInputMath angeben, bevor Sie dieses Zeichen benutzen.}
+\msg{90}{Ungültiges Unicode-Zeichen \string < 00A0}{\@eha}
+\msg{91}{Das Unicode-Zeichen #1 wurde\space %
+ für die Verwendung mit LaTeX nicht eingerichtet.}{\@eha}
+\msg{92}{Sie sollten entweder \string:\MessageBreak %
+ - TeX mit der Option MlTeX verwenden oder\MessageBreak %
+ - per Default zur Kodierung T1 wechseln.}{}
+\msg*{93}{Sie verwenden zwei French-Optionen für Babel, %
+ \MessageBreak %
+ entscheiden Sie sich bitte für eine.}{}
+\msgheader{-**-\space}
+\msg*{**a}{Die Serienummer von \frenchpack\space ist *\@FrVal*.}{}
+\msg*{**b}{\@FrVal\space von \frenchpack.}{}
+\msgheader{}
+\msg{*}{Diese Meldung \msgid\space ist im \frenchname\space %
+ Paket unbekannt.}{}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/tex/internat.mlp b/language/french/e-french/texmf/tex/internat.mlp
new file mode 100644
index 0000000000..f00e225988
--- /dev/null
+++ b/language/french/e-french/texmf/tex/internat.mlp
@@ -0,0 +1,51 @@
+% internat.mlp Usual configuration of international options for mlp.
+% last mods: 2004/12/14
+%
+% mlp means The Multi-Lingual Package, an idea from --bg 97/11/03
+%
+% This file can be modified if the international TeX users group
+% accepts the modifications.
+%
+% Group to get in touch for internat.mlp is: ...
+% Person to send a message is: ... (defaultly: gaulle@idris.fr)
+%
+\ProvidesFile{internat.mlp}%
+ [2004/12/14 international configuration file for mlp package]
+\DeclareOption{austrian}{\@requirepackage{mlp-49}%
+ \PassOptionsToPackage{german}{mlp-49}%
+ }%
+\DeclareOption{german}{\@requirepackage{mlp-49}%
+ \PassOptionsToPackage{german}{mlp-49}%
+ }%
+\DeclareOption{english}{\@requirepackage{mlp-01}% original US english
+ \PassOptionsToPackage{english}{mlp-01}%
+ }%
+\DeclareOption{french}{\@requirepackage{mlp-33}%
+ \PassOptionsToPackage{french}{mlp-33}%
+ }%
+\DeclareOption{acadien}{\@requirepackage{mlp-33}%
+ \PassOptionsToPackage{french}{mlp-33}%
+ }%
+\DeclareOption{acadian}{\@requirepackage{mlp-33}%
+ \PassOptionsToPackage{french}{mlp-33}%
+ }%
+\DeclareOption{canadianf}{\@requirepackage{mlp-33}%
+ \PassOptionsToPackage{french}{mlp-33}%
+ }%
+\DeclareOption{canadien}{\@requirepackage{mlp-33}%
+ \PassOptionsToPackage{french}{mlp-33}%
+ }%
+\DeclareOption{frenchle}{\@requirepackage{mlp-33}%
+ \PassOptionsToPackage{frenchle}{mlp-33}%
+ }%
+\DeclareOption{efrench}{\@requirepackage{mlp-33}%
+ \PassOptionsToPackage{efrench}{mlp-33}%
+ }%
+\DeclareOption{naustrian}{\@requirepackage{mlp-49n}%
+ \PassOptionsToPackage{ngerman}{mlp-49}%
+ }%
+\DeclareOption{ngerman}{\@requirepackage{mlp-49n}%
+ \PassOptionsToPackage{ngerman}{mlp-49n}%
+ }%
+\AtBeginDocument{\beginlanguage}%
+%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/tex/mlp-01.sty b/language/french/e-french/texmf/tex/mlp-01.sty
new file mode 100644
index 0000000000..342a094615
--- /dev/null
+++ b/language/french/e-french/texmf/tex/mlp-01.sty
@@ -0,0 +1,13 @@
+% mlp-01.sty (the english interface for the mlp package) last mods 2000/09/06
+%
+%%
+%% checksum = "63302 137 659 7109"
+%%
+% Notice we load fenglish.sty from the French dist.
+\ProvidesFile{mlp-01.sty}%
+ [2000/09/06 english interface for the mlp package]
+\DeclareOption{english}{\PassOptionsToPackage{english}{fenglish}}
+\ProcessOptions% Process that option definitely for mlp-01
+\RequirePackage{fenglish}% Load the english package.
+\def\@lastoption{english}% The language to start typesetting with.
+\endinput%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/tex/mlp-33.sty b/language/french/e-french/texmf/tex/mlp-33.sty
new file mode 100644
index 0000000000..892cc968b4
--- /dev/null
+++ b/language/french/e-french/texmf/tex/mlp-33.sty
@@ -0,0 +1,19 @@
+% mlp-33.sty (the french interface for the mlp package) last mods 2005/03/21
+%
+%%
+%% checksum = "63302 137 659 7109"
+%%
+\ProvidesFile{mlp-33.sty}%
+ [2005/03/21 French interface for the mlp package]
+\DeclareOption{french}{\PassOptionsToPackage{french}{french}
+ \IfFileExists{french.sty}{\def\PackageName{french}}
+ {\def\PackageName{frenchle}}
+ }
+\DeclareOption{frenchle}{\PassOptionsToPackage{french}{frenchle}
+ \def\PackageName{frenchle}}
+\DeclareOption{efrench}{\PassOptionsToPackage{french}{french}
+ \def\PackageName{french}}
+\ProcessOptions% Process that option definitely for mlp-33.
+\RequirePackage{\PackageName}% Load french package.
+\def\@lastoption{french}% The language to start typesetting with.
+\endinput%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/tex/mlp-49.sty b/language/french/e-french/texmf/tex/mlp-49.sty
new file mode 100644
index 0000000000..b3b7c27462
--- /dev/null
+++ b/language/french/e-french/texmf/tex/mlp-49.sty
@@ -0,0 +1,59 @@
+% mlp-49.sty (the german interface for the mlp package) last mods 2000/09/06
+%
+%%
+%% checksum = "63302 137 659 7109"
+%%
+\ProvidesFile{mlp-49.sty}%
+ [2000/09/06 german interface for the mlp package]
+\expandafter% If this coding is not alreadly loaded
+\ifx\csname germanTeXmods\endcsname\relax% define the basic cs,
+ \def\beginlanguage{\german}% the language name cs and
+ \edef\beginFWdirection{L}% the direction of writing (write Left to right).
+\else%
+ \endinput% else do nothing at all.
+\fi%
+% A bypass required for other languages because
+\let\@SavedCF\captionsfrench% 1) german.sty destroys french captions coding
+\let\@SavedCE\captionsenglish% 2) german.sty destroys english captions coding.
+\RequirePackage{german}% Load german package.
+% The command to initialize all german tools except hyphenation:
+\@ifundefined{germanTeXmods}{%................................ \germanTeXmods
+ \gdef\germanTeXmods{\germanTeX% this is the cs for german.sty
+ \ifx\captionsnames\captionsgerman\else%
+ \let\captionsnames\captionsgerman%
+ \let\date\dategerman%
+ \let\bibsnames\bibssgerman%
+ \fi%
+ \let\switchtolanguage\endgerman%
+ }%
+ }{}%
+\DeclareOption{german}{\def\beginlanguage{german}}% First language to start.
+\ProcessOptions% Process that option (german) defintely.
+% The command to set german hyphenation:
+% (normally set at INITeX) it should equal to \language=x and nothing else
+\@ifundefined{german}{\gdef\german{\relax}}{}% Default............... \german
+% The command to do extra things and switch to another language:
+\@ifundefined{switchtolanguage}{%............................ \switchtolanguage
+ \gdef\switchtolanguage#1{#1}}{}%
+\let\@enstGORI\switchtolanguage% save original switchtolanguage if any.
+\let\germanORI\german% assuming \language=x was set here
+\def\endgerman{\no@xtrasgerman%
+ \let\switchtolanguage\@enstGORI%
+% \csname endL\endcsname%stop TeX--XeT 1st direction of writing
+ \ignorespaces}% but they are not after \end{english} !
+\let\no@xtrasgerman\noextrasgerman%
+% The final command to initialize german stuff:
+\def\german{\switchtolanguage\germanTeXmods\germanORI%...... Final \german
+ \ignorespaces}% but they are not after \begin{german} !
+%\german% Don't activate language now, postpone until \begin{document}.
+\originalTeX% go back to original stuff
+\let\captionsfrench\@SavedCF% restore original \captionsfrench
+\let\captionsenglish\@SavedCE% restore original \captionsenglish
+\def\@lastoption{german}% The option to start typesetting with.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Let few other packages know that german is loaded.
+%
+\PassOptionsToPackage{german}{varioref}%
+%
+\endinput%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/tex/mlp-49n.sty b/language/french/e-french/texmf/tex/mlp-49n.sty
new file mode 100644
index 0000000000..d04f55d8da
--- /dev/null
+++ b/language/french/e-french/texmf/tex/mlp-49n.sty
@@ -0,0 +1,59 @@
+% mlp-49n.sty (the "ngerman" interface for the mlp package)
+% last mods 2000/09/06
+%%
+%% checksum = "63302 137 659 7109"
+%%
+\ProvidesFile{mlp-49n.sty}%
+ [2000/09/06 new-german interface for the mlp package]
+\expandafter% If this coding is not alreadly loaded
+\ifx\csname ngermanTeXmods\endcsname\relax% define the basic cs,
+ \def\beginlanguage{\ngerman}% the language name cs and
+ \edef\beginFWdirection{L}% the direction of writing (write Left to right).
+\else%
+ \endinput% else do nothing at all.
+\fi%
+% A bypass required for other languages because
+\let\@SavedCF\captionsfrench% 1) ngerman.sty destroys french captions coding
+\let\@SavedCE\captionsenglish% 2) ngerman.sty destroys english captions coding.
+\RequirePackage{ngerman}% Load ngerman package.
+% The command to initialize all german tools except hyphenation:
+\@ifundefined{ngermanTeXmods}{%................................ \ngermanTeXmods
+ \gdef\ngermanTeXmods{\ngermanTeX% this is the cs for ngerman.sty
+ \ifx\captionsnames\captionsngerman\else%
+ \let\captionsnames\captionsngerman%
+ \let\date\datengerman%
+ \let\bibsnames\bibssngerman%
+ \fi%
+ \let\switchtolanguage\endngerman%
+ }%
+ }{}%
+\DeclareOption{ngerman}{\def\beginlanguage{ngerman}}% First language to start.
+\ProcessOptions% Process that option (ngerman) defintely.
+% The command to set ngerman hyphenation:
+% (normally set at INITeX) it should equal to \language=x and nothing else
+\@ifundefined{ngerman}{\gdef\ngerman{\relax}}{}% Default............ \ngerman
+% The command to do extra things and switch to another language:
+\@ifundefined{switchtolanguage}{%............................ \switchtolanguage
+ \gdef\switchtolanguage#1{#1}}{}%
+\let\@enstGORI\switchtolanguage% save original switchtolanguage if any.
+\let\ngermanORI\ngerman% assuming \language=x was set here
+\def\endngerman{\no@xtrasngerman%
+ \let\switchtolanguage\@enstGORI%
+% \csname endL\endcsname%stop TeX--XeT 1st direction of writing
+ \ignorespaces}% but they are not after \end{english} !
+\let\no@xtrasngerman\noextrasngerman%
+% The final command to initialize ngerman stuff:
+\def\ngerman{\switchtolanguage\ngermanTeXmods\ngermanORI%...... Final \ngerman
+ \ignorespaces}% but they are not after \begin{ngerman} !
+%\ngerman% Don't activate language now, postpone until \begin{document}.
+\originalTeX% go back to original stuff
+\let\captionsfrench\@SavedCF% restore original \captionsfrench
+\let\captionsenglish\@SavedCE% restore original \captionsenglish
+\def\@lastoption{ngerman}% The option to start typesetting with.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Let few other packages know that ngerman is loaded.
+%
+\PassOptionsToPackage{german}{varioref}%
+%
+\endinput%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/tex/mlp-opts.sty b/language/french/e-french/texmf/tex/mlp-opts.sty
new file mode 100644
index 0000000000..b260ac2963
--- /dev/null
+++ b/language/french/e-french/texmf/tex/mlp-opts.sty
@@ -0,0 +1,14 @@
+% After Bernard Gaulle's decease this work is now maintained as
+% the e-French project by a group of enthusiast users
+% under LPPL copyright as declared in http://www.efrench.org/
+% mlp-opts_doc.txt original file name. An idea of Bernard Gaulle 97/10/31
+%% checksum = "55633 14 72 713"
+\ProvidesPackage{mlp-opts}[1997/10/31 mlp processing options by --bg /V0.01/]%
+\def\@tempa#1#2#3#4#5#6#7#8#9/{\def\@tempa{#1#2#3#4#5#6#7#8.mlp}}%
+ \expandafter\@tempa\@lastoption xxxxxxxx/%
+ \expandafter\InputIfFileExists{\@tempa}{}%
+ {%
+ \input{internat.mlp}%
+ }%
+ \ProcessOptions*%
+\endinput%
diff --git a/language/french/e-french/texmf/tex/mlp.sty b/language/french/e-french/texmf/tex/mlp.sty
new file mode 100644
index 0000000000..39cc28ddc3
--- /dev/null
+++ b/language/french/e-french/texmf/tex/mlp.sty
@@ -0,0 +1,29 @@
+% After Bernard Gaulle's decease this work is now maintained as
+% the e-French project by a group of enthusiast users
+% under LPPL copyright as declared in http://www.efrench.org/
+% mlp_doc.txt original file name. An idea of Bernard Gaulle 97/10/31
+\ifnum\catcode`\@=11\else\expandafter\catcode`\@=11\fi%
+\ifx\@mlp@loaded\undefined\let\@mlp@loaded\relax%
+\else\expandafter\endinput\fi%
+\ProvidesPackage{mlp}[2004/06/25 The Multi-Lingual Package by --bg /V0.03/]%
+\def\@lastoption{}%
+\DeclareOption*{\edef\@lastoption{\CurrentOption}%
+ \PassOptionsToPackage{\CurrentOption}{mlp-opts}%
+ }%
+\ProcessOptions*%
+\edef\@required{}%
+\def\@requirepackage#1{\protected@edef\@required{\@required%
+ \protect\RequirePackage{#1}}}%
+\def\addcaptionnames#1{\@nodocument#1\expandafter\g@addto@macro%
+ \csname captions\languagename\endcsname{#1}}%
+\def\@tempa{}%
+\ifx\@lastoption\empty\input internat.mlp %
+ \def\@tempa{\ProcessOptions}%
+ \else%
+ \def\@tempa{\RequirePackage{mlp-opts}}%
+\fi%
+\@tempa%
+\@required%
+\let\@required\undefined\let\@requirepackage\undefined%
+\edef\beginlanguage{\expandafter\noexpand\csname \@lastoption\endcsname}%
+\endinput%
diff --git a/language/french/e-french/texmf/tex/ndeutsch.mlp b/language/french/e-french/texmf/tex/ndeutsch.mlp
new file mode 100644
index 0000000000..b393a01e36
--- /dev/null
+++ b/language/french/e-french/texmf/tex/ndeutsch.mlp
@@ -0,0 +1,40 @@
+% ndeutsch.mlp New german configuration for the mlp package.
+% last mods: 2000/09/06
+%
+% mlp means The Multi-Lingual Package, an idea from --bg 97/11/03
+%
+% This file can be modified if the local or linguistic TeX users group
+% accepts the modifications.
+%
+% Group to get in touch for ndeutschx.mlp is: ...
+% Person to send a message is: ... (defaultly: gaulle@idris.fr)
+%
+%
+\ProvidesFile{ndeutsch.mlp}%
+ [2000/09/06 new german configuration file for mlp package]
+\DeclareOption{deutsch}{\@requirepackage{mlp-49}%
+ \PassOptionsToPackage{german}{mlp-49}%
+ }%
+\DeclareOption{englisch}{\@requirepackage{mlp-01}% original US english
+ \PassOptionsToPackage{english}{mlp-01}%
+ }%
+\DeclareOption{franzosisch}{\@requirepackage{mlp-33}%
+ \PassOptionsToPackage{french}{mlp-33}%
+ }%
+\DeclareOption{franzoesisch}{\@requirepackage{mlp-33}%
+ \PassOptionsToPackage{french}{mlp-33}%
+ }%
+\DeclareOption{hollandisch}{\@requirepackage{mlp-31}%
+ \PassOptionsToPackage{dutch}{mlp-31}%
+ }%
+\DeclareOption{ndeutsch}{\@requirepackage{mlp-49n}%
+ \PassOptionsToPackage{ngerman}{mlp-49n}%
+ }%
+\DeclareOption{noesterreich}{\@requirepackage{mlp-49n}%
+ \PassOptionsToPackage{ngerman}{mlp-49}%
+ }%
+\DeclareOption{oesterreich}{\@requirepackage{mlp-49}%
+ \PassOptionsToPackage{german}{mlp-49}%
+ }%
+\AtBeginDocument{\beginlanguage}%
+%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/tex/noesterr.mlp b/language/french/e-french/texmf/tex/noesterr.mlp
new file mode 100644
index 0000000000..01e3e48cd2
--- /dev/null
+++ b/language/french/e-french/texmf/tex/noesterr.mlp
@@ -0,0 +1,40 @@
+% noesterr.mlp New austrian configuration for the mlp package.
+% last mods: 2000/09/06
+%
+% mlp means The Multi-Lingual Package, an idea from --bg 97/11/03
+%
+% This file can be modified if the local or linguistic TeX users group
+% accepts the modifications.
+%
+% Group to get in touch for ndeutschx.mlp is: ...
+% Person to send a message is: ... (defaultly: gaulle@idris.fr)
+%
+%
+\ProvidesFile{noesterr.mlp}%
+ [2000/09/06 new austrian configuration file for mlp package]
+\DeclareOption{deutsch}{\@requirepackage{mlp-49}%
+ \PassOptionsToPackage{german}{mlp-49}%
+ }%
+\DeclareOption{englisch}{\@requirepackage{mlp-01}% original US english
+ \PassOptionsToPackage{english}{mlp-01}%
+ }%
+\DeclareOption{franzosisch}{\@requirepackage{mlp-33}%
+ \PassOptionsToPackage{french}{mlp-33}%
+ }%
+\DeclareOption{franzoesisch}{\@requirepackage{mlp-33}%
+ \PassOptionsToPackage{french}{mlp-33}%
+ }%
+\DeclareOption{hollandisch}{\@requirepackage{mlp-31}%
+ \PassOptionsToPackage{dutch}{mlp-31}%
+ }%
+\DeclareOption{ndeutsch}{\@requirepackage{mlp-49n}%
+ \PassOptionsToPackage{ngerman}{mlp-49n}%
+ }%
+\DeclareOption{noesterreich}{\@requirepackage{mlp-49n}%
+ \PassOptionsToPackage{ngerman}{mlp-49}%
+ }%
+\DeclareOption{oesterreich}{\@requirepackage{mlp-49}%
+ \PassOptionsToPackage{german}{mlp-49}%
+ }%
+\AtBeginDocument{\beginlanguage}%
+%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/tex/oesterre.mlp b/language/french/e-french/texmf/tex/oesterre.mlp
new file mode 100644
index 0000000000..f9d18b97fb
--- /dev/null
+++ b/language/french/e-french/texmf/tex/oesterre.mlp
@@ -0,0 +1,40 @@
+% oesterre.mlp Usual austrian configuration for the mlp package.
+% last mods: 2000/09/06
+%
+% mlp means The Multi-Lingual Package, an idea from --bg 97/11/03
+%
+% This file can be modified if the local or linguistic TeX users group
+% accepts the modifications.
+%
+% Group to get in touch for ndeutschx.mlp is: ...
+% Person to send a message is: ... (defaultly: gaulle@idris.fr)
+%
+%
+\ProvidesFile{oesterre.mlp}%
+ [2000/09/06 autrian configuration file for mlp package]
+\DeclareOption{deutsch}{\@requirepackage{mlp-49}%
+ \PassOptionsToPackage{german}{mlp-49}%
+ }%
+\DeclareOption{englisch}{\@requirepackage{mlp-01}% original US english
+ \PassOptionsToPackage{english}{mlp-01}%
+ }%
+\DeclareOption{franzosisch}{\@requirepackage{mlp-33}%
+ \PassOptionsToPackage{french}{mlp-33}%
+ }%
+\DeclareOption{franzoesisch}{\@requirepackage{mlp-33}%
+ \PassOptionsToPackage{french}{mlp-33}%
+ }%
+\DeclareOption{hollandisch}{\@requirepackage{mlp-31}%
+ \PassOptionsToPackage{dutch}{mlp-31}%
+ }%
+\DeclareOption{ndeutsch}{\@requirepackage{mlp-49n}%
+ \PassOptionsToPackage{ngerman}{mlp-49n}%
+ }%
+\DeclareOption{noesterreich}{\@requirepackage{mlp-49n}%
+ \PassOptionsToPackage{ngerman}{mlp-49}%
+ }%
+\DeclareOption{oesterreich}{\@requirepackage{mlp-49}%
+ \PassOptionsToPackage{german}{mlp-49}%
+ }%
+\AtBeginDocument{\beginlanguage}%
+%%%%%%%%%%%%%%%
diff --git a/language/french/e-french/texmf/tex/pmfrench.sty b/language/french/e-french/texmf/tex/pmfrench.sty
new file mode 100644
index 0000000000..907c9ecce1
--- /dev/null
+++ b/language/french/e-french/texmf/tex/pmfrench.sty
@@ -0,0 +1,12 @@
+% This is pmfrench.sty (informations en francais dans frenchfr.doc)
+% After Bernard Gaulle's decease this work is now maintained as
+% the e-French project by a group of enthusiast users
+% under LPPL copyright as declared in http://www.efrench.org/
+%
+% (the "Poor-Man-French" style) --bg 03/01/93
+% last mods: 2000/03/03
+% It can be called via \usepackage{pmfrench} with LaTeX
+%
+\input french.sty %
+\pmfrench % here we tell french to be a lot tolerant!
+\endinput