.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings.  \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
.    ds -- \(*W-
.    ds PI pi
.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
.    ds L" ""
.    ds R" ""
.    ds C` ""
.    ds C' ""
'br\}
.el\{\
.    ds -- \|\(em\|
.    ds PI \(*p
.    ds L" ``
.    ds R" ''
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD.  Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
.    de IX
.    tm Index:\\$1\t\\n%\t"\\$2"
..
.    nr % 0
.    rr F
.\}
.el \{\
.    de IX
..
.\}
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
.    \" fudge factors for nroff and troff
.if n \{\
.    ds #H 0
.    ds #V .8m
.    ds #F .3m
.    ds #[ \f1
.    ds #] \fP
.\}
.if t \{\
.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.    ds #V .6m
.    ds #F 0
.    ds #[ \&
.    ds #] \&
.\}
.    \" simple accents for nroff and troff
.if n \{\
.    ds ' \&
.    ds ` \&
.    ds ^ \&
.    ds , \&
.    ds ~ ~
.    ds /
.\}
.if t \{\
.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
.    \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.    \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.    \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.    ds : e
.    ds 8 ss
.    ds o a
.    ds d- d\h'-1'\(ga
.    ds D- D\h'-1'\(hy
.    ds th \o'bp'
.    ds Th \o'LP'
.    ds ae ae
.    ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "GFDL 7"
.TH GFDL 7 "2009-01-24" "gcc-4.3.3" "GNU"
.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
gfdl \- GNU Free Documentation License
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
.Sh "\s-1GNU\s0 Free Documentation License"
.IX Subsection "GNU Free Documentation License"
.Sh "Version 1.2, November 2002"
.IX Subsection "Version 1.2, November 2002"
.Vb 2
\&        Copyright (c) 2000,2001,2002 Free Software Foundation, Inc.
\&        51 Franklin Street, Fifth Floor, Boston, MA  02110\-1301, USA
\&        
\&        Everyone is permitted to copy and distribute verbatim copies
\&        of this license document, but changing it is not allowed.
.Ve
.IP "0." 4
.IX Item "0."
\&\s-1PREAMBLE\s0
.Sp
The purpose of this License is to make a manual, textbook, or other
functional and useful document \fIfree\fR in the sense of freedom: to
assure everyone the effective freedom to copy and redistribute it,
with or without modifying it, either commercially or noncommercially.
Secondarily, this License preserves for the author and publisher a way
to get credit for their work, while not being considered responsible
for modifications made by others.
.Sp
This License is a kind of \*(L"copyleft\*(R", which means that derivative
works of the document must themselves be free in the same sense.  It
complements the \s-1GNU\s0 General Public License, which is a copyleft
license designed for free software.
.Sp
We have designed this License in order to use it for manuals for free
software, because free software needs free documentation: a free
program should come with manuals providing the same freedoms that the
software does.  But this License is not limited to software manuals;
it can be used for any textual work, regardless of subject matter or
whether it is published as a printed book.  We recommend this License
principally for works whose purpose is instruction or reference.
.IP "1." 4
.IX Item "1."
\&\s-1APPLICABILITY\s0 \s-1AND\s0 \s-1DEFINITIONS\s0
.Sp
This License applies to any manual or other work, in any medium, that
contains a notice placed by the copyright holder saying it can be
distributed under the terms of this License.  Such a notice grants a
world-wide, royalty-free license, unlimited in duration, to use that
work under the conditions stated herein.  The \*(L"Document\*(R", below,
refers to any such manual or work.  Any member of the public is a
licensee, and is addressed as \*(L"you\*(R".  You accept the license if you
copy, modify or distribute the work in a way requiring permission
under copyright law.
.Sp
A \*(L"Modified Version\*(R" of the Document means any work containing the
Document or a portion of it, either copied verbatim, or with
modifications and/or translated into another language.
.Sp
A \*(L"Secondary Section\*(R" is a named appendix or a front-matter section
of the Document that deals exclusively with the relationship of the
publishers or authors of the Document to the Document's overall
subject (or to related matters) and contains nothing that could fall
directly within that overall subject.  (Thus, if the Document is in
part a textbook of mathematics, a Secondary Section may not explain
any mathematics.)  The relationship could be a matter of historical
connection with the subject or with related matters, or of legal,
commercial, philosophical, ethical or political position regarding
them.
.Sp
The \*(L"Invariant Sections\*(R" are certain Secondary Sections whose titles
are designated, as being those of Invariant Sections, in the notice
that says that the Document is released under this License.  If a
section does not fit the above definition of Secondary then it is not
allowed to be designated as Invariant.  The Document may contain zero
Invariant Sections.  If the Document does not identify any Invariant
Sections then there are none.
.Sp
The \*(L"Cover Texts\*(R" are certain short passages of text that are listed,
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
the Document is released under this License.  A Front-Cover Text may
be at most 5 words, and a Back-Cover Text may be at most 25 words.
.Sp
A \*(L"Transparent\*(R" copy of the Document means a machine-readable copy,
represented in a format whose specification is available to the
general public, that is suitable for revising the document
straightforwardly with generic text editors or (for images composed of
pixels) generic paint programs or (for drawings) some widely available
drawing editor, and that is suitable for input to text formatters or
for automatic translation to a variety of formats suitable for input
to text formatters.  A copy made in an otherwise Transparent file
format whose markup, or absence of markup, has been arranged to thwart
or discourage subsequent modification by readers is not Transparent.
An image format is not Transparent if used for any substantial amount
of text.  A copy that is not \*(L"Transparent\*(R" is called \*(L"Opaque\*(R".
.Sp
Examples of suitable formats for Transparent copies include plain
\&\s-1ASCII\s0 without markup, Texinfo input format, LaTeX input
format, \f(CW@acronym\fR{\s-1SGML\s0} or \f(CW@acronym\fR{\s-1XML\s0} using a publicly available
\&\f(CW@acronym\fR{\s-1DTD\s0}, and standard-conforming simple \f(CW@acronym\fR{\s-1HTML\s0},
PostScript or \f(CW@acronym\fR{\s-1PDF\s0} designed for human modification.  Examples
of transparent image formats include \f(CW@acronym\fR{\s-1PNG\s0}, \f(CW@acronym\fR{\s-1XCF\s0} and
\&\f(CW@acronym\fR{\s-1JPG\s0}.  Opaque formats include proprietary formats that can be
read and edited only by proprietary word processors, \f(CW@acronym\fR{\s-1SGML\s0} or
\&\f(CW@acronym\fR{\s-1XML\s0} for which the \f(CW@acronym\fR{\s-1DTD\s0} and/or processing tools are
not generally available, and the machine-generated \f(CW@acronym\fR{\s-1HTML\s0},
PostScript or \f(CW@acronym\fR{\s-1PDF\s0} produced by some word processors for
output purposes only.
.Sp
The \*(L"Title Page\*(R" means, for a printed book, the title page itself,
plus such following pages as are needed to hold, legibly, the material
this License requires to appear in the title page.  For works in
formats which do not have any title page as such, \*(L"Title Page\*(R" means
the text near the most prominent appearance of the work's title,
preceding the beginning of the body of the text.
.Sp
A section \*(L"Entitled \s-1XYZ\s0\*(R" means a named subunit of the Document whose
title either is precisely \s-1XYZ\s0 or contains \s-1XYZ\s0 in parentheses following
text that translates \s-1XYZ\s0 in another language.  (Here \s-1XYZ\s0 stands for a
specific section name mentioned below, such as \*(L"Acknowledgements\*(R",
\&\*(L"Dedications\*(R", \*(L"Endorsements\*(R", or \*(L"History\*(R".)  To \*(L"Preserve the Title\*(R"
of such a section when you modify the Document means that it remains a
section \*(L"Entitled \s-1XYZ\s0\*(R" according to this definition.
.Sp
The Document may include Warranty Disclaimers next to the notice which
states that this License applies to the Document.  These Warranty
Disclaimers are considered to be included by reference in this
License, but only as regards disclaiming warranties: any other
implication that these Warranty Disclaimers may have is void and has
no effect on the meaning of this License.
.IP "2." 4
.IX Item "2."
\&\s-1VERBATIM\s0 \s-1COPYING\s0
.Sp
You may copy and distribute the Document in any medium, either
commercially or noncommercially, provided that this License, the
copyright notices, and the license notice saying this License applies
to the Document are reproduced in all copies, and that you add no other
conditions whatsoever to those of this License.  You may not use
technical measures to obstruct or control the reading or further
copying of the copies you make or distribute.  However, you may accept
compensation in exchange for copies.  If you distribute a large enough
number of copies you must also follow the conditions in section 3.
.Sp
You may also lend copies, under the same conditions stated above, and
you may publicly display copies.
.IP "3." 4
.IX Item "3."
\&\s-1COPYING\s0 \s-1IN\s0 \s-1QUANTITY\s0
.Sp
If you publish printed copies (or copies in media that commonly have
printed covers) of the Document, numbering more than 100, and the
Document's license notice requires Cover Texts, you must enclose the
copies in covers that carry, clearly and legibly, all these Cover
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
the back cover.  Both covers must also clearly and legibly identify
you as the publisher of these copies.  The front cover must present
the full title with all words of the title equally prominent and
visible.  You may add other material on the covers in addition.
Copying with changes limited to the covers, as long as they preserve
the title of the Document and satisfy these conditions, can be treated
as verbatim copying in other respects.
.Sp
If the required texts for either cover are too voluminous to fit
legibly, you should put the first ones listed (as many as fit
reasonably) on the actual cover, and continue the rest onto adjacent
pages.
.Sp
If you publish or distribute Opaque copies of the Document numbering
more than 100, you must either include a machine-readable Transparent
copy along with each Opaque copy, or state in or with each Opaque copy
a computer-network location from which the general network-using
public has access to download using public-standard network protocols
a complete Transparent copy of the Document, free of added material.
If you use the latter option, you must take reasonably prudent steps,
when you begin distribution of Opaque copies in quantity, to ensure
that this Transparent copy will remain thus accessible at the stated
location until at least one year after the last time you distribute an
Opaque copy (directly or through your agents or retailers) of that
edition to the public.
.Sp
It is requested, but not required, that you contact the authors of the
Document well before redistributing any large number of copies, to give
them a chance to provide you with an updated version of the Document.
.IP "4." 4
.IX Item "4."
\&\s-1MODIFICATIONS\s0
.Sp
You may copy and distribute a Modified Version of the Document under
the conditions of sections 2 and 3 above, provided that you release
the Modified Version under precisely this License, with the Modified
Version filling the role of the Document, thus licensing distribution
and modification of the Modified Version to whoever possesses a copy
of it.  In addition, you must do these things in the Modified Version:
.RS 4
.IP "A." 4
.IX Item "A."
Use in the Title Page (and on the covers, if any) a title distinct
from that of the Document, and from those of previous versions
(which should, if there were any, be listed in the History section
of the Document).  You may use the same title as a previous version
if the original publisher of that version gives permission.
.IP "B." 4
.IX Item "B."
List on the Title Page, as authors, one or more persons or entities
responsible for authorship of the modifications in the Modified
Version, together with at least five of the principal authors of the
Document (all of its principal authors, if it has fewer than five),
unless they release you from this requirement.
.IP "C." 4
.IX Item "C."
State on the Title page the name of the publisher of the
Modified Version, as the publisher.
.IP "D." 4
.IX Item "D."
Preserve all the copyright notices of the Document.
.IP "E." 4
.IX Item "E."
Add an appropriate copyright notice for your modifications
adjacent to the other copyright notices.
.IP "F." 4
.IX Item "F."
Include, immediately after the copyright notices, a license notice
giving the public permission to use the Modified Version under the
terms of this License, in the form shown in the Addendum below.
.IP "G." 4
.IX Item "G."
Preserve in that license notice the full lists of Invariant Sections
and required Cover Texts given in the Document's license notice.
.IP "H." 4
.IX Item "H."
Include an unaltered copy of this License.
.IP "I." 4
.IX Item "I."
Preserve the section Entitled \*(L"History\*(R", Preserve its Title, and add
to it an item stating at least the title, year, new authors, and
publisher of the Modified Version as given on the Title Page.  If
there is no section Entitled \*(L"History\*(R" in the Document, create one
stating the title, year, authors, and publisher of the Document as
given on its Title Page, then add an item describing the Modified
Version as stated in the previous sentence.
.IP "J." 4
.IX Item "J."
Preserve the network location, if any, given in the Document for
public access to a Transparent copy of the Document, and likewise
the network locations given in the Document for previous versions
it was based on.  These may be placed in the \*(L"History\*(R" section.
You may omit a network location for a work that was published at
least four years before the Document itself, or if the original
publisher of the version it refers to gives permission.
.IP "K." 4
.IX Item "K."
For any section Entitled \*(L"Acknowledgements\*(R" or \*(L"Dedications\*(R", Preserve
the Title of the section, and preserve in the section all the
substance and tone of each of the contributor acknowledgements and/or
dedications given therein.
.IP "L." 4
.IX Item "L."
Preserve all the Invariant Sections of the Document,
unaltered in their text and in their titles.  Section numbers
or the equivalent are not considered part of the section titles.
.IP "M." 4
.IX Item "M."
Delete any section Entitled \*(L"Endorsements\*(R".  Such a section
may not be included in the Modified Version.
.IP "N." 4
.IX Item "N."
Do not retitle any existing section to be Entitled \*(L"Endorsements\*(R" or
to conflict in title with any Invariant Section.
.IP "O." 4
.IX Item "O."
Preserve any Warranty Disclaimers.
.RE
.RS 4
.Sp
If the Modified Version includes new front-matter sections or
appendices that qualify as Secondary Sections and contain no material
copied from the Document, you may at your option designate some or all
of these sections as invariant.  To do this, add their titles to the
list of Invariant Sections in the Modified Version's license notice.
These titles must be distinct from any other section titles.
.Sp
You may add a section Entitled \*(L"Endorsements\*(R", provided it contains
nothing but endorsements of your Modified Version by various
parties\-\-\-for example, statements of peer review or that the text has
been approved by an organization as the authoritative definition of a
standard.
.Sp
You may add a passage of up to five words as a Front-Cover Text, and a
passage of up to 25 words as a Back-Cover Text, to the end of the list
of Cover Texts in the Modified Version.  Only one passage of
Front-Cover Text and one of Back-Cover Text may be added by (or
through arrangements made by) any one entity.  If the Document already
includes a cover text for the same cover, previously added by you or
by arrangement made by the same entity you are acting on behalf of,
you may not add another; but you may replace the old one, on explicit
permission from the previous publisher that added the old one.
.Sp
The author(s) and publisher(s) of the Document do not by this License
give permission to use their names for publicity for or to assert or
imply endorsement of any Modified Version.
.RE
.IP "5." 4
.IX Item "5."
\&\s-1COMBINING\s0 \s-1DOCUMENTS\s0
.Sp
You may combine the Document with other documents released under this
License, under the terms defined in section 4 above for modified
versions, provided that you include in the combination all of the
Invariant Sections of all of the original documents, unmodified, and
list them all as Invariant Sections of your combined work in its
license notice, and that you preserve all their Warranty Disclaimers.
.Sp
The combined work need only contain one copy of this License, and
multiple identical Invariant Sections may be replaced with a single
copy.  If there are multiple Invariant Sections with the same name but
different contents, make the title of each such section unique by
adding at the end of it, in parentheses, the name of the original
author or publisher of that section if known, or else a unique number.
Make the same adjustment to the section titles in the list of
Invariant Sections in the license notice of the combined work.
.Sp
In the combination, you must combine any sections Entitled \*(L"History\*(R"
in the various original documents, forming one section Entitled
\&\*(L"History\*(R"; likewise combine any sections Entitled \*(L"Acknowledgements\*(R",
and any sections Entitled \*(L"Dedications\*(R".  You must delete all
sections Entitled \*(L"Endorsements.\*(R"
.IP "6." 4
.IX Item "6."
\&\s-1COLLECTIONS\s0 \s-1OF\s0 \s-1DOCUMENTS\s0
.Sp
You may make a collection consisting of the Document and other documents
released under this License, and replace the individual copies of this
License in the various documents with a single copy that is included in
the collection, provided that you follow the rules of this License for
verbatim copying of each of the documents in all other respects.
.Sp
You may extract a single document from such a collection, and distribute
it individually under this License, provided you insert a copy of this
License into the extracted document, and follow this License in all
other respects regarding verbatim copying of that document.
.IP "7." 4
.IX Item "7."
\&\s-1AGGREGATION\s0 \s-1WITH\s0 \s-1INDEPENDENT\s0 \s-1WORKS\s0
.Sp
A compilation of the Document or its derivatives with other separate
and independent documents or works, in or on a volume of a storage or
distribution medium, is called an \*(L"aggregate\*(R" if the copyright
resulting from the compilation is not used to limit the legal rights
of the compilation's users beyond what the individual works permit.
When the Document is included in an aggregate, this License does not
apply to the other works in the aggregate which are not themselves
derivative works of the Document.
.Sp
If the Cover Text requirement of section 3 is applicable to these
copies of the Document, then if the Document is less than one half of
the entire aggregate, the Document's Cover Texts may be placed on
covers that bracket the Document within the aggregate, or the
electronic equivalent of covers if the Document is in electronic form.
Otherwise they must appear on printed covers that bracket the whole
aggregate.
.IP "8." 4
.IX Item "8."
\&\s-1TRANSLATION\s0
.Sp
Translation is considered a kind of modification, so you may
distribute translations of the Document under the terms of section 4.
Replacing Invariant Sections with translations requires special
permission from their copyright holders, but you may include
translations of some or all Invariant Sections in addition to the
original versions of these Invariant Sections.  You may include a
translation of this License, and all the license notices in the
Document, and any Warranty Disclaimers, provided that you also include
the original English version of this License and the original versions
of those notices and disclaimers.  In case of a disagreement between
the translation and the original version of this License or a notice
or disclaimer, the original version will prevail.
.Sp
If a section in the Document is Entitled \*(L"Acknowledgements\*(R",
\&\*(L"Dedications\*(R", or \*(L"History\*(R", the requirement (section 4) to Preserve
its Title (section 1) will typically require changing the actual
title.
.IP "9." 4
.IX Item "9."
\&\s-1TERMINATION\s0
.Sp
You may not copy, modify, sublicense, or distribute the Document except
as expressly provided for under this License.  Any other attempt to
copy, modify, sublicense or distribute the Document is void, and will
automatically terminate your rights under this License.  However,
parties who have received copies, or rights, from you under this
License will not have their licenses terminated so long as such
parties remain in full compliance.
.IP "10." 4
.IX Item "10."
\&\s-1FUTURE\s0 \s-1REVISIONS\s0 \s-1OF\s0 \s-1THIS\s0 \s-1LICENSE\s0
.Sp
The Free Software Foundation may publish new, revised versions
of the \s-1GNU\s0 Free Documentation License from time to time.  Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.  See
<\fBhttp://www.gnu.org/copyleft/\fR>.
.Sp
Each version of the License is given a distinguishing version number.
If the Document specifies that a particular numbered version of this
License \*(L"or any later version\*(R" applies to it, you have the option of
following the terms and conditions either of that specified version or
of any later version that has been published (not as a draft) by the
Free Software Foundation.  If the Document does not specify a version
number of this License, you may choose any version ever published (not
as a draft) by the Free Software Foundation.
.Sh "\s-1ADDENDUM:\s0 How to use this License for your documents"
.IX Subsection "ADDENDUM: How to use this License for your documents"
To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and
license notices just after the title page:
.PP
.Vb 7
\&          Copyright (C)  <year>  <your name>.
\&          Permission is granted to copy, distribute and/or modify this document
\&          under the terms of the GNU Free Documentation License, Version 1.2
\&          or any later version published by the Free Software Foundation;
\&          with no Invariant Sections, no Front\-Cover Texts, and no Back\-Cover
\&          Texts.  A copy of the license is included in the section entitled "GNU
\&          Free Documentation License".
.Ve
.PP
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
replace the \*(L"with...Texts.\*(R" line with this:
.PP
.Vb 3
\&            with the Invariant Sections being <list their titles>, with
\&            the Front\-Cover Texts being <list>, and with the Back\-Cover Texts
\&            being <list>.
.Ve
.PP
If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.
.PP
If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of
free software license, such as the \s-1GNU\s0 General Public License,
to permit their use in free software.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
\&\fIgpl\fR\|(7), \fIfsf\-funding\fR\|(7).
.SH "COPYRIGHT"
.IX Header "COPYRIGHT"
Copyright (c) 2000,2001,2002 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, \s-1MA\s0  02110\-1301, \s-1USA\s0
.PP
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
