  
  [1XB. The File [11Xgapdoc.dtd[0X[1X[0X
  
  For  easier  reference  we  repeat  here  the  complete  content of the file
  [11Xgapdoc.dtd[0X.
  
  [4X--------------------------  gapdoc.dtd  --------------------------[0X
    [4X<?xml version="1.0" encoding="UTF-8"?>[0X
    [4X<!-- ==================================================================[0X
    [4X     gapdoc.dtd - XML Document type definition for GAP documentation[0X
    [4X     By Frank Lübeck and Max Neunhöffer[0X
    [4X     ================================================================== -->[0X
    [4X[0X
    [4X<!-- $Id: gapdoc.dtd,v 1.15 2007/05/21 22:07:18 gap Exp $ -->[0X
    [4X[0X
    [4X<!-- Note that this definition goes "bottom-up" because entities can only[0X
    [4X     be used after their definition in the file. -->[0X
    [4X[0X
    [4X[0X
    [4X<!-- ==================================================================[0X
    [4X     Some entities:[0X
    [4X     ================================================================== -->[0X
    [4X[0X
    [4X<!-- The standard XML entities: -->[0X
    [4X[0X
    [4X<!ENTITY lt     "&#38;#60;"> [0X
    [4X<!ENTITY gt     "&#62;"> [0X
    [4X<!ENTITY amp    "&#38;#38;"> [0X
    [4X<!ENTITY apos   "&#39;"> [0X
    [4X<!ENTITY quot   "&#34;">[0X
    [4X[0X
    [4X[0X
    [4X<!-- The following were introduced in GAPDoc version < 1.0, it is no longer[0X
    [4X     necessary to take care of LaTeX special characters[0X
    [4X     (we keep the entities with simplified definitions for compatibility) -->[0X
    [4X     [0X
    [4X<!ENTITY tamp "&amp;">[0X
    [4X<!ENTITY tlt "&lt;">[0X
    [4X<!ENTITY tgt "&gt;">[0X
    [4X<!ENTITY hash "#">[0X
    [4X<!ENTITY dollar "$">[0X
    [4X<!ENTITY percent "&#37;">[0X
    [4X<!ENTITY tilde "~">[0X
    [4X<!ENTITY bslash "\\">[0X
    [4X<!ENTITY obrace "{">[0X
    [4X<!ENTITY cbrace "}">[0X
    [4X<!ENTITY uscore "_">[0X
    [4X<!ENTITY circum "^">[0X
    [4X[0X
    [4X<!-- ==================================================================[0X
    [4X     Our predefined entities:[0X
    [4X     ================================================================== -->[0X
    [4X[0X
    [4X<!ENTITY nbsp "&#160;">[0X
    [4X<!ENTITY ndash "&#x2013;">[0X
    [4X<!ENTITY GAP    "<Package>GAP</Package>">[0X
    [4X<!ENTITY GAPDoc "<Package>GAPDoc</Package>">[0X
    [4X<!ENTITY TeX    [0X
    [4X  "<Alt Only='LaTeX'>{\TeX}</Alt><Alt Not='LaTeX'>TeX</Alt>">[0X
    [4X<!ENTITY LaTeX  [0X
    [4X  "<Alt Only='LaTeX'>{\LaTeX}</Alt><Alt Not='LaTeX'>LaTeX</Alt>">[0X
    [4X<!ENTITY BibTeX [0X
    [4X  "<Alt Only='LaTeX'>{Bib\TeX}</Alt><Alt Not='LaTeX'>BibTeX</Alt>">[0X
    [4X<!ENTITY MeatAxe "<Package>MeatAxe</Package>">[0X
    [4X<!ENTITY XGAP   "<Package>XGAP</Package>">[0X
    [4X<!ENTITY copyright "&#169;">[0X
    [4X[0X
    [4X[0X
    [4X<!-- ==================================================================[0X
    [4X     The following describes the "innermost" documentation text which [0X
    [4X     can occur at various places in the document like for example[0X
    [4X     section headings. It does neither contain further sectioning [0X
    [4X     elements nor environments like Enums or Lists. [0X
    [4X     ================================================================== -->[0X
    [4X[0X
    [4X<!ENTITY % InnerText "#PCDATA |[0X
    [4X                      Alt |[0X
    [4X                      Emph | E |[0X
    [4X                      Par | P | Br |[0X
    [4X                      Keyword | K | Arg | A | Quoted | Q | Code | C | [0X
    [4X                      File | F | Button | B | Package |[0X
    [4X                      M | Math | Display | [0X
    [4X                      Example | Listing | Log | Verb |[0X
    [4X                      URL | Email | Homepage | Address | Cite | Label | [0X
    [4X                      Ref | Index |[0X
    [4X                      Ignore" >[0X
    [4X[0X
    [4X[0X
    [4X<!ELEMENT Alt (%InnerText;)*>     <!-- This is only to allow "Only" and[0X
    [4X                                       "Not" attributes for normal text -->[0X
    [4X<!ATTLIST Alt Only CDATA #IMPLIED[0X
    [4X              Not  CDATA #IMPLIED>[0X
    [4X[0X
    [4X<!-- The following elements declare a certain block of InnerText to[0X
    [4X     have a certain property. They are non-terminal and can contain[0X
    [4X     any InnerText recursively. -->[0X
    [4X[0X
    [4X<!ELEMENT Emph (%InnerText;)*>    <!-- Emphasize something -->[0X
    [4X<!ELEMENT E    (%InnerText;)*>    <!-- the same as shortcut -->[0X
    [4X[0X
    [4X[0X
    [4X<!-- The following is an empty element marking a paragraph boundary. -->[0X
    [4X[0X
    [4X<!ELEMENT Par EMPTY>    <!-- this is intentionally empty! -->[0X
    [4X<!ELEMENT P EMPTY>      <!-- the same as shortcut  -->[0X
    [4X[0X
    [4X<!-- And here is an element for forcing a line break, not starting[0X
    [4X     a new paragraph. -->[0X
    [4X[0X
    [4X<!ELEMENT Br EMPTY>     <!-- a forced line break  -->[0X
    [4X[0X
    [4X<!-- The following elements mark a word or sentence to be of a certain[0X
    [4X     kind, such that it can  be typeset differently. They are terminal[0X
    [4X     elements that should only contain  character data. But we have to[0X
    [4X     allow  Alt elements  for handling  special characters.  For these[0X
    [4X     elements we introduce  a long name - which is  easy to remember -[0X
    [4X     and a  short name - which  you may prefer because  of the shorter[0X
    [4X     markup. -->[0X
    [4X[0X
    [4X<!ELEMENT Keyword (#PCDATA|Alt)*>  <!-- Keyword -->[0X
    [4X<!ELEMENT K (#PCDATA|Alt)*>        <!-- Keyword (shortcut) -->[0X
    [4X[0X
    [4X<!ELEMENT Arg (#PCDATA|Alt)*>      <!-- Argument -->[0X
    [4X<!ELEMENT A (#PCDATA|Alt)*>        <!-- Argument (shortcut) -->[0X
    [4X[0X
    [4X<!ELEMENT Code (#PCDATA|Alt|A)*>   <!-- GAP code -->[0X
    [4X<!ELEMENT C (#PCDATA|Alt|A)*>      <!-- GAP code (shortcut) -->[0X
    [4X[0X
    [4X<!ELEMENT File (#PCDATA|Alt)*>     <!-- Filename -->[0X
    [4X<!ELEMENT F (#PCDATA|Alt)*>        <!-- Filename (shortcut) -->[0X
    [4X[0X
    [4X<!ELEMENT Button (#PCDATA|Alt)*>   <!-- "Button" (also Menu, Key) -->[0X
    [4X<!ELEMENT B (#PCDATA|Alt)*>        <!-- "Button" (shortcut) -->[0X
    [4X[0X
    [4X<!ELEMENT Package (#PCDATA|Alt)*>   <!-- A package name -->[0X
    [4X[0X
    [4X<!ELEMENT Quoted (%InnerText;)*>   <!-- Quoted (in quotes) text -->[0X
    [4X<!ELEMENT Q (%InnerText;)*>        <!-- Quoted text (shortcut) -->[0X
    [4X[0X
    [4X[0X
    [4X<!-- The following elements contain mathematical formulae. They are [0X
    [4X     terminal elements that contain character data in TeX notation. -->[0X
    [4X[0X
    [4X<!-- Math with well defined translation to text output -->[0X
    [4X<!ELEMENT M (#PCDATA|A|Arg|Alt)*>[0X
    [4X<!-- Normal TeX math mode formula -->[0X
    [4X<!ELEMENT Math (#PCDATA|A|Arg|Alt)*>   [0X
    [4X<!-- TeX displayed math mode formula -->[0X
    [4X<!ELEMENT Display (#PCDATA|A|Arg|Alt)*>[0X
    [4X[0X
    [4X[0X
    [4X<!-- The  following  elements  contain  GAP related  text  like  code,[0X
    [4X     session  logs or  examples. They  are all  terminal elements  and[0X
    [4X     consist of character data which is normally typeset verbatim. The[0X
    [4X     different  types  of  the  elements only  control  how  they  are[0X
    [4X     treated. -->[0X
    [4X[0X
    [4X<!ELEMENT Example (#PCDATA)>  <!-- This is subject to the automatic [0X
    [4X                                   example checking mechanism -->[0X
    [4X<!ELEMENT Log (#PCDATA)>      <!-- This not -->[0X
    [4X<!ELEMENT Listing (#PCDATA)>  <!-- This is just for code listings -->[0X
    [4X<!ATTLIST Listing Type CDATA #IMPLIED> <!-- a comment about the type of[0X
    [4X                                            listed code, may appear in[0X
    [4X                                            output -->[0X
    [4X[0X
    [4X<!-- One  further  verbatim element,  this is truely  verbatim without[0X
    [4X     any processing and intended  for ASCII substitutes of complicated[0X
    [4X     displayed formulae or tables. -->[0X
    [4X[0X
    [4X<!ELEMENT Verb  (#PCDATA)> [0X
    [4X[0X
    [4X<!-- The following  elements are  for cross-referencing  purposes like[0X
    [4X     URLs, citations,  references, and  the index. All  these elements[0X
    [4X     are  terminal and  need special  methods  to make  up the  actual[0X
    [4X     output during document generation. -->[0X
    [4X[0X
    [4X<!ELEMENT URL (#PCDATA|Alt|Link|LinkText)*>  <!-- Link, LinkText[0X
    [4X     variant for case where text needs further markup -->[0X
    [4X<!ATTLIST URL Text CDATA #IMPLIED>   <!-- This is for output formats[0X
    [4X                                          that have links like HTML -->[0X
    [4X<!ELEMENT Link     (%InnerText;)*> <!-- the URL -->[0X
    [4X<!ELEMENT LinkText (%InnerText;)*> <!-- text for links, can contain markup -->[0X
    [4X<!-- The following two are actually URLs, but the element name determines[0X
    [4X     the type. -->[0X
    [4X<!ELEMENT Email (#PCDATA|Alt|Link|LinkText)*>[0X
    [4X<!ELEMENT Homepage (#PCDATA|Alt|Link|LinkText)*>[0X
    [4X[0X
    [4X<!-- Those who still want to give postal addresses can use the following[0X
    [4X     element. Use <Br/> for specifying typical line breaks  -->[0X
    [4X[0X
    [4X<!ELEMENT Address (#PCDATA|Alt|Br)*>[0X
    [4X[0X
    [4X<!ELEMENT Cite EMPTY>[0X
    [4X<!ATTLIST Cite Key CDATA #REQUIRED[0X
    [4X               Where CDATA #IMPLIED>[0X
    [4X               [0X
    [4X<!ELEMENT Label EMPTY>[0X
    [4X<!ATTLIST Label Name CDATA #REQUIRED>[0X
    [4X[0X
    [4X<!ELEMENT Ref EMPTY>[0X
    [4X<!ATTLIST Ref Func      CDATA #IMPLIED[0X
    [4X              Oper      CDATA #IMPLIED[0X
    [4X              Meth      CDATA #IMPLIED[0X
    [4X              Filt      CDATA #IMPLIED[0X
    [4X              Prop      CDATA #IMPLIED[0X
    [4X              Attr      CDATA #IMPLIED[0X
    [4X              Var       CDATA #IMPLIED[0X
    [4X              Fam       CDATA #IMPLIED[0X
    [4X              InfoClass CDATA #IMPLIED[0X
    [4X              Chap      CDATA #IMPLIED[0X
    [4X              Sect      CDATA #IMPLIED[0X
    [4X              Subsect   CDATA #IMPLIED[0X
    [4X              Appendix  CDATA #IMPLIED[0X
    [4X              Text      CDATA #IMPLIED[0X
    [4X[0X
    [4X              Label     CDATA #IMPLIED[0X
    [4X              BookName  CDATA #IMPLIED[0X
    [4X              Style (Text|Number) #IMPLIED>  <!-- normally automatic -->[0X
    [4X[0X
    [4X<!-- Note that  only one attribute  of Ref is used  normally. BookName[0X
    [4X     and  Style  can  be  specified in  addition  to  handle  external[0X
    [4X     references and the typesetting style of the reference. -->[0X
    [4X[0X
    [4X<!-- For explicit index entries (Func and so on should cause an[0X
    [4X     automatically generated index entry). Use the attributes Key,[0X
    [4X     Subkey for sorting (simplified, without markup). The Subkey value[0X
    [4X     also gets printed. Use the optional Subkey element if the printed[0X
    [4X     version needs some markup.                                        -->[0X
    [4X<!ELEMENT Index (%InnerText;|Subkey)*>[0X
    [4X<!ATTLIST Index Key    CDATA #IMPLIED[0X
    [4X                Subkey CDATA #IMPLIED>[0X
    [4X<!ELEMENT Subkey (%InnerText;)*>[0X
    [4X[0X
    [4X[0X
    [4X<!-- ==================================================================[0X
    [4X     The following  describes the normal documentation  text which can[0X
    [4X     occur  at various  places in  the document.  It does  not contain[0X
    [4X     further sectioning elements. In addition to InnerText it can contain [0X
    [4X     environments like enumerations, lists, and such.[0X
    [4X     ================================================================== -->[0X
    [4X[0X
    [4X<!ENTITY % Text "%InnerText; | List | Enum | Table">[0X
    [4X[0X
    [4X<!ELEMENT Item ( %Text;)*>[0X
    [4X<!ELEMENT Mark ( %InnerText;)*>[0X
    [4X<!ELEMENT BigMark ( %InnerText;)*>[0X
    [4X[0X
    [4X<!ELEMENT List ( ((Mark,Item)|(BigMark,Item)|Item)+ )>[0X
    [4X<!ATTLIST List Only CDATA #IMPLIED[0X
    [4X               Not  CDATA #IMPLIED>[0X
    [4X<!ELEMENT Enum ( Item+ )>[0X
    [4X<!ATTLIST Enum Only CDATA #IMPLIED[0X
    [4X               Not  CDATA #IMPLIED>[0X
    [4X[0X
    [4X<!ELEMENT Table ( Caption?, (Row | HorLine)+ )>[0X
    [4X<!ATTLIST Table Label   CDATA #IMPLIED[0X
    [4X                Only    CDATA #IMPLIED[0X
    [4X                Not     CDATA #IMPLIED[0X
    [4X                Align   CDATA #REQUIRED>    <!-- A TeX tabular string -->[0X
    [4X                <!-- We allow | and l,c,r, nothing else -->[0X
    [4X<!ELEMENT Row   ( Item+ )>[0X
    [4X<!ELEMENT HorLine EMPTY>[0X
    [4X<!ELEMENT Caption ( %InnerText;)*>[0X
    [4X[0X
    [4X<!-- ==================================================================[0X
    [4X     We start defining some things within the overall structure:[0X
    [4X     ================================================================== -->[0X
    [4X[0X
    [4X<!-- The TitlePage consists of several sub-elements: -->[0X
    [4X[0X
    [4X<!ELEMENT TitlePage (Title, Subtitle?, Version?, TitleComment?, [0X
    [4X                     Author+, Date?, Address?, Abstract?, Copyright?, [0X
    [4X                     Acknowledgements? , Colophon? )>[0X
    [4X[0X
    [4X<!ELEMENT Title (%Text;)*>[0X
    [4X<!ELEMENT Subtitle (%Text;)*>[0X
    [4X<!ELEMENT Version (%Text;)*>[0X
    [4X<!ELEMENT TitleComment (%Text;)*>[0X
    [4X<!ELEMENT Author (%Text;)*>    <!-- There may be more than one Author! -->[0X
    [4X<!ELEMENT Date (%Text;)*>[0X
    [4X<!ELEMENT Abstract (%Text;)*>[0X
    [4X<!ELEMENT Copyright (%Text;)*>[0X
    [4X<!ELEMENT Acknowledgements (%Text;)*>  [0X
    [4X<!ELEMENT Colophon (%Text;)*>[0X
    [4X[0X
    [4X[0X
    [4X<!-- The following things just specify some information about the[0X
    [4X     corresponding parts of the Book: -->[0X
    [4X[0X
    [4X<!ELEMENT TableOfContents EMPTY>[0X
    [4X<!ELEMENT Bibliography EMPTY>[0X
    [4X<!ATTLIST Bibliography Databases CDATA #REQUIRED[0X
    [4X                       Style CDATA #IMPLIED>[0X
    [4X<!ELEMENT TheIndex EMPTY>[0X
    [4X[0X
    [4X<!-- ==================================================================[0X
    [4X     The Ignore element can be used everywhere to include further[0X
    [4X     information in a GAPDoc document which is not intended for the [0X
    [4X     standard converters (e.g., source code, not yet finished stuff,[0X
    [4X     and so on. This information can be extracted by special converter [0X
    [4X     routines, more precise information about the content of an Ignore[0X
    [4X     element can be given by the "Remark" attribute.[0X
    [4X     ================================================================== -->[0X
    [4X[0X
    [4X<!ELEMENT Ignore (%Text;| Chapter | Section | Subsection | ManSection |[0X
    [4X                  Heading)*>[0X
    [4X<!ATTLIST Ignore Remark CDATA #IMPLIED>[0X
    [4X     [0X
    [4X<!-- ==================================================================[0X
    [4X     Now we go on with the overall structure by defining the sectioning [0X
    [4X     structure, which includes the Synopsis element: [0X
    [4X     ================================================================== -->[0X
    [4X[0X
    [4X[0X
    [4X<!ELEMENT Subsection (%Text;| Heading)*>[0X
    [4X<!ATTLIST Subsection Label CDATA #IMPLIED> <!-- For reference purposes -->[0X
    [4X[0X
    [4X<!ELEMENT ManSection ( Heading?, [0X
    [4X                      ((Func, Returns?) | (Oper, Returns?) | [0X
    [4X                       (Meth, Returns?) | (Filt, Returns?) | [0X
    [4X                       (Prop, Returns?) | (Attr, Returns?) |[0X
    [4X                       Var | Fam | InfoClass)+, Description )>[0X
    [4X<!ATTLIST ManSection Label CDATA #IMPLIED> <!-- For reference purposes -->[0X
    [4X[0X
    [4X<!ELEMENT Returns (%Text;)*>[0X
    [4X<!ELEMENT Description (%Text;)*>[0X
    [4X[0X
    [4X[0X
    [4X<!-- Note that  the ManSection element  is actually a  subsection with[0X
    [4X     respect  to labelling,  referencing, and  counting of  sectioning[0X
    [4X     elements. -->[0X
    [4X[0X
    [4X<!ELEMENT Func EMPTY>[0X
    [4X<!ATTLIST Func Name  CDATA #REQUIRED[0X
    [4X               Label CDATA #IMPLIED[0X
    [4X               Arg   CDATA #REQUIRED[0X
    [4X               Comm  CDATA #IMPLIED>[0X
    [4X[0X
    [4X<!-- Note  that Arg  contains the  full list  of arguments,  including[0X
    [4X     optional  parts,  which  are   denoted  by  square  brackets  [].[0X
    [4X     Arguments   are  separated   by  whitespace,   commas  count   as[0X
    [4X     whitespace. -->[0X
    [4X[0X
    [4X<!-- Note further that although Name and Label are  CDATA (and not ID)[0X
    [4X     Label must make up a unique identifier. -->[0X
    [4X[0X
    [4X<!ELEMENT Oper EMPTY>[0X
    [4X<!ATTLIST Oper Name  CDATA #REQUIRED[0X
    [4X               Label CDATA #IMPLIED[0X
    [4X               Arg   CDATA #REQUIRED[0X
    [4X               Comm  CDATA #IMPLIED>[0X
    [4X             [0X
    [4X<!ELEMENT Meth EMPTY>[0X
    [4X<!ATTLIST Meth Name  CDATA #REQUIRED[0X
    [4X               Label CDATA #IMPLIED[0X
    [4X               Arg   CDATA #REQUIRED[0X
    [4X               Comm  CDATA #IMPLIED>[0X
    [4X[0X
    [4X<!ELEMENT Filt EMPTY>[0X
    [4X<!ATTLIST Filt Name  CDATA #REQUIRED[0X
    [4X               Label CDATA #IMPLIED[0X
    [4X               Arg   CDATA #IMPLIED[0X
    [4X               Comm  CDATA #IMPLIED[0X
    [4X               Type  CDATA #IMPLIED>  [0X
    [4X[0X
    [4X<!ELEMENT Prop EMPTY>[0X
    [4X<!ATTLIST Prop Name  CDATA #REQUIRED[0X
    [4X               Label CDATA #IMPLIED[0X
    [4X               Arg   CDATA #REQUIRED[0X
    [4X               Comm  CDATA #IMPLIED>[0X
    [4X[0X
    [4X<!ELEMENT Attr EMPTY>[0X
    [4X<!ATTLIST Attr Name  CDATA #REQUIRED[0X
    [4X               Label CDATA #IMPLIED[0X
    [4X               Arg   CDATA #REQUIRED[0X
    [4X               Comm  CDATA #IMPLIED>[0X
    [4X[0X
    [4X<!ELEMENT Var  EMPTY>[0X
    [4X<!ATTLIST Var  Name  CDATA #REQUIRED[0X
    [4X               Label CDATA #IMPLIED[0X
    [4X               Comm  CDATA #IMPLIED>[0X
    [4X[0X
    [4X<!ELEMENT Fam  EMPTY>[0X
    [4X<!ATTLIST Fam  Name  CDATA #REQUIRED[0X
    [4X               Label CDATA #IMPLIED[0X
    [4X               Comm  CDATA #IMPLIED>[0X
    [4X[0X
    [4X<!ELEMENT InfoClass EMPTY>[0X
    [4X<!ATTLIST InfoClass Name  CDATA #REQUIRED[0X
    [4X                    Label CDATA #IMPLIED[0X
    [4X                    Comm  CDATA #IMPLIED>[0X
    [4X[0X
    [4X[0X
    [4X<!ELEMENT Heading (%InnerText;)*>[0X
    [4X[0X
    [4X<!ELEMENT Section (%Text;| Heading | Subsection | ManSection)*>[0X
    [4X<!ATTLIST Section Label CDATA #IMPLIED>    <!-- For reference purposes -->[0X
    [4X[0X
    [4X[0X
    [4X<!ELEMENT Chapter (%Text;| Heading | Section)*>[0X
    [4X<!ATTLIST Chapter Label CDATA #IMPLIED>    <!-- For reference purposes -->[0X
    [4X[0X
    [4X[0X
    [4X<!-- Note that  the entity %InnerText; is  documentation that contains[0X
    [4X     neither sectioning  elements nor environments  like enumerations,[0X
    [4X     but  only  formulae,  labels, references,  citations,  and  other[0X
    [4X     terminal elements. -->[0X
    [4X[0X
    [4X<!ELEMENT Appendix (%Text;| Heading | Section)*>[0X
    [4X<!ATTLIST Appendix Label CDATA #IMPLIED>   <!-- For reference purposes -->[0X
    [4X[0X
    [4X<!-- Note that  an Appendix  is exactly  the same  as a  Chapter. They[0X
    [4X     differ only in the numbering. -->[0X
    [4X[0X
    [4X<!-- ==================================================================[0X
    [4X     At last we define the overall structure of a gapdoc Book:[0X
    [4X     ================================================================== -->[0X
    [4X[0X
    [4X<!ELEMENT Body  ( %Text;| Chapter | Section )*>[0X
    [4X[0X
    [4X<!ELEMENT Book (TitlePage,[0X
    [4X                TableOfContents?,[0X
    [4X                Body,[0X
    [4X                Appendix*,[0X
    [4X                Bibliography?,[0X
    [4X                TheIndex?)>[0X
    [4X<!ATTLIST Book Name CDATA #REQUIRED>[0X
    [4X               [0X
    [4X<!-- Note  that  the  entity  %Text; is  documentation  that  contains[0X
    [4X     no  further sectioning  elements but  possibly environments  like[0X
    [4X     enumerations,  and formulae,  labels, references,  and citations.[0X
    [4X     -->[0X
    [4X[0X
    [4X<!-- ============================================================== -->[0X
    [4X[0X
    [4X[0X
  [4X------------------------------------------------------------------[0X
  
